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