From b47fe473386be448db906b660f450d5703660d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Mon, 21 Mar 2022 03:53:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8A=82=E7=82=B9=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E3=80=81=E6=A0=87=E7=AD=BE=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/XmTaskExecuserService.java | 35 ++++++++++++++----- .../com/xm/core/service/XmTaskService.java | 8 +++++ .../xm/core/dao/XmProjectMCostUserMapper.xml | 6 ++-- .../xm/core/dao/XmTaskExecuserMapper.xml | 2 +- .../mapper/xm/core/dao/XmTaskMapper.xml | 12 ++++++- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java index 0421e39f..c210eb36 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java @@ -17,6 +17,7 @@ import com.xm.core.service.push.XmPushMsgService; import com.xm.core.vo.XmGroupVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.math.BigDecimal; @@ -233,14 +234,23 @@ public class XmTaskExecuserService extends BaseService { String subjectId="rwcl"; String subjectName="任务酬劳"; Map params=new HashMap<>(); - params.put("projectId", projectId); params.put("taskId", taskId); - XmTask task=xmTaskService.selectOneObject(new XmTask(taskId)); - String projectName=task.getProjectName(); + XmTask xmTaskDb=xmTaskService.selectOneObject(new XmTask(taskId)); + if(xmTaskDb==null){ + throw new BizException("任务已不存在,不允许申请结算"); + } + if("3".equals(xmTaskDb.getTaskState())){ + throw new BizException("任务状态为已结算,不能再申请结算"); + } else if(!"2".equals(xmTaskDb.getTaskState())){ + throw new BizException("任务状态必须是完工状态,才可以进行结算申请"); + } + + + String projectName=xmTaskDb.getProjectName(); List> actCostAmountList=xmProjectMCostUserService.listSumForSettleGroupByTaskIdAndUserid(params); BigDecimal addSettleAmount=BigDecimal.ZERO; BigDecimal allActCostAmount=BigDecimal.ZERO; - BigDecimal taskBudgetCost=NumberUtil.getBigDecimal(task.getBudgetCost(),BigDecimal.ZERO); + BigDecimal taskBudgetCost=NumberUtil.getBigDecimal(xmTaskDb.getBudgetCost(),BigDecimal.ZERO); Map> actCostAmountMap=new HashMap<>(); XmTaskExecuser execuserQuery=new XmTaskExecuser(); execuserQuery.setTaskId(taskId); @@ -275,6 +285,10 @@ public class XmTaskExecuserService extends BaseService { if("6".equals(xmTaskExecuserDB.getSettleStatus())) { throw new BizException(xmTaskExecuserDB.getUsername()+"已经结算完毕,不能再申请"); } + + if("1".equals(xmTaskExecuserDB.getBizFlowState())) { + throw new BizException(xmTaskExecuserDB.getUsername()+"已有申请在审判中,不能重复申请结算"); + } if( StringUtils.hasText(xmTaskExecuserDB.getSettleStatus()) && !"0".equals(xmTaskExecuserDB.getSettleStatus()) && !"1".equals(xmTaskExecuserDB.getSettleStatus()) && !"5".equals(xmTaskExecuserDB.getSettleStatus())) { throw new BizException(xmTaskExecuserDB.getUsername()+"暂时还不能申请结算"); } @@ -296,7 +310,7 @@ public class XmTaskExecuserService extends BaseService { } if(allActCostAmount.add(addSettleAmount).compareTo(taskBudgetCost)>0) { - throw new BizException(task.getName()+"结算总金额已经超出任务预算"); + throw new BizException(xmTaskDb.getName()+"结算总金额已经超出任务预算"); } for (XmTaskExecuser xmTaskExecuser : xmTaskExecuserList) { @@ -329,9 +343,9 @@ public class XmTaskExecuserService extends BaseService { costUser.setBizzStartDate(xmTaskExecuser.getStartTime()); costUser.setBizzEndDate(xmTaskExecuser.getEndTime()); costUser.setBizFlowState("0"); - costUser.setCostType("1".equals(task.getTaskOut())?"1":"2"); + costUser.setCostType("1".equals(xmTaskDb.getTaskOut())?"1":"2"); costUser.setTaskId(xmTaskExecuser.getTaskId()); - costUser.setTaskName(task.getName()); + costUser.setTaskName(xmTaskDb.getName()); costUser.setCreateTime(new Date()); costUser.setProjectId(xmTaskExecuser.getProjectId()); costUser.setProjectName(projectName); @@ -400,6 +414,7 @@ public class XmTaskExecuserService extends BaseService { * @param flowVars {flowBranchId,agree,procInstId,startUserid,assignee,actId,taskName,mainTitle,branchId,bizKey,commentMsg,eventName,modelKey} 等 * @return 如果tips.isOk==false,将影响流程提交 **/ + @Transactional public void processApprova(Map flowVars) { String eventName=(String) flowVars.get("eventName"); @@ -432,7 +447,7 @@ public class XmTaskExecuserService extends BaseService { } if(StringUtils.isEmpty(bizExecuser.getBranchId())) { throw new BizException("机构编号不能为空"); - } + } flowVars.put("execuserId", bizExecuser.getId()); flowVars.put("projectId", bizExecuser.getProjectId()); }else { @@ -471,9 +486,11 @@ public class XmTaskExecuserService extends BaseService { mkClient.pushActiExecOrder(bizExecuser.getTaskId(), bizExecuser.getUserid(), bizExecuser.getUsername(),bizExecuser.getBranchId(),bizExecuser.getTaskId(),new BigDecimal(1),bizExecuser.getSettleAmount(),bizExecuser.getSettleAmount(),bizExecuser.getSettleWorkload(),bizExecuser.getTaskName()); flowVars.put("settleStatus","6"); flowVars.put("status","6"); - this.updateFlowStateByProcInst("2", flowVars); + this.updateFlowStateByProcInst("2", flowVars); //结算通过,更新费用表状态未1,申请通过 this.xmProjectMCostUserService.updateExecuserStatusByExecuserProcInstId(procInstId,"1"); + + this.xmTaskService.updateActCostAndActWorkloadAfterSettle(bizExecuser.getTaskId(),"3"); }else { //结算申请不通过,需要删除成本表中相关数据,还原执行表中相关数据 diff --git a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java index 47c9aa95..84490017 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmTaskService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmTaskService.java @@ -713,5 +713,13 @@ public class XmTaskService extends BaseService { super.update("batchChangeParent",map("taskIds",xmTasks.stream().map(i->i.getId()).collect(Collectors.toList()),"parentTaskid",parentTask.getId(),"parentPidPaths",parentTask.getPidPaths())); this.sumParents(parentTask); } + + /** + * 结算审批通过后,更新任务表数据 + * @param taskId + */ + public void updateActCostAndActWorkloadAfterSettle(String taskId,String toTaskState) { + super.update("updateActCostAndActWorkloadAfterSettle",map("id",taskId,"taskState",toTaskState)); + } } diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMCostUserMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMCostUserMapper.xml index fcfd93a0..609e5590 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMCostUserMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMCostUserMapper.xml @@ -116,14 +116,14 @@ res.task_id, res.userid, max( res.username ) as username, - sum( res.act_cost_amount ) AS act_cost_amount, - max( t.budget_cost ) AS task_budget_cost, + sum( ifnull(res.act_cost_amount,0) ) AS act_cost_amount, + max( ifnull(t.budget_cost,0) ) AS task_budget_cost, max( t.project_name ) AS project_name FROM xm_task t LEFT JOIN XM.xm_project_m_cost_user res ON res.task_id = t.id AND res.project_id = t.project_id - t.project_id=#{projectId} + and t.project_id =#{projectId} and res.subject_id =#{subjectId} and res.cost_type =#{costType} and res.task_id =#{taskId} diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskExecuserMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskExecuserMapper.xml index 3236067f..f2e99c5d 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskExecuserMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskExecuserMapper.xml @@ -100,7 +100,7 @@ WHEN e.STATUS = '4' THEN '(验收不过)' WHEN e.STATUS = '6' THEN - '(已付款)' + '(已结算)' WHEN e.STATUS = '7' THEN '(放弃任务)' WHEN e.STATUS = '8' THEN diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml index f9163018..67503377 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml @@ -343,7 +343,17 @@ set res.pid_paths = replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')), res.parent_taskid=if(res.id=t1.id,#{parentTaskid},res.parent_taskid), res.lvl= LENGTH(replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')))-LENGTH(REPLACE(replace(res.pid_paths,t1.pid_paths,concat(#{parentPidPaths},res.id,',')),',',''))-1 - + + + + update xm_task res left join ( + select u.task_id, sum(u.act_cost_amount) as act_cost_amount ,sum(u.act_workload) as act_workload from xm_project_m_cost_user u + where u.task_id=#{id} + group by u.task_id + ) as cu on cu.task_id=res.id + set res.act_workload=ifnull(cu.act_workload,0),res.act_cost=ifnull(cu.act_cost_amount,0), + res.task_state=ifnull(#{taskState},res.task_state) + where id=#{id}