From 4ecc9055564fe92091c35de49158713378e00e86 Mon Sep 17 00:00:00 2001 From: hongchao <3228015117@qq.com> Date: Sun, 31 Aug 2025 20:55:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E8=BD=AC=E5=AE=A1=E6=A0=B8=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB=E5=8A=9F=E8=83=BD=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/domain/dto/SysUserRoleVo.java | 2 + .../material/event/ApplyEventListener.java | 42 ++++++--- .../ma/service/impl/MachineServiceImpl.java | 3 +- .../warning/ScheduledCheckWarning.java | 4 +- .../work/mapper/DirectAuditMapper.java | 3 + .../work/mapper/SysWorkflowConfigMapper.java | 2 + .../work/mapper/SysWorkflowRecordMapper.java | 3 + .../work/service/SysWorkflowNodeService.java | 2 + .../work/service/impl/DirectAuditImpl.java | 2 +- .../impl/SysWorkflowNodeServiceImpl.java | 85 ++++++++++++++++++- .../material/basic/BmUserRoleMapper.xml | 5 +- .../mapper/material/ma/MachineMapper.xml | 2 +- .../repair/RepairAuditDetailsMapper.xml | 4 +- .../material/work/DirectAuditMapper.xml | 8 ++ .../material/work/SysWorkflowConfigMapper.xml | 20 +++-- .../material/work/SysWorkflowRecordMapper.xml | 6 +- 16 files changed, 162 insertions(+), 31 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/SysUserRoleVo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/SysUserRoleVo.java index ff8e52ff..9ac1bc2f 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/SysUserRoleVo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/dto/SysUserRoleVo.java @@ -22,4 +22,6 @@ public class SysUserRoleVo extends SysUserRole { private String roleName; private Long deptId; + + private String ancestors; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java index 2fbc252c..478f5d7b 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java @@ -51,10 +51,31 @@ public class ApplyEventListener { if (sysWorkflowTypeList.isEmpty()) { throw new ServiceException("新增任务审批记录失败,请创建审核流程"); } + SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord(); if (sysWorkflowTypeList.size() == 1) { // 如果该任务类型配置了一个审批流,则直接使用 sysWorkflowType = sysWorkflowTypeList.get(0); + sysWorkflowRecord = new SysWorkflowRecord(); + sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId()); + sysWorkflowRecord.setTaskId(event.getTaskId()); + sysWorkflowRecord.setTaskType(event.getTaskType()); + sysWorkflowRecord.setTaskCode(event.getTaskCode()); + //创建审批任务 + int count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord); + if (0 == count) { + throw new RuntimeException("创建审批任务失败!"); + } + } else { + sysWorkflowRecord = new SysWorkflowRecord(); + sysWorkflowRecord.setTaskId(event.getTaskId()); + sysWorkflowRecord.setTaskType(event.getTaskType()); + sysWorkflowRecord.setTaskCode(event.getTaskCode()); + //创建审批任务 + int count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord); + if (0 == count) { + throw new RuntimeException("创建审批任务失败!"); + } // 如果该任务类型配置了多个审批流,则根据任务信息判断使用 if (event.getTaskType() == TmTaskTypeEnum.TM_TASK_DIRECT.getTaskTypeId()) { // 直转审批任务,则根据转出和转入的部门判断,同一部门使用无需接收审批流,不同部门则使用需要接收审批流 @@ -71,7 +92,12 @@ public class ApplyEventListener { // 如果有转出转入信息,则根据转出转入部门判断使用 DirectApplyInfo directApplyInfo = directAuditMapperList.get(0); // 如果转入转出的部门ID相同,则使用不需要接收审批流 - if (directApplyInfo.getBackUnitId().equals(directApplyInfo.getLeaseUnitId())) { + + //查询是否是同一实施单位 + int proIdBack = directAuditMapper.getImpUnit(directApplyInfo.getBackProId()); + int proIdLease = directAuditMapper.getImpUnit(directApplyInfo.getLeaseProId()); + + if (proIdBack == proIdLease) { sysWorkflowTypeList.removeIf(removeIfSysWorkflowType -> removeIfSysWorkflowType.getTypeName().contains("需要接收审批")); } else { // 如果转入转出的部门ID不同,则使用需要接收审批流 @@ -83,18 +109,12 @@ public class ApplyEventListener { // 除了直转任务外,其他任务类型如果有配置多个审批流,先默认选第一个 sysWorkflowType = sysWorkflowTypeList.get(0); } + sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId()); + //插入任务审批类型 + int countTwo = sysWorkflowRecordMapper.updateSysWorkflowType(sysWorkflowRecord); + } - SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord(); - sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId()); - sysWorkflowRecord.setTaskId(event.getTaskId()); - sysWorkflowRecord.setTaskType(event.getTaskType()); - sysWorkflowRecord.setTaskCode(event.getTaskCode()); - //创建审批任务 - int count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord); - if (0 == count) { - throw new RuntimeException("创建审批任务失败!"); - } // 获取新创建的ID int newId = sysWorkflowRecord.getId(); //获取当前审核流下的节点 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/MachineServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/MachineServiceImpl.java index d974f1af..b1b87dfe 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/MachineServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/MachineServiceImpl.java @@ -372,9 +372,10 @@ public class MachineServiceImpl implements IMachineService baseInfo.setLeaseTime(null); baseInfo.setLeaseUnit(null); baseInfo.setLeaseProject(null); + }else{ LeaseApplyInfo leaseDetail = machineMapper.getLeaseUnitAndProject(leaseInfo); - baseInfo.setLeaseTime(String.valueOf(leaseDetail.getLeaseTime())); + baseInfo.setLeaseTime(String.valueOf(leaseInfo.getLeaseTime())); baseInfo.setLeaseUnit(leaseDetail.getUnitName()); baseInfo.setLeaseProject(leaseDetail.getProjectName()); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java index 530fe54b..4de4f4db 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java @@ -43,7 +43,7 @@ public class ScheduledCheckWarning { /** * 定时任务执行频率,每周三/五天上午9点执行一次 */ - private String cronExpression = "0 0 9 ? * WED,SAT"; + private String cronExpression = "0 0 9 ? * WED,FRI"; /** @@ -71,7 +71,7 @@ public class ScheduledCheckWarning { private String getCronFromDatabase() { // 这里假设从数据库中获取 cron 表达式 //return "0 */1 * * * ?"; - return "0 0 9 ? * WED,SAT"; + return "0 0 9 ? * WED,FRI"; } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java index 52b499c0..3a1cd844 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java @@ -7,6 +7,7 @@ import com.bonus.material.ma.domain.DirectApplyInfo; import com.bonus.material.ma.domain.Type; import com.bonus.material.work.domain.DirectAudit; import com.bonus.material.work.domain.SysWorkflowRecord; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -27,4 +28,6 @@ public interface DirectAuditMapper { void updateWorkflowRecord(DirectAudit fr); void updateDirectAudit(DirectApplyInfo directApplyInfo); + + int getImpUnit(@Param("proId") String backProId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowConfigMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowConfigMapper.java index 62d4fc68..349d3559 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowConfigMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowConfigMapper.java @@ -23,4 +23,6 @@ public interface SysWorkflowConfigMapper { String selectRolesByNodeId(Integer nodeId); SysWorkflowConfig selectConfigValueInfoByNodeId(Integer nodeId); + + int getImpUnit(String backProId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java index 66703c8f..d43daee2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java @@ -2,6 +2,7 @@ package com.bonus.material.work.mapper; import com.bonus.material.work.domain.SysWorkflowRecord; import com.bonus.material.work.domain.SysWorkflowRecordHistory; +import com.bonus.material.work.domain.SysWorkflowType; import com.bonus.material.work.domain.dto.SysWorkflowAuditDto; import org.apache.ibatis.annotations.Param; @@ -28,4 +29,6 @@ public interface SysWorkflowRecordMapper { List getAuditUserByTaskId(SysWorkflowRecordHistory sysWorkflowRecordHistory); List getAuditUserByRecordId(@Param("recordId") Integer recordId); + + int updateSysWorkflowType(SysWorkflowRecord sysWorkflowRecord); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowNodeService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowNodeService.java index 16821376..be68dfd2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowNodeService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowNodeService.java @@ -1,6 +1,7 @@ package com.bonus.material.work.service; +import com.bonus.material.ma.domain.DirectApplyInfo; import com.bonus.material.work.domain.SysWorkflowNode; import java.util.List; @@ -18,6 +19,7 @@ public interface SysWorkflowNodeService { List listByTaskId(SysWorkflowNode sysWorkflowNode); void copeNodeConfigPersonValuesByNode(SysWorkflowNode forSysWorkflowNode); + void copeNodeConfigPersonValuesByNodeTwo(SysWorkflowNode forSysWorkflowNode, DirectApplyInfo directApplyInfo); Map listByProId(SysWorkflowNode sysWorkflowNode); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/DirectAuditImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/DirectAuditImpl.java index de38e671..09dc7824 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/DirectAuditImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/DirectAuditImpl.java @@ -74,7 +74,7 @@ public class DirectAuditImpl implements IDirectAuditService { // 先根据下个节点的ID去查询下个节点信息 SysWorkflowNode nextWorkflowInfo = sysWorkflowNodeMapper.selectSysWorkflowNodeById(sysWorkflowRecordHistoryList.get(0).getNextNodeId()); // 再根据下个节点信息查询到配置值 - sysWorkflowNodeService.copeNodeConfigPersonValuesByNode(nextWorkflowInfo); + sysWorkflowNodeService.copeNodeConfigPersonValuesByNodeTwo(nextWorkflowInfo,directApplyInfoNew); directApplyInfoNew.setNodeId(sysWorkflowRecordHistoryList.get(0).getNextNodeId()); if (nextWorkflowInfo != null && nextWorkflowInfo.getConfigValues() != null) { directApplyInfoNew.setConfigValue(nextWorkflowInfo.getConfigValues()); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java index a3acf991..e2b5001c 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java @@ -5,6 +5,7 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.basic.domain.dto.SysUserRoleVo; import com.bonus.material.basic.mapper.BmUserRoleMapper; +import com.bonus.material.ma.domain.DirectApplyInfo; import com.bonus.material.work.domain.SysWorkflowConfig; import com.bonus.material.work.domain.SysWorkflowNode; import com.bonus.material.work.domain.SysWorkflowRecordHistory; @@ -16,10 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -223,6 +221,85 @@ public class SysWorkflowNodeServiceImpl implements SysWorkflowNodeService { } } + @Override + public void copeNodeConfigPersonValuesByNodeTwo(SysWorkflowNode forSysWorkflowNode, DirectApplyInfo directApplyInfo) { + if (forSysWorkflowNode == null) { + System.err.println("传入的节点信息为空!"); + return; + } + try { + // 判断配置的类型 + if (forSysWorkflowNode.getConfigType() == null || forSysWorkflowNode.getConfigType() == 0) { + // 如果配置的是角色,那么要根据角色id去查询有哪些用户 + String roleIds = forSysWorkflowNode.getRoleIds(); + // 如果参数没有,那么就从数据库中查询 + if (roleIds == null || roleIds.isEmpty()) { + System.out.println("节点配置角色为空!去再执行数据库查询"); + roleIds = sysWorkflowConfigMapper.selectRolesByNodeId(forSysWorkflowNode.getNodeId()); + } + if (roleIds != null && !roleIds.isEmpty()) { + StringBuilder roleConfigValues = new StringBuilder(); + String[] roleIdArray = roleIds.split(","); + for (String forRoleId : roleIdArray) { + List userList = bmUserRoleMapper.getUserRoleListByDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId(), Long.valueOf(forRoleId)); + if(forSysWorkflowNode.getNodeName().contains("接收方")){ + int proIdLease = sysWorkflowConfigMapper.getImpUnit(directApplyInfo.getLeaseProId()); + // 使用 Iterator 迭代器遍历,支持安全删除元素 + Iterator iterator = userList.iterator(); + while (iterator.hasNext()) { + SysUserRoleVo user = iterator.next(); + // 条件1:部门ID等于proIdBack → 保留(跳过删除) + if (proIdLease == user.getDeptId()) { + continue; + } + // 条件2:祖先ID列表包含proIdBack → 保留(跳过删除) + String ancestors = user.getAncestors(); + if (ancestors != null && Arrays.asList(ancestors.split(",")).contains(String.valueOf(proIdLease))) { + continue; + } + // 若以上条件均不满足 → 剔除该条数据 + iterator.remove(); + } + }else{ + int proIdBack = sysWorkflowConfigMapper.getImpUnit(directApplyInfo.getBackProId()); + // 使用 Iterator 迭代器遍历,支持安全删除元素 + Iterator iterator = userList.iterator(); + while (iterator.hasNext()) { + SysUserRoleVo user = iterator.next(); + // 条件1:部门ID等于proIdBack → 保留(跳过删除) + if (proIdBack == user.getDeptId()) { + continue; + } + // 条件2:祖先ID列表包含proIdBack → 保留(跳过删除) + String ancestors = user.getAncestors(); + if (ancestors != null && Arrays.asList(ancestors.split(",")).contains(String.valueOf(proIdBack))) { + continue; + } + // 若以上条件均不满足 → 剔除该条数据 + iterator.remove(); + } + } + + if (!userList.isEmpty()) { + // 如果不是第一次拼接,先添加逗号分隔 + if (roleConfigValues.length() > 0) { + roleConfigValues.append(","); + } + roleConfigValues.append(userList.stream().map(user -> String.valueOf(user.getUserId())).collect(Collectors.joining(","))); + } + } + forSysWorkflowNode.setConfigValues(roleConfigValues.toString()); + } else { + System.err.println("节点配置角色为空!请检查参数"); + } + } else { + System.err.println("节点配置类型为:" + forSysWorkflowNode.getConfigType() + ",方法不进行处理!请检查参数"); + } + } catch (NumberFormatException e) { + System.err.println("执行审核流配置角色处理方法时发生异常:" + e.getMessage()); + } + } + @Override public Map listByProId(SysWorkflowNode sysWorkflowNode) { Long userId = SecurityUtils.getLoginUser().getUserid(); diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUserRoleMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUserRoleMapper.xml index 61d81eb9..51fce469 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUserRoleMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUserRoleMapper.xml @@ -6,11 +6,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + update sys_workflow_record set workflow_status = #{flowStatus} where id = #{id} diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowConfigMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowConfigMapper.xml index fd794bc1..63825854 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowConfigMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowConfigMapper.xml @@ -40,20 +40,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml index 2628a031..abbad509 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml @@ -28,9 +28,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and task_type = #{taskType} + + update sys_workflow_record set workflow_id = #{workflowId} where id = #{id} + - - select a.task_id as taskId, a.task_type as taskType,