diff --git a/src/main/java/cn/palmte/work/service/ActListenerService.java b/src/main/java/cn/palmte/work/service/ActListenerService.java index 3dee877..bf67ed7 100644 --- a/src/main/java/cn/palmte/work/service/ActListenerService.java +++ b/src/main/java/cn/palmte/work/service/ActListenerService.java @@ -1,23 +1,17 @@ package cn.palmte.work.service; -import cn.palmte.work.config.activiti.ActConstant; import cn.palmte.work.utils.ActUtil; -import com.alibaba.fastjson.JSONObject; import org.activiti.engine.RuntimeService; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.runtime.ProcessInstance; -import org.activiti.engine.runtime.ProcessInstanceQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import java.util.Iterator; import java.util.List; -import java.util.Set; /** @@ -47,15 +41,15 @@ public class ActListenerService { * @throws Exception */ public void create(DelegateTask delegateTask) throws Exception { - logger.info("--节点创建后监听-- procInsId:{}, {}", delegateTask.getProcessInstanceId(), delegateTask); + String procInsId = delegateTask.getProcessInstanceId(); + logger.info("--节点创建后监听-- procInsId:{}, {}", procInsId, delegateTask); String procDefId = delegateTask.getProcessDefinitionId(); - String procInsId = delegateTask.getProcessInstanceId(); String taskDefKey = delegateTask.getTaskDefinitionKey(); List candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey); - logger.info("addCandidateUsers : {}", candidateUsers); - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(delegateTask.getProcessInstanceId()).singleResult(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult(); + logger.info("addCandidateUsers : {}, taskName:{}, hasProcIns:{}", candidateUsers, delegateTask.getName(), processInstance != null); if (actUtil.isProjectProcessIns(processInstance)) { updateProjectApprover(candidateUsers, processInstance); } diff --git a/src/main/java/cn/palmte/work/service/ActProcInsService.java b/src/main/java/cn/palmte/work/service/ActProcInsService.java index 89675c5..b65bf49 100644 --- a/src/main/java/cn/palmte/work/service/ActProcInsService.java +++ b/src/main/java/cn/palmte/work/service/ActProcInsService.java @@ -74,7 +74,6 @@ public class ActProcInsService { * @param variables * @return */ - @Transactional(propagation = Propagation.NOT_SUPPORTED) public String startProcessInstance(String procDefKey, String businessKey, Map variables) throws Exception { List list = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).active().orderByProcessDefinitionVersion().desc().list(); if (list == null || list.isEmpty()) { diff --git a/src/main/java/cn/palmte/work/service/ActTaskDefService.java b/src/main/java/cn/palmte/work/service/ActTaskDefService.java index bd3187c..bf61200 100644 --- a/src/main/java/cn/palmte/work/service/ActTaskDefService.java +++ b/src/main/java/cn/palmte/work/service/ActTaskDefService.java @@ -161,6 +161,7 @@ public class ActTaskDefService { } if (actUtil.isProjectProcessIns(procDefKey)) { + //最后一个任务完成后 更新项目状态为审批通过 updateProjectPassed(processInstance, actTaskDef, procDefKey); } @@ -177,21 +178,33 @@ public class ActTaskDefService { logger.info("未配置驳回脚本 task:{}", actTaskDef.getTaskName()); } - + //驳回后 更新项目状态为审批不通过 if (actUtil.isProjectProcessIns(procDefKey)) { - projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_UNPASS, procDefKey); + int projectId = Integer.parseInt(processInstance.getBusinessKey()); + projectInstanceService.updateProjectApproveUnPassed(projectId, procDefKey); + logger.info("updateProjectUnPassed projectId:{}, proDefKey:{}", projectId, procDefKey); } } } + /** + * 最后一个任务完成后 更新项目状态为审批通过 + * + * @param processInstance + * @param actTaskDef + * @param procDefKey + */ private void updateProjectPassed(ProcessInstance processInstance, ActTaskDef actTaskDef, String procDefKey) { + int projectId = Integer.parseInt(processInstance.getBusinessKey()); if (ActConstant.PROCESS_DEFKEY_FINAL.equals(procDefKey)) { if ("财务总监".equals(actTaskDef.getTaskName())) { - projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_PASSED, procDefKey); + logger.info("updateProjectPassed1 projectId:{}, proDefKey:{}", projectId, procDefKey); + projectInstanceService.updateProjectApprovePassed(projectId, procDefKey); } } else { if ("执行董事".equals(actTaskDef.getTaskName())) { - projectInstanceService.updateApproveStatus(Integer.parseInt(processInstance.getBusinessKey()), ApproveStatusEnum.APPROVAL_PASSED, procDefKey); + logger.info("updateProjectPassed2 projectId:{}, proDefKey:{}", projectId, procDefKey); + projectInstanceService.updateProjectApprovePassed(projectId, procDefKey); } } diff --git a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java index ef361a4..b70470d 100644 --- a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java +++ b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java @@ -1,6 +1,7 @@ package cn.palmte.work.service; import cn.palmte.work.bean.ApproveStatusEnum; +import cn.palmte.work.bean.StatusEnum; import cn.palmte.work.config.activiti.ActConstant; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; @@ -117,17 +118,15 @@ public class ProjectInstanceService { } /** - * 更新对应审批状态 - * @param projectId 项目id - * @param approveStatusEnum 审批状态 1待审核,2审核通过,3审核不通过 - * @see ApproveStatusEnum + * 项目审批不通过 * @param processKey 审批类型 * @see ActConstant#PROCESS_DEFKEY_ESTIMATE * @see ActConstant#PROCESS_DEFKEY_BUDGET * @see ActConstant#PROCESS_DEFKEY_SETTLE * @see ActConstant#PROCESS_DEFKEY_FINAL */ - public void updateApproveStatus(int projectId, ApproveStatusEnum approveStatusEnum, String processKey){ + public void updateProjectApproveUnPassed(int projectId, String processKey){ + ApproveStatusEnum approveStatusEnum = ApproveStatusEnum.APPROVAL_UNPASS; Project project = projectRepository.findOne(projectId); if(ActConstant.PROCESS_DEFKEY_ESTIMATE.equals(processKey)){ project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus()); @@ -142,4 +141,45 @@ public class ProjectInstanceService { project.setLastUpdateTime(new Date()); projectRepository.saveAndFlush(project); } + + + /** + * 项目审批通过 + * + * @param projectId + * @param processKey + */ + public void updateProjectApprovePassed(int projectId, String processKey){ + ApproveStatusEnum approveStatusEnum = ApproveStatusEnum.APPROVAL_PASSED; + Project project = projectRepository.findOne(projectId); + if(ActConstant.PROCESS_DEFKEY_ESTIMATE.equals(processKey)){ + //概算完成 + project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus()); + project.setStatus(StatusEnum.ESTIMATE_ACCOUNTS.getStatus()); + project.setStatusDesc(StatusEnum.ESTIMATE_ACCOUNTS.getStatusDesc()); + + }else if(ActConstant.PROCESS_DEFKEY_BUDGET.equals(processKey)){ + //预算完成 + project.setApproveStatusBudget(approveStatusEnum.getApproveStatus()); + project.setStatus(StatusEnum.BUDGET_ACCOUNTS.getStatus()); + project.setStatusDesc(StatusEnum.BUDGET_ACCOUNTS.getStatusDesc()); + + }else if(ActConstant.PROCESS_DEFKEY_SETTLE.equals(processKey)){ + project.setApproveStatusSettle(approveStatusEnum.getApproveStatus()); + + }else if(ActConstant.PROCESS_DEFKEY_FINAL.equals(processKey)){ + //决算完成 + project.setApproveStatusFinal(approveStatusEnum.getApproveStatus()); + project.setStatus(StatusEnum.FINAL_ACCOUNTS.getStatus()); + project.setStatusDesc(StatusEnum.FINAL_ACCOUNTS.getStatusDesc()); + + } + + project.setApproveId(0); + project.setApproveName(""); + + project.setLastUpdateTime(new Date()); + projectRepository.saveAndFlush(project); + } + } diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index dc7aa4c..fa04f4d 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -152,14 +152,18 @@ public class ProjectService { /** * 编辑概算保存项目并发起审核 */ - @Transactional(rollbackFor = RuntimeException.class) - public Project estimateEditSaveAndApprove(Project project, +// @Transactional(rollbackFor = RuntimeException.class) + public void estimateEditSaveAndApprove(Project project, Project projectInDb, EstimateBean estimateBean, Admin admin) throws Exception { - if(null != projectInDb.getApproveStatusEstimate() && - ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == projectInDb.getApproveStatusEstimate()){ + Integer approveStatusEstimate = projectInDb.getApproveStatusEstimate(); + + estimateEditSave(project, projectInDb, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING); + + if(null != approveStatusEstimate && + ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == approveStatusEstimate){ //审核不通过的情况下重新编辑后就完成当前任务【此时任务节点在第一个,也就是发起审批】 List estimateProcessInsIds = projectInstanceService.getEstimateProcessInsIds(projectInDb); if(CollectionUtil.isNotEmpty(estimateProcessInsIds)){ @@ -171,7 +175,6 @@ public class ProjectService { //第一次或者重新发起一个流程实例【第一次或者以前的审批都已经过了】 projectInstanceService.startEstimateProcessInstance(projectInDb, admin); } - return estimateEditSave(project, projectInDb, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING); } /** * 编辑概算保存项目 diff --git a/src/main/resources/templates/admin/project_approve.ftl b/src/main/resources/templates/admin/project_approve.ftl index e18fe13..bb34804 100644 --- a/src/main/resources/templates/admin/project_approve.ftl +++ b/src/main/resources/templates/admin/project_approve.ftl @@ -2004,7 +2004,7 @@