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 | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 205 insertions(+), 20 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 8faaf0a..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,7 +579,6 @@ 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(""); @@ -436,35 +586,45 @@ 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.REJECTED.name()); + 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.getDealDescription())){ - request.setDealDescription(""); + 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.REJECTED.name()); + 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: @@ -476,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