From 24a84144bc836edff2c0194d7cfae687d126631c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Fri, 8 Jul 2022 01:47:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=B7=A5=E6=97=B6=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xm/core/ctrl/XmTaskSbillController.java | 97 +++++++++++++------ .../service/XmTaskSbillDetailService.java | 5 +- .../xm/core/service/XmTaskSbillService.java | 10 +- .../core/service/XmTaskWorkloadService.java | 3 +- .../com/xm/core/vo/BatchJoinToSbillVo.java | 28 ++---- .../xm/core/dao/XmTaskSbillDetailMapper.xml | 2 +- .../xm/core/dao/XmTaskWorkloadMapper.xml | 13 +-- 7 files changed, 94 insertions(+), 64 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 0f8d8d09..c464a0df 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 @@ -6,8 +6,10 @@ import com.mdp.core.utils.*; import com.mdp.mybatis.PageUtils; import com.mdp.safe.client.entity.User; import com.mdp.safe.client.utils.LoginUtils; +import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTaskSbill; import com.xm.core.entity.XmTaskSbillDetail; +import com.xm.core.entity.XmTaskWorkload; import com.xm.core.service.XmTaskSbillDetailService; import com.xm.core.service.XmTaskSbillService; import com.xm.core.service.XmTaskService; @@ -19,6 +21,7 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -180,8 +183,8 @@ public class XmTaskSbillController { if(!StringUtils.hasText(batchJoinToSbill.getSbillId())){ return ResponseHelper.failed("sbillId-0","请上送结算单编号"); } - if(batchJoinToSbill.getUserTasks()==null){ - return ResponseHelper.failed("userTasks-0","请上送userTasks"); + if(batchJoinToSbill.getWorkloadIds()==null){ + return ResponseHelper.failed("workloadIds-0","请上送workloadIds"); } User user=LoginUtils.getCurrentUserInfo(); try{ @@ -195,21 +198,37 @@ public class XmTaskSbillController { if(!user.getUserid().equals(sbillDb.getCuserid())){ return ResponseHelper.failed("cuserid-0","结算单不是您的结算单,您不能操作"); } - List> toSetUserTasks=xmTaskWorkloadService.ListGroupByTaskIdAndUseridToSet(map("userTasks",batchJoinToSbill.getUserTasks())); - if(toSetUserTasks==null && toSetUserTasks.size()==0){ - return ResponseHelper.failed("userTasks-0","不存在需要结算的用户列表"); + List workloadsDb=xmTaskWorkloadService.selectListByIds(batchJoinToSbill.getWorkloadIds()); + if(workloadsDb==null || workloadsDb.size()<=0){ + return ResponseHelper.failed("workloadsDb-0","工时单已不存在"); } - if(toSetUserTasks.stream().filter(i->!"2".equals(i.get("taskState"))).findAny().isPresent()){ - return ResponseHelper.failed("taskState-not-2","任务不是完工状态,不允许结算"); + List workloadsDb2=workloadsDb.stream().filter(i->!StringUtils.hasText(i.getSbillId()) && "1".equals(i.getSstatus())&&"1".equals(i.getWstatus())).collect(Collectors.toList()); + if(workloadsDb2==null || workloadsDb2.size()<=0){ + return ResponseHelper.failed("workloadsDb-0","不存在可以结算的工时单。"); + } + + if(workloadsDb2.stream().map(i->i.getProjectId()).collect(Collectors.toSet()).size()>1){ + return ResponseHelper.failed("projectId-not-1","不能一次性处理多个项目的工时单,请选择同一个项目的工时单再尝试。"); } String projectId= sbillDb.getProjectId(); - if(toSetUserTasks.stream().filter(i->!projectId.equals(i.get("projectId"))).findAny().isPresent()){ - return ResponseHelper.failed("projectId-not-same","请选择同一个项目的任务加入工时单"); + if(workloadsDb2.stream().filter(k->!k.getProjectId().equals(projectId)).findAny().isPresent()){ + return ResponseHelper.failed("projectId-0",String.format("结算单项目编号为%s,请选择同项目的工时单加入结算单。",projectId)); + } + List xmTasksDb=this.xmTaskService.selectListByIds(workloadsDb2.stream().map(i->i.getTaskId()).collect(Collectors.toList())); + if(xmTasksDb==null || xmTasksDb.size()==0){ + return ResponseHelper.failed("xmTasksDb-0","相关任务已不存在。"); + } + List xmTasksDb2=xmTasksDb.stream().filter(i->!"2".equals(i.getTaskState())).collect(Collectors.toList()); + if(xmTasksDb2==null || xmTasksDb2.size()==0){ + return ResponseHelper.failed("taskState-not-2","任务必须是已完工状态才能结算。"); } + List workloadsDb3=workloadsDb2.stream().filter(i->xmTasksDb2.stream().filter(k->k.getId().equals(i.getTaskId())).findAny().isPresent()).collect(Collectors.toList()); + + //检查是否已有同样的数据加入了结算单,如果有,需要合并 - BatchJoinToSbillVo batchJoinToSbillQuery=new BatchJoinToSbillVo(); - batchJoinToSbillQuery.setUserTasks(batchJoinToSbill.getUserTasks()); - List details=xmTaskSbillDetailService.selectListByUserTasks(batchJoinToSbillQuery); + List> userTasks=workloadsDb3.stream().map(i->map("userid",i.getUserid(),"taskId",i.getTaskId())).collect(Collectors.toList()); + Map userTasksMap=map("userTasks",userTasks); + List details=xmTaskSbillDetailService.selectListByUserTasks(userTasksMap); 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) { @@ -220,30 +239,48 @@ public class XmTaskSbillController { 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"))){ - detail.setWorkload(NumberUtil.getBigDecimal(detail.getWorkload(),BigDecimal.ZERO).add(NumberUtil.getBigDecimal(toSetUserTask.get("workload"),BigDecimal.ZERO))); - detail.setSworkload(NumberUtil.getBigDecimal(detail.getSworkload(),BigDecimal.ZERO).add(NumberUtil.getBigDecimal(toSetUserTask.get("workload"),BigDecimal.ZERO))); + for (XmTaskWorkload xmTaskWorkload : workloadsDb3) { + if(detail.getUserid().equals(xmTaskWorkload.getUserid()) && detail.getTaskId().equals(xmTaskWorkload.getTaskId())){ + detail.setWorkload(NumberUtil.getBigDecimal(detail.getWorkload(),BigDecimal.ZERO).add(NumberUtil.getBigDecimal(xmTaskWorkload.getWorkload(),BigDecimal.ZERO))); + detail.setSworkload(NumberUtil.getBigDecimal(detail.getSworkload(),BigDecimal.ZERO).add(NumberUtil.getBigDecimal(xmTaskWorkload.getWorkload(),BigDecimal.ZERO))); } } } } - List canAdd=new ArrayList<>(); - for (Map userTask : toSetUserTasks) { - XmTaskSbillDetail detail= BaseUtils.fromMap(userTask,XmTaskSbillDetail.class); - if(sameSbillDetails.stream().filter(i->i.getTaskId().equals(detail.getTaskId()) && i.getUserid().equals(detail.getUserid())).findAny().isPresent()){ - continue; + + List workloadsDb4=workloadsDb3.stream().filter(i->!sameSbillDetails.stream().filter(k->k.getUserid().equals(i.getUserid()) && k.getTaskId().equals(i.getTaskId())).findAny().isPresent()).collect(Collectors.toList()); + Map detailMap=new HashMap<>(); + for (XmTaskWorkload xmTaskWorkload : workloadsDb4) { + XmTaskSbillDetail detail=detailMap.get(xmTaskWorkload.getUserid()+"-"+xmTaskWorkload.getTaskId()); + if(detail==null){ + detail=new XmTaskSbillDetail(); + BeanUtils.copyProperties(xmTaskWorkload,detail); + XmTask xmTask=xmTasksDb2.stream().filter(i->i.getId().equals(xmTaskWorkload.getTaskId())).findAny().get(); + detail.setSworkload(NumberUtil.getBigDecimal(xmTaskWorkload.getWorkload(),BigDecimal.ZERO)); + detail.setId(this.xmTaskSbillDetailService.createKey("id")); + detail.setBizDate(DateUtils.getDate("yyyy-MM-dd")); + detail.setBizMonth(DateUtils.getDate("yyyy-MM")); + detail.setSbillId(batchJoinToSbill.getSbillId()); + detail.setProjectId(projectId); + detail.setBranchId(user.getBranchId()); + detail.setCtime(new Date()); + detail.setBudgetAt(xmTask.getBudgetAt()); + detail.setBudgetWorkload(xmTask.getBudgetWorkload()); + detail.setQuoteAt(xmTask.getQuoteFinalAt()); + detail.setTaskOut(xmTask.getTaskOut()); + detail.setCrowd(xmTask.getCrowd()); + detail.setSschemel(xmTask.getSettleSchemel()); + detail.setShareFee(xmTask.getShareFee()); + detail.setOshare(xmTask.getOshare()); + detailMap.put(xmTaskWorkload.getUserid()+"-"+xmTaskWorkload.getTaskId(),detail); + }else{ + detail.setWorkload(detail.getWorkload().add(NumberUtil.getBigDecimal(xmTaskWorkload.getWorkload(),BigDecimal.ZERO))); + detail.setSworkload(detail.getSworkload().add(NumberUtil.getBigDecimal(xmTaskWorkload.getWorkload(),BigDecimal.ZERO))); } - detail.setId(this.xmTaskSbillDetailService.createKey("id")); - detail.setBizDate(DateUtils.getDate("yyyy-MM-dd")); - detail.setBizMonth(DateUtils.getDate("yyyy-MM")); - detail.setSbillId(batchJoinToSbill.getSbillId()); - detail.setProjectId(projectId); - detail.setBranchId(user.getBranchId()); - detail.setCtime(new Date()); - canAdd.add(detail); + } + List canAdd= detailMap.values().stream().collect(Collectors.toList()); 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; @@ -254,7 +291,7 @@ public class XmTaskSbillController { this.xmTaskSbillDetailService.preCalcSamt(d); } - this.xmTaskSbillService.batchJoinToSbill(canAdd,sameSbillDetails); + this.xmTaskSbillService.batchJoinToSbill(workloadsDb4.stream().map(i->i.getId()).collect(Collectors.toList()), canAdd,sameSbillDetails); }catch (BizException e) { 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 69dbe921..313534b8 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 @@ -2,7 +2,6 @@ package com.xm.core.service; import com.mdp.core.service.BaseService; import com.xm.core.entity.XmTaskSbillDetail; -import com.xm.core.vo.BatchJoinToSbillVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,8 +29,8 @@ public class XmTaskSbillDetailService extends BaseService { @Autowired XmTaskSbillService xmTaskSbillService; - public List selectListByUserTasks(BatchJoinToSbillVo batchJoinToSbillVo) { - return super.selectList("selectListByUserTasks",batchJoinToSbillVo); + public List selectListByUserTasks(Map userTasks) { + return super.selectList("selectListByUserTasks",userTasks); } @Transactional diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskSbillService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskSbillService.java index 4f54034f..556aa10c 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskSbillService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskSbillService.java @@ -149,7 +149,7 @@ public class XmTaskSbillService extends BaseService { } @Transactional - public void batchJoinToSbill(List canAdd, List details) { + public void batchJoinToSbill(List workloadIds,List canAdd, List details) { if(canAdd.size()>0){ xmTaskSbillDetailService.batchInsert(canAdd); @@ -161,9 +161,13 @@ public class XmTaskSbillService extends BaseService { List detailsAll=new ArrayList<>(); detailsAll.addAll(canAdd); detailsAll.addAll(details); - this.xmTaskWorkloadService.updateStatusAfterJoinSbill(detailsAll); + if(detailsAll.size()>0){ + this.xmTaskWorkloadService.updateStatusAfterJoinSbill(map("ids",workloadIds,"sbillId",details.get(0).getSbillId(),"detailId",details.get(0).getId())); + this.updateBySbillDetailList(detailsAll.stream().map(i->i.getSbillId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); + } + + - this.updateBySbillDetailList(detailsAll.stream().map(i->i.getSbillId()).collect(Collectors.toSet()).stream().collect(Collectors.toList())); } } diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskWorkloadService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskWorkloadService.java index fae847d4..4bd026d3 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskWorkloadService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskWorkloadService.java @@ -1,7 +1,6 @@ package com.xm.core.service; import com.mdp.core.service.BaseService; -import com.xm.core.entity.XmTaskSbillDetail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -59,7 +58,7 @@ public class XmTaskWorkloadService extends BaseService { return super.selectList("ListGroupByTaskIdAndUseridToSet",xmTaskWorkload); } - public void updateStatusAfterJoinSbill(List details) { + public void updateStatusAfterJoinSbill(Map details) { super.update("updateStatusAfterJoinSbill",details); } diff --git a/xm-core/src/main/java/com/xm/core/vo/BatchJoinToSbillVo.java b/xm-core/src/main/java/com/xm/core/vo/BatchJoinToSbillVo.java index f4764fd1..b5020591 100644 --- a/xm-core/src/main/java/com/xm/core/vo/BatchJoinToSbillVo.java +++ b/xm-core/src/main/java/com/xm/core/vo/BatchJoinToSbillVo.java @@ -1,28 +1,18 @@ package com.xm.core.vo; -import java.util.List; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.List; +@Data +@ApiModel(description="批量将工时记录加入结算单") public class BatchJoinToSbillVo { - List userTasks; + @ApiModelProperty(notes="工时单主键列表",allowEmptyValue=true,example="",allowableValues="") + List workloadIds; + @ApiModelProperty(notes="结算单主键",allowEmptyValue=true,example="",allowableValues="") String sbillId; - - - public void setSbillId(String sbillId) { - this.sbillId = sbillId; - } - - public String getSbillId() { - return sbillId; - } - - public List getUserTasks() { - return userTasks; - } - - public void setUserTasks(List userTasks) { - this.userTasks = userTasks; - } } 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 b94ea13e..cce29c46 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 @@ -17,7 +17,7 @@ and (res.branch_id = #{linkBranchId} or res.cp_id=#{linkBranchId}) - select * from xm_task_sbill_detail res diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml index 9a5e7917..0393ca8b 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml @@ -210,12 +210,13 @@ - - - update xm_task_workload res set res.sstatus='2',res.detail_id=#{item.id},res.sbill_id=#{item.sbillId} - where res.sstatus='1' and res.userid=#{item.userid} and res.task_id=#{item.taskId} - - + + update xm_task_workload res set res.sstatus='2',res.detail_id=#{detailId},res.sbill_id=#{sbillId} + where res.id in + + #{item} + + update xm_task_workload res set res.sstatus='1',res.detail_id=null where res.detail_id in