From fd479eeb7dae6ec6b8b83d18e07aa163e8357eff Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期一, 04 八月 2025 21:26:03 +0800 Subject: [PATCH] 改造保养规范流程与升版导入代码 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 928 +++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 592 insertions(+), 336 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java index 73d7efd..a816ad4 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java @@ -23,6 +23,7 @@ import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.EamMaintenanceStandardDetailCategory; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; +import org.jeecg.modules.eam.constant.SecondMaintenanceStatusEnum; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; @@ -183,7 +184,7 @@ //鍒犻櫎鏍囪 entity.setDelFlag(CommonConstant.DEL_FLAG_0); //閲嶅鎬ф牎楠� - EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); if (exist != null) { throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); } @@ -209,27 +210,19 @@ entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); eamMaintenanceStandardMapper.updateById(entity); //澶勭悊璇︽儏 - if (CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) { + if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) { List<EamMaintenanceStandardDetail> addList = new ArrayList<>(); - List<EamMaintenanceStandardDetail> updateList = new ArrayList<>(); + //鍏堝垹闄ゅ師鏈� + LambdaQueryWrapper<EamMaintenanceStandardDetail> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EamMaintenanceStandardDetail::getStandardId, standardRequest.getId()); + eamMaintenanceStandardDetailService.remove(queryWrapper); standardRequest.getTableDetailList().forEach(tableDetail -> { - tableDetail.setStandardId(entity.getId()); - if (tableDetail.getId() == null) { - addList.add(tableDetail); - } else { - updateList.add(tableDetail); - } + EamMaintenanceStandardDetail eamMaintenanceStandardDetail=new EamMaintenanceStandardDetail(); + BeanUtils.copyProperties(tableDetail, eamMaintenanceStandardDetail); + eamMaintenanceStandardDetail.setStandardId(entity.getId()); + addList.add(eamMaintenanceStandardDetail); }); - if (CollectionUtil.isNotEmpty(addList)) { - eamMaintenanceStandardDetailService.saveBatch(addList); - } - if (CollectionUtil.isNotEmpty(updateList)) { - eamMaintenanceStandardDetailService.updateBatchById(updateList); - } - } - if (CollectionUtil.isNotEmpty(standardRequest.getRemoveDetailList())) { - List<String> ids = standardRequest.getRemoveDetailList().stream().map(EamMaintenanceStandardDetail::getId).collect(Collectors.toList()); - eamMaintenanceStandardDetailService.removeBatchByIds(ids); + eamMaintenanceStandardDetailService.saveBatch(addList); } return true; } @@ -267,7 +260,7 @@ //鍒犻櫎鏍囪 newEntity.setDelFlag(CommonConstant.DEL_FLAG_0); //閲嶅鎬ф牎楠� - EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); if (exist != null) { throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); } @@ -293,7 +286,8 @@ queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, standardStatus); + queryWrapper.ne(EamMaintenanceStandard::getStandardStatus, standardStatus); + queryWrapper.ne(EamMaintenanceStandard::getStandardStatus,MaintenanceStandardStatusEnum.START.name()); queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion); List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); @@ -331,6 +325,16 @@ return eamMaintenanceStandardMapper.selectList(queryWrapper); } + @Override + public EamMaintenanceStandard queryByEquipmentIdAndCategory(String equipmentId, String maintenanceCategory) { + LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); + queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.START.name()); + queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); + return eamMaintenanceStandardMapper.selectOne(queryWrapper); + } + /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/ @@ -355,6 +359,16 @@ variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼"); variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼"); variables.put("proofreading", true); + EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); + List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); + if (!CollectionUtils.isEmpty(userSelectorList)) { + List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(usernameList)) { + variables.put("NextAssignee", usernameList); + }else { + throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇涓讳换锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒"); + } + } Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); if (!result.isSuccess()) { super.removeById(maintenanceStandard.getId()); @@ -371,14 +385,6 @@ if (businessList.isEmpty()) { return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); } - FlowMyBusiness flowMyBusiness = businessList.get(0); - EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); - List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); - if (!CollectionUtils.isEmpty(userSelectorList)) { - List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); - flowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList)); - flowMyBusinessService.updateById(flowMyBusiness); - } } return result; } @@ -390,133 +396,151 @@ * @return */ @Override + @Transactional(rollbackFor = Exception.class) public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo) { - try { - // 鍙傛暟鏍¢獙 - if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTaskId()) || StrUtil.isEmpty(eamMaintenanceStandardVo.getDataId())) { - return Result.error("鍙傛暟閿欒"); - } - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String userId = user.getId(); - eamMaintenanceStandardVo.setAssignee(user.getUsername()); - if (StrUtil.isEmpty(userId)) { - return Result.error("鏈壘鍒板搴旂敤鎴�"); - } + EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); + if (eamMaintenanceStandard == null) { + return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (user == null || StrUtil.isBlank(user.getId())) { + throw new JeecgBootException("鏈幏鍙栧埌鐧诲綍鐢ㄦ埛锛岃閲嶆柊鐧诲綍鍚庡啀璇曪紒"); + } + eamMaintenanceStandardVo.setAssignee(user.getUsername()); + // 鑾峰彇娴佺▼涓氬姟璁板綍 + FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(eamMaintenanceStandardVo.getInstanceId(), eamMaintenanceStandardVo.getTaskId()); + if (flowMyBusiness == null) { + throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�"); + } - // 鏁版嵁鏌ヨ - EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - if (eamMaintenanceStandard == null) { - return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); - } + boolean userAuthorized = isUserAuthorized(flowMyBusiness, user); + if (!userAuthorized) { + throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔★紝璇峰埛鏂板悗閲嶈瘯锛�"); + } + // 璁ら浠诲姟 + if (!claimTask(flowMyBusiness.getTaskId(), user)) { + throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰嗭紒"); + } - // 2. 鏌ヨ娴佺▼涓氬姟璁板綍锛堝鐞嗙┖缁撴灉锛� - List<FlowMyBusiness> businessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId()) - ); - if (businessList.isEmpty()) { - return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); - } - FlowMyBusiness flowMyBusiness = businessList.get(0); + EamEquipment eamEquipment = eamEquipmentService.getById(eamMaintenanceStandard.getEquipmentId()); + if (eamEquipment == null) { + throw new JeecgBootException("璁惧涓嶅瓨鍦紝璇锋鏌ワ紒"); + } - // 3. 鏍¢獙鐢ㄦ埛鏄惁涓哄�欓�夊鐞嗕汉 - List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); - if (todoUsers == null || !todoUsers.contains(user.getUsername())) { - return Result.error("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�"); - } - - // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛� - String taskId = flowMyBusiness.getTaskId(); - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - if (task == null) { - return Result.error("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�"); - } - if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { - return Result.error("浠诲姟宸茶浠栦汉璁ら"); - } - taskService.claim(taskId, user.getUsername()); - - // 璁剧疆娴佺▼鍙橀噺 - Map<String, Object> values = setProcessVariables(eamMaintenanceStandard, userId, eamMaintenanceStandardVo); - eamMaintenanceStandardVo.setValues(values); - eamMaintenanceStandardVo.setComment(values.get("comment").toString()); - // 瀹屾垚娴佺▼浠诲姟 - Result result = flowTaskService.complete(eamMaintenanceStandardVo); - if (result.isSuccess()) { - if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { - if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")) { - List<FlowMyBusiness> newbusinessList = flowMyBusinessService.list( - new QueryWrapper<FlowMyBusiness>() - .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId())); - FlowMyBusiness newflowMyBusiness = newbusinessList.get(0); + MaintenanceStandardStatusEnum status = MaintenanceStandardStatusEnum.getInstance(eamMaintenanceStandard.getStandardStatus()); + if (status == null) { + return null; + } + //娴佺▼鍙橀噺 + Map<String, Object> values = new HashMap<>(); + List<String> userApprovalList; + List<UserSelector> userSelectors; + switch (status){ + case WAIT_REPAIR_DIRECTOR: + //缁翠慨涓讳换瀹℃牳 + userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009); + if (CollectionUtils.isEmpty(userSelectors)) { + throw new JeecgBootException("璁惧鏈瓨鍦ㄧ敓浜ц澶囨妧鏈富绠★紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�"); + }else { + userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); + values.put("dataId", eamMaintenanceStandard.getId()); + values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult()); + if (StrUtil.isEmpty(eamMaintenanceStandardVo.getRepairManagerApproveComment())){ + eamMaintenanceStandardVo.setRepairManagerApproveComment(""); + } + values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment()); + values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment()); + eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getRepairManagerApproveComment()); + if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("2")){ + eamMaintenanceStandard.setStandardStatus(SecondMaintenanceStatusEnum.ABOLISH.name()); + }else { + values.put("NextAssignee", userApprovalList); + eamMaintenanceStandard.setRepairManager(user.getUsername()); + eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult()); + eamMaintenanceStandard.setRepairManagerApproveTime(new Date()); + eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment()); eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); - //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 - EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); - List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009); - if (!CollectionUtils.isEmpty(userSelectorList)) { - List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList()); - newflowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList)); - flowMyBusinessService.updateById(newflowMyBusiness); - } - } else { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); } - eamMaintenanceStandard.setRepairManager(user.getUsername()); - eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult()); - eamMaintenanceStandard.setRepairManagerApproveTime(new Date()); - eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment()); } - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); - //鍒ゆ柇鏄惁杩涜鍗囩増锛岄�氳繃璁惧缂栧彿銆佷繚鍏诲垎绫汇�佺姸鎬佽繘琛岀瓫閫� - EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); - QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId()); - queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory()); - queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name()); - List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); - if (!CollectionUtils.isEmpty(list)) { - //浣滃簾鍘熸湁 - for (EamMaintenanceStandard eamMaintenanceStandard1 : list) { - eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); - this.updateById(eamMaintenanceStandard1); - } - } - } else { - eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + break; + case WAIT_TECHNICAL_DIRECTOR: + //寰呮妧鏈富绠″鎵� + if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveComment())){ + eamMaintenanceStandardVo.setTechnicalManagerApproveComment(""); + } + values.put("dataId", eamMaintenanceStandard.getId()); + values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); + eamMaintenanceStandardVo.setComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("2")){ + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); + userSelectors = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008); + if (CollectionUtil.isEmpty(userSelectors)) { + throw new JeecgBootException("璁惧鏈瓨鍦ㄧ淮淇涓讳换锛屾棤娉曡繘鍏ラ┏鍥炲鎵癸紒"); + }else{ + userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList()); + values.put("NextAssignee", userApprovalList); } + }else { eamMaintenanceStandard.setTechnicalManager(user.getUsername()); eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date()); - eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getComment()); + eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); } - this.updateById(eamMaintenanceStandard); - } else { - return result; - } - return Result.OK("鎿嶄綔鎴愬姛"); - } catch (Exception e) { - return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage()); + break; + default: + throw new JeecgBootException("瀹℃壒澶辫触"); + } + eamMaintenanceStandardVo.setValues(values); + // 瀹屾垚娴佺▼浠诲姟 + Result result = flowTaskService.complete(eamMaintenanceStandardVo); + if (!result.isSuccess()) { + throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�"); + } + this.updateById(eamMaintenanceStandard); + if (StrUtil.isNotEmpty(eamMaintenanceStandardVo.getTechnicalManagerApproveResult())){ + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) { + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); + //鍒ゆ柇鏄惁杩涜鍗囩増锛岄�氳繃璁惧缂栧彿銆佷繚鍏诲垎绫汇�佺姸鎬佽繘琛岀瓫閫� + EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId()); + QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("id", eamMaintenanceStandardVo.getDataId()); + queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId()); + queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory()); + queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name()); + List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); + if (!CollectionUtils.isEmpty(list)) { + //浣滃簾鍘熸湁 + for (EamMaintenanceStandard eamMaintenanceStandard1 : list) { + eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + this.updateById(eamMaintenanceStandard1); + } + } + } + } + return Result.OK("鎿嶄綔鎴愬姛"); } - private Map<String, Object> setProcessVariables(EamMaintenanceStandard eamMaintenanceStandard, String userId, EamMaintenanceStandardVo eamMaintenanceStandardVo) { - Map<String, Object> values = new HashMap<>(); - values.put("dataId", eamMaintenanceStandard.getId()); - values.put("assignee", userId); - if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) { - values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult()); - values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment()); - values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment()); + + private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { + List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); + return todoUsers != null && todoUsers.contains(user.getUsername()); + } + + private boolean claimTask(String taskId, LoginUser user) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task == null) { + return false; } - if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { - values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); - values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); - values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { + return false; } - return values; + taskService.claim(taskId, user.getUsername()); + return true; } @@ -539,8 +563,9 @@ @Override public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { - //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞� - return null; + //鑾峰彇涓嬩竴姝ュ鐞嗕汉 + Object object = values.get("NextAssignee"); + return (List<String>) object; } /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/ @@ -553,7 +578,11 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public Result<?> importPointInspectionExcel(MultipartFile file) { + public Result<?> importPointInspectionExcel(MultipartFile file,String id) { + EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard(); + if (StrUtil.isNotEmpty(id)){ + eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id); + } try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { Sheet sheet = workbook.getSheetAt(0); @@ -562,31 +591,76 @@ // 1. 鎻愬彇璁惧淇℃伅 EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet); - if (eamMaintenanceStandard == null) { + if (eamMaintenanceStandard == null || eamMaintenanceStandard.getEquipmentId() == null) { return Result.error("璁惧淇℃伅鎻愬彇澶辫触"); - } else { - if (eamMaintenanceStandard.getEquipmentId() == null) { - return Result.error("璁惧淇℃伅鎻愬彇澶辫触"); - } } eamMaintenanceStandard.setStandardName(name); - EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name()); - if (exist != null) { - return Result.error(name + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + // 妫�鏌ラ噸澶�,鍙鍏ユ牎楠岋紝鍗囩増涓嶆牎楠� + if (StrUtil.isEmpty(id)){ + EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), + eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); + if (exist != null) { + return Result.error(name + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + } } - + if (StrUtil.isNotEmpty(id)){ + if (eamMaintenanceStandardOld.getEquipmentId().equals(eamMaintenanceStandard.getEquipmentId()) + &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(eamMaintenanceStandard.getMaintenanceCategory())) { + //鍒ゆ柇鏄惁鐜版湁寰呮彁浜ゆ暟鎹� + EamMaintenanceStandard maintenanceStandard=eamMaintenanceStandardMapper.selectOne( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",eamMaintenanceStandard.getEquipmentId()) + .eq("maintenance_category",eamMaintenanceStandard.getMaintenanceCategory()) + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()) + .eq("del_flag", CommonConstant.DEL_FLAG_0)); + if (maintenanceStandard != null) { + //鍒犻櫎鍘熸湁寰呮彁浜� + eamMaintenanceStandardMapper.deleteById(maintenanceStandard.getId()); + } + //鏌ヨ鍦ㄦ祦绋嬩腑鐨勬暟鎹� + List<EamMaintenanceStandard> eamMaintenanceStandardList=eamMaintenanceStandardMapper.selectList( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",eamMaintenanceStandard.getEquipmentId()) + .eq("maintenance_category",eamMaintenanceStandard.getMaintenanceCategory()) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .and(i->i. + eq("standard_status",MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()) + .or() + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()) + )); + if (!eamMaintenanceStandardList.isEmpty()) { + return Result.error("宸插瓨鍦ㄥ浜庡鎵规祦绋嬬殑鏁版嵁锛岃鍒犻櫎鎴栫粨鏉熷悗杩涜鍗囩増瀵煎叆鎿嶄綔"); + } + //鍗囩増鎿嶄綔锛屼綔搴熷師鏈� + eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + eamMaintenanceStandardMapper.updateById(eamMaintenanceStandardOld); + //鐗堟湰閫掑鑾峰彇鏁板瓧 + Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$"); + Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion()); + if (matcher.find()) { + try { + int mainVersion = Integer.parseInt(matcher.group(1)); + eamMaintenanceStandard.setStandardVersion("v" + (mainVersion + 1)); + } catch (NumberFormatException ignored) { + } + } + }else { + return Result.error("鍗囩増瀵煎叆鐨勬枃浠朵笌鍘熸湁鏁版嵁鐨勮澶囩紪鍙蜂笉涓�鑷�,璇烽噸鏂扮紪杈戝鍏ユ枃浠�"); + } + } + eamMaintenanceStandard.setInitialDate(new Date()); eamMaintenanceStandardMapper.insert(eamMaintenanceStandard); - // 2. 鎻愬彇姣忔棩鐐规椤圭洰 - List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard); + Map<Integer, String> rowErrors = new HashMap<>(); + + // 2. 鎻愬彇姣忔棩鐐规椤圭洰锛堜紭鍖栫┖琛屽拰缁撴潫鏍囪澶勭悊锛� + List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard, rowErrors); if (dailyDetails.isEmpty()) { return Result.error("鏈壘鍒版瘡鏃ョ偣妫�椤圭洰"); } // 3. 鎻愬彇鍛ㄤ繚鍏婚」鐩� - List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard); + List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard, rowErrors); if (weeklyDetails.isEmpty()) { return Result.error("鏈壘鍒板懆淇濆吇椤圭洰"); } @@ -600,11 +674,10 @@ eamMaintenanceStandardDetailService.saveBatch(allDetails); } + // 瑙﹀彂淇濆吇娴佺▼ SysParams sysParams = sysParamsService.getSysPramBySettingKey("maintenance_import_type"); - if (sysParams != null) { - if (sysParams.getSettingValue().equals("1")) { - //瑙﹀彂淇濆吇娴佺▼ + if (sysParams.getSettingValue().equals("1")){ eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); eamMaintenanceStandardMapper.updateById(eamMaintenanceStandard); } @@ -736,171 +809,6 @@ } /** - * 鎻愬彇姣忔棩鐐规椤圭洰 - */ - private List<EamMaintenanceStandardDetail> extractDailyItems(Sheet sheet, EamMaintenanceStandard standard) { - return extractItems(sheet, standard, "鐐规椤圭洰", "瀹屾垚鏁版嵁/瑕佹眰", "DAY_INSPECTION"); - } - - /** - * 鎻愬彇鍛ㄤ繚鍏婚」鐩� - */ - private List<EamMaintenanceStandardDetail> extractWeeklyItems(Sheet sheet, EamMaintenanceStandard standard) { - return extractItems(sheet, standard, "鍛ㄤ繚鍏婚」鐩�", "妫�鏌ユ爣鍑�", "WEEK_INSPECTION"); - } - - /** - * 閫氱敤椤圭洰鎻愬彇鏂规硶 - */ - private List<EamMaintenanceStandardDetail> extractItems(Sheet sheet, EamMaintenanceStandard standard, - String primaryHeader, String secondaryHeader, - String itemCategory) { - int[] section = findTableSection(sheet, primaryHeader, secondaryHeader); - if (section == null) { - return Collections.emptyList(); - } - - List<EamMaintenanceStandardDetail> details = new ArrayList<>(); - for (int rowIdx = section[0]; rowIdx <= section[1]; rowIdx++) { - Row row = sheet.getRow(rowIdx); - if (row == null || isEmptyRow(row)) { - continue; - } - - // 纭繚绗竴鍒楁槸搴忓彿锛堟暟瀛楋級 - Cell seqCell = row.getCell(0); - if (seqCell == null || seqCell.getCellType() != CellType.NUMERIC) { - continue; - } - - // 鍒涘缓椤圭洰璇︽儏 - EamMaintenanceStandardDetail detail = new EamMaintenanceStandardDetail(); - detail.setStandardId(standard.getId()); - detail.setItemCode(Integer.parseInt(getCellStringValue(row.getCell(0)))); - detail.setItemName(getCellStringValue(row.getCell(1))); - detail.setItemCategory(itemCategory); - - // 鏍规嵁椤圭洰绫诲瀷璁剧疆闇�姹傚瓧娈� - if ("DAY_INSPECTION".equals(itemCategory)) { - detail.setItemDemand(getCellStringValue(row.getCell(2))); - } else if ("WEEK_INSPECTION".equals(itemCategory)) { - detail.setItemDemand(getCellStringValue(row.getCell(2))); - } - - details.add(detail); - } - - return details; - } - - /** - * 鏌ユ壘琛ㄦ牸鍖哄煙 - */ - private int[] findTableSection(Sheet sheet, String primaryHeader, String secondaryHeader) { - for (int rowIdx = 0; rowIdx <= sheet.getLastRowNum(); rowIdx++) { - Row row = sheet.getRow(rowIdx); - if (row == null) continue; - - if (isHeaderRow(row, primaryHeader, secondaryHeader)) { - int startRow = rowIdx + 1; - int endRow = findDataEnd(sheet, startRow); - return new int[]{startRow, endRow}; - } - } - return null; - } - - /** - * 妫�鏌ユ槸鍚︿负琛ㄥご琛� - */ - private boolean isHeaderRow(Row row, String header1, String header2) { - boolean foundHeader1 = false; - boolean foundHeader2 = false; - - for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) { - Cell cell = row.getCell(colIdx); - if (cell == null) continue; - - String cellValue = getCellStringValue(cell); - if (cellValue.contains(header1)) foundHeader1 = true; - if (cellValue.contains(header2)) foundHeader2 = true; - } - - return foundHeader1 && foundHeader2; - } - - /** - * 鏌ユ壘鏁版嵁缁撴潫浣嶇疆 - */ - private int findDataEnd(Sheet sheet, int startRow) { - for (int rowIdx = startRow; rowIdx <= sheet.getLastRowNum(); rowIdx++) { - Row row = sheet.getRow(rowIdx); - if (row == null) return rowIdx - 1; - - // 妫�鏌ユ槸鍚︾粨鏉熸爣蹇楄锛堝绛惧瓧琛岋級 - if (isSignatureRow(row)) { - return rowIdx - 1; - } - - // 妫�鏌ユ槸鍚︽柊鐨勮〃澶村紑濮� - if (isNewHeaderStart(row)) { - return rowIdx - 1; - } - } - return sheet.getLastRowNum(); - } - - /** - * 璇嗗埆绛惧瓧琛岀壒寰� - */ - private boolean isSignatureRow(Row row) { - for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) { - Cell cell = row.getCell(colIdx); - if (cell == null) continue; - - String value = getCellStringValue(cell); - if (value.contains("绛惧瓧") || value.contains("璐d换浜�") || - value.contains("鎵ц") || value.contains("纭")) { - return true; - } - } - return false; - } - - /** - * 璇嗗埆鏂拌〃澶村紑濮� - */ - private boolean isNewHeaderStart(Row row) { - for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) { - Cell cell = row.getCell(colIdx); - if (cell == null) continue; - - String value = getCellStringValue(cell); - if ("搴忓彿".equals(value) || "鐐规椤圭洰".equals(value) || "鍛ㄤ繚鍏婚」鐩�".equals(value)) { - return true; - } - } - return false; - } - - /** - * 妫�鏌ヨ鏄惁涓虹┖ - */ - private boolean isEmptyRow(Row row) { - if (row == null) return true; - for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) { - Cell cell = row.getCell(colIdx); - if (cell != null && cell.getCellType() != CellType.BLANK) { - String value = getCellStringValue(cell); - if (StringUtils.isNotBlank(value)) { - return false; - } - } - } - return true; - } - - /** * 浣跨敤姝e垯鎻愬彇瀛楁 */ private String extractField(String text, String regex) { @@ -911,10 +819,139 @@ } /** - * 鑾峰彇鍗曞厓鏍煎瓧绗︿覆鍊� + * 鎻愬彇姣忔棩鐐规椤圭洰 + */ + private List<EamMaintenanceStandardDetail> extractDailyItems(Sheet sheet, EamMaintenanceStandard standard, Map<Integer, String> rowErrors) { + // 浣跨敤澶氬叧閿瘝鍖归厤 + String[] primaryHeaders = {"鐐规椤圭洰", "鏃ュ父鐐规", "姣忔棩妫�鏌�"}; + String[] secondaryHeaders = {"瀹屾垚鏁版嵁/瑕佹眰", "妫�鏌ユ爣鍑�", "瑕佹眰"}; + return extractItems(sheet, standard, primaryHeaders, secondaryHeaders, "DAY_INSPECTION", rowErrors); + } + + /** + * 鎻愬彇鍛ㄤ繚鍏婚」鐩� + */ + private List<EamMaintenanceStandardDetail> extractWeeklyItems(Sheet sheet, EamMaintenanceStandard standard, Map<Integer, String> rowErrors) { + // 浣跨敤澶氬叧閿瘝鍖归厤 + String[] primaryHeaders = {"鍛ㄤ繚鍏婚」鐩�", "鍛ㄤ繚鍏�", "姣忓懆淇濆吇"}; + String[] secondaryHeaders = {"妫�鏌ユ爣鍑�", "淇濆吇瑕佹眰", "鏍囧噯"}; + return extractItems(sheet, standard, primaryHeaders, secondaryHeaders, "WEEK_INSPECTION", rowErrors); + } + + /** + * 鏍稿績鏀硅繘锛氫紭鍖栬〃鏍煎尯鍩熻瘑鍒拰鏁版嵁鎻愬彇 + */ + private List<EamMaintenanceStandardDetail> extractItems(Sheet sheet, + EamMaintenanceStandard standard, + String[] primaryHeaders, + String[] secondaryHeaders, + String itemCategory, + Map<Integer, String> rowErrors) { + + // 1. 瀹氫綅琛ㄦ牸鍖哄煙锛堢簿纭尮閰嶈〃澶达級 + int startRow = findHeaderRow(sheet, primaryHeaders, secondaryHeaders); + if (startRow == -1) { + rowErrors.put(-1, "鏈壘鍒�" + Arrays.toString(primaryHeaders) + "琛ㄥご鍖哄煙"); + return Collections.emptyList(); + } + + int endRow = findDataEnd(sheet, startRow + 1, "鍛ㄤ繚鍏婚」鐩�"); + + // 鎻愬彇鏃ュ織锛堝疄闄呬娇鐢ㄦ椂鍙互鍘绘帀锛� + System.out.println("鎻愬彇鍖哄煙: " + (startRow + 1) + "琛屽埌" + (endRow + 1) + "琛�"); + + // 2. 鎻愬彇鏁版嵁琛� + List<EamMaintenanceStandardDetail> details = new ArrayList<>(); + for (int rowIdx = startRow + 1; rowIdx <= endRow; rowIdx++) { + Row row = sheet.getRow(rowIdx); + if (row == null) continue; + + try { + // 搴忓彿鍒楀鐞� + Cell seqCell = row.getCell(0); + if (seqCell == null || seqCell.getCellType() == CellType.BLANK) { + continue; + } + + // 鑾峰彇搴忓彿鍊硷紙鏀寔鏁板瓧鍜屾枃鏈牸寮忥級 + int seqValue = 0; + try { + if (seqCell.getCellType() == CellType.NUMERIC) { + seqValue = (int) seqCell.getNumericCellValue(); + } else if (seqCell.getCellType() == CellType.STRING) { + seqValue = Integer.parseInt(seqCell.getStringCellValue().trim()); + } + } catch (NumberFormatException e) { + rowErrors.put(rowIdx + 1, "搴忓彿鏍煎紡閿欒"); + continue; + } + + // 椤圭洰鍚嶇О鍒楋紙绗簩鍒楋級 + Cell nameCell = row.getCell(1); + if (nameCell == null || nameCell.getCellType() == CellType.BLANK) { + continue; + } + String itemName = getCellStringValue(nameCell).trim(); + + // 瑕佹眰/鏍囧噯鍒楋紙绗笁鍒楋級 + String demand = ""; + if (row.getLastCellNum() >= 3) { + Cell demandCell = row.getCell(2); + if (demandCell != null) { + demand = getCellStringValue(demandCell).trim(); + } + } + + // 鍒涘缓璇︽儏瀵硅薄 + EamMaintenanceStandardDetail detail = new EamMaintenanceStandardDetail(); + detail.setStandardId(standard.getId()); + detail.setItemCode(seqValue); + detail.setItemName(itemName); + detail.setItemDemand(demand); + detail.setItemCategory(itemCategory); + details.add(detail); + + } catch (Exception e) { + rowErrors.put(rowIdx + 1, "瑙f瀽閿欒: " + e.getMessage()); + } + } + return details; + } + + /** + * 鑾峰彇琛屼腑鎵�鏈夊崟鍏冩牸鐨勫瓧绗︿覆鍊� + */ + private List<String> getRowStringValues(Row row) { + List<String> values = new ArrayList<>(); + if (row == null) return values; + + for (int cellIdx = 0; cellIdx < row.getLastCellNum(); cellIdx++) { + Cell cell = row.getCell(cellIdx); + if (cell != null) { + values.add(getCellStringValue(cell)); + } else { + values.add(""); // 瀵逛簬绌哄崟鍏冩牸娣诲姞绌哄瓧绗︿覆 + } + } + return values; + } + + /** + * 鑾峰彇鍗曞厓鏍煎瓧绗︿覆鍊硷紙澧炲己鍏紡澶勭悊锛� */ private String getCellStringValue(Cell cell) { - if (cell == null) return ""; + if (cell == null) { + return ""; + } + // 淇濇寔涓嶅彉锛屼絾娣诲姞鏁板瓧绫诲瀷澶勭悊 + if (cell.getCellType() == CellType.NUMERIC) { + // 鏁存暟澶勭悊 + double num = cell.getNumericCellValue(); + if (num == (int) num) { + return String.valueOf((int) num); + } + return String.valueOf(num); + } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue().trim(); @@ -926,22 +963,117 @@ case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: - return handleFormulaCell(cell); + return getFormulaCellValue(cell); default: return ""; } } /** - * 澶勭悊鍏紡鍗曞厓鏍� + * 绮剧‘鏌ユ壘琛ㄥご琛� + */ + private int findHeaderRow(Sheet sheet, String[] primaryHeaders, String[] secondaryHeaders) { + for (int rowIdx = 0; rowIdx <= sheet.getLastRowNum(); rowIdx++) { + Row row = sheet.getRow(rowIdx); + if (row == null) continue; + + String rowText = getRowStringValues(row).stream().collect(Collectors.joining()); + + // 妫�鏌ヤ富鏍囬鍜屽壇鏍囬 + boolean hasPrimary = false; + boolean hasSecondary = false; + + for (String header : primaryHeaders) { + if (rowText.contains(header)) { + hasPrimary = true; + break; + } + } + + for (String header : secondaryHeaders) { + if (rowText.contains(header)) { + hasSecondary = true; + break; + } + } + + if (hasPrimary && hasSecondary) { + return rowIdx; + } + } + return -1; + } + + /** + * 鏌ユ壘鏁版嵁缁撴潫浣嶇疆锛堟牴鎹偍鐨凟xcel缁撴瀯浼樺寲锛� */ - private String handleFormulaCell(Cell cell) { + private int findDataEnd(Sheet sheet, int startRow, String nextSectionKeyword) { + int consecutiveEmptyRows = 0; + final int MAX_EMPTY_ROWS = 3; + + for (int rowIdx = startRow; rowIdx <= sheet.getLastRowNum(); rowIdx++) { + Row row = sheet.getRow(rowIdx); + + // 鍏抽敭鏀硅繘1锛氱┖琛屽鐞� + if (isEssentiallyEmpty(row)) { + consecutiveEmptyRows++; + if (consecutiveEmptyRows >= MAX_EMPTY_ROWS) { + return rowIdx - consecutiveEmptyRows; + } + continue; + } else { + consecutiveEmptyRows = 0; + } + + // 鍏抽敭鏀硅繘2锛氱粨鏉熸爣璁版娴� + String rowText = getRowStringValues(row).stream().collect(Collectors.joining()); + + // 鏍规嵁鎮ㄧ殑Excel缁撴瀯锛岀瀛楄鏈夌壒瀹氭牸寮� + if (rowText.contains("缁存姢璐d换浜虹瀛�")) { + return rowIdx - 1; + } + + // 妫�娴嬩笅涓�涓尯鍩熺殑寮�濮嬶紙濡傚懆淇濆吇椤圭洰锛� + if (StringUtils.isNotBlank(nextSectionKeyword) && + rowText.contains(nextSectionKeyword)) { + return rowIdx - 1; + } + } + return sheet.getLastRowNum(); + } + + /** + * 鍒ゆ柇鏉′欢锛氬墠涓ゅ垪涓虹┖鍗宠涓虹┖琛� + */ + private boolean isEssentiallyEmpty(Row row) { + if (row == null) return true; + + // 妫�鏌ュ簭鍙峰垪 + Cell indexCell = row.getCell(0); + if (indexCell != null && indexCell.getCellType() != CellType.BLANK) { + return false; + } + + // 妫�鏌ラ」鐩悕绉板垪 + Cell nameCell = row.getCell(1); + if (nameCell != null && nameCell.getCellType() != CellType.BLANK) { + return false; + } + + return true; + } + + /** + * 鑾峰彇鍏紡鍗曞厓鏍煎�� + */ + private String getFormulaCellValue(Cell cell) { try { - FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator(); + Workbook workbook = cell.getSheet().getWorkbook(); + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); CellValue cellValue = evaluator.evaluate(cell); - - if (cellValue == null) return ""; - + if (cellValue == null) { + return ""; + } switch (cellValue.getCellType()) { case STRING: return cellValue.getStringValue(); @@ -953,8 +1085,66 @@ return ""; } } catch (Exception e) { + log.warn("瑙f瀽鍏紡鍗曞厓鏍煎け璐�"); return ""; } + } + + + private int findDataEnd(Sheet sheet, int startRow) { + int consecutiveEmptyRows = 0; + final int MAX_EMPTY_ROWS = 2; + boolean foundData = false; + + for (int rowIdx = startRow; rowIdx <= sheet.getLastRowNum(); rowIdx++) { + Row row = sheet.getRow(rowIdx); + + // 鍏抽敭浼樺寲1锛氬厛妫�鏌ユ槸鍚︿负绌鸿 + if (isEmptyRow(row)) { + consecutiveEmptyRows++; + if (consecutiveEmptyRows >= MAX_EMPTY_ROWS) { + return foundData ? rowIdx - consecutiveEmptyRows : startRow; + } + continue; + } else { + consecutiveEmptyRows = 0; + } + + // 鍏抽敭浼樺寲2锛氫弗鏍奸檺瀹氱粨鏉熸爣璁扮殑璇嗗埆鏉′欢 + if (isStrongEndMarker(row)) { + return foundData ? rowIdx - 1 : startRow; + } + + // 鍏抽敭浼樺寲3锛氭爣璁板凡鎵惧埌鏈夋晥鏁版嵁 + foundData = true; + } + return sheet.getLastRowNum(); + } + + // 澧炲己鐗堢粨鏉熸爣璁拌瘑鍒� + private boolean isStrongEndMarker(Row row) { + String rowText = String.join("", getRowStringValues(row)).toLowerCase(); + + return + // 绮剧‘鍖归厤绛惧瓧鐗瑰緛锛堝嚭鐜板湪琛岄锛� + (rowText.startsWith("缁存姢璐d换浜虹瀛�") || + rowText.startsWith("鎵ц浜虹瀛�")) || + // 绮剧‘鍖归厤鏂版澘鍧楁爣棰� + rowText.matches("^\\s*鍛ㄤ繚鍏婚」鐩甛\s*$") || + rowText.contains("骞村害淇濆吇椤圭洰"); + } + + // 绌鸿妫�娴嬩紭鍖栵紙鍏佽閮ㄥ垎鍒椾负绌猴級 + private boolean isEmptyRow(Row row) { + if (row == null) return true; + // 鍙鏌ュ墠3鍒楋紙搴忓彿鍒�+椤圭洰鍚�+瑕佹眰锛� + for (int cellIdx = 0; cellIdx < Math.min(3, row.getLastCellNum()); cellIdx++) { + Cell cell = row.getCell(cellIdx); + if (cell != null && cell.getCellType() != CellType.BLANK) { + return false; + } + } + return true; } /*瀵煎叆鐐规鏂囦欢Excel--------------------------缁撴潫*/ @@ -969,10 +1159,25 @@ */ @Override @Transactional - public Result<?> importMaintenanceStandard(MultipartFile file, String type) { + public Result<?> importMaintenanceStandard(MultipartFile file, String type,String id) { String fileName = file.getOriginalFilename(); try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) { + // 鑾峰彇鏂囨。鏍囬锛堢涓�涓潪绌烘钀斤級 + String documentTitle = null; + for (XWPFParagraph p : doc.getParagraphs()) { + String text = p.getText(); + if (text != null && !text.trim().isEmpty()) { + documentTitle = text.trim(); + break; // 鎵惧埌绗竴涓潪绌烘钀藉嵆閫�鍑� + } + } + + // 鍩虹楠岃瘉 + if (doc.getTables().isEmpty()) { + return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸"); + } + // 鍩虹楠岃瘉 if (doc.getTables().isEmpty()) { return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸"); @@ -1000,12 +1205,64 @@ return Result.error(fileName + ": 璁惧淇℃伅鎻愬彇澶辫触"); } + EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard(); + if (StrUtil.isNotEmpty(id)){ + eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id); + } + // 閰嶇疆绫诲瀷鐩稿叧鍙傛暟 configureStandard(standard, type, file); - EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name()); - if (exist != null) { - return Result.error(fileName + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + if (StrUtil.isEmpty(id)){ + EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name()); + if (exist != null) { + return Result.error(fileName + ": 璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞"); + } } + + if (StrUtil.isNotEmpty(id)){ + if (eamMaintenanceStandardOld.getEquipmentId().equals(standard.getEquipmentId()) + &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(standard.getMaintenanceCategory())) { + //鍒ゆ柇鏄惁鐜版湁寰呮彁浜ゆ暟鎹� + EamMaintenanceStandard maintenanceStandard=eamMaintenanceStandardMapper.selectOne( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",standard.getEquipmentId()) + .eq("maintenance_category",standard.getMaintenanceCategory()) + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()) + .eq("del_flag", CommonConstant.DEL_FLAG_0)); + if (maintenanceStandard != null) { + //鍒犻櫎鍘熸湁寰呮彁浜� + eamMaintenanceStandardMapper.deleteById(maintenanceStandard.getId()); + } + //鏌ヨ鍦ㄦ祦绋嬩腑鐨勬暟鎹� + List<EamMaintenanceStandard> eamMaintenanceStandardList=eamMaintenanceStandardMapper.selectList( + new QueryWrapper<EamMaintenanceStandard>().eq("equipment_id",standard.getEquipmentId()) + .eq("maintenance_category",standard.getMaintenanceCategory()) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .and(it->it. + eq("standard_status",MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()) + .or() + .eq("standard_status",MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()) + )); + if (!eamMaintenanceStandardList.isEmpty()) { + return Result.error("宸插瓨鍦ㄥ浜庡鎵规祦绋嬬殑鏁版嵁锛岃鍒犻櫎鎴栫粨鏉熷悗杩涜鍗囩増瀵煎叆鎿嶄綔"); + } + //鍗囩増鎿嶄綔锛屼綔搴熷師鏈� + eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); + eamMaintenanceStandardMapper.updateById(eamMaintenanceStandardOld); + //鐗堟湰閫掑鑾峰彇鏁板瓧 + Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$"); + Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion()); + if (matcher.find()) { + try { + int mainVersion = Integer.parseInt(matcher.group(1)); + standard.setStandardVersion("v" + (mainVersion + 1)); + } catch (NumberFormatException ignored) { + } + } + }else { + return Result.error("鍗囩増瀵煎叆鐨勬枃浠朵笌鍘熸湁鏁版嵁鐨勮澶囩紪鍙蜂笉涓�鑷�,璇烽噸鏂扮紪杈戝鍏ユ枃浠�"); + } + } + standard.setStandardName(documentTitle); eamMaintenanceStandardMapper.insert(standard); standardId = standard.getId(); @@ -1176,7 +1433,6 @@ // 鍒涘缓淇濆吇椤圭洰 EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail(); - item.setItemCategory("THIRD_MAINTENANCE"); item.setStandardId(standardId); int colCount = row.getTableCells().size(); -- Gitblit v1.9.3