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 |  153 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 152 insertions(+), 1 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 429a12f..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;
 
 /**
@@ -85,10 +91,15 @@
     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 +159,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
     @Transactional(rollbackFor = Exception.class)
     public boolean addMaintenance(EamSecondMaintenanceRequest request) {

--
Gitblit v1.9.3