From bc8cd378fd72f43e66120c540f57f630580aa093 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 11 九月 2025 10:57:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java |  257 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 193 insertions(+), 64 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java
index b25c467..80d72f9 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentTransferServiceImpl.java
@@ -88,8 +88,8 @@
             //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
             queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
         }
-        //鎺у埗寰呮彁浜ょ姸鎬佺殑鏁版嵁鍙兘鏈汉鏌ョ湅
-        queryWrapper.and(i -> i.ne("wmo.transfer_status", EquipmentTransferStatusEnum.WAIT_SUBMIT).or().eq("wmo.report_user", sysUser.getUsername()));
+//        鎺у埗寰呮彁浜ょ姸鎬佺殑鏁版嵁鍙兘鏈汉鏌ョ湅
+//        queryWrapper.and(i -> i.ne("wmo.transfer_status", EquipmentTransferStatusEnum.WAIT_SUBMIT).or().eq("wmo.report_user", sysUser.getUsername()));
         //鏌ヨ鏉′欢杩囨护
         if (query != null) {
             if (StringUtils.isNotBlank(query.getEquipmentId())) {
@@ -144,7 +144,6 @@
             throw new JeecgBootException("褰撳墠璁惧灞炰簬姝よ溅闂达紝涓嶉渶瑕佸彉鍔紒");
         }
         request.setOldDepartId(equipment.getOrgId());
-        request.setReportUser(sysUser.getUsername());
         return equipmentTransferMapper.insert(request) > 0;
     }
 
@@ -156,47 +155,43 @@
             throw new JeecgBootException("瑕佹彁浜ょ殑鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
         }
         if (!EquipmentTransferStatusEnum.WAIT_SUBMIT.name().equals(entity.getTransferStatus())) {
-            throw new JeecgBootException("褰撳墠鏁版嵁鐘舵�佷笉鍏佽缂栬緫锛�");
+            throw new JeecgBootException("璇ュ伐鍗曞凡杩涜杩囨彁浜わ紒");
         }
         //妫�鏌ヨ澶�
         EamEquipment equipment = eamEquipmentService.getById(entity.getEquipmentId());
         if (equipment == null) {
-            throw new JeecgBootException("璁惧涓嶅瓨鍦紒");
+            throw new JeecgBootException("璁惧涓嶅瓨鍦紝鎻愪氦澶辫触锛�");
         }
+        // 鍒嗛厤缁欎娇鐢ㄥ崟浣嶉瀵�
+        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0008);
+        if (CollectionUtil.isEmpty(userSelectors)) {
+            throw new JeecgBootException("璁惧鏈垎閰嶇粰鍗曚綅棰嗗锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+        }
+        List<String> usernames = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (sysUser == null) {
-            throw new JeecgBootException("褰撳墠鐢ㄦ埛鏃犳硶缂栬緫杞璁板綍锛�");
+        if (sysUser == null || !BusinessCodeConst.PCR0004.equals(sysUser.getPost())) {
+            throw new JeecgBootException("涓嶆槸璁惧绠$悊鍛橈紝鏃犳硶鎻愪氦姝ゅ伐鍗曪紒");
         }
-        UpdateWrapper<EamEquipmentTransfer> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.set("transfer_status", EquipmentSealUpStatusEnum.WAIT_SUBMIT.name());
-        updateWrapper.eq("id", id);
-        updateWrapper.eq("report_user", sysUser.getUsername());
-        boolean success = super.update(updateWrapper);
-        if (success) {
-            equipment.setAssetStatus(AssetStatusEnum.DEALT.name()); // 璁惧杞
-            eamEquipmentService.updateById(equipment);
-        }
+        entity.setTransferTime(new Date());
+        entity.setReportUser(sysUser.getUsername());
+        entity.setTransferStatus(EquipmentTransferStatusEnum.WAIT_USE_LEADER_CHECK.name());
+        //淇濆瓨宸ュ崟
+        equipmentTransferMapper.updateById(entity);
+
         //鍚姩瀹℃壒娴佺▼
-        flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getCode() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧杞",
+        flowCommonService.initActBusiness("宸ュ崟鍙�:" + entity.getCode() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";杩涜璁惧璋冩嫧",
                 entity.getId(), "IEamEquipmentTransferService", "equipment_transfer", null);
         Map<String, Object> variables = new HashMap<>();
         variables.put("dataId", entity.getId());
         variables.put("organization", entity.getTransferReason());
         variables.put("comment", entity.getTransferReason());
         variables.put("proofreading", true);
-        // 鍒嗛厤缁欒澶囩鐞嗗憳
-        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004);
-        if (CollectionUtil.isEmpty(userSelectors)) {
-            throw new JeecgBootException("璁惧鏈垎閰嶇粰璁惧绠$悊鍛橈紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
-        }
-        List<String> usernames = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+
         variables.put("NextAssignee", usernames);
         Result result = flowDefinitionService.startProcessInstanceByKey("equipment_transfer", variables);
         if (result != null) {
-            entity.setTransferTime(new Date());
-            entity.setTransferStatus(EquipmentTransferStatusEnum.WAIT_CHECK.name());
-            //淇濆瓨宸ュ崟
-            equipmentTransferMapper.updateById(entity);
+            equipment.setAssetStatus(AssetStatusEnum.DEALT.name()); // 璁惧璋冩嫧
+            eamEquipmentService.updateById(equipment);
             return result.isSuccess();
         }
         return true;
@@ -215,7 +210,6 @@
         if (user == null || StrUtil.isBlank(user.getId())) {
             throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒");
         }
-        request.setApprovalUser(user.getUsername());
         // 鑾峰彇娴佺▼涓氬姟璁板綍
         FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId());
         if (flowMyBusiness == null) {
@@ -236,50 +230,182 @@
             throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒");
         }
 
-        EquipmentTransferStatusEnum status = EquipmentTransferStatusEnum.getInstance(entity.getTransferStatus());
-        if (status == null) {
-            return null;
-        }
-        //娴佺▼鍙橀噺
-        Map<String, Object> values = new HashMap<>();
-        // 瀹℃壒
-        if (status == EquipmentTransferStatusEnum.WAIT_CHECK) {//鎵ц瀹屾垚
-            values.put("dataId", entity.getId());
-            values.put("organization", request.getApprovalComment());
-            values.put("comment", request.getApprovalComment());
-            values.put("approvalDealType", request.getApprovalDealType());
-            request.setComment(request.getApprovalComment());
-            entity.setApprovalUser(user.getUsername());// 瀹℃牳浜�
-            entity.setApprovalComment(request.getApprovalComment());// 瀹℃牳鎰忚
-            entity.setApprovalTime(new Date());// 瀹℃牳鏃堕棿
-            entity.setApprovalDealType(request.getApprovalDealType()); // 瀹℃壒绫诲瀷
-            // 楠岃瘉閫氳繃杩樻槸椹冲洖
-            if (request.getApprovalDealType().equals("1")) {
-                //璁剧疆entity
-                entity.setTransferStatus(EquipmentTransferStatusEnum.COMPLETE.name());
-                List<String> userApprovalList = new ArrayList<>(Collections.singletonList(entity.getReportUser()));
-                values.put("NextAssignee", userApprovalList);
-            } else {
-                //璁剧疆entity
-                entity.setTransferStatus(EquipmentTransferStatusEnum.COMPLETE.name());
-            }
-            // 淇敼璁惧鐘舵��
-            equipment.setAssetStatus(AssetStatusEnum.NORMAL.name());
-            entity.setApprovalUser(user.getUsername());
-            entity.setApprovalComment(request.getApprovalComment());
-            entity.setApprovalTime(new Date());
-            eamEquipmentService.updateById(equipment);
-        }
-        request.setValues(values);
+        //璁剧疆娴佺▼鍙橀噺
+        setupProcessVariables(request, entity, user, equipment);
 
         // 瀹屾垚娴佺▼浠诲姟
         Result result = flowTaskService.complete(request);
         if (!result.isSuccess()) {
             throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
         }
+
+        // 鏍规嵁浠诲姟瀹屾垚缁撴灉鏇存柊宸ュ崟鐘舵��
+        updateOrderStatus(result, request, entity, user, equipment);
+
         //淇濆瓨宸ュ崟
         equipmentTransferMapper.updateById(entity);
         return entity;
+    }
+
+    /**
+     * 璁剧疆宸ュ崟淇℃伅
+     *
+     * @param result
+     * @param request
+     * @param entity
+     * @param user
+     */
+    private void updateOrderStatus(Result result, EamEquipmentTransferRequest request, EamEquipmentTransfer entity, LoginUser user, EamEquipment equipment) {
+        if (result.isSuccess()) {
+            EquipmentTransferStatusEnum status = EquipmentTransferStatusEnum.getInstance(entity.getTransferStatus());
+            switch (status) {
+                case WAIT_USE_LEADER_CHECK:
+                    // 浣跨敤鍗曚綅棰嗗瀹℃壒缁撴潫
+                    entity.setUseLeader(user.getUsername());
+                    entity.setUseLeaderApprovalComment(request.getUseLeaderApprovalComment());
+                    entity.setUseLeaderApprovalTime(new Date());
+                    entity.setUseLeaderApprovalDealType(request.getUseLeaderApprovalDealType());
+                    if (CommonConstant.APPROVED.equals(request.getUseLeaderApprovalDealType())) {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.WAIT_TRANSFER_LEADER_CHECK.name());
+                    } else {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.REJECT.name());
+                        equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); // 璁惧璋冩嫧
+                        eamEquipmentService.updateById(equipment);
+                    }
+                    break;
+                case WAIT_TRANSFER_LEADER_CHECK:
+                    // 璋冨叆鍗曚綅棰嗗瀹℃壒缁撴潫
+                    entity.setTransferLeader(user.getUsername());
+                    entity.setTransferLeaderApprovalComment(request.getTransferLeaderApprovalComment());
+                    entity.setTransferLeaderApprovalTime(new Date());
+                    entity.setTransferLeaderApprovalDealType(request.getTransferLeaderApprovalDealType());
+                    if (CommonConstant.APPROVED.equals(request.getTransferLeaderApprovalDealType())) {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.WAIT_EXTERNAL_CONFIRM.name());
+                    } else {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.REJECT.name());
+                        equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); // 璁惧璋冩嫧
+                        eamEquipmentService.updateById(equipment);
+                    }
+                    break;
+                case WAIT_EXTERNAL_CONFIRM:
+                    // 鏈哄姩鍔炵‘璁ょ粨鏉�
+                    entity.setExternalConfirm(user.getUsername());
+                    entity.setExternalConfirmTime(new Date());
+                    entity.setCompanyLeaderCheck(request.getCompanyLeaderCheck());
+                    if (CommonConstant.YN_1.equals(request.getCompanyLeaderCheck())) {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.WAIT_COMPANY_LEADER_CHECK.name());
+                    } else {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.COMPLETE.name());
+                        equipment.setOrgId(entity.getNewDepartId());
+                        equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); // 璁惧璋冩嫧
+                        eamEquipmentService.updateById(equipment);
+                    }
+                    break;
+                case WAIT_COMPANY_LEADER_CHECK:
+                    // 鍏徃棰嗗瀹℃壒缁撴潫
+                    entity.setCompanyLeader(user.getUsername());
+                    entity.setCompanyLeaderApprovalTime(new Date());
+                    entity.setCompanyLeaderApprovalComment(request.getCompanyLeaderApprovalComment());
+                    entity.setCompanyLeaderApprovalDealType(request.getCompanyLeaderApprovalDealType());
+                    if (CommonConstant.APPROVED.equals(request.getCompanyLeaderApprovalDealType())) {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.COMPLETE.name());
+                        equipment.setOrgId(entity.getNewDepartId());
+                    } else {
+                        entity.setTransferStatus(EquipmentTransferStatusEnum.REJECT.name());
+                    }
+                    equipment.setAssetStatus(AssetStatusEnum.NORMAL.name()); // 璁惧璋冩嫧
+                    eamEquipmentService.updateById(equipment);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆娴佺▼鍙橀噺
+     *
+     * @param request
+     * @param entity
+     * @param user
+     * @param equipment
+     */
+    private void setupProcessVariables(EamEquipmentTransferRequest request, EamEquipmentTransfer entity, LoginUser user, EamEquipment equipment) {
+        Map<String, Object> values = new HashMap<>();
+        List<UserSelector> userSelectors;
+        List<String> userApprovalList;
+        EquipmentTransferStatusEnum status = EquipmentTransferStatusEnum.getInstance(entity.getTransferStatus());
+        switch (status) {
+            case WAIT_USE_LEADER_CHECK:
+                // 浣跨敤鍗曚綅棰嗗瀹℃壒缁撴潫
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getUseLeaderApprovalComment());
+                values.put("comment", request.getUseLeaderApprovalComment());
+                if (CommonConstant.APPROVED.equals(request.getUseLeaderApprovalDealType())) {
+                    // 閫氳繃
+                    values.put("approvalDealType", request.getUseLeaderApprovalDealType());
+                    // 鑾峰彇涓嬩竴姝ュ鎵逛汉
+                    userSelectors = sysUserService.selectOperatorList(entity.getNewDepartId(), BusinessCodeConst.PCR0008);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("鏈垎閰嶈皟鍏ュ崟浣嶉瀵硷紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
+                } else {
+                    // 椹冲洖
+                    values.put("approvalDealType", request.getUseLeaderApprovalDealType());
+                }
+                request.setComment("浣跨敤鍗曚綅棰嗗瀹℃壒缁撴潫");
+                break;
+            case WAIT_TRANSFER_LEADER_CHECK:
+                // 璋冨叆鍗曚綅棰嗗瀹℃壒缁撴潫
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getTransferLeaderApprovalComment());
+                values.put("comment", request.getTransferLeaderApprovalComment());
+                if (CommonConstant.APPROVED.equals(request.getTransferLeaderApprovalDealType())) {
+                    // 閫氳繃
+                    values.put("approvalDealType", request.getTransferLeaderApprovalDealType());
+                    // 鑾峰彇涓嬩竴姝ュ鎵逛汉
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0006);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈垎閰嶇粰鏈哄姩鍔烇紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
+                    }
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("NextAssignee", userApprovalList);
+                } else {
+                    // 椹冲洖
+                    values.put("approvalDealType", request.getTransferLeaderApprovalDealType());
+                }
+                request.setComment("璋冨叆鍗曚綅棰嗗瀹℃壒缁撴潫");
+                break;
+            case WAIT_EXTERNAL_CONFIRM:
+                // 鏈哄姩鍔炵‘璁ょ粨鏉�
+                values.put("dataId", entity.getId());
+                values.put("organization", "鏈哄姩鍔炵‘璁ょ粨鏉�");
+                values.put("comment", "鏈哄姩鍔炵‘璁ょ粨鏉�");
+                if (CommonConstant.YN_1.equals(request.getCompanyLeaderCheck())) {
+                    // 闇�瑕�
+                    values.put("confirmation", request.getCompanyLeaderCheck());
+                    // 娴佺▼杞埌鍏徃棰嗗瀹℃壒
+                    // 鑾峰彇涓嬩竴姝ュ鎵逛汉
+                    userSelectors = sysUserService.selectOperatorList(BusinessCodeConst.PCR0009);
+                    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.getCompanyLeaderCheck());
+                }
+                request.setComment("鏈哄姩鍔炵‘璁ょ粨鏉�");
+                break;
+            case WAIT_COMPANY_LEADER_CHECK:
+                // 鍏徃棰嗗瀹℃壒缁撴潫
+                values.put("dataId", entity.getId());
+                values.put("organization", request.getCompanyLeaderApprovalComment());
+                values.put("comment", request.getCompanyLeaderApprovalComment());
+                request.setComment("鍏徃棰嗗瀹℃壒缁撴潫");
+                break;
+        }
+        request.setValues(values);
     }
 
     @Override
@@ -331,7 +457,10 @@
 
     @Override
     public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
-        return null;
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
     }
 
     /**

--
Gitblit v1.9.3