From b84987e8d9def03bdf06f69e51de56e72d5b8131 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 14 八月 2025 17:40:57 +0800
Subject: [PATCH] 二保批量打印接口

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java |  219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 218 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..e32fe77 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;
@@ -22,11 +22,16 @@
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.*;
+import org.jeecg.modules.eam.dto.EamSecondMaintenanceOrderExport;
 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 +40,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 +52,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -85,10 +92,17 @@
     private IEamBaseHFCodeService hfCodeService;
     @Autowired
     private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+    @Resource
+    private BaseFactoryMapper baseFactoryMapper;
+    @Autowired
+    private IEamSecondMaintenanceOrderDetailService eamSecondMaintenanceOrderDetailService;
 
     @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) {
@@ -146,6 +160,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
@@ -515,6 +669,69 @@
         return entity;
     }
 
+    /**
+     * 鎵归噺鎵撳嵃浜屼繚宸ュ崟
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<EamSecondMaintenanceOrderExport> export(String ids){
+        QueryWrapper<EamSecondMaintenanceOrderExport> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
+        queryWrapper.eq("wmo.maintenance_status",SecondMaintenanceStatusEnum.COMPLETE.name());
+        //鐢ㄦ埛鏁版嵁鏉冮檺
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) {
+            return new ArrayList<>();
+        }
+        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
+            //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
+            queryWrapper.in("e.equipment_code", equipArr);
+        } else {
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
+                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
+            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
+                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
+                Set<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
+                queryWrapper.in("e.factory_org_code", factoryCode);
+            } else {
+                return new ArrayList<>();
+            }
+        }
+        //鏌ヨ鏉′欢杩囨护
+        if (StrUtil.isNotEmpty(ids)) {
+            List<String> idList = Arrays.asList(ids.split(","));
+            queryWrapper.in("wmo.id", idList);
+        } else {
+            queryWrapper.orderByDesc("wmo.create_time");
+        }
+        List<EamSecondMaintenanceOrderExport> eamSecondMaintenanceOrderExports=eamSecondMaintenanceOrderMapper.queryList(queryWrapper);
+        //濉厖瀵瑰簲浜屼繚鏄庣粏
+        if (!eamSecondMaintenanceOrderExports.isEmpty()){
+            eamSecondMaintenanceOrderExports.forEach(item->{
+               //缁翠慨浜哄憳淇濆吇鍐呭
+               List<EamSecondMaintenanceOrderDetail> maintenanceOrderDetails=eamSecondMaintenanceOrderDetailService.
+                       list(new QueryWrapper<EamSecondMaintenanceOrderDetail>().eq("order_id",item.getId()).
+                               eq("item_category",EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE.name())
+                               .orderByAsc("item_code"));
+               if (!maintenanceOrderDetails.isEmpty()){
+                   item.setMaintenanceOrderDetails(maintenanceOrderDetails);
+               }
+               //鎿嶄綔浜哄憳淇濆吇鍐呭
+                List<EamSecondMaintenanceOrderDetail> operationOrderDetails=eamSecondMaintenanceOrderDetailService.
+                        list(new QueryWrapper<EamSecondMaintenanceOrderDetail>().eq("order_id",item.getId()).
+                                eq("item_category",EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE.name())
+                                .orderByAsc("item_code"));
+                if (!operationOrderDetails.isEmpty()) {
+                    item.setOperationOrderDetails(operationOrderDetails);
+                }
+            });
+        }
+        return eamSecondMaintenanceOrderExports;
+    }
+
     private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
         List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
         return todoUsers != null && todoUsers.contains(user.getUsername());

--
Gitblit v1.9.3