diff --git a/src/main/java/cn/palmte/work/bean/StatusEnum.java b/src/main/java/cn/palmte/work/bean/StatusEnum.java index 7e52299..9b2c33b 100644 --- a/src/main/java/cn/palmte/work/bean/StatusEnum.java +++ b/src/main/java/cn/palmte/work/bean/StatusEnum.java @@ -1,5 +1,7 @@ package cn.palmte.work.bean; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; + /** * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 */ @@ -48,4 +50,21 @@ public enum StatusEnum { } throw new IllegalArgumentException("Unkown status:"+status); } + + + public static StatusEnum parseByProcDefId(String proDefId){ + if(proDefId.startsWith(ActProcessKeyEnum.ESTIMATE.getKey())){ + return ESTIMATE_ACCOUNTS; + } + if(proDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey())){ + return BUDGET_ACCOUNTS; + } + if(proDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey())){ + return SETTLE_ACCOUNTS; + } + if(proDefId.startsWith(ActProcessKeyEnum.FINAL.getKey())){ + return FINAL_ACCOUNTS; + } + throw new IllegalArgumentException("Unkown proDefId:"+ proDefId); + } } diff --git a/src/main/java/cn/palmte/work/config/activiti/ActApproveTypeEnum.java b/src/main/java/cn/palmte/work/config/activiti/ActApproveTypeEnum.java new file mode 100644 index 0000000..6de333d --- /dev/null +++ b/src/main/java/cn/palmte/work/config/activiti/ActApproveTypeEnum.java @@ -0,0 +1,33 @@ +package cn.palmte.work.config.activiti; + + +import cn.palmte.work.exception.ResponseException; +import lombok.Getter; + +/** + * 流程审批类型枚举 + */ +@Getter +public enum ActApproveTypeEnum { + APPROVAL_PASSED(2, "审核通过"), + APPROVAL_UN_PASS(3, "审核不通过"); + + + private int type; + private String name; + + ActApproveTypeEnum(int type, String name) { + this.type = type; + this.name = name; + } + + public static ActApproveTypeEnum ofType(int type) { + if (type == APPROVAL_PASSED.getType()) { + return APPROVAL_PASSED; + } else if (type == APPROVAL_UN_PASS.getType()) { + return APPROVAL_UN_PASS; + } else { + throw new ResponseException("不支持的审批类型【" + type + "】"); + } + } +} diff --git a/src/main/java/cn/palmte/work/config/activiti/ActConstant.java b/src/main/java/cn/palmte/work/config/activiti/ActConstant.java index 6d28ba0..5d1e040 100644 --- a/src/main/java/cn/palmte/work/config/activiti/ActConstant.java +++ b/src/main/java/cn/palmte/work/config/activiti/ActConstant.java @@ -7,33 +7,6 @@ public class ActConstant { */ public static final String START_PROCESS_USERID = "startUserId"; - - public static final String PROC_INS_ID = "procInsId"; - public static final String PROC_DEF_KEY = "procDefKey"; - - - /** - * 结束节点 - */ - public static final int TASK_INDEX_END = -1; - - - /** - * 0-未知或者其他节点 - */ - public static final int TASK_INDEX_OTHER = 0; - - /** - * 开始节点 - */ - public static final int TASK_INDEX_START = 1; - - /** - * 发起审批节点 - */ - public static final int TASK_INDEX_FIRST_USER_TASK = 2; - - /** * 单实例 或签 */ @@ -44,60 +17,12 @@ public class ActConstant { public static final int TASK_TYPE_MULTI = 1; - /** - * 会签任务总数 - */ - public static final String NUMBER_OF_INSTANCES = "nrOfInstances"; - - /** - * 活动的会签任务数 - */ - public static final String NUMBER_OF_ACTIVE_INSTANCES = "nrOfActiveInstances"; - - /** - * 完成会签任务数 - */ - public static final String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances"; - - - /** - * 概算 - */ - public static final String PROCESS_DEFKEY_ESTIMATE = "estimate"; - public static final String PROCESS_TASKS_ESTIMATE = "填报概算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事"; public static final String PROCESS_TASKS_BUDGET = "填报预算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事"; public static final String PROCESS_TASKS_SETTLE = "填报结算#财务总监"; public static final String PROCESS_TASKS_FINAL = "填报决算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事"; - /** - * 预算 - */ - public static final String PROCESS_DEFKEY_BUDGET = "budget"; - /** - * 结算 - */ - public static final String PROCESS_DEFKEY_SETTLE = "settle"; - /** - * 决算 - */ - public static final String PROCESS_DEFKEY_FINAL = "final"; - - public static final String KEY_PROJECT_ID = "projectId"; public static final String KEY_PROJECT_TYPE = "projectType"; - public static final String PROCESS_DEFKEY_SALE_CONTRACT = "saleContract"; - public static final String PROCESS_DEFKEY_BUSINESS_PURCHASE = "businessPurchase"; - - //发起人部门主管 - public static final int CANDIDATE_TYPE_START_USER_LEADER = 1; - - - //四算项目 - public static final int PROJECT_TYPE_FOURCAL = 0; - //销售合同 - public static final int PROJECT_TYPE_SALE_CONTRACT = 1; - //业务采购 - public static final int PROJECT_TYPE_BUSINESS_PURCHASE = 2; } diff --git a/src/main/java/cn/palmte/work/config/activiti/ActProcessKeyEnum.java b/src/main/java/cn/palmte/work/config/activiti/ActProcessKeyEnum.java new file mode 100644 index 0000000..28b0094 --- /dev/null +++ b/src/main/java/cn/palmte/work/config/activiti/ActProcessKeyEnum.java @@ -0,0 +1,63 @@ +package cn.palmte.work.config.activiti; + + +import cn.palmte.work.exception.ResponseException; +import lombok.Getter; + +/** + * 流程定义key枚举 + */ +@Getter +public enum ActProcessKeyEnum { + ESTIMATE("estimate", "概算审批流程"), + BUDGET("budget", "预算审批流程"), + SETTLE("settle", "结算审批流程"), + FINAL("final", "决算审批流程"), + SALE_CONTRACT("saleContract", "销售合同审批流程"), + BUSINESS_PURCHASE("businessPurchase", "业务采购审批流程"); + + + private String key; + private String name; + + ActProcessKeyEnum(String key, String name) { + this.key = key; + this.name = name; + } + + public static ActProcessKeyEnum ofKey(String key) { + if (ESTIMATE.getKey().equals(key)) { + return ESTIMATE; + } else if (BUDGET.getKey().equals(key)) { + return BUDGET; + } else if (SETTLE.getKey().equals(key)) { + return SETTLE; + } else if (FINAL.getKey().equals(key)) { + return FINAL; + } else if (SALE_CONTRACT.getKey().equals(key)) { + return SALE_CONTRACT; + } else if (BUSINESS_PURCHASE.getKey().equals(key)) { + return BUSINESS_PURCHASE; + } else { + throw new ResponseException("不支持的流程key【" + key + "】"); + } + } + + public static ActProcessKeyEnum ofProcDefId(String proDefId) { + if (proDefId.startsWith(ESTIMATE.getKey())) { + return ESTIMATE; + } else if (proDefId.startsWith(BUDGET.getKey())) { + return BUDGET; + } else if (proDefId.startsWith(SETTLE.getKey())) { + return SETTLE; + } else if (proDefId.startsWith(FINAL.getKey())) { + return FINAL; + } else if (proDefId.startsWith(SALE_CONTRACT.getKey())) { + return SALE_CONTRACT; + } else if (proDefId.startsWith(BUSINESS_PURCHASE.getKey())) { + return BUSINESS_PURCHASE; + } else { + throw new ResponseException("不支持的流程key【" + proDefId + "】"); + } + } +} diff --git a/src/main/java/cn/palmte/work/config/activiti/ActProjectTypeEnum.java b/src/main/java/cn/palmte/work/config/activiti/ActProjectTypeEnum.java new file mode 100644 index 0000000..f17e190 --- /dev/null +++ b/src/main/java/cn/palmte/work/config/activiti/ActProjectTypeEnum.java @@ -0,0 +1,36 @@ +package cn.palmte.work.config.activiti; + + +import cn.palmte.work.exception.ResponseException; +import lombok.Getter; + +/** + * 流程里的项目类型枚举 + */ +@Getter +public enum ActProjectTypeEnum { + FOURCAL(0, "四算项目"), + SALE_CONTRACT(1, "销售合同项目"), + BUSINESS_PURCHASE(2, "业务采购项目"); + + + private int type; + private String name; + + ActProjectTypeEnum(int type, String name) { + this.type = type; + this.name = name; + } + + public static ActProjectTypeEnum ofType(int type) { + if (type == FOURCAL.getType()) { + return FOURCAL; + } else if (type == SALE_CONTRACT.getType()) { + return SALE_CONTRACT; + } else if (type == BUSINESS_PURCHASE.getType()) { + return BUSINESS_PURCHASE; + } else { + throw new ResponseException("不支持的项目类型【" + type + "】"); + } + } +} diff --git a/src/main/java/cn/palmte/work/config/activiti/ActTaskIndexEnum.java b/src/main/java/cn/palmte/work/config/activiti/ActTaskIndexEnum.java new file mode 100644 index 0000000..3bbcba3 --- /dev/null +++ b/src/main/java/cn/palmte/work/config/activiti/ActTaskIndexEnum.java @@ -0,0 +1,39 @@ +package cn.palmte.work.config.activiti; + + +import cn.palmte.work.exception.ResponseException; +import lombok.Getter; + +/** + * 流程里的节点类型枚举 + */ +@Getter +public enum ActTaskIndexEnum { + END(-1, "结束节点"), + COMMON(0, "除发起审批外的用户节点"), + START(1, "开始节点"), + FIRST_USER_TASK(2, "发起审批节点"); + + + private int index; + private String name; + + ActTaskIndexEnum(int index, String name) { + this.index = index; + this.name = name; + } + + public static ActTaskIndexEnum ofIndex(int index) { + if (index == END.getIndex()) { + return END; + } else if (index == COMMON.getIndex()) { + return COMMON; + } else if (index == START.getIndex()) { + return START; + } else if (index == FIRST_USER_TASK.getIndex()) { + return FIRST_USER_TASK; + } else { + throw new ResponseException("不支持的节点类型【" + index + "】"); + } + } +} diff --git a/src/main/java/cn/palmte/work/config/activiti/CandidateTypeEnum.java b/src/main/java/cn/palmte/work/config/activiti/CandidateTypeEnum.java new file mode 100644 index 0000000..11cffbe --- /dev/null +++ b/src/main/java/cn/palmte/work/config/activiti/CandidateTypeEnum.java @@ -0,0 +1,36 @@ +package cn.palmte.work.config.activiti; + + +import cn.palmte.work.exception.ResponseException; +import lombok.Getter; + +/** + * 审批人设置枚举 + */ +@Getter +public enum CandidateTypeEnum { + USER(0, "按用户设置审批人"), + ROLE(1, "按角色设置审批人"), + STARTER_LEADER(2, "按发起人部门领导设置审批人"); + + + private int type; + private String name; + + CandidateTypeEnum(int type, String name) { + this.type = type; + this.name = name; + } + + public static CandidateTypeEnum ofType(int type) { + if (type == USER.getType()) { + return USER; + } else if (type == ROLE.getType()) { + return ROLE; + } else if (type == STARTER_LEADER.getType()) { + return STARTER_LEADER; + } else { + throw new ResponseException("不支持的类型【" + type + "】"); + } + } +} diff --git a/src/main/java/cn/palmte/work/controller/backend/ActTaskDefController.java b/src/main/java/cn/palmte/work/controller/backend/ActTaskDefController.java index 9b89180..1acb49a 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ActTaskDefController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ActTaskDefController.java @@ -76,7 +76,7 @@ public class ActTaskDefController extends BaseController { /** - * 完成某个任务 + * 管理员完成某个任务 * 审批通过或者驳回 * * @return diff --git a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java index 131222e..48f2cb9 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java @@ -1,5 +1,7 @@ package cn.palmte.work.controller.backend; +import cn.palmte.work.config.activiti.ActApproveTypeEnum; +import cn.palmte.work.config.activiti.ActProjectTypeEnum; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -446,15 +448,14 @@ public class ProcessController { @PostMapping("/audit") public void audit(@RequestBody @Valid AuditForm form) { ProjectProcess process = repository.findOne(form.processId); - // 2-通过 3-不通过 - int approveType = form.processStatus == ProcessStatus.audit_passed ? 2 : - form.processStatus == ProcessStatus.audit_not_passed ? 3 : -1; + ActApproveTypeEnum approveType = form.processStatus == ProcessStatus.audit_passed ? ActApproveTypeEnum.APPROVAL_PASSED : + ActApproveTypeEnum.APPROVAL_UN_PASS; switch (process.getProcessType()) { case business_procurement: - projectInstanceService.completeBusinessPurchaseTask(process.getId(), approveType, form.auditOpinion); + projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, approveType, form.auditOpinion); break; case sale_contract: - projectInstanceService.completeSaleContractTask(process.getId(), approveType, form.auditOpinion); + projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.SALE_CONTRACT, approveType, form.auditOpinion); break; } } diff --git a/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java b/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java index 34e3b04..bcd6523 100644 --- a/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java +++ b/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java @@ -1,7 +1,6 @@ package cn.palmte.work.model; -import cn.palmte.work.bean.StatusEnum; -import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import lombok.Data; import javax.persistence.*; @@ -15,6 +14,7 @@ import java.util.Date; @Table(name = "project_task_record") public class ProjectTaskRecord { + //状态 1-提交审批 2-审批通过 3-审批不通过 4-管理员退回 5-指定承接人 public static final int STATUS_ROLLBACK = 4;//管理员退回 public static final int STATUS_RE_ASSIGNEE = 5; //指定承接人 @@ -113,28 +113,10 @@ public class ProjectTaskRecord { @Transient private String procDefKey= ""; - public StatusEnum getStatusByProDefId() { - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { - return StatusEnum.BUDGET_ACCOUNTS; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { - return StatusEnum.SETTLE_ACCOUNTS; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { - return StatusEnum.FINAL_ACCOUNTS; - }else{ - return StatusEnum.ESTIMATE_ACCOUNTS; - } - } public String getProcDefName() { - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { - return "预算审批流程"; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { - return "结算审批流程"; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { - return "决算审批流程"; - }else{ - return "概算审批流程"; - } + ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofProcDefId(procDefId); + return keyEnum.getName(); } public void setProcDefName(String procDefName) { @@ -142,15 +124,8 @@ public class ProjectTaskRecord { } public String getProcDefKey() { - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { - return ActConstant.PROCESS_DEFKEY_BUDGET; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { - return ActConstant.PROCESS_DEFKEY_SETTLE; - }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { - return ActConstant.PROCESS_DEFKEY_FINAL; - }else{ - return ActConstant.PROCESS_DEFKEY_ESTIMATE; - } + ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofProcDefId(procDefId); + return keyEnum.getKey(); } public void setProcDefKey(String procDefKey) { diff --git a/src/main/java/cn/palmte/work/service/ActListenerService.java b/src/main/java/cn/palmte/work/service/ActListenerService.java index 89c0aae..195609c 100644 --- a/src/main/java/cn/palmte/work/service/ActListenerService.java +++ b/src/main/java/cn/palmte/work/service/ActListenerService.java @@ -2,6 +2,7 @@ package cn.palmte.work.service; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActTaskIndexEnum; import cn.palmte.work.model.ActTaskDef; import cn.palmte.work.model.Admin; import cn.palmte.work.model.AdminRepository; @@ -101,7 +102,7 @@ public class ActListenerService { ActTaskDef actTaskDef = actTaskDefService.findFirstByProcDefIdAndTaskKey(procDefId, taskDefKey); //找到当前有效的用户 List enableUsers = currentEnableUsers(candidateUsers); - boolean isFirstUserTask = actTaskDef != null && actTaskDef.getTaskIndex() != ActConstant.TASK_INDEX_FIRST_USER_TASK; + boolean isFirstUserTask = actTaskDef != null && actTaskDef.getTaskIndex() != ActTaskIndexEnum.FIRST_USER_TASK.getIndex(); if (actUtil.isFourcalProcess(procDefId)) { int adminId = 0;//默认审批人设置为空 diff --git a/src/main/java/cn/palmte/work/service/ActModelService.java b/src/main/java/cn/palmte/work/service/ActModelService.java index fd876c0..c2bb30a 100644 --- a/src/main/java/cn/palmte/work/service/ActModelService.java +++ b/src/main/java/cn/palmte/work/service/ActModelService.java @@ -1,6 +1,7 @@ package cn.palmte.work.service; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActTaskIndexEnum; import cn.palmte.work.model.ActTaskDef; import cn.palmte.work.model.ActTaskDefRepository; import cn.palmte.work.pojo.ActModel; @@ -147,7 +148,7 @@ public class ActModelService { setTaskListener(userTaskElement); if (i == 1) {//画流程图时,要保证第一个用户任务一定要先画 - taskDef.setTaskIndex(ActConstant.TASK_INDEX_FIRST_USER_TASK); + taskDef.setTaskIndex(ActTaskIndexEnum.FIRST_USER_TASK.getIndex()); first = taskDef; } diff --git a/src/main/java/cn/palmte/work/service/ActProcInsService.java b/src/main/java/cn/palmte/work/service/ActProcInsService.java index b686c8d..7075250 100644 --- a/src/main/java/cn/palmte/work/service/ActProcInsService.java +++ b/src/main/java/cn/palmte/work/service/ActProcInsService.java @@ -3,6 +3,7 @@ package cn.palmte.work.service; import cn.palmte.work.bean.ApproveStatusEnum; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActTaskIndexEnum; import cn.palmte.work.model.ActTaskDefRepository; import cn.palmte.work.model.ProjectTaskRecord; import cn.palmte.work.pojo.ActProcIns; @@ -105,7 +106,7 @@ public class ActProcInsService { taskService.complete(taskId); projectTaskRecordService.saveTaskRecord(Integer.parseInt(instance.getBusinessKey()), - task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), ActConstant.TASK_INDEX_FIRST_USER_TASK, comment); + task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), ActTaskIndexEnum.FIRST_USER_TASK.getIndex(), comment); return instance.getId(); } diff --git a/src/main/java/cn/palmte/work/service/ActTaskDefService.java b/src/main/java/cn/palmte/work/service/ActTaskDefService.java index 8900b2b..611cc95 100644 --- a/src/main/java/cn/palmte/work/service/ActTaskDefService.java +++ b/src/main/java/cn/palmte/work/service/ActTaskDefService.java @@ -1,8 +1,7 @@ package cn.palmte.work.service; -import cn.palmte.work.bean.ApproveStatusEnum; import cn.palmte.work.bean.ResponseMsg; -import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.*; import cn.palmte.work.model.*; import cn.palmte.work.pojo.ActHisTask; @@ -48,7 +47,7 @@ public class ActTaskDefService { /** - * 审批任务 + * 管理员完成某个任务 * * @param json */ @@ -58,10 +57,10 @@ public class ActTaskDefService { String message = json.getString("message"); int type = json.getInteger("type"); - completeTask(taskId, procInsId, message, type, ""); + completeTask(taskId, procInsId, message, ActApproveTypeEnum.ofType(type), ""); } - private void completeTask(String taskId, String procInsId, String message, int type, String fileUrl) { + private void completeTask(String taskId, String procInsId, String message, ActApproveTypeEnum approveEnum, String fileUrl) { String userId = InterfaceUtil.getAdminId() + ""; Authentication.setAuthenticatedUserId(userId); taskService.addComment(taskId, procInsId, message); @@ -72,13 +71,13 @@ public class ActTaskDefService { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult(); taskService.setAssignee(taskId, userId); if (ActConstant.TASK_TYPE_SINGE == actTaskDef.getTaskType()) { - handleSinge(processInstance, taskId, type, actTaskDef); + handleSinge(processInstance, taskId, approveEnum, actTaskDef); } //保存审批记录 projectTaskRecordService.saveTaskRecordWithFileUrl(Integer.parseInt(processInstance.getBusinessKey()), - currentTask, type, actTaskDef.getTaskIndex(), message, fileUrl); + currentTask, approveEnum.getType(), actTaskDef.getTaskIndex(), message, fileUrl); } @@ -86,13 +85,13 @@ public class ActTaskDefService { * 通过流程实列id完成任务 * * @param procInsId - * @param type + * @param approveEnum * @param comment */ - public void completeTaskByProcInsId(String procInsId, int type, String comment) { + public void completeTaskByProcInsId(String procInsId, ActApproveTypeEnum approveEnum, String comment) { List taskList = taskService.createTaskQuery().processInstanceId(procInsId).list(); for (Task task : taskList) { - completeTask(task.getId(), procInsId, comment, type, ""); + completeTask(task.getId(), procInsId, comment, approveEnum, ""); } } @@ -103,7 +102,7 @@ public class ActTaskDefService { */ public ResponseMsg skipTaskByProcInsId(String procInsId, String fileUrl, String comment) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult(); - if (!ActConstant.PROCESS_DEFKEY_BUDGET.equals(processInstance.getProcessDefinitionKey())) { + if (!ActProcessKeyEnum.BUDGET.getKey().equals(processInstance.getProcessDefinitionKey())) { return ResponseMsg.buildFailedMsg("只有预算审批流程才能执行会签"); } @@ -112,12 +111,12 @@ public class ActTaskDefService { if ("执行董事".equals(task.getName())) { return ResponseMsg.buildFailedMsg("当前状态不能用会签功能,请使用审批功能。"); } - completeTask(task.getId(), procInsId, comment, ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus(), fileUrl); + completeTask(task.getId(), procInsId, comment, ActApproveTypeEnum.APPROVAL_PASSED, fileUrl); //非执行董事节点自动跳过 task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult(); while (!"执行董事".equals(task.getName())) { - completeSkipTask(task, processInstance, "会签,任务自动审批通过", ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus()); + completeSkipTask(task, processInstance, "会签,任务自动审批通过"); task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult(); } @@ -135,8 +134,7 @@ public class ActTaskDefService { while (!skipToTaskName.equals(task.getName())) { logger.info("skipTaskByProcInsIdAndTaskName completeSkipTask:{}", task.getName()); - completeSkipTask(task, processInstance, "任务由系统自动审批通过", - ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus()); + completeSkipTask(task, processInstance, "任务由系统自动审批通过"); task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult(); logger.info("skipTaskByProcInsIdAndTaskName currentTaskName:{}, skipToTaskName:{}", task.getName(), skipToTaskName); @@ -145,11 +143,11 @@ public class ActTaskDefService { } - private void completeSkipTask(Task task, ProcessInstance processInstance, String message, int type) { + private void completeSkipTask(Task task, ProcessInstance processInstance, String message) { String taskId = task.getId(); ActTaskDef actTaskDef = findFirstByProcDefIdAndTaskKey(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); - if (actTaskDef.getTaskIndex() != ActConstant.TASK_INDEX_FIRST_USER_TASK) { + if (actTaskDef.getTaskIndex() != ActTaskIndexEnum.FIRST_USER_TASK.getIndex()) { //不是发起节点 增加comment Authentication.setAuthenticatedUserId("-1"); taskService.addComment(taskId, processInstance.getProcessInstanceId(), message); @@ -158,7 +156,7 @@ public class ActTaskDefService { taskService.setAssignee(taskId, "-1"); if (ActConstant.TASK_TYPE_SINGE == actTaskDef.getTaskType()) { - handleSinge(processInstance, taskId, type, actTaskDef); + handleSinge(processInstance, taskId, ActApproveTypeEnum.APPROVAL_PASSED, actTaskDef); } } @@ -167,12 +165,12 @@ public class ActTaskDefService { * * @param taskId * @param processInstance - * @param type + * @param approveEnum * @param actTaskDef */ - private void handleSinge(ProcessInstance processInstance, String taskId, int type, ActTaskDef actTaskDef) { + private void handleSinge(ProcessInstance processInstance, String taskId, ActApproveTypeEnum approveEnum, ActTaskDef actTaskDef) { String procDefKey = actTaskDef.getProcDefKey(); - if (ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus() == type) { + if (ActApproveTypeEnum.APPROVAL_PASSED == approveEnum) { //审批通过 taskService.complete(taskId); @@ -180,7 +178,7 @@ public class ActTaskDefService { //四算项目 最后一个任务完成后 更新项目状态为审批通过 其他项目通过监听器更新 updateProjectPassed(processInstance, actTaskDef, procDefKey); } - } else if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) { + } else if (ActApproveTypeEnum.APPROVAL_UN_PASS == approveEnum) { //驳回 String rollbackTaskKey = actTaskDef.getRollbackTaskKey(); actUtil.jumpToTargetTask(taskId, rollbackTaskKey); @@ -188,7 +186,7 @@ public class ActTaskDefService { //驳回后 更新项目状态为审批不通过 int projectId = Integer.parseInt(processInstance.getBusinessKey()); if (actUtil.isFourcalProcess(processInstance.getProcessDefinitionId())) { - projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_UNPASS); + projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_UN_PASS); } else if (actUtil.isNewProcess(processInstance.getProcessDefinitionId())) { //todo updateNewProcess 更新流程状态为不通过 } @@ -206,17 +204,17 @@ public class ActTaskDefService { */ private void updateProjectPassed(ProcessInstance processInstance, ActTaskDef actTaskDef, String procDefKey) { int projectId = Integer.parseInt(processInstance.getBusinessKey()); - if (ActConstant.PROCESS_DEFKEY_SETTLE.equals(procDefKey)) { + if (ActProcessKeyEnum.SETTLE.getKey().equals(procDefKey)) { //结算流程 财务总监审批完流程结束 if ("财务总监".equals(actTaskDef.getTaskName())) { logger.info("updateProjectPassed1 projectId:{}, proDefKey:{}", projectId, procDefKey); - projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_PASSED); + projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_PASSED); } } else { //其余流程 执行董事审批完流程结束 if ("执行董事".equals(actTaskDef.getTaskName())) { logger.info("updateProjectPassed2 projectId:{}, proDefKey:{}", projectId, procDefKey); - projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_PASSED); + projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_PASSED); } } @@ -320,7 +318,7 @@ public class ActTaskDefService { */ public List findCandidateUsers(String procDefId, String procInsId, String taskDefKey) { ActTaskDef taskDef = findFirstByProcDefIdAndTaskKey(procDefId, taskDefKey); - if (taskDef.getTaskIndex() == ActConstant.TASK_INDEX_FIRST_USER_TASK) { + if (taskDef.getTaskIndex() == ActTaskIndexEnum.FIRST_USER_TASK.getIndex()) { //任务驳回到发起节点 审批人设置为发起人 String startUserId = actUtil.getStartUserId(procInsId); List res = new ArrayList<>(1); @@ -369,7 +367,7 @@ public class ActTaskDefService { List userIdList = new ArrayList<>(); for (String typeStr : types) { - if (ActConstant.CANDIDATE_TYPE_START_USER_LEADER == Integer.parseInt(typeStr)) { + if (CandidateTypeEnum.STARTER_LEADER.getType() == Integer.parseInt(typeStr)) { //查找发起人部门主管 String startUserId = actUtil.getStartUserId(procInsId); int leaderId = accountService.getOneLevelDeptManagerId(Integer.parseInt(startUserId)); @@ -450,7 +448,8 @@ public class ActTaskDefService { taskService.setAssignee(currentTask.getId(), targetAdmin.getId() + ""); //保存一条指定承接人记录 - projectTaskRecordService.saveTaskRecord(projectId, currentTask, ProjectTaskRecord.STATUS_RE_ASSIGNEE, ActConstant.TASK_INDEX_OTHER, + projectTaskRecordService.saveTaskRecord(projectId, currentTask, + ProjectTaskRecord.STATUS_RE_ASSIGNEE, ActTaskIndexEnum.COMMON.getIndex(), "指定承接人【" + targetAdmin.getRealName() + "]"); } else { logger.error("setTaskAssignAndSaveRecordError task is null, projectId:{}", projectId); diff --git a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java index 5fa5972..0c2c02b 100644 --- a/src/main/java/cn/palmte/work/service/ProjectBudgetService.java +++ b/src/main/java/cn/palmte/work/service/ProjectBudgetService.java @@ -1,9 +1,9 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.model.*; import cn.palmte.work.utils.DateKit; -import cn.palmte.work.utils.StrKit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -876,7 +876,7 @@ public class ProjectBudgetService { } public void budgetApprove(Integer approveStatusBudget, Project projectInDb, Admin admin) throws Exception { - projectInstanceService.startBudgetProcessInstance(projectInDb, admin); + projectInstanceService.startFourcalProcess(projectInDb, ActProcessKeyEnum.BUDGET); // int type = projectInDb.getType(); // List userIds = new ArrayList<>(); // if (type == 1) { diff --git a/src/main/java/cn/palmte/work/service/ProjectEstimateService.java b/src/main/java/cn/palmte/work/service/ProjectEstimateService.java index 2ca5694..8bdf294 100644 --- a/src/main/java/cn/palmte/work/service/ProjectEstimateService.java +++ b/src/main/java/cn/palmte/work/service/ProjectEstimateService.java @@ -1,6 +1,7 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -355,7 +356,7 @@ public class ProjectEstimateService { } public void estimateApprove(Integer approveStatusEstimate, Project projectInDb, Admin admin) throws Exception { - projectInstanceService.startEstimateProcessInstance(projectInDb, admin); + projectInstanceService.startFourcalProcess(projectInDb, ActProcessKeyEnum.ESTIMATE); int type = projectInDb.getType(); List userIds = new ArrayList<>(); if (type == 1) { diff --git a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java index 671c5b1..b62a5e3 100644 --- a/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java +++ b/src/main/java/cn/palmte/work/service/ProjectFinalSevice.java @@ -1,8 +1,8 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.model.*; -import cn.palmte.work.utils.InterfaceUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,7 +69,7 @@ public class ProjectFinalSevice { //更新项目和审批状态 projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.FINAL_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING, project.getOtherName()); //发起流程 - projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin()); + projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.FINAL); } public void clearAndSave(Project project, FinalBean finalBean) { diff --git a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java index c2eff43..762e90c 100644 --- a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java +++ b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java @@ -1,7 +1,11 @@ package cn.palmte.work.service; -import cn.palmte.work.bean.ApproveStatusEnum; + +import cn.palmte.work.config.activiti.ActApproveTypeEnum; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; +import cn.palmte.work.config.activiti.ActProjectTypeEnum; +import cn.palmte.work.exception.ResponseException; import cn.palmte.work.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,151 +34,98 @@ public class ProjectInstanceService { /** - * 开启一个概算流程实例 - */ - public void startEstimateProcessInstance(Project project, Admin admin) throws Exception { - startProcess(project, admin, ActConstant.PROCESS_DEFKEY_ESTIMATE); - } - - /** - * 开启一个预算流程实例 - */ - public void startBudgetProcessInstance(Project project, Admin admin) throws Exception { - startProcess(project, admin, ActConstant.PROCESS_DEFKEY_BUDGET); - } - - /** - * 开启一个结算流程实例 - */ - public void startSettleProcessInstance(Project project, Admin admin) throws Exception { - startProcess(project, admin, ActConstant.PROCESS_DEFKEY_SETTLE); - } - /** - * 开启一个决算流程实例 - */ - public void startFinalProcessInstance(int projectId, Admin admin) throws Exception { - Project project = projectRepository.findOne(projectId); - startProcess(project, admin, ActConstant.PROCESS_DEFKEY_FINAL); - } - - /** - * 发起销售合同流程实例 + * 通过项目id发起流程实例 * - * @param projectId 项目唯一id - * @param map 流程变量 + * @param projectId + * @param projectEnum + * @param map * @throws Exception */ - public void startSaleContractProcess(int projectId, Map map) throws Exception { - String processDefkey = ActConstant.PROCESS_DEFKEY_SALE_CONTRACT; + public void startProcessByProjectId(int projectId, ActProjectTypeEnum projectEnum, Map map) throws Exception { + ActProcessKeyEnum keyEnum; + if (projectEnum == ActProjectTypeEnum.SALE_CONTRACT) { + keyEnum = ActProcessKeyEnum.SALE_CONTRACT; + } else if (projectEnum == ActProjectTypeEnum.BUSINESS_PURCHASE) { + keyEnum = ActProcessKeyEnum.BUSINESS_PURCHASE; + }else{ + throw new ResponseException("不支持的项目类型"); + } + String processDefkey = keyEnum.getKey(); String businessKey = String.valueOf(projectId); logger.info("startSaleContractProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey); String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, map); - saveRelation(projectId, processDefkey, processInstanceId); - + saveProjectInstance(projectId, processInstanceId, keyEnum, projectEnum); } - /** - * 发起业务采购流程实例 + * 通过项目id和项目类型完成审批任务 * * @param projectId 项目唯一id - * @param map 流程变量 - * @throws Exception - */ - public void startBusinessPurchaseProcess(int projectId, Map map) throws Exception { - String processDefkey = ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE; - String businessKey = String.valueOf(projectId); - logger.info("startBusinessPurchaseProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey); - String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, map); - - //保存流程实例id与项目的关联关系 - saveRelation(projectId, processDefkey, processInstanceId); - } - - /** - * 销售合同流程 审批(通过或者不通过) - * - * @param projectId 项目唯一id - * @param approveType 2-通过 3-不通过 + * @param projectEnum 项目类型 + * @param approveEnum 审批状态 * @param message 审批意见 * @return */ - public boolean completeSaleContractTask(int projectId, int approveType, String message) { - ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType(projectId, ActConstant.PROJECT_TYPE_SALE_CONTRACT); + public boolean completeTaskByProjectId(int projectId, ActProjectTypeEnum projectEnum, + ActApproveTypeEnum approveEnum, String message) { + ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType( + projectId, projectEnum.getType()); if (projectInstance == null) { return false; } - actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveType, message); + + actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveEnum, message); return true; } - /** - * 业务采购流程 审批(通过或者不通过) - * - * @param projectId 项目唯一id - * @param approveType 2-通过 3-不通过 - * @param message 审批意见 - * @return - */ - public boolean completeBusinessPurchaseTask(int projectId, int approveType, String message) { - ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType(projectId, ActConstant.PROJECT_TYPE_SALE_CONTRACT); - if (projectInstance == null) { - return false; - } - actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveType, message); - return true; - } - - - private void saveRelation(int projectId, String processDefkey, String processInstanceId) { + private void saveProjectInstance(int projectId, String processInstanceId, + ActProcessKeyEnum keyEnum, ActProjectTypeEnum projectTypeEnum) { //保存流程实例id与项目的关联关系 ProjectInstanceRelation relation = new ProjectInstanceRelation(); relation.setProjectId(projectId); - relation.setProjectType(ActConstant.PROJECT_TYPE_SALE_CONTRACT); - relation.setProcessType(processDefkey); + relation.setProjectType(projectTypeEnum.getType()); + relation.setProcessType(keyEnum.getKey()); relation.setProcessInsId(processInstanceId); relation.setCreateTime(new Date()); projectInstanceRelationRepository.saveAndFlush(relation); } - private void startProcess(Project project, Admin admin, String processDefkey) throws Exception { + /** + * 发起四算项目流程 + * + * @param project + * @param keyEnum + * @throws Exception + */ + public void startFourcalProcess(Project project, ActProcessKeyEnum keyEnum) throws Exception { HashMap variables = new HashMap<>(); variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType()); String businessKey = String.valueOf(project.getId()); - logger.info("startProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey); - String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, variables); + logger.info("startProcess processDefkey:{}, businessKey:{}", keyEnum.getKey(), businessKey); + String processInstanceId = actProcInsService.startProcessInstance(keyEnum.getKey(), businessKey, variables); - saveProjectInstance(project, processDefkey, processInstanceId); + saveProjectInstance(project.getId(), processInstanceId, keyEnum, ActProjectTypeEnum.FOURCAL); } - public String startProcessBySystem(Project project, String processDefkey, ProjectTaskRecord taskRecord) throws Exception { + public String startProcessBySystem(Project project, ActProcessKeyEnum keyEnum, ProjectTaskRecord taskRecord) throws Exception { HashMap variables = new HashMap<>(); variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType()); String businessKey = String.valueOf(project.getId()); - logger.info("startProcessBySystem processDefkey:{}, businessKey:{}", processDefkey, businessKey); + logger.info("startProcessBySystem processDefkey:{}, businessKey:{}", keyEnum.getKey(), businessKey); String processInstanceId = actProcInsService.startProcessInstanceBySystem( - processDefkey, businessKey, variables, taskRecord); + keyEnum.getKey(), businessKey, variables, taskRecord); - saveProjectInstance(project, processDefkey, processInstanceId); + saveProjectInstance(project.getId(), processInstanceId, keyEnum, ActProjectTypeEnum.FOURCAL); return processInstanceId; } - private void saveProjectInstance(Project project, String processDefkey, String processInstanceId) { - //保存流程实例id与项目的关联关系 - ProjectInstanceRelation relation = new ProjectInstanceRelation(); - relation.setProjectId(project.getId()); - relation.setProcessType(processDefkey); - relation.setProcessInsId(processInstanceId); - relation.setCreateTime(new Date()); - projectInstanceRelationRepository.saveAndFlush(relation); - } - /** * 更新审批人,用于在任务监听器中更新下个审批人 + * * @param projectId 项目id * @param adminId 审批人id */ @@ -197,24 +148,21 @@ public class ProjectInstanceService { /** * 更新审批状态 * @param processKey 审批类型 - * @see ActConstant#PROCESS_DEFKEY_ESTIMATE - * @see ActConstant#PROCESS_DEFKEY_BUDGET - * @see ActConstant#PROCESS_DEFKEY_SETTLE - * @see ActConstant#PROCESS_DEFKEY_FINAL + * @see ActProcessKeyEnum */ - public void updateApproveStatus(int projectId, String processKey, ApproveStatusEnum approveStatusEnum){ + public void updateApproveStatus(int projectId, String processKey, ActApproveTypeEnum approveTypeEnum){ Project project = projectRepository.findOne(projectId); - if(ActConstant.PROCESS_DEFKEY_ESTIMATE.equals(processKey)){ - project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus()); - }else if(ActConstant.PROCESS_DEFKEY_BUDGET.equals(processKey)){ - project.setApproveStatusBudget(approveStatusEnum.getApproveStatus()); - }else if(ActConstant.PROCESS_DEFKEY_SETTLE.equals(processKey)){ - project.setApproveStatusSettle(approveStatusEnum.getApproveStatus()); - }else if(ActConstant.PROCESS_DEFKEY_FINAL.equals(processKey)){ - project.setApproveStatusFinal(approveStatusEnum.getApproveStatus()); + if(ActProcessKeyEnum.ESTIMATE.getKey().equals(processKey)){ + project.setApproveStatusEstimate(approveTypeEnum.getType()); + }else if(ActProcessKeyEnum.BUDGET.getKey().equals(processKey)){ + project.setApproveStatusBudget(approveTypeEnum.getType()); + }else if(ActProcessKeyEnum.SETTLE.getKey().equals(processKey)){ + project.setApproveStatusSettle(approveTypeEnum.getType()); + }else if(ActProcessKeyEnum.FINAL.getKey().equals(processKey)){ + project.setApproveStatusFinal(approveTypeEnum.getType()); } - if (approveStatusEnum.getApproveStatus() == ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus()) { + if (approveTypeEnum == ActApproveTypeEnum.APPROVAL_PASSED) { //审批通过设置审批人为空 project.setApproveId(0); project.setApproveName(""); diff --git a/src/main/java/cn/palmte/work/service/ProjectProcessService.java b/src/main/java/cn/palmte/work/service/ProjectProcessService.java index 0dd5b21..1828070 100644 --- a/src/main/java/cn/palmte/work/service/ProjectProcessService.java +++ b/src/main/java/cn/palmte/work/service/ProjectProcessService.java @@ -1,5 +1,6 @@ package cn.palmte.work.service; +import cn.palmte.work.config.activiti.ActProjectTypeEnum; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -142,10 +143,10 @@ public class ProjectProcessService { variables.put("process", entity); switch (entity.getProcessType()) { case sale_contract: - projectInstanceService.startSaleContractProcess(entity.getId(), variables); + projectInstanceService.startProcessByProjectId(entity.getId(), ActProjectTypeEnum.SALE_CONTRACT, variables); break; case business_procurement: - projectInstanceService.startBusinessPurchaseProcess(entity.getId(), variables); + projectInstanceService.startProcessByProjectId(entity.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, variables); break; default: throw new UnsupportedOperationException("还不支持"); diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index 2dfc459..a2a4386 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -1,11 +1,12 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; +import cn.palmte.work.config.activiti.ActApproveTypeEnum; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.model.*; import cn.palmte.work.utils.InterfaceUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import org.activiti.engine.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -536,8 +537,9 @@ public class ProjectService { } ProjectInstanceRelation projectInstanceRelation = relationList.get(0); JSONObject obj = JSON.parseObject(json); + ActApproveTypeEnum approveTypeEnum = ActApproveTypeEnum.ofType(obj.getIntValue("type")); actTaskDefService.completeTaskByProcInsId(projectInstanceRelation.getProcessInsId(), - obj.getIntValue("type"), obj.getString("message")); + approveTypeEnum, obj.getString("message")); return ResponseMsg.buildSuccessMsg("审核成功",approvetype); } @@ -764,10 +766,10 @@ public class ProjectService { projectBudgetService.budgetApprove(approveStatusBudget, project, admin); project.setApproveStatusBudget(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus()); } else if (project.getApproveStatusSettle() == ApproveStatusEnum.APPROVAL_UNCOMMIT.getApproveStatus()) { - projectInstanceService.startSettleProcessInstance(project, InterfaceUtil.getAdmin()); + projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.SETTLE); project.setApproveStatusSettle(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus()); } else if (project.getApproveStatusFinal() == ApproveStatusEnum.APPROVAL_UNCOMMIT.getApproveStatus()) { - projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin()); + projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.FINAL); project.setApproveStatusFinal(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus()); } else { return ; @@ -860,7 +862,7 @@ public class ProjectService { int projectId = one.getProjectId(); int taskStatus = one.getTaskStatus(); - StatusEnum statusEnum = one.getStatusByProDefId(); + StatusEnum statusEnum = StatusEnum.parseByProcDefId(one.getProcDefId()); String proDefKey = one.getProcDefKey(); //是否回退到发起节点 @@ -893,7 +895,8 @@ public class ProjectService { projectTaskRecordService.saveTaskRecordWithRollback(projectId, one, message, rollbackDesc); //启动流程 - String processInstanceId = projectInstanceService.startProcessBySystem(project, proDefKey, one); + ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofKey(proDefKey); + String processInstanceId = projectInstanceService.startProcessBySystem(project, keyEnum, one); logger.info("rollbackTask startProcessBySystem : {}", processInstanceId); diff --git a/src/main/java/cn/palmte/work/service/ProjectSettleService.java b/src/main/java/cn/palmte/work/service/ProjectSettleService.java index eb373d4..099c30a 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSettleService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSettleService.java @@ -1,8 +1,8 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.model.*; -import cn.palmte.work.utils.InterfaceUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -54,7 +54,7 @@ public class ProjectSettleService { projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING, project.getOtherName()); //发起结算流程 - projectInstanceService.startSettleProcessInstance(project, InterfaceUtil.getAdmin()); + projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.SETTLE); } diff --git a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java index d7acec6..847de8d 100644 --- a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java +++ b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java @@ -1,7 +1,9 @@ package cn.palmte.work.service; import cn.palmte.work.bean.StatusEnum; -import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; +import cn.palmte.work.config.activiti.ActProjectTypeEnum; +import cn.palmte.work.config.activiti.ActTaskIndexEnum; import cn.palmte.work.model.Project; import cn.palmte.work.model.ProjectTaskRecord; import cn.palmte.work.model.ProjectTaskRecordRepository; @@ -61,7 +63,7 @@ public class ProjectTaskRecordService { record.setTaskStatus(ProjectTaskRecord.STATUS_ROLLBACK); record.setAssigneeId(InterfaceUtil.getAdminId() + ""); record.setAssigneeName(InterfaceUtil.getAdmin().getRealName()); - record.setTaskIndex(ActConstant.TASK_INDEX_OTHER); + record.setTaskIndex(ActTaskIndexEnum.COMMON.getIndex()); record.setCreateTime(new Date()); record.setRollbackRecordId(oldRecord.getId()); record.setRollbackDesc(rollbackDesc); @@ -84,13 +86,13 @@ public class ProjectTaskRecordService { record.setProcDefId(procDefId); record.setProcInsId(task.getProcessInstanceId()); - int projectType = ActConstant.PROJECT_TYPE_FOURCAL; - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SALE_CONTRACT)) { - projectType = ActConstant.PROJECT_TYPE_SALE_CONTRACT; - } else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE)) { - projectType = ActConstant.PROJECT_TYPE_BUSINESS_PURCHASE; + ActProjectTypeEnum projectTypeEnum = ActProjectTypeEnum.FOURCAL; + if (procDefId.startsWith(ActProcessKeyEnum.SALE_CONTRACT.getKey())) { + projectTypeEnum = ActProjectTypeEnum.SALE_CONTRACT; + } else if (procDefId.startsWith(ActProcessKeyEnum.BUSINESS_PURCHASE.getKey())) { + projectTypeEnum = ActProjectTypeEnum.BUSINESS_PURCHASE; } - record.setProjectType(projectType); + record.setProjectType(projectTypeEnum.getType()); record.setTaskDefKey(task.getTaskDefinitionKey()); record.setTaskName(task.getName()); record.setTaskComment(comment); @@ -102,10 +104,26 @@ public class ProjectTaskRecordService { return record; } - /** * 根据项目id查询审批任务记录 * + * @param projectId + * @param typeEnum + * @return + */ + public List listV2(int projectId, ActProjectTypeEnum typeEnum) { + String select = "tr.*, su.role_name"; + QueryHelper queryHelper = new QueryHelper(select, " project_task_record tr LEFT JOIN sys_user su on su.id=tr.assignee_id "); + queryHelper.addCondition("tr.project_id=?", projectId); + queryHelper.addCondition("tr.project_type=?", typeEnum.getType()); + queryHelper.addOrderProperty("tr.create_time", true); + return pagination.find(queryHelper.getSql(), ProjectTaskRecord.class); + } + + + /** + * 根据项目id查询审批任务记录 四算项目使用 + * * @param project * @return */ @@ -113,6 +131,7 @@ public class ProjectTaskRecordService { String select = "tr.*, su.role_name"; QueryHelper queryHelper = new QueryHelper(select, " project_task_record tr LEFT JOIN sys_user su on su.id=tr.assignee_id "); queryHelper.addCondition("tr.project_id=?", project.getId()); + queryHelper.addCondition("tr.project_type=?", ActProjectTypeEnum.FOURCAL.getType()); queryHelper.addOrderProperty("tr.create_time", true); List projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class); @@ -121,7 +140,7 @@ public class ProjectTaskRecordService { //预算流程可能有多个 找到最新的一个预算流程 最新的预算流程才能退回 String lastProcInsId = ""; Optional lastProcInsIdOp = projectTaskRecords.stream() - .filter(r -> r.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) + .filter(r -> r.getProcDefId().startsWith(ActProcessKeyEnum.BUDGET.getKey())) .map(ProjectTaskRecord::getProcInsId).max(Comparator.naturalOrder()); if (lastProcInsIdOp.isPresent()) { lastProcInsId = lastProcInsIdOp.get(); @@ -138,7 +157,7 @@ public class ProjectTaskRecordService { //只能往当前任务之前退回 - StatusEnum statusEnum = record.getStatusByProDefId(); + StatusEnum statusEnum = StatusEnum.parseByProcDefId(record.getProcDefId()); if (statusEnum.getStatus() > projectStatus) { //大于当前状态 不能退回 continue; @@ -151,7 +170,7 @@ public class ProjectTaskRecordService { } } - if (!record.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { + if (!record.getProcDefId().startsWith(ActProcessKeyEnum.BUDGET.getKey())) { //非预算流程全部支持退回 record.setCanRollback(true); } else { diff --git a/src/main/java/cn/palmte/work/utils/ActUtil.java b/src/main/java/cn/palmte/work/utils/ActUtil.java index fe71a1f..6861e0c 100644 --- a/src/main/java/cn/palmte/work/utils/ActUtil.java +++ b/src/main/java/cn/palmte/work/utils/ActUtil.java @@ -1,6 +1,7 @@ package cn.palmte.work.utils; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.config.activiti.ActProcessKeyEnum; import cn.palmte.work.config.activiti.DeleteTaskCommand; import cn.palmte.work.config.activiti.JumpCommand; import cn.palmte.work.model.ProjectInstanceRelation; @@ -54,15 +55,15 @@ public class ActUtil { public boolean isFourcalProcess(String procDefId) { - return procDefId.startsWith(ActConstant.PROCESS_DEFKEY_ESTIMATE) - || procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET) - || procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE) - || procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL); + return procDefId.startsWith(ActProcessKeyEnum.ESTIMATE.getKey()) + || procDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey()) + || procDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey()) + || procDefId.startsWith(ActProcessKeyEnum.FINAL.getKey()); } public boolean isNewProcess(String procDefId) { - return procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SALE_CONTRACT) - || procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE); + return procDefId.startsWith(ActProcessKeyEnum.SALE_CONTRACT.getKey()) + || procDefId.startsWith(ActProcessKeyEnum.BUSINESS_PURCHASE.getKey()); } /** @@ -75,13 +76,13 @@ public class ActUtil { */ public boolean targetBigThanCurrent(String procDefId, String targetTaskName, String currentTaskName) { String taskNames = ActConstant.PROCESS_TASKS_ESTIMATE; - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { + if (procDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey())) { taskNames = ActConstant.PROCESS_TASKS_BUDGET; } - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { + if (procDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey())) { taskNames = ActConstant.PROCESS_TASKS_SETTLE; } - if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { + if (procDefId.startsWith(ActProcessKeyEnum.FINAL.getKey())) { taskNames = ActConstant.PROCESS_TASKS_FINAL; }