Browse Source

重构工时系统

master
陈裕财 4 years ago
parent
commit
24a84144bc
  1. 97
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java
  2. 5
      xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java
  3. 10
      xm-core/src/main/java/com/xm/core/service/XmTaskSbillService.java
  4. 3
      xm-core/src/main/java/com/xm/core/service/XmTaskWorkloadService.java
  5. 28
      xm-core/src/main/java/com/xm/core/vo/BatchJoinToSbillVo.java
  6. 2
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml
  7. 13
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml

97
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<Map<String,Object>> toSetUserTasks=xmTaskWorkloadService.ListGroupByTaskIdAndUseridToSet(map("userTasks",batchJoinToSbill.getUserTasks()));
if(toSetUserTasks==null && toSetUserTasks.size()==0){
return ResponseHelper.failed("userTasks-0","不存在需要结算的用户列表");
List<XmTaskWorkload> 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<XmTaskWorkload> 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<XmTask> 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<XmTask> 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<XmTaskWorkload> 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<XmTaskSbillDetail> details=xmTaskSbillDetailService.selectListByUserTasks(batchJoinToSbillQuery);
List<Map<String,Object>> userTasks=workloadsDb3.stream().map(i->map("userid",i.getUserid(),"taskId",i.getTaskId())).collect(Collectors.toList());
Map<String,Object> userTasksMap=map("userTasks",userTasks);
List<XmTaskSbillDetail> details=xmTaskSbillDetailService.selectListByUserTasks(userTasksMap);
List<XmTaskSbillDetail> sameSbillDetails=details.stream().filter(i->sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList());
List<XmTaskSbillDetail> 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<String, Object> 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<XmTaskSbillDetail> canAdd=new ArrayList<>();
for (Map<String,Object> 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<XmTaskWorkload> 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<String,XmTaskSbillDetail> 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<XmTaskSbillDetail> canAdd= detailMap.values().stream().collect(Collectors.toList());
for (XmTaskSbillDetail d : canAdd) {
List<XmTaskSbillDetail> 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) {

5
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<XmTaskSbillDetail> selectListByUserTasks(BatchJoinToSbillVo batchJoinToSbillVo) {
return super.selectList("selectListByUserTasks",batchJoinToSbillVo);
public List<XmTaskSbillDetail> selectListByUserTasks(Map<String,Object> userTasks) {
return super.selectList("selectListByUserTasks",userTasks);
}
@Transactional

10
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<XmTaskSbillDetail> canAdd, List<XmTaskSbillDetail> details) {
public void batchJoinToSbill(List<String> workloadIds,List<XmTaskSbillDetail> canAdd, List<XmTaskSbillDetail> details) {
if(canAdd.size()>0){
xmTaskSbillDetailService.batchInsert(canAdd);
@ -161,9 +161,13 @@ public class XmTaskSbillService extends BaseService {
List<XmTaskSbillDetail> 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()));
}
}

3
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<XmTaskSbillDetail> details) {
public void updateStatusAfterJoinSbill(Map<String,Object> details) {
super.update("updateStatusAfterJoinSbill",details);
}

28
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<UserTaskVo> userTasks;
@ApiModelProperty(notes="工时单主键列表",allowEmptyValue=true,example="",allowableValues="")
List<String> workloadIds;
@ApiModelProperty(notes="结算单主键",allowEmptyValue=true,example="",allowableValues="")
String sbillId;
public void setSbillId(String sbillId) {
this.sbillId = sbillId;
}
public String getSbillId() {
return sbillId;
}
public List<UserTaskVo> getUserTasks() {
return userTasks;
}
public void setUserTasks(List<UserTaskVo> userTasks) {
this.userTasks = userTasks;
}
}

2
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})
</if>
</sql>
<select id="selectListByUserTasks" parameterType="com.xm.core.vo.BatchJoinToSbillVo" resultType="com.xm.core.entity.XmTaskSbillDetail">
<select id="selectListByUserTasks" parameterType="HashMap" resultType="com.xm.core.entity.XmTaskSbillDetail">
select * from xm_task_sbill_detail res
<where>
<if test="sbillId!=null and sbillId!=''">

13
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskWorkloadMapper.xml

@ -210,12 +210,13 @@
</where>
</select>
<update id="updateStatusAfterJoinSbill" parameterType="List">
<foreach collection="list" item="item" index="index" separator=";" >
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}
</foreach>
</update>
<update id="updateStatusAfterJoinSbill" parameterType="HashMap">
update xm_task_workload res set res.sstatus='2',res.detail_id=#{detailId},res.sbill_id=#{sbillId}
where res.id in
<foreach collection="ids" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</update>
<update id="updateStatusAfterDetailDel" parameterType="List">
update xm_task_workload res set res.sstatus='1',res.detail_id=null
where res.detail_id in

Loading…
Cancel
Save