流程状态控制
parent
00247e6b16
commit
73c4c9e6e7
src/main
resources/templates/admin
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
/**
|
||||
* 编辑概算保存项目
|
||||
|
|
|
@ -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"> 审核不通过
|
||||
|
|
Loading…
Reference in New Issue