From e874348e2507cb50ec16f9d175a7feaa47afedaa Mon Sep 17 00:00:00 2001 From: pengqiang <1067496116@qq.com> Date: Fri, 9 Sep 2022 14:39:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AA=E8=83=BD=E5=BE=80=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=B9=8B=E5=89=8D=E9=80=80=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../work/config/activiti/ActConstant.java | 32 +++++++++++-------- .../controller/backend/ProjectController.java | 5 +-- .../palmte/work/model/ProjectTaskRecord.java | 12 +++---- .../service/ProjectTaskRecordService.java | 30 +++++++++++++++-- .../java/cn/palmte/work/utils/ActUtil.java | 27 +++++++++++++++- .../templates/admin/project_approve.ftl | 2 +- .../admin/project_task_record_list.ftl | 2 +- 7 files changed, 83 insertions(+), 27 deletions(-) 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 9d66f62..b769d78 100644 --- a/src/main/java/cn/palmte/work/config/activiti/ActConstant.java +++ b/src/main/java/cn/palmte/work/config/activiti/ActConstant.java @@ -5,43 +5,43 @@ public class ActConstant { /** * 流程启动用户变量 */ - public static final String START_PROCESS_USERID="startUserId"; + 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 String PROC_INS_ID = "procInsId"; + public static final String PROC_DEF_KEY = "procDefKey"; /** * 结束节点 */ - public static final int TASK_INDEX_END= -1; + public static final int TASK_INDEX_END = -1; /** - * 0-未知或者其他节点 + * 0-未知或者其他节点 */ - public static final int TASK_INDEX_OTHER= 0; + public static final int TASK_INDEX_OTHER = 0; /** * 开始节点 */ - public static final int TASK_INDEX_START= 1; + public static final int TASK_INDEX_START = 1; /** * 发起审批节点 */ - public static final int TASK_INDEX_FIRST_USER_TASK= 2; + public static final int TASK_INDEX_FIRST_USER_TASK = 2; /** * 单实例 或签 */ - public static final int TASK_TYPE_SINGE= 0; + public static final int TASK_TYPE_SINGE = 0; /** * 多实例 会签 */ - public static final int TASK_TYPE_MULTI= 1; + public static final int TASK_TYPE_MULTI = 1; /** @@ -64,18 +64,24 @@ public class ActConstant { * 概算 */ 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_BUDGET = "budget"; /** * 结算 */ - public static final String PROCESS_DEFKEY_SETTLE = "settle"; + public static final String PROCESS_DEFKEY_SETTLE = "settle"; /** * 决算 */ - public static final String PROCESS_DEFKEY_FINAL = "final"; + public static final String PROCESS_DEFKEY_FINAL = "final"; public static final String KEY_PROJECT_ID = "projectId"; public static final String KEY_PROJECT_TYPE = "projectType"; diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 9e63d29..b3bd191 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -727,7 +727,7 @@ public class ProjectController extends BaseController { model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils")); //审核记录 - List list = projectTaskRecordService.list(id); + List list = projectTaskRecordService.list(project); String huiQianFile = ""; if (!list.isEmpty()) { Optional first = list.stream().filter(r -> StrKit.notBlank(r.getFileUrl())).max(Comparator.comparingInt(ProjectTaskRecord::getId)); @@ -794,7 +794,8 @@ public class ProjectController extends BaseController { @RequestMapping("/taskRecords/{projectId}") public String taskRecords(@PathVariable int projectId, Map model) { model.put(PROJECT_ID, projectId); - List list = projectTaskRecordService.list(projectId); + Project project = projectService.getProject(projectId); + List list = projectTaskRecordService.list(project); if (list != null && !list.isEmpty()) { model.put("list", list); } diff --git a/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java b/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java index f78a18e..a818aaa 100644 --- a/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java +++ b/src/main/java/cn/palmte/work/model/ProjectTaskRecord.java @@ -110,9 +110,9 @@ public class ProjectTaskRecord { public StatusEnum getStatusByProDefId() { if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { return StatusEnum.BUDGET_ACCOUNTS; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { return StatusEnum.SETTLE_ACCOUNTS; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { return StatusEnum.FINAL_ACCOUNTS; }else{ return StatusEnum.ESTIMATE_ACCOUNTS; @@ -122,9 +122,9 @@ public class ProjectTaskRecord { public String getProcDefName() { if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { return "预算审批流程"; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { return "结算审批流程"; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { return "决算审批流程"; }else{ return "概算审批流程"; @@ -138,9 +138,9 @@ public class ProjectTaskRecord { public String getProcDefKey() { if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { return ActConstant.PROCESS_DEFKEY_BUDGET; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { return ActConstant.PROCESS_DEFKEY_SETTLE; - }if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { + }else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { return ActConstant.PROCESS_DEFKEY_FINAL; }else{ return ActConstant.PROCESS_DEFKEY_ESTIMATE; diff --git a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java index 815785e..be2660f 100644 --- a/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java +++ b/src/main/java/cn/palmte/work/service/ProjectTaskRecordService.java @@ -1,8 +1,11 @@ package cn.palmte.work.service; +import cn.palmte.work.bean.StatusEnum; import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.model.Project; import cn.palmte.work.model.ProjectTaskRecord; import cn.palmte.work.model.ProjectTaskRecordRepository; +import cn.palmte.work.utils.ActUtil; import cn.palmte.work.utils.InterfaceUtil; import org.activiti.engine.task.Task; import org.slf4j.Logger; @@ -24,6 +27,9 @@ public class ProjectTaskRecordService { @Autowired Pagination pagination; + @Autowired + private ActUtil actUtil; + /** * 保存审批任务记录 @@ -91,13 +97,13 @@ public class ProjectTaskRecordService { /** * 根据项目id查询审批任务记录 * - * @param projectId + * @param project * @return */ - public List list(int projectId) { + public List list(Project project) { 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_id=?", project.getId()); queryHelper.addOrderProperty("tr.create_time", true); List projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class); @@ -112,12 +118,30 @@ public class ProjectTaskRecordService { lastProcInsId = lastProcInsIdOp.get(); } + int projectStatus = project.getStatus(); + Task currentTask = actUtil.getCurrentTask(project.getId()); + for (ProjectTaskRecord record : projectTaskRecords) { if (record.getTaskStatus() == ProjectTaskRecord.STATUS_ROLLBACK) { //已退回记录 不能再退回 continue; } + + //只能往当前任务之前退回 + StatusEnum statusEnum = record.getStatusByProDefId(); + if (statusEnum.getStatus() > projectStatus) { + //大于当前状态 不能退回 + continue; + } else if (statusEnum.getStatus() == projectStatus) { + //都在同一个审批里 判断任务节点顺序 + if (currentTask != null && actUtil.targetBigThanCurrent(record.getProcDefId(), + record.getTaskName(), currentTask.getName())) { + //如果大于当前节点 不能退回 + continue; + } + } + if (!record.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { //非预算流程全部支持退回 record.setCanRollback(true); diff --git a/src/main/java/cn/palmte/work/utils/ActUtil.java b/src/main/java/cn/palmte/work/utils/ActUtil.java index b0bce67..cc5cdcc 100644 --- a/src/main/java/cn/palmte/work/utils/ActUtil.java +++ b/src/main/java/cn/palmte/work/utils/ActUtil.java @@ -52,6 +52,32 @@ public class ActUtil { @Autowired private ProjectInstanceRelationRepository projectInstanceRelationRepository; + /** + * 判断两个节点间顺序 + * + * @param procDefId + * @param targetTaskName + * @param currentTaskName + * @return + */ + public boolean targetBigThanCurrent(String procDefId, String targetTaskName, String currentTaskName) { + String taskNames = ActConstant.PROCESS_TASKS_ESTIMATE; + if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) { + taskNames = ActConstant.PROCESS_TASKS_BUDGET; + } + if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) { + taskNames = ActConstant.PROCESS_TASKS_SETTLE; + } + if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) { + taskNames = ActConstant.PROCESS_TASKS_FINAL; + } + + int currentTaskIndex = taskNames.indexOf(currentTaskName); + int targetTaskIndex = taskNames.indexOf(targetTaskName); + return targetTaskIndex >= currentTaskIndex; + } + + public Task getCurrentTask(int projectId) { try { @@ -103,7 +129,6 @@ public class ActUtil { } - /** * 跳转到指定任务节点 * diff --git a/src/main/resources/templates/admin/project_approve.ftl b/src/main/resources/templates/admin/project_approve.ftl index 1a8095d..e5e8f08 100644 --- a/src/main/resources/templates/admin/project_approve.ftl +++ b/src/main/resources/templates/admin/project_approve.ftl @@ -2228,7 +2228,7 @@
${node.createTime}
-
${node.roleName}-${node.assigneeName}: +
【${node.procDefName}】  ${node.roleName}-${node.assigneeName}: <#if node.taskIndex!=2 && node.taskStatus==2>审核通过 <#if node.taskIndex!=2 && node.taskStatus==3>审核不通过 diff --git a/src/main/resources/templates/admin/project_task_record_list.ftl b/src/main/resources/templates/admin/project_task_record_list.ftl index 829d458..6783b8a 100644 --- a/src/main/resources/templates/admin/project_task_record_list.ftl +++ b/src/main/resources/templates/admin/project_task_record_list.ftl @@ -27,7 +27,7 @@
${node.createTime}
-
${node.roleName}-${node.assigneeName}: +
【${node.procDefName}】  ${node.roleName}-${node.assigneeName}: <#if node.taskIndex!=2 && node.taskStatus==2>审核通过 <#if node.taskIndex!=2 && node.taskStatus==3>审核不通过