From e5a85d904ce028a35229ab6245ab894afbca6531 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期六, 26 七月 2025 17:07:30 +0800
Subject: [PATCH] 维修工单

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceChangeServiceImpl.java |  212 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 205 insertions(+), 7 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceChangeServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceChangeServiceImpl.java
index f70581a..d7a068d 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceChangeServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamThirdMaintenanceChangeServiceImpl.java
@@ -5,11 +5,14 @@
 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.LambdaUpdateWrapper;
+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;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.type.JdbcType;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
@@ -34,6 +37,7 @@
 import org.jeecg.modules.eam.service.IEamThirdMaintenanceOrderService;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 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.service.IFlowDefinitionService;
 import org.jeecg.modules.flowable.service.IFlowTaskService;
@@ -49,6 +53,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.sql.Timestamp;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -58,8 +63,8 @@
  * @Date:   2025-07-11
  * @Version: V1.0
  */
-@Service
-public class EamThirdMaintenanceChangeServiceImpl extends ServiceImpl<EamThirdMaintenanceChangeMapper, EamThirdMaintenanceChange> implements IEamThirdMaintenanceChangeService {
+@Service("IEamThirdMaintenanceChangeService")
+public class EamThirdMaintenanceChangeServiceImpl extends ServiceImpl<EamThirdMaintenanceChangeMapper, EamThirdMaintenanceChange> implements IEamThirdMaintenanceChangeService, FlowCallBackServiceI {
 
     @Resource
     private EamThirdMaintenanceChangeMapper eamThirdMaintenanceChangeMapper;
@@ -177,6 +182,7 @@
         request.setApplicant(sysUser.getUsername());
         request.setApplyDate(new Date());
         request.setFactoryOrgCode(equipment.getFactoryOrgCode());
+        request.setEquipmentId(equipment.getId());
         // 涓変繚鍙樻洿宸ュ崟HF
         EamBaseHFCode eamBaseHFCode = hfCodeService.selectByCategory(HfTemplateCategoryEnum.THIRD_MAINTENANCE_CHANGE.name());
         if (eamBaseHFCode == null) {
@@ -203,6 +209,14 @@
         }
         entity.setApplyReasonType(request.getApplyReasonType());
         entity.setApplyReason(request.getApplyReason());
+        entity.setRemark(request.getRemark());
+        entity.setApplyCategory(request.getApplyCategory());
+        if ("SCRAPPED".equals(request.getApplyCategory())) {
+            // 鐩存帴璁句负 null
+            entity.setDeferredMaintenanceDate(null);
+        } else {
+            entity.setDeferredMaintenanceDate(request.getDeferredMaintenanceDate());
+        }
         this.getBaseMapper().updateById(entity);
         return true;
     }
@@ -251,6 +265,8 @@
             variables.put("organization", applyReasonTypeText);
             variables.put("comment", applyReasonTypeText);
         }
+        variables.put("proofreading", true);
+        variables.put("NextAssignee", userApprovalList);
         Result<?> result = flowDefinitionService.startProcessInstanceByKey("third_maintenance_change", variables);
         if(result == null || !result.isSuccess()) {
             throw new JeecgBootException("鍚姩娴佺▼澶辫触锛�");
@@ -300,13 +316,13 @@
         }
 
         // 璁剧疆娴佺▼鍙橀噺
-        setupProcessVariables(request, order, user, equipment);
+        setupProcessVariables(request, entity, user, equipment);
 
         // 瀹屾垚娴佺▼浠诲姟
         Result result = flowTaskService.complete(request);
 
         // 鏍规嵁浠诲姟瀹屾垚缁撴灉鏇存柊宸ュ崟鐘舵��
-        updateOrderStatus(result, request, order, user);
+        updateOrderStatus(result, request, entity, order, user);
 
         //鏇存柊宸ュ崟淇℃伅
         this.getBaseMapper().updateById(entity);
@@ -316,15 +332,173 @@
     /**
      * 璁剧疆娴佺▼鍙橀噺
      */
-    private void setupProcessVariables(EamThirdMaintenanceChangeRequest request, EamThirdMaintenanceOrder order, LoginUser user, EamEquipment equipment) {
+    private void setupProcessVariables(EamThirdMaintenanceChangeRequest request, EamThirdMaintenanceChange entity, LoginUser user, EamEquipment equipment) {
+        //娴佺▼鍙橀噺
+        Map<String, Object> values = new HashMap<>();
+        List<String> userApprovalList;
+        List<UserSelector> userSelectors;
+        ThirdMaintenanceChangeStatusEnum status = ThirdMaintenanceChangeStatusEnum.getInstance(entity.getChangeStatus());
+        switch (status) {
+            case EQUIPMENT_MANAGER_SIGNING:
+                // 浣跨敤鍗曚綅涓荤瀹ょ骇棰嗗瀹℃牳
+                values.put("dataId", entity.getId());
+                if(StringUtils.isBlank(request.getEquipmentManagerComment())) {
+                    values.put("organization", "涓変繚宸ュ崟鍙樻洿浣跨敤鍗曚綅涓荤瀹ょ骇棰嗗");
+                    values.put("comment", "涓変繚宸ュ崟鍙樻洿浣跨敤鍗曚綅涓荤瀹ょ骇棰嗗");
+                    request.setComment("涓変繚宸ュ崟鍙樻洿閮ㄩ棬棰嗗瀹℃牳");
+                } else {
+                    values.put("organization", request.getEquipmentManagerComment());
+                    values.put("comment", request.getEquipmentManagerComment());
+                    request.setComment(request.getEquipmentManagerComment());
+                }
+                if (BusinessCodeConst.APPROVED.equals(request.getEquipmentManagerSignatureResult())) {
+                    values.put("confirmation", request.getEquipmentManagerSignatureResult());
+                    ThirdMaintenanceChangeReasonEnum applyReasonType = ThirdMaintenanceChangeReasonEnum.getInstance(request.getApplyReasonType());
+                    switch (applyReasonType) {
+                        case PRODUCTION_WORK_ORDER_EXPEDITED:
+                            //鐢熶骇浠诲姟
+                            userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0012);
+                            if (CollectionUtil.isEmpty(userSelectors)) {
+                                throw new JeecgBootException("璁惧鏈垎閰嶇粰鐢熶骇鎸囨尌閮ㄥ绾ч瀵硷紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                            }
+                            break;
+                        case EQUIPMENT_BREAKDOWN_REPAIR:
+                            //璁惧鏁呴殰
+                            userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0013);
+                            if (CollectionUtil.isEmpty(userSelectors)) {
+                                throw new JeecgBootException("璁惧鏈垎閰嶇粰缁翠慨鍖洪暱锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                            }
+                            break;
+                        case EQUIPMENT_SCRAPPED:
+                            //璁惧鎶ュ簾
+                            userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0014);
+                            if (CollectionUtil.isEmpty(userSelectors)) {
+                                throw new JeecgBootException("璁惧鏈垎閰嶇粰璧勪骇绠$悊閮紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                            }
+                            break;
+                        case EQUIPMENT_MAJOR:
+                            //璁惧澶т慨銆侀」淇�
+                            userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0016);
+                            if (CollectionUtil.isEmpty(userSelectors)) {
+                                throw new JeecgBootException("璁惧鏈垎閰嶇粰杩愮淮鍟嗗姟瀹や富浠伙紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                            }
+                            break;
+                        case EQUIPMENT_RETROFITTING:
+                            //璁惧鎼縼銆佹敼閫�
+                            userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0015);
+                            if (CollectionUtil.isEmpty(userSelectors)) {
+                                throw new JeecgBootException("璁惧鏈垎閰嶇粰椤圭洰涓荤閮紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                            }
+                            break;
+                        default:
+                            throw new JeecgBootException("鍙樻洿鐢宠鍘熷洜鏃犳硶璇嗗埆锛屽鎵瑰け璐ワ紒");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
+                } else {
+                    values.put("confirmation", request.getEquipmentManagerSignatureResult());
+                }
+                break;
+            case DEPART_MANAGER_SIGNING:
+                //閮ㄩ棬棰嗗瀹℃牳
+                values.put("confirmation", request.getDepartManagerSignatureResult());
+                values.put("dataId", entity.getId());
+                if(StringUtils.isBlank(request.getDepartManagerComment())) {
+                    values.put("organization", "涓変繚宸ュ崟鍙樻洿閮ㄩ棬棰嗗瀹℃牳");
+                    values.put("comment", "涓変繚宸ュ崟鍙樻洿閮ㄩ棬棰嗗瀹℃牳");
+                    request.setComment("涓変繚宸ュ崟鍙樻洿閮ㄩ棬棰嗗瀹℃牳");
+                } else {
+                    values.put("organization", request.getDepartManagerComment());
+                    values.put("comment", request.getDepartManagerComment());
+                    request.setComment(request.getDepartManagerComment());
+                }
+                if (BusinessCodeConst.APPROVED.equals(request.getDepartManagerSignatureResult())) {
+                    // 鑾峰彇涓嬩竴姝ユ墽琛屼汉
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0017);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈垎閰嶇粰杩愮淮绠$悊瀹ゅ涓讳换锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
 
+                } else {
+                    values.put("confirmation", request.getDepartManagerSignatureResult());
+                }
+                break;
+            case PRODUCTION_SUPPORT_SIGNING:
+                // 缁翠慨瀹や富浠荤瀛�
+                values.put("dataId", entity.getId());
+                if(StringUtils.isBlank(request.getDepartManagerComment())) {
+                    values.put("organization", "涓変繚宸ュ崟鍙樻洿鐢熶骇淇濋殰閮ㄥ鏍�");
+                    values.put("comment", "涓変繚宸ュ崟鍙樻洿鐢熶骇淇濋殰閮ㄥ鏍�");
+                    request.setComment("涓変繚宸ュ崟鍙樻洿鐢熶骇淇濋殰閮ㄥ鏍�");
+                } else {
+                    values.put("organization", request.getProductionSupportComment());
+                    values.put("comment", request.getProductionSupportComment());
+                    request.setComment(request.getProductionSupportComment());
+                }
+                break;
+        }
+        request.setValues(values);
     }
 
     /**
      * 鏇存柊宸ュ崟鐘舵��
      */
-    private void updateOrderStatus(Result result, EamThirdMaintenanceChangeRequest request, EamThirdMaintenanceOrder order, LoginUser user) {
-
+    private void updateOrderStatus(Result result, EamThirdMaintenanceChangeRequest request, EamThirdMaintenanceChange entity, EamThirdMaintenanceOrder order, LoginUser user) {
+        if (result.isSuccess()) {
+            ThirdMaintenanceChangeStatusEnum status = ThirdMaintenanceChangeStatusEnum.getInstance(entity.getChangeStatus());
+            switch (status) {
+                case EQUIPMENT_MANAGER_SIGNING:
+                    // 璁剧疆entity
+                    entity.setEquipmentManagerSignature(user.getUsername());
+                    entity.setEquipmentManagerSignatureTime(new Date());
+                    entity.setEquipmentManagerComment(request.getEquipmentManagerComment());
+                    entity.setEquipmentManagerSignatureResult(request.getEquipmentManagerSignatureResult());
+                    if(BusinessCodeConst.APPROVED.equals(request.getEquipmentManagerSignatureResult())) {
+                        //閫氳繃
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.DEPART_MANAGER_SIGNING.name());
+                    } else {
+                        //椹冲洖
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.REJECTED.name());
+                    }
+                    break;
+                case DEPART_MANAGER_SIGNING:
+                    entity.setDepartManagerSignature(user.getUsername());
+                    entity.setDepartManagerSignatureTime(new Date());
+                    entity.setDepartManagerComment(request.getDepartManagerComment());
+                    entity.setDepartManagerSignatureResult(request.getDepartManagerSignatureResult());
+                    if(BusinessCodeConst.APPROVED.equals(request.getDepartManagerSignatureResult())) {
+                        // 閫氳繃
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.PRODUCTION_SUPPORT_SIGNING.name());
+                    } else {
+                        //椹冲洖
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.REJECTED.name());
+                    }
+                    break;
+                case PRODUCTION_SUPPORT_SIGNING:
+                    entity.setProductionSupportSignature(user.getUsername());
+                    entity.setProductionSupportSignatureTime(new Date());
+                    entity.setProductionSupportSignatureResult(request.getProductionSupportSignatureResult());
+                    entity.setProductionSupportComment(request.getProductionSupportComment());
+                    if(BusinessCodeConst.APPROVED.equals(request.getProductionSupportSignatureResult())) {
+                        //閫氳繃
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.COMPLETED.name());
+                        if ("SCRAPPED".equals(request.getApplyCategory())) {
+                            order.setMaintenanceDate(null);
+                            order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.ABOLISH.name());
+                        } else {
+                            order.setMaintenanceDate(entity.getDeferredMaintenanceDate());
+                            order.setMaintenanceStatus(ThirdMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
+                        }
+                        thirdMaintenanceOrderService.updateById(order);
+                    }else {
+                        //椹冲洖
+                        entity.setChangeStatus(ThirdMaintenanceChangeStatusEnum.REJECTED.name());
+                    }
+                    break;
+            }
+        }
     }
 
     private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
@@ -344,4 +518,28 @@
         return true;
     }
 
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
 }

--
Gitblit v1.9.3