流程状态控制

master
pengqiang 2021-11-16 17:39:06 +08:00
parent 00247e6b16
commit 73c4c9e6e7
6 changed files with 75 additions and 26 deletions

View File

@ -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<String> 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);
}

View File

@ -74,7 +74,6 @@ public class ActProcInsService {
* @param variables
* @return
*/
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public String startProcessInstance(String procDefKey, String businessKey, Map<String, Object> variables) throws Exception {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).active().orderByProcessDefinitionVersion().desc().list();
if (list == null || list.isEmpty()) {

View File

@ -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);
}
}

View File

@ -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 123
* @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);
}
}

View File

@ -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<String> 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);
}
/**
*

View File

@ -2004,7 +2004,7 @@
<div class="am-u-sm-12 am-u-md-4 switch-button" style="height: 25px;">
<label class="am-radio-inline">
<input type="radio" value="2" name="docVlGender" required> 审核通过
<input type="radio" value="2" checked="checked" name="docVlGender" required> 审核通过
</label>
<label class="am-radio-inline">
<input type="radio" value="3" name="docVlGender"> 审核不通过