From d8cbcf91578cb16e9128d3ce8806cda659749db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Mon, 25 Apr 2022 03:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xm/core/ctrl/XmTaskSbillController.java | 23 +++++++++----- .../com/xm/core/entity/XmTaskSbillDetail.java | 19 ++++++++++-- .../service/XmTaskSbillDetailService.java | 31 +++++++++++++------ .../xm/core/dao/XmTaskSbillDetailMapper.xml | 16 +++++++--- 4 files changed, 65 insertions(+), 24 deletions(-) diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java index 9dda4470..d6dc4a18 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java @@ -219,14 +219,15 @@ public class XmTaskSbillController { BatchJoinToSbillVo batchJoinToSbillQuery=new BatchJoinToSbillVo(); batchJoinToSbillQuery.setUserTasks(batchJoinToSbill.getUserTasks()); List details=xmTaskSbillDetailService.selectListByUserTasks(batchJoinToSbillQuery); - List othSbillDetails=details.stream().filter(i->sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList()); + List sameSbillDetails=details.stream().filter(i->sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList()); + List othSbillDetails=details.stream().filter(i->!sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList()); for (XmTaskSbillDetail i : othSbillDetails) { if(!"4".equals(i.getSstatus())){ - return ResponseHelper.failed("user-task-exists-not-4",String.format("任务【%s】,人员【%s】存在未完成的结算单【%s】,暂时不允许发起结算。",i.getName(),i.getUsername(),i.getSbillId())); + return ResponseHelper.failed("user-task-exists-not-4",String.format("任务【%s】,人员【%s】存在未完成的结算单【%s】,暂时不允许发起结算。",i.getTaskName(),i.getUsername(),i.getSbillId())); } } - if(details!=null && details.size()>0){ - for (XmTaskSbillDetail detail : details) { + if(sameSbillDetails!=null && sameSbillDetails.size()>0){ + for (XmTaskSbillDetail detail : sameSbillDetails) { //进行合并操作 for (Map toSetUserTask : toSetUserTasks) { if(detail.getUserid().equals(toSetUserTask.get("userid")) && detail.getTaskId().equals(toSetUserTask.get("taskId"))){ @@ -240,7 +241,7 @@ public class XmTaskSbillController { List canAdd=new ArrayList<>(); for (Map userTask : toSetUserTasks) { XmTaskSbillDetail detail= BaseUtils.fromMap(userTask,XmTaskSbillDetail.class); - if(details.stream().filter(i->i.getTaskId().equals(detail.getTaskId()) && i.getUserid().equals(detail.getUserid())).findAny().isPresent()){ + if(sameSbillDetails.stream().filter(i->i.getTaskId().equals(detail.getTaskId()) && i.getUserid().equals(detail.getUserid())).findAny().isPresent()){ continue; } detail.setId(this.xmTaskSbillDetailService.createKey("id")); @@ -249,10 +250,18 @@ public class XmTaskSbillController { detail.setSbillId(batchJoinToSbill.getSbillId()); detail.setProjectId(projectId); detail.setCtime(new Date()); - this.xmTaskSbillDetailService.preCalcSamt(detail); canAdd.add(detail); } - this.xmTaskSbillService.batchJoinToSbill(canAdd,details); + for (XmTaskSbillDetail d : canAdd) { + List othDetails=othSbillDetails.stream().filter(i->i.getTaskId().equals(d.getTaskId()) && i.getUserid().equals(d.getUserid())).collect(Collectors.toList()); + BigDecimal tactAt=BigDecimal.ZERO; + for (XmTaskSbillDetail othDetail : othDetails) { + tactAt=tactAt.add(othDetail.getAmt()); + } + d.setTactAt(tactAt); + this.xmTaskSbillDetailService.preCalcSamt(d); + } + this.xmTaskSbillService.batchJoinToSbill(canAdd,sameSbillDetails); }catch (BizException e) { diff --git a/xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java b/xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java index fc9d11d7..6e2aaa2d 100644 --- a/xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java +++ b/xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java @@ -8,9 +8,9 @@ import java.math.BigDecimal; /** * 组织 com 顶级模块 xm 大模块 core 小模块
* 实体 XmTaskSbillDetail所有属性名:
- * userid,username,ctime,taskId,bizDate,remark,id,sbillId,stime,sstatus,amt,samt,workload,projectId,sworkload,bizMonth,budgetAt,budgetWorkload,initWorkload,quoteAt,quoteWorkload,sschemel,uniPrice,qendTime,qstartTime,actEndTime,actStartTime,oshare,shareFee,sfee,sfeeRate,cpId,cpName,cpType,distUserid,distUsername,shareKey,taskOut,crowd,othFee,feeRemark,tactAt;
+ * userid,username,ctime,taskId,bizDate,remark,id,sbillId,stime,sstatus,amt,samt,workload,projectId,sworkload,bizMonth,budgetAt,budgetWorkload,initWorkload,quoteAt,quoteWorkload,sschemel,uniPrice,qendTime,qstartTime,actEndTime,actStartTime,oshare,shareFee,sfee,sfeeRate,cpId,cpName,cpType,distUserid,distUsername,shareKey,taskOut,crowd,othFee,feeRemark,tactAt,taskName;
* 表 xm_task_sbill_detail 工时登记表的所有字段名:
- * userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at;
+ * userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at,task_name;
* 当前主键(包括多主键):
* id;
*/ @@ -145,6 +145,9 @@ public class XmTaskSbillDetail implements java.io.Serializable { @ApiModelProperty(notes="该任务在本次结算前已结算的金额",allowEmptyValue=true,example="",allowableValues="") BigDecimal tactAt; + + @ApiModelProperty(notes="任务名称",allowEmptyValue=true,example="",allowableValues="") + String taskName; /**主键**/ public XmTaskSbillDetail(String id) { @@ -407,6 +410,12 @@ public class XmTaskSbillDetail implements java.io.Serializable { public void setTactAt(BigDecimal tactAt) { this.tactAt = tactAt; } + /** + * 任务名称 + **/ + public void setTaskName(String taskName) { + this.taskName = taskName; + } /** * 员工编号 @@ -660,5 +669,11 @@ public class XmTaskSbillDetail implements java.io.Serializable { public BigDecimal getTactAt() { return this.tactAt; } + /** + * 任务名称 + **/ + public String getTaskName() { + return this.taskName; + } } \ No newline at end of file diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java index e8dd6480..5dffe9c5 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java @@ -66,28 +66,39 @@ public class XmTaskSbillDetailService extends BaseService { */ public void preCalcSamt(XmTaskSbillDetail detail) { if(detail.getQuoteAt()!=null){ - detail.setAmt(detail.getQuoteAt()); + if(detail.getTactAt()!=null){ + detail.setAmt(detail.getQuoteAt().subtract(detail.getTactAt())); + }else{ + detail.setAmt(detail.getQuoteAt()); + } + if(detail.getAmt().compareTo(BigDecimal.ZERO)==0){ + detail.setSamt(BigDecimal.ZERO); + return; + } }else{ detail.setAmt(BigDecimal.ZERO); + detail.setSamt(BigDecimal.ZERO); + return; } - if("1".equals(detail.getOshare()) && detail.getShareFee()!=null && detail.getShareFee().compareTo(BigDecimal.ZERO)>0 ){ - - }else{ + if("0".equals(detail.getOshare()) || detail.getShareFee()==null || detail.getShareFee().compareTo(BigDecimal.ZERO)<=0 ){ detail.setShareFee(BigDecimal.ZERO); } if(detail.getSfeeRate()!=null && detail.getSfeeRate()>0){ - if(detail.getAmt()!=null){ - detail.setSfee(detail.getAmt().multiply(BigDecimal.valueOf(detail.getSfeeRate()/100))); - }else{ - detail.setSfee(BigDecimal.ZERO); - } + detail.setSfee(detail.getAmt().multiply(BigDecimal.valueOf(detail.getSfeeRate()/100))); + }else{ + detail.setSfee(BigDecimal.ZERO); } if(detail.getOthFee()==null){ detail.setOthFee(BigDecimal.ZERO); }else if(detail.getOthFee().compareTo(BigDecimal.ZERO)<0){ detail.setOthFee(BigDecimal.ZERO); } - detail.setSamt(detail.getAmt().subtract(detail.getShareFee()).subtract(detail.getSfee()).subtract(detail.getOthFee())); + if(detail.getTactAt()!=null && detail.getTactAt().compareTo(BigDecimal.ZERO)>0){ + detail.setSamt(detail.getAmt().subtract(detail.getSfee()).subtract(detail.getOthFee())); + }else{ + detail.setSamt(detail.getAmt().subtract(detail.getShareFee()).subtract(detail.getSfee()).subtract(detail.getOthFee())); + } + } } diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml index 253efefa..f2680a2d 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml @@ -16,7 +16,9 @@