From 4545af9041b432cbe79214d52be599e4ce8659aa Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 14 八月 2025 15:55:39 +0800
Subject: [PATCH] 二保结构树代码 维修工单添加 领取按钮 领取后 生成维修开始时间  提交后 生成维修结束时间 计算 维修时长  故障时长  添加导出

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java |  229 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 213 insertions(+), 16 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
index 89cdf03..2b9c57c 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -9,11 +9,11 @@
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import liquibase.pro.packaged.Q;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
-import org.jeecg.common.api.vo.FileUploadResult;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.DataBaseConstant;
@@ -23,10 +23,14 @@
 import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.*;
 import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.mapper.EamEquipmentMapper;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
 import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceQuery;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
 import org.jeecg.modules.eam.service.*;
+import org.jeecg.modules.eam.tree.FindsEquipmentEamCenterUtil;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
 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;
@@ -35,6 +39,7 @@
 import org.jeecg.modules.flowable.service.IFlowTaskService;
 import org.jeecg.modules.system.entity.BaseFactory;
 import org.jeecg.modules.system.entity.BaseFactoryUser;
+import org.jeecg.modules.system.mapper.BaseFactoryMapper;
 import org.jeecg.modules.system.service.IBaseFactoryService;
 import org.jeecg.modules.system.service.IBaseFactoryUserService;
 import org.jeecg.modules.system.service.ISysUserService;
@@ -46,6 +51,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -80,17 +86,20 @@
     @Autowired
     private IEamEquipmentService eamEquipmentService;
     @Autowired
-    private IEamReportRepairService eamReportRepairService;
-    @Autowired
     private IEamEquipmentExtendService eamEquipmentExtendService;
     @Autowired
     private IEamBaseHFCodeService hfCodeService;
     @Autowired
     private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+    @Resource
+    private BaseFactoryMapper baseFactoryMapper;
 
     @Override
     public IPage<EamSecondMaintenanceOrder> queryPageList(Page<EamSecondMaintenanceOrder> page, EamSecondMaintenanceQuery query) {
         QueryWrapper<EamSecondMaintenanceOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
         //鐢ㄦ埛鏁版嵁鏉冮檺
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         if (sysUser == null) {
@@ -148,6 +157,146 @@
         }
 
         return eamSecondMaintenanceOrderMapper.queryPageList(page, queryWrapper);
+    }
+
+    /**
+     * 鎵归噺鏂板鏍戠粨鏋�
+     */
+    @Override
+    public List<EamEquipmentTree> getTree(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) return Collections.emptyList();
+
+        // 鏋勫缓閫氱敤鏌ヨ鏉′欢
+        QueryWrapper<EamMaintenanceStandard> baseQuery = new QueryWrapper<EamMaintenanceStandard>()
+                .eq("ems.maintenance_category", "SECOND_MAINTENANCE")
+                .eq("ems.standard_status", MaintenanceStandardStatusEnum.START.name())
+                .eq("ems.del_flag", CommonConstant.DEL_FLAG_0.toString());
+
+        // 搴旂敤鏁版嵁鏉冮檺杩囨护
+        applyDataPermissionFilter(sysUser, baseQuery);
+
+        // 鍗曟鏌ヨ璁惧鍒楄〃
+        List<EamEquipment> equipmentList = eamMaintenanceStandardMapper.queryList(baseQuery);
+        if (CollectionUtils.isEmpty(equipmentList)) {
+            return Collections.emptyList();
+        }
+
+        // 鑾峰彇鍏宠仈鐨勫伐鍘備唬鐮�
+        Set<String> factoryOrgCodes = equipmentList.stream()
+                .map(EamEquipment::getFactoryOrgCode)
+                .collect(Collectors.toSet());
+
+        // 鍗曟鏌ヨ鎵�鏈夊伐鍘傛暟鎹紙鍖呭惈瀹屾暣鏍戠粨鏋勶級
+        List<BaseFactory> allFactories = baseFactoryService.list(
+                new LambdaQueryWrapper<BaseFactory>()
+                        .eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0.toString())
+                        .orderByAsc(BaseFactory::getSorter));
+
+        // 鎻愬彇鏉冮檺鍏宠仈鐨勫伐鍘傝妭鐐笽D锛堝寘鍚墍鏈夌埗鑺傜偣锛�
+        Set<String> authorizedFactoryIds = extractAuthorizedFactoryIds(
+                allFactories, factoryOrgCodes);
+
+        // 杩囨护鍑烘湁鏁堝伐鍘傜粨鏋�
+        List<BaseFactory> validFactories = allFactories.stream()
+                .filter(f -> authorizedFactoryIds.contains(f.getId()))
+                .collect(Collectors.toList());
+
+        // ===鏋勫缓璁惧鏍� ===
+        Map<String, List<EamEquipment>> equipmentMap = equipmentList.stream()
+                .collect(Collectors.groupingBy(EamEquipment::getFactoryOrgCode));
+
+        // 鏋勫缓鍩虹鏍�
+        List<EamEquipmentTree> treeList = FindsEquipmentEamCenterUtil.wrapEquipmentBaseFactoryTreeList(validFactories);
+
+        // 濉厖璁惧鏁版嵁
+        populateEquipmentNodes(treeList, equipmentMap);
+        return treeList;
+    }
+
+    // 搴旂敤鏁版嵁鏉冮檺鏉′欢锛堝叡鐢ㄦ柟娉曪級
+    private void applyDataPermissionFilter(LoginUser user, QueryWrapper<EamMaintenanceStandard> query) {
+        if (StringUtils.isNotBlank(user.getEamEquipmentIds())) {
+            List<String> equipmentIds = Arrays.asList(user.getEamEquipmentIds().split(","));
+            query.in("e.equipment_code", equipmentIds);
+        } else {
+            List<BaseFactoryUser> factoryUsers = baseFactoryUserService.list(
+                    new LambdaQueryWrapper<BaseFactoryUser>()
+                            .eq(BaseFactoryUser::getUserId, user.getId()));
+
+            if (CollectionUtils.isNotEmpty(factoryUsers)) {
+                Set<String> factoryIds = factoryUsers.stream()
+                        .map(BaseFactoryUser::getFactoryId)
+                        .collect(Collectors.toSet());
+
+                Set<String> factoryCodes = baseFactoryService.listByIds(factoryIds).stream()
+                        .map(BaseFactory::getOrgCode)
+                        .collect(Collectors.toSet());
+
+                query.in("e.factory_org_code", factoryCodes);
+            }
+        }
+    }
+
+    // 鎻愬彇鎺堟潈宸ュ巶ID
+    private Set<String> extractAuthorizedFactoryIds(List<BaseFactory> allFactories, Set<String> authOrgCodes) {
+        Set<String> result = new HashSet<>();
+        // 鏋勫缓ID->宸ュ巶鐨勬槧灏�
+        Map<String, BaseFactory> factoryMap = allFactories.stream()
+                .collect(Collectors.toMap(BaseFactory::getId, Function.identity()));
+
+        // 閫嗗悜鏌ユ壘鐖惰妭鐐归摼
+        for (BaseFactory factory : allFactories) {
+            if (authOrgCodes.contains(factory.getOrgCode())) {
+                collectParentIds(factoryMap, factory.getId(), result);
+            }
+        }
+        return result;
+    }
+
+    // 閫掑綊鏀堕泦鐖惰妭鐐笽D
+    private void collectParentIds(Map<String, BaseFactory> factoryMap, String currentId, Set<String> idSet) {
+        if (StringUtils.isEmpty(currentId) || idSet.contains(currentId)) return;
+
+        idSet.add(currentId);
+        BaseFactory factory = factoryMap.get(currentId);
+        if (factory != null && StringUtils.isNotBlank(factory.getParentId())) {
+            collectParentIds(factoryMap, factory.getParentId(), idSet);
+        }
+    }
+
+    // 濉厖璁惧鑺傜偣锛堥潪閫掑綊锛�
+    private void populateEquipmentNodes(List<EamEquipmentTree> treeList,
+                                        Map<String, List<EamEquipment>> equipmentMap) {
+        for (EamEquipmentTree node : treeList) {
+
+            String orgCode = resolveOrgCodeFromTree(node); // 闇�瀹炵幇璇ラ�昏緫
+
+            // 鍏宠仈璁惧鏁版嵁
+            List<EamEquipment> devices = equipmentMap.getOrDefault(orgCode, Collections.emptyList());
+            if (!CollectionUtils.isEmpty(devices)) {
+                for (EamEquipment device : devices) {
+                    EamEquipmentTree deviceNode = new EamEquipmentTree().convert(device);
+                    deviceNode.setParentId(node.getKey());
+                    deviceNode.setType(2);
+                    deviceNode.setLeaf(true);  // 鏄庣‘鏍囪涓哄彾瀛愯妭鐐�
+                    node.getChildren().add(deviceNode);
+                }
+                // 鍙湁褰撳瓨鍦ㄨ澶囨椂鎵嶆爣璁颁负闈炲彾瀛�
+                node.setLeaf(false);
+            }
+
+            // 缁х画澶勭悊瀛愯妭鐐癸紙宸ュ巶灞傜骇锛�
+            if (!CollectionUtils.isEmpty(node.getChildren())) {
+                populateEquipmentNodes(node.getChildren(), equipmentMap);
+            }
+        }
+    }
+
+    // 瑙f瀽鏂规硶
+    private String resolveOrgCodeFromTree(EamEquipmentTree node) {
+        BaseFactory factory =baseFactoryMapper.selectById(node.getKey());
+        return factory != null ? factory.getOrgCode() : null;
     }
 
     @Override
@@ -392,6 +541,7 @@
                             EamSecondMaintenanceOrderDetail eamMaintenanceStandardDetail=new EamSecondMaintenanceOrderDetail();
                             BeanUtils.copyProperties(tableDetail, eamMaintenanceStandardDetail);
                             eamMaintenanceStandardDetail.setOrderId(entity.getId());
+                            eamMaintenanceStandardDetail.setCreateBy(user.getUsername());
                             addList.add(eamMaintenanceStandardDetail);
                         });
                         secondMaintenanceOrderDetailService.saveBatch(addList);
@@ -414,6 +564,7 @@
                             EamSecondMaintenanceOrderDetail eamMaintenanceStandardDetail=new EamSecondMaintenanceOrderDetail();
                             BeanUtils.copyProperties(tableDetail, eamMaintenanceStandardDetail);
                             eamMaintenanceStandardDetail.setOrderId(entity.getId());
+                            eamMaintenanceStandardDetail.setCreateBy(user.getUsername());
                             addList.add(eamMaintenanceStandardDetail);
                         });
                         secondMaintenanceOrderDetailService.saveBatch(addList);
@@ -428,32 +579,53 @@
                     throw new JeecgBootException("璁惧鏈瓨鍦ㄦ鏌ヤ汉锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
                 }else{
                     userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                    values.put("NextAssignee", userApprovalList);
                     values.put("dataId", entity.getId());
+                    if (StrUtil.isEmpty(request.getDealDescription())){
+                        request.setDealDescription("");
+                    }
                     values.put("organization",request.getDealDescription());
                     values.put("comment", request.getDealDescription());
                     values.put("manageUserResult",request.getManageUserResult());
-                    entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_INSPECTOR_CONFIRM.name());
-                    entity.setManageUser(user.getUsername());
-                    entity.setProblemDescription(request.getProblemDescription());
-                    entity.setManageUserResult(request.getManageUserResult());
-                    entity.setDealDescription(request.getDealDescription());
-                    entity.setConfirmTime(new Date());
                     request.setComment(request.getDealDescription());
+                    if (request.getManageUserResult().equals("2")){
+                        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                    }else {
+                        values.put("NextAssignee", userApprovalList);
+                        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_INSPECTOR_CONFIRM.name());
+                        entity.setConfirmTime(new Date());
+                        entity.setManageUser(user.getUsername());
+                        entity.setProblemDescription(request.getProblemDescription());
+                        entity.setManageUserResult(request.getManageUserResult());
+                        entity.setDealDescription(request.getDealDescription());
+                    }
                 }
                 break;
             case WAIT_INSPECTOR_CONFIRM:
                 //妫�鏌ヤ汉纭
+                if (StrUtil.isEmpty(request.getInspectConfirmComment())){
+                    request.setInspectConfirmComment("");
+                }
                 values.put("dataId", entity.getId());
                 values.put("organization",request.getInspectConfirmComment());
                 values.put("comment", request.getInspectConfirmComment());
                 values.put("inspectorResult",request.getInspectorResult());
-                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.COMPLETE.name());
-                entity.setInspector(user.getUsername());
-                entity.setInspectorResult(request.getInspectorResult());
-                entity.setInspectConfirmComment(request.getInspectConfirmComment());
-                entity.setInspectConfirmTime(new Date());
-                request.setComment(request.getDealDescription());
+                request.setComment(request.getInspectConfirmComment());
+                if (request.getInspectorResult().equals("2")){
+                    entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_ADMIN_CONFIRM.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0004);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄨ溅闂磋澶囩鐞嗗憳锛屾棤娉曡繘鍏ラ┏鍥炲鎵癸紒");
+                    }else{
+                        userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                    }
+                }else {
+                    entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.COMPLETE.name());
+                    entity.setInspector(user.getUsername());
+                    entity.setInspectorResult(request.getInspectorResult());
+                    entity.setInspectConfirmComment(request.getInspectConfirmComment());
+                    entity.setInspectConfirmTime(new Date());
+                }
                 break;
             default:
                 throw  new JeecgBootException("瀹℃壒澶辫触");
@@ -464,6 +636,31 @@
         if (!result.isSuccess()) {
             throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
         }
+        if (user.getPost().equals(BusinessCodeConst.PCR0004)&&request.getManageUserResult().equals("2")){
+            //绠$悊鍛樻嫆缁濓紝浼氱鑺傜偣淇敼瀵瑰簲鍏崇郴
+            List<FlowMyBusiness> list = flowMyBusinessService.list(new LambdaQueryWrapper<FlowMyBusiness>().eq(FlowMyBusiness::getProcessInstanceId, request.getInstanceId()));
+            if (CollectionUtils.isNotEmpty(list)) {
+                list.forEach(item -> {
+                    if (item.getTaskNameId().equals("maintenance_task")) {
+                        //鑾峰彇缁翠慨宸ュ矖浣嶇敤鎴�
+                        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
+                        if (!CollectionUtils.isEmpty(userSelectorList)) {
+                            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            item.setTodoUsers(JSON.toJSONString(usernameList));
+                        }
+                    }
+                    if (item.getTaskNameId().equals("operator_task")) {
+                        //鑾峰彇鎿嶄綔浜哄矖浣嶇敤鎴�
+                        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0001);
+                        if (!CollectionUtils.isEmpty(userSelectorList)) {
+                            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            item.setTodoUsers(JSON.toJSONString(usernameList));
+                        }
+                    }
+                });
+                flowMyBusinessService.updateBatchById(list);
+            }
+        }
         //淇濆瓨宸ュ崟
         eamSecondMaintenanceOrderMapper.updateById(entity);
         return entity;

--
Gitblit v1.9.3