From 40bf019f0b348378385ed0a819b5b06e1708d558 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期六, 09 八月 2025 00:19:37 +0800
Subject: [PATCH] 工作流代码

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java    |   24 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java                             |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml                    |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml                     |    2 
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java |  207 +++++++++++----
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java               |    9 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java            |  494 ++++++++++++++++++++++++-------------
 7 files changed, 505 insertions(+), 239 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java
index 02af5d5..8ac42a8 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportAccidentsRegisterServiceImpl.java
@@ -304,15 +304,26 @@
                     values.put("comment", eamReportAccidentsRegisterDto.getCenterDirectorConfirm());
                     values.put("centerDirectorResult", eamReportAccidentsRegisterDto.getCenterDirectorResult());
                     eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getCenterDirectorConfirm());
-                    eamReportAccidentsRegister.setCenterDirector(user.getUsername());
-                    eamReportAccidentsRegister.setCenterDirectorTime(new Date());
-                    eamReportAccidentsRegister.setCenterDirectorResult(eamReportAccidentsRegisterDto.getCenterDirectorResult());
-                    eamReportAccidentsRegister.setCenterDirectorConfirm(eamReportAccidentsRegisterDto.getCenterDirectorConfirm());
                     if ("2".equals(eamReportAccidentsRegisterDto.getCenterDirectorResult())){
-                        //涓績涓讳换鎷掔粷
-                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                        //涓績涓讳换鎷掔粷椹冲洖
+                        userSelectors= sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0019);
+                        if (CollectionUtil.isEmpty(userSelectors)) {
+                            throw new JeecgBootException("璁惧鏈瓨鍦ㄥ尯闀匡紝鏃犳硶杩涘叆椹冲洖澶勭悊锛�");
+                        }else {
+                            userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            values.put("NextAssignee", userApprovalList);
+                            eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REGIONAL_MANAGER.name());
+                            eamReportAccidentsRegister.setDistrict(null);
+                            eamReportAccidentsRegister.setDistrictTime(null);
+                            eamReportAccidentsRegister.setDistrictResult(null);
+                            eamReportAccidentsRegister.setDistrictConfirm(null);
+                        }
                     }else {
                         eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_WORKER.name());
+                        eamReportAccidentsRegister.setCenterDirector(user.getUsername());
+                        eamReportAccidentsRegister.setCenterDirectorTime(new Date());
+                        eamReportAccidentsRegister.setCenterDirectorResult(eamReportAccidentsRegisterDto.getCenterDirectorResult());
+                        eamReportAccidentsRegister.setCenterDirectorConfirm(eamReportAccidentsRegisterDto.getCenterDirectorConfirm());
                     }
                 }
                 break;
@@ -332,33 +343,38 @@
                     values.put("comment", eamReportAccidentsRegisterDto.getRepairConfirmComment());
                     values.put("repairConfirmResult", eamReportAccidentsRegisterDto.getRepairConfirmResult());
                     eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairConfirmComment());
-                    eamReportAccidentsRegister.setRepairConfirm(user.getUsername());
-                    eamReportAccidentsRegister.setRepairConfirmTime(new Date());
-                    eamReportAccidentsRegister.setRepairConfirmResult(eamReportAccidentsRegisterDto.getRepairConfirmResult());
-                    eamReportAccidentsRegister.setRepairConfirmComment(eamReportAccidentsRegisterDto.getRepairConfirmComment());
-                    eamReportAccidentsRegister.setReportStartTime(eamReportAccidentsRegisterDto.getReportStartTime());
-                    eamReportAccidentsRegister.setEquipmentStatus(eamReportAccidentsRegisterDto.getEquipmentStatus());
-                    eamReportAccidentsRegister.setCauseAnalysis(eamReportAccidentsRegisterDto.getCauseAnalysis());
-                    eamReportAccidentsRegister.setInspectionResults(eamReportAccidentsRegisterDto.getInspectionResults());
-                    eamReportAccidentsRegister.setTakeSteps(eamReportAccidentsRegisterDto.getTakeSteps());
-                    eamReportAccidentsRegister.setSuggestionTakeSteps(eamReportAccidentsRegisterDto.getSuggestionTakeSteps());
-                    eamReportAccidentsRegister.setSuggestionTakeStepsTime(eamReportAccidentsRegisterDto.getSuggestionTakeStepsTime());
                     if ("2".equals(eamReportAccidentsRegisterDto.getRepairConfirmResult())){
                         //缁翠慨宸ユ嫆缁�
-                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                        userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0020);
+                        if (CollectionUtil.isEmpty(userSelectors)) {
+                            throw new JeecgBootException("璁惧鏈瓨鍦ㄤ腑蹇冧富浠伙紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                        }else{
+                            userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            values.put("NextAssignee", userApprovalList);
+                            eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_CENTER_MANAGER.name());
+                            eamReportAccidentsRegister.setCenterDirector(null);
+                            eamReportAccidentsRegister.setCenterDirectorTime(null);
+                            eamReportAccidentsRegister.setCenterDirectorResult(null);
+                            eamReportAccidentsRegister.setCenterDirectorConfirm(null);
+                        }
                     }else {
                         eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_TEAM_LEADER.name());
+                        eamReportAccidentsRegister.setRepairConfirm(user.getUsername());
+                        eamReportAccidentsRegister.setRepairConfirmTime(new Date());
+                        eamReportAccidentsRegister.setRepairConfirmResult(eamReportAccidentsRegisterDto.getRepairConfirmResult());
+                        eamReportAccidentsRegister.setRepairConfirmComment(eamReportAccidentsRegisterDto.getRepairConfirmComment());
+                        eamReportAccidentsRegister.setReportStartTime(eamReportAccidentsRegisterDto.getReportStartTime());
+                        eamReportAccidentsRegister.setEquipmentStatus(eamReportAccidentsRegisterDto.getEquipmentStatus());
+                        eamReportAccidentsRegister.setCauseAnalysis(eamReportAccidentsRegisterDto.getCauseAnalysis());
+                        eamReportAccidentsRegister.setInspectionResults(eamReportAccidentsRegisterDto.getInspectionResults());
+                        eamReportAccidentsRegister.setTakeSteps(eamReportAccidentsRegisterDto.getTakeSteps());
+                        eamReportAccidentsRegister.setSuggestionTakeSteps(eamReportAccidentsRegisterDto.getSuggestionTakeSteps());
+                        eamReportAccidentsRegister.setSuggestionTakeStepsTime(eamReportAccidentsRegisterDto.getSuggestionTakeStepsTime());
                     }
                 }
                 break;
             //寰呯淮淇粍闀垮鐞�
             case PENDING_REPAIR_TEAM_LEADER:
-                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013);
-                if (CollectionUtil.isEmpty(userSelectors)) {
-                    throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇尯闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒");
-                }
-                userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                values.put("NextAssignee", userApprovalList);
                 if (StrUtil.isEmpty(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment())){
                     eamReportAccidentsRegisterDto.setRepairGroupLeaderComment("");
                 }
@@ -366,25 +382,44 @@
                 values.put("comment", eamReportAccidentsRegisterDto.getRepairGroupLeaderComment());
                 values.put("repairGroupLeaderResult", eamReportAccidentsRegisterDto.getRepairGroupLeaderResult());
                 eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment());
-                eamReportAccidentsRegister.setRepairGroupLeader(user.getUsername());
-                eamReportAccidentsRegister.setRepairGroupLeaderTime(new Date());
-                eamReportAccidentsRegister.setRepairGroupLeaderResult(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult());
-                eamReportAccidentsRegister.setRepairGroupLeaderComment(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment());
+
                 if ("2".equals(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult())){
                     //缁翠慨缁勯暱鎷掔粷
-                    eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇伐锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                    }else{
+                        userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_WORKER.name());
+                        eamReportAccidentsRegister.setRepairConfirm(null);
+                        eamReportAccidentsRegister.setRepairConfirmTime(null);
+                        eamReportAccidentsRegister.setRepairConfirmResult(null);
+                        eamReportAccidentsRegister.setRepairConfirmComment(null);
+                        eamReportAccidentsRegister.setReportStartTime(null);
+                        eamReportAccidentsRegister.setEquipmentStatus(null);
+                        eamReportAccidentsRegister.setCauseAnalysis(null);
+                        eamReportAccidentsRegister.setInspectionResults(null);
+                        eamReportAccidentsRegister.setTakeSteps(null);
+                        eamReportAccidentsRegister.setSuggestionTakeSteps(null);
+                        eamReportAccidentsRegister.setSuggestionTakeStepsTime(null);
+                    }
                 }else {
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇尯闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒");
+                    }
+                    userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
                     eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_REGIONAL_MANAGER.name());
+                    eamReportAccidentsRegister.setRepairGroupLeader(user.getUsername());
+                    eamReportAccidentsRegister.setRepairGroupLeaderTime(new Date());
+                    eamReportAccidentsRegister.setRepairGroupLeaderResult(eamReportAccidentsRegisterDto.getRepairGroupLeaderResult());
+                    eamReportAccidentsRegister.setRepairGroupLeaderComment(eamReportAccidentsRegisterDto.getRepairGroupLeaderComment());
                 }
                 break;
             //寰呯淮淇尯闀垮鐞�
             case PENDING_REPAIR_REGIONAL_MANAGER:
-                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021);
-                if (CollectionUtil.isEmpty(userSelectors)) {
-                    throw new JeecgBootException("璁惧鏈瓨鍦ㄦ妧鏈礋璐d汉锛屾棤娉曡繘鍏ヤ笅绾у鎵�");
-                }
-                userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                values.put("NextAssignee", userApprovalList);
                 if (StrUtil.isEmpty(eamReportAccidentsRegisterDto.getRepairDistrictComment())){
                     eamReportAccidentsRegisterDto.setRepairDistrictComment("");
                 }
@@ -392,15 +427,32 @@
                 values.put("comment", eamReportAccidentsRegisterDto.getRepairDistrictComment());
                 values.put("repairDistrictResult", eamReportAccidentsRegisterDto.getRepairDistrictResult());
                 eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getRepairDistrictComment());
-                eamReportAccidentsRegister.setRepairDistrict(user.getUsername());
-                eamReportAccidentsRegister.setRepairDistrictTime(new Date());
-                eamReportAccidentsRegister.setRepairDistrictResult(eamReportAccidentsRegisterDto.getRepairDistrictResult());
-                eamReportAccidentsRegister.setRepairDistrictComment(eamReportAccidentsRegisterDto.getRepairDistrictComment());
                 if ("2".equals(eamReportAccidentsRegisterDto.getRepairDistrictResult())){
                     //缁翠慨鍖洪暱鎷掔粷
-                    eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                    }else{
+                        userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_TEAM_LEADER.name());
+                        eamReportAccidentsRegister.setRepairGroupLeader(null);
+                        eamReportAccidentsRegister.setRepairGroupLeaderTime(null);
+                        eamReportAccidentsRegister.setRepairGroupLeaderResult(null);
+                        eamReportAccidentsRegister.setRepairGroupLeaderComment(null);
+                    }
                 }else {
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄦ妧鏈礋璐d汉锛屾棤娉曡繘鍏ヤ笅绾у鎵�");
+                    }
+                    userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
                     eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_RESPONSIBLE.name());
+                    eamReportAccidentsRegister.setRepairDistrict(user.getUsername());
+                    eamReportAccidentsRegister.setRepairDistrictTime(new Date());
+                    eamReportAccidentsRegister.setRepairDistrictResult(eamReportAccidentsRegisterDto.getRepairDistrictResult());
+                    eamReportAccidentsRegister.setRepairDistrictComment(eamReportAccidentsRegisterDto.getRepairDistrictComment());
                 }
                 break;
             //寰呮妧鏈礋璐d汉澶勭悊
@@ -418,19 +470,30 @@
                 values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm());
                 values.put("technicalDirectorResult", eamReportAccidentsRegisterDto.getTechnicalDirectorResult());
                 eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm());
-                eamReportAccidentsRegister.setCheckAgree(eamReportAccidentsRegisterDto.getCheckAgree());
-                eamReportAccidentsRegister.setDisagreeReason(eamReportAccidentsRegisterDto.getDisagreeReason());
-                eamReportAccidentsRegister.setRectificationMeasures(eamReportAccidentsRegisterDto.getRectificationMeasures());
-                eamReportAccidentsRegister.setAccidentConclusion(eamReportAccidentsRegisterDto.getAccidentConclusion());
-                eamReportAccidentsRegister.setTechnicalDirector(user.getUsername());
-                eamReportAccidentsRegister.setTechnicalDirectorTime(new Date());
-                eamReportAccidentsRegister.setTechnicalDirectorResult(eamReportAccidentsRegisterDto.getTechnicalDirectorResult());
-                eamReportAccidentsRegister.setTechnicalDirectorConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm());
                 if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorResult())){
                     //鎶�鏈礋璐d汉鎷掔粷
-                    eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇尯闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒");
+                    }else {
+                        userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_REPAIR_REGIONAL_MANAGER.name());
+                        eamReportAccidentsRegister.setRepairDistrict(null);
+                        eamReportAccidentsRegister.setRepairDistrictTime(null);
+                        eamReportAccidentsRegister.setRepairDistrictResult(null);
+                        eamReportAccidentsRegister.setRepairDistrictComment(null);
+                    }
                 }else {
                     eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_SUPERVISOR.name());
+                    eamReportAccidentsRegister.setCheckAgree(eamReportAccidentsRegisterDto.getCheckAgree());
+                    eamReportAccidentsRegister.setDisagreeReason(eamReportAccidentsRegisterDto.getDisagreeReason());
+                    eamReportAccidentsRegister.setRectificationMeasures(eamReportAccidentsRegisterDto.getRectificationMeasures());
+                    eamReportAccidentsRegister.setAccidentConclusion(eamReportAccidentsRegisterDto.getAccidentConclusion());
+                    eamReportAccidentsRegister.setTechnicalDirector(user.getUsername());
+                    eamReportAccidentsRegister.setTechnicalDirectorTime(new Date());
+                    eamReportAccidentsRegister.setTechnicalDirectorResult(eamReportAccidentsRegisterDto.getTechnicalDirectorResult());
+                    eamReportAccidentsRegister.setTechnicalDirectorConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorConfirm());
                 }
                 break;
             //寰呮妧鏈富绠″绾ч瀵煎鐞�
@@ -448,15 +511,30 @@
                 values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm());
                 values.put("technicalDirectorLeaderResult", eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult());
                 eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm());
-                eamReportAccidentsRegister.setTechnicalDirectorLeader(user.getUsername());
-                eamReportAccidentsRegister.setTechnicalDirectorLeaderTime(new Date());
-                eamReportAccidentsRegister.setTechnicalDirectorLeaderResult(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult());
-                eamReportAccidentsRegister.setTechnicalDirectorLeaderConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm());
                 if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult())){
                     //鎶�鏈富绠″绾ч瀵兼嫆缁�
-                    eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0021);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄦ妧鏈礋璐d汉锛屾棤娉曡繘鍏ヤ笅绾у鎵�");
+                    }else {
+                        userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_RESPONSIBLE.name());
+                        eamReportAccidentsRegister.setCheckAgree(null);
+                        eamReportAccidentsRegister.setDisagreeReason(null);
+                        eamReportAccidentsRegister.setRectificationMeasures(null);
+                        eamReportAccidentsRegister.setAccidentConclusion(null);
+                        eamReportAccidentsRegister.setTechnicalDirector(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorTime(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorResult(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorConfirm(null);
+                    }
                 }else {
                     eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_SUPERIOR_DEPARTMENT.name());
+                    eamReportAccidentsRegister.setTechnicalDirectorLeader(user.getUsername());
+                    eamReportAccidentsRegister.setTechnicalDirectorLeaderTime(new Date());
+                    eamReportAccidentsRegister.setTechnicalDirectorLeaderResult(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderResult());
+                    eamReportAccidentsRegister.setTechnicalDirectorLeaderConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorLeaderConfirm());
                 }
                 break;
             //寰呬富绠¢儴绾ч瀵煎鐞�
@@ -468,15 +546,26 @@
                 values.put("comment", eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm());
                 values.put("technicalDirectorPartResult", eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult());
                 eamReportAccidentsRegisterDto.setComment(eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm());
-                eamReportAccidentsRegister.setTechnicalDirectorPart(user.getUsername());
-                eamReportAccidentsRegister.setTechnicalDirectorPartTime(new Date());
-                eamReportAccidentsRegister.setTechnicalDirectorPartResult(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult());
-                eamReportAccidentsRegister.setTechnicalDirectorPartConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm());
                 if ("2".equals(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult())){
                     //鎶�鏈富绠″绾ч瀵兼嫆缁�
-                    eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0022);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄦ妧鏈富绠″绾ч瀵硷紝鏃犳硶杩涘叆涓嬬骇瀹℃壒");
+                    }else {
+                        userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.PENDING_TECHNICAL_SUPERVISOR.name());
+                        eamReportAccidentsRegister.setTechnicalDirectorLeader(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorLeaderTime(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorLeaderResult(null);
+                        eamReportAccidentsRegister.setTechnicalDirectorLeaderConfirm(null);
+                    }
                 }else {
                     eamReportAccidentsRegister.setRegisterStatus(EamReportAccidentsRegisterEnum.REPAIR_COMPLETED.name());
+                    eamReportAccidentsRegister.setTechnicalDirectorPart(user.getUsername());
+                    eamReportAccidentsRegister.setTechnicalDirectorPartTime(new Date());
+                    eamReportAccidentsRegister.setTechnicalDirectorPartResult(eamReportAccidentsRegisterDto.getTechnicalDirectorPartResult());
+                    eamReportAccidentsRegister.setTechnicalDirectorPartConfirm(eamReportAccidentsRegisterDto.getTechnicalDirectorPartConfirm());
                 }
                 break;
             default:
diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java
index 21645f0..47ff53c 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportProductHazardsServiceImpl.java
@@ -294,15 +294,27 @@
                 values.put("comment", eamReportProductHazardsDto.getDeputyDepartmentComment());
                 values.put("deputyDepartmentResult", eamReportProductHazardsDto.getDeputyDepartmentResult());
                 eamReportProductHazardsDto.setComment(eamReportProductHazardsDto.getDeputyDepartmentComment());
-                eamReportProductHazards.setDeputyDepartment(user.getUsername());
-                eamReportProductHazards.setDeputyDepartmentTime(new Date());
-                eamReportProductHazards.setDeputyDepartmentResult(eamReportProductHazardsDto.getDeputyDepartmentResult());
-                eamReportProductHazards.setDeputyDepartmentComment(eamReportProductHazardsDto.getDeputyDepartmentComment());
+
                 if ("2".equals(eamReportProductHazardsDto.getDeputyDepartmentResult())){
-                    //鍓儴绾ч瀵兼嫆缁�
-                    eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.REJECTED.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0024);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄤ富绠″伐鑹猴紝鏃犳硶杩涘叆椹冲洖鎿嶄綔锛�");
+                    }else {
+                        userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                        //鍓儴绾ч瀵兼嫆缁�
+                        eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.PENDING_SUPERIOR_TECHNICAL_CONFIRMATION.name());
+                        eamReportProductHazards.setTechnologist(null);
+                        eamReportProductHazards.setTechnologistTime(null);
+                        eamReportProductHazards.setTechnologistResult(null);
+                        eamReportProductHazards.setTechnologistComment(null);
+                    }
                 }else {
                     eamReportProductHazards.setConfirmStatus(EamReportProductHazardsEnum.REPAIR_COMPLETED.name());
+                    eamReportProductHazards.setDeputyDepartment(user.getUsername());
+                    eamReportProductHazards.setDeputyDepartmentTime(new Date());
+                    eamReportProductHazards.setDeputyDepartmentResult(eamReportProductHazardsDto.getDeputyDepartmentResult());
+                    eamReportProductHazards.setDeputyDepartmentComment(eamReportProductHazardsDto.getDeputyDepartmentComment());
                 }
                 break;
             default:
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
index 11a2161..001f12d 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -7,11 +7,13 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.constant.CommonConstant;
 
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.eam.constant.BusinessCodeConst;
 
 import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
@@ -47,8 +49,6 @@
     private IEamMaintenanceStandardService eamMaintenanceStandardService;
     @Autowired
     private ISysBusinessCodeRuleService businessCodeRuleService;
-    @Autowired
-    private IEamEquipmentService eamEquipmentService;
 
     /**
      * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
@@ -59,6 +59,11 @@
     @ApiOperation(value = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�", notes = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�")
     @GetMapping(value = "/saveEamMaintenanceStandardProcess")
     public Result<?> saveEamMaintenanceStandardProcess(String id) {
+        // 鏍¢獙棰嗗彇鏉冮檺
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!BusinessCodeConst.PCR0002.equals(user.getPost())) {
+            return Result.error("濉姤澶辫触,娌℃湁濉姤鏉冮檺锛�,闇�缁翠慨宸ユ彁浜�");
+        }
         return eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id);
     }
 
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
index fa75c22..ef66a96 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
@@ -183,6 +183,10 @@
     @TableField(exist = false)
     private String equipmentText;
 
+    //娴佽浆鑺傜偣浣跨敤鏌ヨ
+    @TableField(exist = false)
+    private String procInstId;
+
     public String getEquipmentText() {
         return equipmentCode + "[" + equipmentName + "]";
     }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
index ddec816..ff47337 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamMaintenanceStandardMapper.xml
@@ -3,10 +3,12 @@
 <mapper namespace="org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper">
     <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamMaintenanceStandard">
         select ems.*, e.equipment_code, e.equipment_name,
-               e.equipment_model
+               e.equipment_model,f.process_instance_id as 'procInstId'
         from eam_maintenance_standard ems
         inner join eam_equipment e
         on ems.equipment_id = e.id
+        left join flow_my_business f
+            on f.data_id=ems.id
             ${ew.customSqlSegment}
     </select>
 </mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
index a816ad4..88c86f4 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -5,6 +5,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -40,6 +41,7 @@
 import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
 import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
 import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
 import org.jeecg.modules.flowable.service.IFlowDefinitionService;
 import org.jeecg.modules.flowable.service.IFlowTaskService;
 import org.jeecg.modules.system.entity.BaseFactory;
@@ -338,209 +340,361 @@
 
     /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/
 
-    /**
-     * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
-     *
-     * @param id
-     * @return
-     */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<?> saveEamMaintenanceStandardProcess(String id) {
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        EamMaintenanceStandard maintenanceStandard = this.getById(id);
-        if (maintenanceStandard == null) {
-            return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�");
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser currentUser = getCurrentUser();
+
+        // 鏍¢獙淇濆吇鏍囧噯鏄惁瀛樺湪
+        EamMaintenanceStandard maintenanceStandard = validateStandardExistence(id);
+
+        // 鏍¢獙鍏宠仈璁惧鏄惁瀛樺湪
+        EamEquipment equipment = validateEquipmentExistence(maintenanceStandard.getEquipmentId());
+
+        // 妫�鏌ユ槸鍚︽槸椹冲洖鍚庨噸鏂版彁浜ょ殑娴佺▼
+        FlowMyBusiness flowBusiness = flowMyBusinessService.selectByDataId(maintenanceStandard.getId());
+
+        if (isReSubmitScenario(flowBusiness)) {
+            return handleReSubmitScenario(maintenanceStandard, equipment, currentUser, flowBusiness);
         }
-        System.out.println("淇濆吇瑙勮寖娴佺▼锛�" + maintenanceStandard.getId());
-        flowCommonService.initActBusiness(maintenanceStandard.getStandardName() + "瑙勮寖杩涜娴佺▼瀹℃牳",
-                maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null);
-        Map<String, Object> variables = new HashMap<>();
-        variables.put("dataId", maintenanceStandard.getId());
-        variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼");
-        variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼");
-        variables.put("proofreading", true);
-        EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
-        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008);
-        if (!CollectionUtils.isEmpty(userSelectorList)) {
-            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(usernameList)) {
-                variables.put("NextAssignee", usernameList);
-            }else {
-                throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇涓讳换锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
-            }
+
+        // 澶勭悊棣栨鍚姩娴佺▼
+        return handleFirstSubmitScenario(maintenanceStandard, equipment, currentUser);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏄┏鍥炲悗閲嶆柊鎻愪氦鐨勫満鏅�
+     */
+    private boolean isReSubmitScenario(FlowMyBusiness flowBusiness) {
+        return flowBusiness != null &&
+                MaintenanceStandardStatusEnum.WAIT_SUBMIT.name().equals(flowBusiness.getTaskNameId());
+    }
+
+    /**
+     * 澶勭悊椹冲洖鍚庨噸鏂版彁浜ょ殑娴佺▼
+     */
+    private Result<?> handleReSubmitScenario(EamMaintenanceStandard maintenanceStandard,
+                                             EamEquipment equipment,
+                                             LoginUser currentUser,
+                                             FlowMyBusiness flowBusiness) {
+        // 鏇存柊寰呭姙缁翠慨宸�
+        updateTodoMaintenanceWorkers(flowBusiness, equipment);
+
+        // 璁ら浠诲姟
+        claimTaskOrFail(flowBusiness.getTaskId(), currentUser);
+
+        // 鏋勫缓娴佺▼鍙橀噺
+        Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "淇濆吇瑙勮寖鍐嶆鍚姩娴佺▼");
+
+        // 璁剧疆涓嬩竴绾у鎵逛汉(缁翠慨瀹や富浠�)
+        setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�");
+
+        // 瀹屾垚褰撳墠浠诲姟锛屾帹杩涙祦绋�
+        FlowTaskVo taskVo = buildFlowTaskVo(flowBusiness, maintenanceStandard, variables, "淇濆吇瑙勮寖鍐嶆鍚姩娴佺▼");
+        Result result = flowTaskService.complete(taskVo);
+
+        // 鏇存柊淇濆吇鏍囧噯鐘舵��
+        if (result.isSuccess()) {
+            updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR);
+            return Result.ok("淇濆吇瑙勮寖娴佺▼閲嶅惎鎴愬姛");
         }
-        Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables);
-        if (!result.isSuccess()) {
-            super.removeById(maintenanceStandard.getId());
-        } else {
-            maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name());
-            maintenanceStandard.setDesigner(user.getUsername());
-            maintenanceStandard.setDesignTime(new Date());
-            eamMaintenanceStandardMapper.updateById(maintenanceStandard);
-            //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳
-            List<FlowMyBusiness> businessList = flowMyBusinessService.list(
-                    new QueryWrapper<FlowMyBusiness>()
-                            .eq("data_id", maintenanceStandard.getId())
-            );
-            if (businessList.isEmpty()) {
-                return Result.error("娴佺▼璁板綍涓嶅瓨鍦�");
-            }
-        }
+
         return result;
     }
 
     /**
-     * 瀹℃壒鎿嶄綔
-     *
-     * @param eamMaintenanceStandardVo
-     * @return
+     * 澶勭悊棣栨鎻愪氦鐨勬祦绋�
+     */
+    private Result<?> handleFirstSubmitScenario(EamMaintenanceStandard maintenanceStandard,
+                                                EamEquipment equipment,
+                                                LoginUser currentUser) {
+        // 鍒濆鍖栨祦绋嬩笟鍔′俊鎭�
+        flowCommonService.initActBusiness(
+                maintenanceStandard.getStandardName() + "瑙勮寖杩涜娴佺▼瀹℃牳",
+                maintenanceStandard.getId(),
+                "IEamMaintenanceStandardService",
+                "eam_maintenance_standard",
+                null
+        );
+
+        // 鏋勫缓娴佺▼鍙橀噺
+        Map<String, Object> variables = buildProcessVariables(maintenanceStandard.getId(), "淇濆吇瑙勮寖鍚姩娴佺▼");
+
+        // 璁剧疆涓嬩竴绾у鎵逛汉(缁翠慨瀹や富浠�)
+        setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�");
+
+        // 鍚姩娴佺▼瀹炰緥
+        Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables);
+
+        // 澶勭悊娴佺▼鍚姩缁撴灉
+        if (result.isSuccess()) {
+            updateMaintenanceStandardStatus(maintenanceStandard, currentUser, MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR);
+            validateFlowBusinessRecord(maintenanceStandard.getId());
+        } else {
+            this.removeById(maintenanceStandard.getId());
+        }
+
+        return result;
+    }
+
+    /**
+            * 瀹℃壒鎿嶄綔
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo) {
-        EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId());
-        if (eamMaintenanceStandard == null) {
-            return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�");
-        }
-        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (user == null || StrUtil.isBlank(user.getId())) {
-            throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
-        }
-        eamMaintenanceStandardVo.setAssignee(user.getUsername());
-        // 鑾峰彇娴佺▼涓氬姟璁板綍
-        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(eamMaintenanceStandardVo.getInstanceId(), eamMaintenanceStandardVo.getTaskId());
-        if (flowMyBusiness == null) {
-            throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�");
-        }
+    public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo vo) {
+        // 鍩虹鏍¢獙
+        EamMaintenanceStandard standard = validateStandardExistence(vo.getDataId());
+        LoginUser user = getCurrentUser();
+        FlowMyBusiness business = validateFlowBusiness(vo);
+        validateUserAuthorization(business, user);
+        claimTaskOrFail(business.getTaskId(), user);
 
-        boolean userAuthorized = isUserAuthorized(flowMyBusiness, user);
-        if (!userAuthorized) {
-            throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�");
-        }
-        // 璁ら浠诲姟
-        if (!claimTask(flowMyBusiness.getTaskId(), user)) {
-            throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒");
-        }
+        // 鍑嗗瀹℃壒鎵�闇�鏁版嵁
+        EamEquipment equipment = validateEquipmentExistence(standard.getEquipmentId());
+        Map<String, Object> variables = new HashMap<>();
 
-        EamEquipment eamEquipment = eamEquipmentService.getById(eamMaintenanceStandard.getEquipmentId());
-        if (eamEquipment == null) {
-            throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
-        }
-
-        MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(eamMaintenanceStandard.getStandardStatus());
+        // 鏍规嵁褰撳墠鐘舵�佸鐞嗗鎵�
+        MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(standard.getStandardStatus());
         if (status == null) {
-            return null;
+            throw new JeecgBootException("鏃犳晥鐨勪繚鍏绘爣鍑嗙姸鎬�");
         }
-        //娴佺▼鍙橀噺
-        Map<String, Object> values = new HashMap<>();
-        List<String> userApprovalList;
-        List<UserSelector> userSelectors;
-        switch (status){
+
+        switch (status) {
             case WAIT_REPAIR_DIRECTOR:
-                //缁翠慨涓讳换瀹℃牳
-                userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009);
-                if (CollectionUtils.isEmpty(userSelectors)) {
-                    throw new JeecgBootException("璁惧鏈瓨鍦ㄧ敓浜ц澶囨妧鏈富绠★紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
-                }else {
-                    userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                    values.put("dataId", eamMaintenanceStandard.getId());
-                    values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult());
-                    if (StrUtil.isEmpty(eamMaintenanceStandardVo.getRepairManagerApproveComment())){
-                        eamMaintenanceStandardVo.setRepairManagerApproveComment("");
-                    }
-                    values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment());
-                    values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment());
-                    eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getRepairManagerApproveComment());
-                    if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("2")){
-                        eamMaintenanceStandard.setStandardStatus(SecondMaintenanceStatusEnum.ABOLISH.name());
-                    }else {
-                        values.put("NextAssignee", userApprovalList);
-                        eamMaintenanceStandard.setRepairManager(user.getUsername());
-                        eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult());
-                        eamMaintenanceStandard.setRepairManagerApproveTime(new Date());
-                        eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment());
-                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name());
-                    }
-                }
+                handleRepairDirectorApproval(vo, standard, equipment, variables);
                 break;
             case WAIT_TECHNICAL_DIRECTOR:
-                //寰呮妧鏈富绠″鎵�
-                if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveComment())){
-                    eamMaintenanceStandardVo.setTechnicalManagerApproveComment("");
-                }
-                values.put("dataId", eamMaintenanceStandard.getId());
-                values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
-                values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
-                values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult());
-                eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
-                if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("2")){
-                    eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name());
-                    userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008);
-                    if (CollectionUtil.isEmpty(userSelectors)) {
-                        throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇涓讳换锛屾棤娉曡繘鍏ラ┏鍥炲鎵癸紒");
-                    }else{
-                        userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                        values.put("NextAssignee", userApprovalList);
-                    }
-                }else {
-                    eamMaintenanceStandard.setTechnicalManager(user.getUsername());
-                    eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult());
-                    eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date());
-                    eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
-                    eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
-                }
+                handleTechnicalDirectorApproval(vo, standard, equipment, variables);
                 break;
             default:
-                throw  new JeecgBootException("瀹℃壒澶辫触");
+                throw new JeecgBootException("褰撳墠鐘舵�佷笉鏀寔瀹℃壒鎿嶄綔");
+        }
 
-        }
-        eamMaintenanceStandardVo.setValues(values);
-        // 瀹屾垚娴佺▼浠诲姟
-        Result result = flowTaskService.complete(eamMaintenanceStandardVo);
-        if (!result.isSuccess()) {
-            throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
-        }
-        this.updateById(eamMaintenanceStandard);
-        if (StrUtil.isNotEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveResult())){
-            if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) {
-                eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
-                //鍒ゆ柇鏄惁杩涜鍗囩増锛岄�氳繃璁惧缂栧彿銆佷繚鍏诲垎绫汇�佺姸鎬佽繘琛岀瓫閫�
-                EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId());
-                QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>();
-                queryWrapper.ne("id", eamMaintenanceStandardVo.getDataId());
-                queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId());
-                queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory());
-                queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name());
-                List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper);
-                if (!CollectionUtils.isEmpty(list)) {
-                    //浣滃簾鍘熸湁
-                    for (EamMaintenanceStandard eamMaintenanceStandard1 : list) {
-                        eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
-                        this.updateById(eamMaintenanceStandard1);
-                    }
-                }
-            }
-        }
+        // 鎻愪氦瀹℃壒缁撴灉
+        submitApprovalResult(vo, standard, variables);
         return Result.OK("鎿嶄綔鎴愬姛");
     }
 
 
-    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
-        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
-        return todoUsers != null && todoUsers.contains(user.getUsername());
+    private LoginUser getCurrentUser() {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (user == null) {
+            throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
+        }
+        return user;
     }
 
-    private boolean claimTask(String taskId, LoginUser user) {
+    private EamMaintenanceStandard validateStandardExistence(String id) {
+        EamMaintenanceStandard standard = this.getById(id);
+        if (standard == null) {
+            throw new JeecgBootException("鏈壘鍒板搴斾繚鍏绘爣鍑�");
+        }
+        return standard;
+    }
+
+    private EamEquipment validateEquipmentExistence(String equipmentId) {
+        EamEquipment equipment = eamEquipmentService.getById(equipmentId);
+        if (equipment == null) {
+            throw new JeecgBootException("鍏宠仈璁惧涓嶅瓨鍦�");
+        }
+        return equipment;
+    }
+
+    private FlowMyBusiness validateFlowBusiness(EamMaintenanceStandardVo vo) {
+        FlowMyBusiness business = flowMyBusinessService.getFlowMyBusiness(vo.getInstanceId(), vo.getTaskId());
+        if (business == null) {
+            throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂伴噸璇�");
+        }
+        return business;
+    }
+
+    private void validateUserAuthorization(FlowMyBusiness business, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(business.getTodoUsers(), String.class);
+        if (todoUsers == null || !todoUsers.contains(user.getUsername())) {
+            throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�");
+        }
+    }
+
+    private void claimTaskOrFail(String taskId, LoginUser user) {
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
         if (task == null) {
-            return false;
+            throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�");
         }
         if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
-            return false;
+            throw new JeecgBootException("浠诲姟宸茶浠栦汉璁ら");
         }
         taskService.claim(taskId, user.getUsername());
-        return true;
+    }
+
+    private Map<String, Object> buildProcessVariables(String dataId, String comment) {
+        Map<String, Object> vars = new HashMap<>();
+        vars.put("dataId", dataId);
+        vars.put("organization", comment);
+        vars.put("comment", comment);
+        vars.put("proofreading", true);
+        return vars;
+    }
+
+    private void setNextApprover(Map<String, Object> variables, EamEquipment equipment,
+                                 String businessCode, String roleName) {
+        List<UserSelector> approvers = sysUserService.selectOperatorList(
+                equipment.getEquipmentCode(),
+                equipment.getFactoryOrgCode(),
+                businessCode
+        );
+        if (CollectionUtils.isEmpty(approvers)) {
+            throw new JeecgBootException("璁惧鏈厤缃�" + roleName);
+        }
+        variables.put("NextAssignee", approvers.stream()
+                .map(UserSelector::getUsername)
+                .collect(Collectors.toList()));
+    }
+
+    private void updateTodoMaintenanceWorkers(FlowMyBusiness business, EamEquipment equipment) {
+        List<UserSelector> maintenanceWorkers = sysUserService.selectOperatorList(
+                equipment.getEquipmentCode(),
+                equipment.getFactoryOrgCode(),
+                BusinessCodeConst.PCR0002
+        );
+        if (CollectionUtils.isEmpty(maintenanceWorkers)) {
+            throw new JeecgBootException("璁惧鏈厤缃淮淇伐");
+        }
+        business.setTodoUsers(JSON.toJSONString(
+                maintenanceWorkers.stream()
+                        .map(UserSelector::getUsername)
+                        .collect(Collectors.toList())
+        ));
+        flowMyBusinessService.updateById(business);
+    }
+
+    private FlowTaskVo buildFlowTaskVo(FlowMyBusiness business, EamMaintenanceStandard standard,
+                                       Map<String, Object> variables, String comment) {
+        FlowTaskVo taskVo = new FlowTaskVo();
+        taskVo.setTaskId(business.getTaskId());
+        taskVo.setComment(comment);
+        taskVo.setInstanceId(business.getProcessInstanceId());
+        taskVo.setDataId(standard.getId());
+        taskVo.setValues(variables);
+        return taskVo;
+    }
+
+    private void updateMaintenanceStandardStatus(EamMaintenanceStandard standard,
+                                                 LoginUser user,
+                                                 MaintenanceStandardStatusEnum status) {
+        standard.setStandardStatus(status.name());
+        if (MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.equals(status)) {
+            standard.setDesigner(user.getUsername());
+            standard.setDesignTime(new Date());
+        }
+        this.updateById(standard);
+    }
+
+    private void validateFlowBusinessRecord(String standardId) {
+        List<FlowMyBusiness> businessList = flowMyBusinessService.list(
+                new QueryWrapper<FlowMyBusiness>().eq("data_id", standardId)
+        );
+        if (CollectionUtils.isEmpty(businessList)) {
+            throw new JeecgBootException("娴佺▼璁板綍涓嶅瓨鍦�");
+        }
+    }
+
+    private void handleRepairDirectorApproval(EamMaintenanceStandardVo vo,
+                                              EamMaintenanceStandard standard,
+                                              EamEquipment equipment,
+                                              Map<String, Object> variables) {
+        // 璁剧疆鍩虹娴佺▼鍙橀噺
+        variables.putAll(buildProcessVariables(standard.getId(),
+                StrUtil.blankToDefault(vo.getRepairManagerApproveComment(), "")));
+        variables.put("repairManagerApproveResult", vo.getRepairManagerApproveResult());
+
+        LoginUser user = getCurrentUser();
+        vo.setAssignee(user.getUsername());
+        vo.setComment(vo.getRepairManagerApproveComment());
+        if ("2".equals(vo.getRepairManagerApproveResult())) {
+            // 椹冲洖
+            UpdateWrapper<EamMaintenanceStandard> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.eq("id", standard.getId());
+            updateWrapper.set("standard_status", MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
+            updateWrapper.set("designer", null);
+            updateWrapper.set("design_time", null);
+            this.update(updateWrapper);
+        } else {
+            // 閫氳繃
+            setNextApprover(variables, equipment, BusinessCodeConst.PCR0009, "鐢熶骇璁惧鎶�鏈富绠�");
+            standard.setRepairManager(user.getUsername());
+            standard.setRepairManagerApproveResult(vo.getRepairManagerApproveResult());
+            standard.setRepairManagerApproveTime(new Date());
+            standard.setRepairManagerApproveComment(vo.getRepairManagerApproveComment());
+            standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name());
+        }
+    }
+
+    private void handleTechnicalDirectorApproval(EamMaintenanceStandardVo vo,
+                                                 EamMaintenanceStandard standard,
+                                                 EamEquipment equipment,
+                                                 Map<String, Object> variables) {
+        // 璁剧疆鍩虹娴佺▼鍙橀噺
+        variables.putAll(buildProcessVariables(standard.getId(),
+                StrUtil.blankToDefault(vo.getTechnicalManagerApproveComment(), "")));
+        variables.put("technicalManagerApproveResult", vo.getTechnicalManagerApproveResult());
+
+        LoginUser user = getCurrentUser();
+        vo.setAssignee(user.getUsername());
+        vo.setComment(vo.getTechnicalManagerApproveComment());
+        if ("2".equals(vo.getTechnicalManagerApproveResult())) {
+            // 椹冲洖
+            standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name());
+            standard.setRepairManager(null);
+            standard.setRepairManagerApproveResult(null);
+            standard.setRepairManagerApproveTime(null);
+            standard.setRepairManagerApproveComment(null);
+            setNextApprover(variables, equipment, BusinessCodeConst.PCR0008, "缁翠慨瀹や富浠�");
+        } else {
+            // 閫氳繃
+            standard.setTechnicalManager(user.getUsername());
+            standard.setTechnicalManagerApproveResult(vo.getTechnicalManagerApproveResult());
+            standard.setTechnicalManagerApproveTime(new Date());
+            standard.setTechnicalManagerApproveComment(vo.getTechnicalManagerApproveComment());
+            standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
+        }
+    }
+
+    private void submitApprovalResult(EamMaintenanceStandardVo vo,
+                                      EamMaintenanceStandard standard,
+                                      Map<String, Object> variables) {
+        vo.setValues(variables);
+        Result result = flowTaskService.complete(vo);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("瀹℃壒娴佺▼鎻愪氦澶辫触: " + result.getMessage());
+        }
+
+        // 鏇存柊淇濆吇鏍囧噯
+        this.updateById(standard);
+
+        // 鎶�鏈富绠″鎵归�氳繃鍚庯紝浣滃簾鏃х増鏈�
+        if (MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name().equals(standard.getStandardStatus())
+                && "1".equals(vo.getTechnicalManagerApproveResult())) {
+            abolishPreviousStandards(standard);
+        }
+    }
+
+    private void abolishPreviousStandards(EamMaintenanceStandard current) {
+        List<EamMaintenanceStandard> previous = eamMaintenanceStandardMapper.selectList(
+                new QueryWrapper<EamMaintenanceStandard>()
+                        .ne("id", current.getId())
+                        .eq("equipment_id", current.getEquipmentId())
+                        .eq("maintenance_category", current.getMaintenanceCategory())
+                        .eq("standard_status", MaintenanceStandardStatusEnum.START.name())
+        );
+
+        if (!CollectionUtils.isEmpty(previous)) {
+            previous.forEach(standard -> {
+                standard.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
+            });
+            this.updateBatchById(previous);
+        }
     }
 
 
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
index a824ccb..89c419e 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
@@ -38,7 +38,7 @@
                 c.ASSIGNEE_ AS assignee,
                 c.DESCRIPTION_ AS description,
                 LEAD ( COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_
-                    ORDER BY a.START_TIME_ ) AS nextActName,
+                    ORDER BY a.END_TIME_ ) AS nextActName,
                 LEAD ( a.ACT_TYPE_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_
                     ORDER BY a.START_TIME_ ) AS nextActType,
                 LEAD ( a.START_TIME_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_

--
Gitblit v1.9.3