chenshudong месяцев назад: 2
Родитель
Сommit
3a41aa9776

+ 1 - 1
airport-check/src/main/java/com/sundot/airport/check/handler/CheckCorrectionApprovalHandler.java

@@ -43,7 +43,7 @@ public class CheckCorrectionApprovalHandler implements BusinessApprovalHandler {
43
     public boolean supports(String businessType) {
43
     public boolean supports(String businessType) {
44
         return "PERSONAL_CHECK".equals(businessType)
44
         return "PERSONAL_CHECK".equals(businessType)
45
                 || "GROUP_CHECK".equals(businessType)
45
                 || "GROUP_CHECK".equals(businessType)
46
-                || "SECTION_CHECK".equals(businessType)
46
+                || "DEPARTMENT_CHECK".equals(businessType)
47
                 || "BRIGADE_CHECK".equals(businessType);
47
                 || "BRIGADE_CHECK".equals(businessType);
48
     }
48
     }
49
 
49
 

+ 1 - 1
airport-check/src/main/java/com/sundot/airport/check/service/impl/CheckCorrectionServiceImpl.java

@@ -380,7 +380,7 @@ public class CheckCorrectionServiceImpl extends ServiceImpl<CheckCorrectionMappe
380
         } else if (StringUtils.equals(CheckLevelEnum.DEPARTMENT_LEVEL.getCode(), checkCorrection.getCheckedLevel())) {
380
         } else if (StringUtils.equals(CheckLevelEnum.DEPARTMENT_LEVEL.getCode(), checkCorrection.getCheckedLevel())) {
381
             Map<String, Object> requestData = new HashMap<>();
381
             Map<String, Object> requestData = new HashMap<>();
382
             requestData.put("businessId", checkCorrection.getId());//业务ID
382
             requestData.put("businessId", checkCorrection.getId());//业务ID
383
-            requestData.put("checkType", "SECURITY_BREACH");//检查类型
383
+            requestData.put("checkType", CheckLevelEnum.DEPARTMENT_LEVEL.getCode());//检查类型
384
             requestData.put("severity", "");//严重程度
384
             requestData.put("severity", "");//严重程度
385
             requestData.put("location", checkCorrection.getChannelName());//位置
385
             requestData.put("location", checkCorrection.getChannelName());//位置
386
             requestData.put("sectionLeaderId", checkCorrection.getResponsibleUserId());//责任人
386
             requestData.put("sectionLeaderId", checkCorrection.getResponsibleUserId());//责任人

+ 79 - 7
airport-system/src/main/java/com/sundot/airport/system/service/approval/impl/ApprovalEngineServiceImpl.java

@@ -9,8 +9,11 @@ import java.util.stream.Collectors;
9
 import java.util.regex.Pattern;
9
 import java.util.regex.Pattern;
10
 import java.util.regex.Matcher;
10
 import java.util.regex.Matcher;
11
 
11
 
12
+import cn.hutool.core.collection.CollUtil;
12
 import cn.hutool.core.util.ObjectUtil;
13
 import cn.hutool.core.util.ObjectUtil;
14
+import com.sundot.airport.common.core.domain.entity.SysDept;
13
 import com.sundot.airport.common.enums.RoleTypeEnum;
15
 import com.sundot.airport.common.enums.RoleTypeEnum;
16
+import com.sundot.airport.system.service.ISysDeptService;
14
 import org.slf4j.Logger;
17
 import org.slf4j.Logger;
15
 import org.slf4j.LoggerFactory;
18
 import org.slf4j.LoggerFactory;
16
 import com.sundot.airport.common.utils.DateUtils;
19
 import com.sundot.airport.common.utils.DateUtils;
@@ -23,7 +26,6 @@ import org.springframework.stereotype.Service;
23
 import org.springframework.transaction.annotation.Transactional;
26
 import org.springframework.transaction.annotation.Transactional;
24
 import com.fasterxml.jackson.databind.ObjectMapper;
27
 import com.fasterxml.jackson.databind.ObjectMapper;
25
 import com.sundot.airport.system.domain.approval.*;
28
 import com.sundot.airport.system.domain.approval.*;
26
-import com.sundot.airport.system.domain.approval.constants.ApprovalConstants;
27
 import com.sundot.airport.system.mapper.approval.*;
29
 import com.sundot.airport.system.mapper.approval.*;
28
 import com.sundot.airport.system.service.approval.IApprovalEngineService;
30
 import com.sundot.airport.system.service.approval.IApprovalEngineService;
29
 import com.sundot.airport.common.core.domain.entity.SysUser;
31
 import com.sundot.airport.common.core.domain.entity.SysUser;
@@ -68,6 +70,10 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
68
 
70
 
69
     private ObjectMapper objectMapper = new ObjectMapper();
71
     private ObjectMapper objectMapper = new ObjectMapper();
70
 
72
 
73
+    @Autowired
74
+    private ISysDeptService sysDeptService;
75
+
76
+
71
     /**
77
     /**
72
      * 启动审批流程
78
      * 启动审批流程
73
      */
79
      */
@@ -204,7 +210,10 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
204
         // 5. 查找任务的原始创建者或更新者
210
         // 5. 查找任务的原始创建者或更新者
205
         Long originalUserId = approvalUserService.getTaskCreatorOrUpdaterByTaskId(taskId);
211
         Long originalUserId = approvalUserService.getTaskCreatorOrUpdaterByTaskId(taskId);
206
 
212
 
207
-        if (originalUserId != null) {
213
+        if (isSectionCheckWorkflow(instance) && ("DEPARTMENT_LEVEL_LEADER_XINGZHENG".equals(currentNode.getNodeCode()) || "DEPARTMENT_LEVEL_LEADER_JINGLI_ONE".equals(currentNode.getNodeCode()) || "DEPARTMENT_LEVEL_LEADER_JINGLI_TWO".equals(currentNode.getNodeCode()))) {
214
+            currentNode.setSortOrder(1);
215
+            moveToNextNode(instance, currentNode, operatorId, operatorName, comment, null, task);
216
+        } else if (originalUserId != null) {
208
             // 5.1. 不结束流程,而是创建回流任务给原始操作者
217
             // 5.1. 不结束流程,而是创建回流任务给原始操作者
209
             instance.setStatus("RUNNING"); // 保持运行状态
218
             instance.setStatus("RUNNING"); // 保持运行状态
210
             instance.setUpdateBy(SecurityUtils.getUsername());
219
             instance.setUpdateBy(SecurityUtils.getUsername());
@@ -414,9 +423,9 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
414
     public ApprovalInstance startSectionLevelProcess(String businessType, Long businessId, String title,
423
     public ApprovalInstance startSectionLevelProcess(String businessType, Long businessId, String title,
415
                                                      Long submitterId, String submitterName, Long sectionLeaderId,
424
                                                      Long submitterId, String submitterName, Long sectionLeaderId,
416
                                                      Map<String, Object> formData, Map<String, Object> businessData) {
425
                                                      Map<String, Object> formData, Map<String, Object> businessData) {
417
-        ApprovalWorkflowDefinition workflow = workflowDefinitionMapper.selectApprovalWorkflowDefinitionByCode("SECTION_LEVEL");
426
+        ApprovalWorkflowDefinition workflow = workflowDefinitionMapper.selectApprovalWorkflowDefinitionByCode("DEPARTMENT_LEVEL");
418
         if (workflow == null) {
427
         if (workflow == null) {
419
-            throw new RuntimeException("流程定义不存在: SECTION_LEVEL");
428
+            throw new RuntimeException("流程定义不存在: DEPARTMENT_LEVEL");
420
         }
429
         }
421
 
430
 
422
         ApprovalInstance instance = new ApprovalInstance();
431
         ApprovalInstance instance = new ApprovalInstance();
@@ -753,7 +762,11 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
753
                 }
762
                 }
754
                 // 科级检查流程的特殊处理
763
                 // 科级检查流程的特殊处理
755
                 else if (isSectionCheckWorkflow(instance)) {
764
                 else if (isSectionCheckWorkflow(instance)) {
756
-                    handleSectionCheckNodeAssignment(instance, nextNode, formData);
765
+                    boolean isNext = handleSectionCheckNodeAssignment(instance, nextNode, formData);
766
+                    if (isNext) {
767
+                        currentNode.setSortOrder(nextNode.getSortOrder() + 1);
768
+                        moveToNextNode(instance, currentNode, operatorId, operatorName, comment, formData, currentTask);
769
+                    }
757
                 }
770
                 }
758
                 // 检查下一节点是否需要动态分配
771
                 // 检查下一节点是否需要动态分配
759
                 else if (isSeizureReportWorkflow(instance) && "SECTION_KEZHANG".equals(nextNode.getApproverType())) {
772
                 else if (isSeizureReportWorkflow(instance) && "SECTION_KEZHANG".equals(nextNode.getApproverType())) {
@@ -1154,7 +1167,7 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
1154
      * 检查是否为科级检查流程
1167
      * 检查是否为科级检查流程
1155
      */
1168
      */
1156
     private boolean isSectionCheckWorkflow(ApprovalInstance instance) {
1169
     private boolean isSectionCheckWorkflow(ApprovalInstance instance) {
1157
-        return "SECTION_CHECK".equals(instance.getBusinessType());
1170
+        return "DEPARTMENT_CHECK".equals(instance.getBusinessType());
1158
     }
1171
     }
1159
 
1172
 
1160
     /**
1173
     /**
@@ -1182,7 +1195,8 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
1182
     /**
1195
     /**
1183
      * 处理科级检查流程的节点分配
1196
      * 处理科级检查流程的节点分配
1184
      */
1197
      */
1185
-    private void handleSectionCheckNodeAssignment(ApprovalInstance instance, ApprovalNodeDefinition nextNode, Map<String, Object> formData) {
1198
+    private boolean handleSectionCheckNodeAssignment(ApprovalInstance instance, ApprovalNodeDefinition nextNode, Map<String, Object> formData) {
1199
+        boolean isNext = false;
1186
         String nodeCode = nextNode.getNodeCode();
1200
         String nodeCode = nextNode.getNodeCode();
1187
 
1201
 
1188
         switch (nodeCode) {
1202
         switch (nodeCode) {
@@ -1203,11 +1217,35 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
1203
                 // 责任人审批后 → 发起人审批
1217
                 // 责任人审批后 → 发起人审批
1204
                 createTaskForInitiatorFinalReview(instance, nextNode, formData);
1218
                 createTaskForInitiatorFinalReview(instance, nextNode, formData);
1205
                 break;
1219
                 break;
1220
+            case "DEPARTMENT_LEVEL_LEADER_KEZHANG":
1221
+                // 开始 → 责任人(主管)审批
1222
+                createTaskForResponsiblePerson(instance, nextNode, formData);
1223
+                break;
1224
+            case "DEPARTMENT_LEVEL_LEADER_XINGZHENG":
1225
+                // 责任人(主管)审批 → 发起人(大队行政)审批
1226
+                createTaskForInitiator(instance, nextNode, formData);
1227
+                break;
1228
+            case "DEPARTMENT_LEVEL_LEADER_JINGLI_ONE":
1229
+                // 大队行政审批 → 大队经理1审批
1230
+                createTaskForDept(instance, nextNode, formData);
1231
+                break;
1232
+            case "DEPARTMENT_LEVEL_LEADER_JINGLI_TWO":
1233
+                // 发起人(大队行政)审批 → 大队经理1审批
1234
+                Long deptId = extractTargetDeptIdFromBusinessData(instance.getBusinessData());
1235
+                SysDept sysDept = sysDeptService.selectDeptById(deptId);
1236
+                List<SysUser> sysUserList = sysUserMapper.selectUserByDeptIdAndRoleKeyList(sysDept.getParentId(), Arrays.asList(RoleTypeEnum.jingli.getCode()));
1237
+                if (CollUtil.isNotEmpty(sysUserList) && sysUserList.size() > 1) {
1238
+                    createTaskForDeptTwo(instance, nextNode, formData);
1239
+                } else {
1240
+                    isNext = true;
1241
+                }
1242
+                break;
1206
             default:
1243
             default:
1207
                 // 使用默认分配逻辑
1244
                 // 使用默认分配逻辑
1208
                 createTasksForNode(instance, nextNode, formData, null);
1245
                 createTasksForNode(instance, nextNode, formData, null);
1209
                 break;
1246
                 break;
1210
         }
1247
         }
1248
+        return isNext;
1211
     }
1249
     }
1212
 
1250
 
1213
     /**
1251
     /**
@@ -1772,4 +1810,38 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService {
1772
             throw new RuntimeException("创建违禁品审批任务失败:" + e.getMessage(), e);
1810
             throw new RuntimeException("创建违禁品审批任务失败:" + e.getMessage(), e);
1773
         }
1811
         }
1774
     }
1812
     }
1813
+
1814
+    /**
1815
+     * 为大队经理1创建审批任务
1816
+     */
1817
+    private void createTaskForDept(ApprovalInstance instance, ApprovalNodeDefinition node, Map<String, Object> formData) {
1818
+        try {
1819
+            Long deptId = extractTargetDeptIdFromBusinessData(instance.getBusinessData());
1820
+            SysDept sysDept = sysDeptService.selectDeptById(deptId);
1821
+            List<SysUser> sysUserList = sysUserMapper.selectUserByDeptIdAndRoleKeyList(sysDept.getParentId(), Arrays.asList(RoleTypeEnum.jingli.getCode()));
1822
+            if (CollUtil.isEmpty(sysUserList)) {
1823
+                throw new RuntimeException("未找到部门上级领导,无法分配审批任务");
1824
+            }
1825
+            createSingleApprovalTaskForNode(instance, node, sysUserList.get(0).getUserId(), sysUserList.get(0).getNickName());
1826
+        } catch (Exception e) {
1827
+            logger.error("创建经理1审批任务失败", e);
1828
+        }
1829
+    }
1830
+
1831
+    /**
1832
+     * 为大队经理2创建审批任务
1833
+     */
1834
+    private void createTaskForDeptTwo(ApprovalInstance instance, ApprovalNodeDefinition node, Map<String, Object> formData) {
1835
+        try {
1836
+            Long deptId = extractTargetDeptIdFromBusinessData(instance.getBusinessData());
1837
+            SysDept sysDept = sysDeptService.selectDeptById(deptId);
1838
+            List<SysUser> sysUserList = sysUserMapper.selectUserByDeptIdAndRoleKeyList(sysDept.getParentId(), Arrays.asList(RoleTypeEnum.jingli.getCode()));
1839
+            if (CollUtil.isEmpty(sysUserList) || sysUserList.size() < 2) {
1840
+                throw new RuntimeException("未找到部门上级领导,无法分配审批任务");
1841
+            }
1842
+            createSingleApprovalTaskForNode(instance, node, sysUserList.get(1).getUserId(), sysUserList.get(1).getNickName());
1843
+        } catch (Exception e) {
1844
+            logger.error("创建经理1审批任务失败", e);
1845
+        }
1846
+    }
1775
 }
1847
 }

+ 4 - 6
airport-system/src/main/java/com/sundot/airport/system/service/approval/impl/CheckApprovalServiceImpl.java

@@ -184,9 +184,9 @@ public class CheckApprovalServiceImpl implements ICheckApprovalService {
184
         //Long businessId = System.currentTimeMillis();
184
         //Long businessId = System.currentTimeMillis();
185
 
185
 
186
         Map<String, Object> params = new HashMap<>();
186
         Map<String, Object> params = new HashMap<>();
187
-        params.put("businessType", "SECTION_CHECK");
187
+        params.put("businessType", "DEPARTMENT_CHECK");
188
         params.put("businessId", businessId);
188
         params.put("businessId", businessId);
189
-        params.put("title", "级检查");
189
+        params.put("title", "被检查级别为主管级检查");
190
         params.put("checkType", checkType);
190
         params.put("checkType", checkType);
191
         params.put("severity", severity);
191
         params.put("severity", severity);
192
         params.put("targetDeptId", targetDeptId);
192
         params.put("targetDeptId", targetDeptId);
@@ -199,9 +199,7 @@ public class CheckApprovalServiceImpl implements ICheckApprovalService {
199
         Map<String, Object> businessData = new HashMap<>();
199
         Map<String, Object> businessData = new HashMap<>();
200
         businessData.put("checkType", checkType);
200
         businessData.put("checkType", checkType);
201
         businessData.put("severity", severity);
201
         businessData.put("severity", severity);
202
-        if (targetDeptId != null) {
203
-            businessData.put("targetDeptId", targetDeptId);
204
-        }
202
+        businessData.put("targetDeptId", targetDeptId);
205
         businessData.put("sectionLeaderId", sectionLeaderId);
203
         businessData.put("sectionLeaderId", sectionLeaderId);
206
         params.put("businessData", businessData);
204
         params.put("businessData", businessData);
207
 
205
 
@@ -267,7 +265,7 @@ public class CheckApprovalServiceImpl implements ICheckApprovalService {
267
         Map<String, Object> params = new HashMap<>();
265
         Map<String, Object> params = new HashMap<>();
268
         params.put("businessType", "BRIGADE_CHECK");
266
         params.put("businessType", "BRIGADE_CHECK");
269
         params.put("businessId", businessId);
267
         params.put("businessId", businessId);
270
-        params.put("title", "大队级检查");
268
+        params.put("title", "被检查级别为大队级检查");
271
         params.put("checkType", checkType);
269
         params.put("checkType", checkType);
272
         params.put("severity", severity);
270
         params.put("severity", severity);
273
         params.put("targetDeptId", targetDeptId);
271
         params.put("targetDeptId", targetDeptId);