From 22d31632a106266333bee84149f6af5c88415e85 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期二, 08 七月 2025 11:30:15 +0800 Subject: [PATCH] 定期生成点检工单,定期扫描已过期点检工单 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 1240 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 1,172 insertions(+), 68 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 6d30e4b..2f1b8f8 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 @@ -1,35 +1,69 @@ package org.jeecg.modules.eam.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.jeecg.weibo.exception.BusinessException; +import liquibase.pro.packaged.R; +import liquibase.pro.packaged.S; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.*; import org.apache.shiro.SecurityUtils; -import org.jeecg.common.api.vo.FileUploadResult; +import org.flowable.engine.TaskService; +import org.flowable.task.api.Task; +import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.eam.base.entity.BaseFactory; +import org.jeecg.modules.eam.base.entity.BaseFactoryUser; +import org.jeecg.modules.eam.base.service.IBaseFactoryService; +import org.jeecg.modules.eam.base.service.IBaseFactoryUserService; +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.entity.EamEquipment; +import org.jeecg.modules.eam.entity.EamEquipmentExtend; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; +import org.jeecg.modules.eam.request.ImportException; +import org.jeecg.modules.eam.service.IEamEquipmentExtendService; +import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; +import org.jeecg.modules.eam.vo.*; +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; +import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.service.IFlowDefinitionService; +import org.jeecg.modules.flowable.service.IFlowTaskService; +import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; +import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.system.vo.UserSelector; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -38,14 +72,46 @@ * @Date: 2025-03-26 * @Version: V1.0 */ -@Service -public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService { +@Service("IEamMaintenanceStandardService") +public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService , FlowCallBackServiceI { @Resource private EamMaintenanceStandardMapper eamMaintenanceStandardMapper; - @Autowired private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService; + @Autowired + private IBaseFactoryUserService baseFactoryUserService; + @Autowired + private IBaseFactoryService baseFactoryService; + @Resource + private FlowCommonService flowCommonService; + @Resource + private IFlowDefinitionService flowDefinitionService; + @Autowired + private IFlowTaskService flowTaskService; + @Autowired + private TaskService taskService; + @Autowired + private IFlowMyBusinessService flowMyBusinessService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IEamEquipmentService eamEquipmentService; + @Autowired + private IEamEquipmentExtendService eamEquipmentExtendService; + @Autowired + private ISysBusinessCodeRuleService businessCodeRuleService; + + // 甯搁噺瀹氫箟 + private static final String REPAIR_TITLE = "缁翠慨浜哄憳淇濆吇鍐呭"; + private static final String OPERATOR_TITLE = "鎿嶄綔浜哄憳淇濆吇鍐呭"; + private static final Map<String, EamMaintenanceStandardDetailCategory> SECOND_CATEGORY_MAPPING = new HashMap<>(); + + // 鏋氫妇鏄犲皠鍒濆鍖� + static { + SECOND_CATEGORY_MAPPING.put(REPAIR_TITLE, EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE); + SECOND_CATEGORY_MAPPING.put(OPERATOR_TITLE, EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE); + } @Override public IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard) { @@ -56,13 +122,19 @@ if (sysUser == null) { return page; } - if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { + if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) { //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧 - List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); + List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(",")); queryWrapper.in("e.equipment_code", equipArr); } else { - //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶� - queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId()); + //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶� + List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService. + list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId())); + if(!CollectionUtils.isEmpty(baseFactoryUserList)){ + List<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toList()); + List<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getFactoryCode).collect(Collectors.toList()); + queryWrapper.in("e.factory_code", factoryCode); + } } if(eamMaintenanceStandard != null) { //缂栫爜 妯$硦鏌ヨ @@ -71,7 +143,7 @@ } //鍚嶇О 妯$硦鏌ヨ if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) { - queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardCode()); + queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardName()); } //璁惧 if(StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) { @@ -91,6 +163,10 @@ .or() .like("e.equipment_code", eamMaintenanceStandard.getKeyword())); } + //id + if(StringUtils.isNotBlank(eamMaintenanceStandard.getId())) { + queryWrapper.eq("ems.id", eamMaintenanceStandard.getId()); + } } queryWrapper.orderByDesc("ems.create_time"); return eamMaintenanceStandardMapper.queryPageList(page, queryWrapper); @@ -100,15 +176,10 @@ @Transactional(rollbackFor = Exception.class) public boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) { EamMaintenanceStandard entity = new EamMaintenanceStandard(); - entity.setStandardCode(standardRequest.getStandardCode()); - entity.setStandardName(standardRequest.getStandardName()); - entity.setMaintenanceCategory(standardRequest.getMaintenanceCategory()); - entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); - entity.setInitialDate(standardRequest.getInitialDate()); - entity.setFileCode(standardRequest.getFileCode()); - entity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + BeanUtils.copyProperties(standardRequest, entity); + entity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); //鐗堟湰閫掑 - entity.setStandardVersion(CommonConstant.OPERATE_TYPE_1); + entity.setStandardVersion("v"+CommonConstant.OPERATE_TYPE_1); //璁惧澶勭悊 entity.setEquipmentId(standardRequest.getEquipmentId()); //鍒犻櫎鏍囪 @@ -117,17 +188,6 @@ EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory()); if(exist != null){ throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); - } - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - entity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } } eamMaintenanceStandardMapper.insert(entity); //澶勭悊鏄庣粏鏁版嵁 @@ -149,20 +209,6 @@ } entity.setStandardName(standardRequest.getStandardName()); entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); - entity.setFileCode(standardRequest.getFileCode()); - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - entity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } - }else { - entity.setReferenceFile(null); - } eamMaintenanceStandardMapper.updateById(entity); //澶勭悊璇︽儏 if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) { @@ -197,9 +243,6 @@ if(entity == null){ throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�"); } - entity.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); - //鍘熸潵鐨勪綔搴� - eamMaintenanceStandardMapper.updateById(entity); //鏂板涓�涓増鏈� EamMaintenanceStandard newEntity = new EamMaintenanceStandard(); @@ -208,10 +251,18 @@ newEntity.setMaintenanceCategory(standardRequest.getMaintenanceCategory()); newEntity.setMaintenancePeriod(standardRequest.getMaintenancePeriod()); newEntity.setInitialDate(standardRequest.getInitialDate()); - newEntity.setFileCode(standardRequest.getFileCode()); - newEntity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + newEntity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); //鐗堟湰閫掑 - newEntity.setStandardVersion(entity.getStandardVersion() + 1); + //鑾峰彇鏁板瓧 + Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$"); + Matcher matcher = pattern.matcher(entity.getStandardVersion()); + if (matcher.find()) { + try { + int mainVersion = Integer.parseInt(matcher.group(1)); + newEntity.setStandardVersion("v"+(mainVersion+1)); + } catch (NumberFormatException ignored) { + } + } //璁惧澶勭悊 newEntity.setEquipmentId(standardRequest.getEquipmentId()); //鍒犻櫎鏍囪 @@ -220,17 +271,6 @@ EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory()); if(exist != null){ throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�"); - } - //澶勭悊闄勪欢 - if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) { - FileUploadResult fileUploadResult = standardRequest.getFileList().get(0); - ObjectMapper mapper = new ObjectMapper(); - try { - String referenceFile = mapper.writeValueAsString(fileUploadResult); - newEntity.setReferenceFile(referenceFile); - } catch (JsonProcessingException e) { - log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e); - } } eamMaintenanceStandardMapper.insert(newEntity); //澶勭悊鏄庣粏鏁版嵁 @@ -254,7 +294,7 @@ queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name()); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion); List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper); @@ -277,7 +317,7 @@ query.setEquipmentId(equipmentId); query.setKeyword(keyword); query.setMaintenanceCategory(maintenanceCategory); - query.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name()); + query.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query); return pageData.getRecords(); } @@ -287,7 +327,1071 @@ LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0); queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory); - queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name()); + queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.START.name()); return eamMaintenanceStandardMapper.selectList(queryWrapper); } + + + /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/ + + /** + * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹� + * @param id + * @return + */ + @Override + public Result<?> saveEamMaintenanceStandardProcess(String id){ + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + EamMaintenanceStandard maintenanceStandard=this.getById(id); + if (maintenanceStandard==null){ + return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + System.out.println("淇濆吇瑙勮寖娴佺▼锛�" + maintenanceStandard.getId()); + flowCommonService.initActBusiness(maintenanceStandard.getStandardName()+"瑙勮寖杩涜娴佺▼瀹℃牳", + maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null); + Map<String, Object> variables = new HashMap<>(); + variables.put("dataId", maintenanceStandard.getId()); + variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼"); + variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼"); + variables.put("proofreading",true); + Result result= flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables); + if (!result.isSuccess()) { + super.removeById(maintenanceStandard.getId()); + }else { + maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name()); + maintenanceStandard.setDesigner(user.getUsername()); + maintenanceStandard.setDesignTime(new Date()); + eamMaintenanceStandardMapper.updateById(maintenanceStandard); + //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>() + .eq("data_id", maintenanceStandard.getId()) + ); + if (businessList.isEmpty()) { + return Result.error("娴佺▼璁板綍涓嶅瓨鍦�"); + } + FlowMyBusiness flowMyBusiness = businessList.get(0); + EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); + BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode())); + List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0007); + 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; + } + + /** + * 瀹℃壒鎿嶄綔 + * @param eamMaintenanceStandardVo + * @return + */ + @Override + 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("鏈壘鍒板搴斾繚鍏绘爣鍑�"); + } + + // 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); + + // 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); + eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name()); + //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳 + EamMaintenanceStandard maintenanceStandard=this.getById(eamMaintenanceStandardVo.getDataId()); + EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId()); + BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode())); + List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0008); + 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()); + } + eamMaintenanceStandard.setTechnicalManager(user.getUsername()); + eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); + eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date()); + eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getComment()); + } + this.updateById(eamMaintenanceStandard); + } else { + return result; + } + return Result.OK("鎿嶄綔鎴愬姛"); + } catch (Exception e) { + return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage()); + } + } + + 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()); + } + if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) { + values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult()); + values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment()); + } + return values; + } + + + @Override + public void afterFlowHandle(FlowMyBusiness business) { + business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣 + business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟 + business.getActStatus(); + } + + @Override + public Object getBusinessDataById(String dataId) { + return this.getById(dataId); + } + + @Override + public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) { + return null; + } + + @Override + public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { + //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞� + return null; + } + + /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/ + + + /*瀵煎叆鐐规鏂囦欢Excel--------------------------寮�濮�*/ + /** + * 鐐规琛ㄥ鍏ュ叆鍙� + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Result<?> importPointInspectionExcel(MultipartFile file) { + try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { + Sheet sheet = workbook.getSheetAt(0); + + // 鎻愬彇鍚嶇О + String name = extractInspectionTitle(file) + "鐐规琛�"; + + // 1. 鎻愬彇璁惧淇℃伅 + EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet); + if (eamMaintenanceStandard == null) { + return Result.error("璁惧淇℃伅鎻愬彇澶辫触"); + } + + eamMaintenanceStandard.setStandardName(name); + eamMaintenanceStandardMapper.insert(eamMaintenanceStandard); + + // 2. 鎻愬彇姣忔棩鐐规椤圭洰 + List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard); + if(dailyDetails.isEmpty()){ + return Result.error("鏈壘鍒版瘡鏃ョ偣妫�椤圭洰"); + } + + // 3. 鎻愬彇鍛ㄤ繚鍏婚」鐩� + List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard); + if(weeklyDetails.isEmpty()){ + return Result.error("鏈壘鍒板懆淇濆吇椤圭洰"); + } + + // 鍚堝苟骞朵繚瀛樻墍鏈夐」鐩� + List<EamMaintenanceStandardDetail> allDetails = new ArrayList<>(); + allDetails.addAll(dailyDetails); + allDetails.addAll(weeklyDetails); + + if (!CollectionUtils.isEmpty(allDetails)) { + eamMaintenanceStandardDetailService.saveBatch(allDetails); + } + + return Result.OK("鐐规琛ㄥ鍏ユ垚鍔�"); + + } catch (Exception e) { + throw new BusinessException("鐐规琛ㄥ鍏ュけ璐�: " + e.getMessage()); + } + } + + /** + * 鎻愬彇鐐规琛ㄦ爣棰� + */ + private String extractInspectionTitle(MultipartFile file) { + try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { + Sheet sheet = workbook.getSheetAt(0); + Row firstRow = sheet.getRow(0); + + if (firstRow == null) { + return "鏈壘鍒版爣棰�"; + } + + Cell firstCell = firstRow.getCell(0); + if (firstCell == null) { + return ""; + } + + String title = getCellStringValue(firstCell); + return extractTextBeforeInspection(title); + + } catch (Exception e) { + return ""; + } + } + + /** + * 鎻愬彇鐐规琛ㄤ箣鍓嶇殑鏂囧瓧 + */ + private String extractTextBeforeInspection(String title) { + if (StringUtils.isBlank(title)) { + return ""; + } + + int index = title.indexOf("鐐规琛�"); + return index > 0 ? title.substring(0, index).trim() : title; + } + + /** + * 鎻愬彇璁惧淇℃伅 + */ + private EamMaintenanceStandard extractDeviceInfo(Sheet sheet) { + Row headerRow = sheet.getRow(0); + if (headerRow == null) { + return null; + } + + String headerText = getCellStringValue(headerRow.getCell(0)); + if (StringUtils.isBlank(headerText)) { + return null; + } + + EamMaintenanceStandard standard = new EamMaintenanceStandard(); + standard.setEquipmentName(extractField(headerText, "璁惧鍚嶇О[:锛歖\\s*(\\S+)")); + standard.setEquipmentId(extractField(headerText, "璁惧鍨嬪彿[:锛歖\\s*(\\S+)")); + + + // 鏃ユ湡澶勭悊 + String dateStr = extractField(headerText, "鏃ユ湡[:锛歖\\s*(\\S+)"); + if (StringUtils.isNotBlank(dateStr)) { + try { + // 鏀寔澶氱鏃ユ湡鏍煎紡 + Date date = parseDate(dateStr); + standard.setDesignTime(date); + standard.setInitialDate(date); + } catch (ParseException ignored) { + + } + } + + // 鍏宠仈璁惧ID + if (isNotBlank(standard.getEquipmentCode()) && + isNotBlank(standard.getEquipmentName())) { + + List<EamEquipment> equipments = eamEquipmentService.list( + new QueryWrapper<EamEquipment>() + .eq("equipment_code", standard.getEquipmentCode()) + .eq("equipment_name", standard.getEquipmentName()) + ); + + if (!equipments.isEmpty()) { + standard.setEquipmentId(equipments.get(0).getId()); + }else { + return null; + } + } + + String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); + standard.setStandardCode(codeSeq); + standard.setMaintenanceCategory("POINT_INSPECTION"); + standard.setPeriodUnit("澶�"); + standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); + standard.setStandardVersion("v" + CommonConstant.OPERATE_TYPE_1); + standard.setDelFlag(0); + standard.setMaintenancePeriod(1); + + return standard; + } + + /** + * 瑙f瀽鏃ユ湡瀛楃涓� + */ + private Date parseDate(String dateStr) throws ParseException { + // 灏濊瘯澶氱鏃ユ湡鏍煎紡 + String[] patterns = { + "yyyy骞碝M鏈�", + "yyyy-MM", + "yyyy/MM", + "yyyyMM", + "yyyy骞碝鏈�" + }; + + for (String pattern : patterns) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + sdf.setLenient(false); + return sdf.parse(dateStr); + } catch (ParseException e) { + // 灏濊瘯涓嬩竴涓牸寮� + } + } + + throw new ParseException("鏃犳硶瑙f瀽鏃ユ湡: " + dateStr, 0); + } + + /** + * 鎻愬彇姣忔棩鐐规椤圭洰 + */ + 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.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) { + if (StringUtils.isBlank(text)) return ""; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(text); + return matcher.find() ? matcher.group(1) : ""; + } + + /** + * 鑾峰彇鍗曞厓鏍煎瓧绗︿覆鍊� + */ + private String getCellStringValue(Cell cell) { + if (cell == null) return ""; + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + return new SimpleDateFormat("yyyy骞碝M鏈�").format(cell.getDateCellValue()); + } + return String.valueOf((int) cell.getNumericCellValue()); + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()); + case FORMULA: + return handleFormulaCell(cell); + default: + return ""; + } + } + + /** + * 澶勭悊鍏紡鍗曞厓鏍� + */ + private String handleFormulaCell(Cell cell) { + try { + FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator(); + CellValue cellValue = evaluator.evaluate(cell); + + if (cellValue == null) return ""; + + switch (cellValue.getCellType()) { + case STRING: return cellValue.getStringValue(); + case NUMERIC: return String.valueOf((int) cellValue.getNumberValue()); + case BOOLEAN: return String.valueOf(cellValue.getBooleanValue()); + default: return ""; + } + } catch (Exception e) { + return ""; + } + } + /*瀵煎叆鐐规鏂囦欢Excel--------------------------缁撴潫*/ + + /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------寮�濮�*/ + /** + * 缁熶竴淇濆吇瑙勮寖瀵煎叆鍏ュ彛 + * @param file 涓婁紶鏂囦欢 + * @param type 淇濆吇绫诲瀷 (SECOND/THIRD) + * @return 瀵煎叆缁撴灉锛堝寘鍚垚鍔�/澶辫触淇℃伅锛� + */ + @Override + @Transactional + public Result<?> importMaintenanceStandard(MultipartFile file, String type) { + String fileName = file.getOriginalFilename(); + + try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) { + // 鍩虹楠岃瘉 + if (doc.getTables().isEmpty()) { + return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸"); + } + + XWPFTable table = doc.getTables().get(0); + + // 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔� + if (isWrongDocumentType(table, type)) { + return Result.error(fileName + ": 鏂囨。绫诲瀷涓嶅尮閰� - " + + ("SECOND".equals(type) ? "璇峰鍏ヤ簩绾т繚鍏绘枃妗�" : "璇峰鍏ヤ笁绾т繚鍏绘枃妗�")); + } + + EamMaintenanceStandard standard = extractDeviceInfo(table); + if (standard == null) { + return Result.error(fileName + ": 璁惧淇℃伅鎻愬彇澶辫触"); + } + + // 閰嶇疆绫诲瀷鐩稿叧鍙傛暟 + configureStandard(standard, type, file); + eamMaintenanceStandardMapper.insert(standard); + String standardId = standard.getId(); + + // 鎻愬彇淇濆吇椤圭洰 + List<EamMaintenanceStandardDetail> items; + if ("SECOND".equals(type)) { + items = extractSecondMaintenanceItems(table, standardId); + } else if ("THIRD".equals(type)) { + items = extractThirdMaintenanceItems(table, standardId); + } else { + return Result.error(fileName + ": 涓嶆敮鎸佺殑淇濆吇绫诲瀷: " + type); + } + + // 椤圭洰楠岃瘉 + if (items.isEmpty()) { + return Result.error(fileName + ": 鏈彁鍙栧埌浠讳綍淇濆吇椤圭洰"); + } + + // 淇濆瓨椤圭洰 + eamMaintenanceStandardDetailService.saveBatch(items); + + return Result.ok(fileName + ": 瀵煎叆鎴愬姛, 椤圭洰鏁�: " + items.size()); + + } catch (ImportException e) { + return Result.error(e.getMessage()); + } catch (Exception e) { + return Result.error(fileName + ": 绯荤粺閿欒 - " + e.getClass().getSimpleName()); + } + } + + /** + * 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔� + */ + private boolean isWrongDocumentType(XWPFTable table, String requestedType) { + boolean hasRepairTitle = false; + boolean hasOperatorTitle = false; + boolean hasMaintenancePart = false; + + // 鍙鏌ュ墠10琛岋紙閫氬父鏍囬鍦ㄥ墠鍑犺锛� + int maxRows = Math.min(table.getNumberOfRows(), 10); + + for (int i = 0; i < maxRows; i++) { + XWPFTableRow row = table.getRow(i); + if (row == null) continue; + + // 妫�鏌ユ墍鏈夊崟鍏冩牸鍐呭 + for (int j = 0; j < row.getTableCells().size(); j++) { + String cellText = getCellText(row.getCell(j)); + + // 妫�鏌ヤ簩绾т繚鍏荤壒寰� + if (cellText.contains(REPAIR_TITLE)) { + hasRepairTitle = true; + } + if (cellText.contains(OPERATOR_TITLE)) { + hasOperatorTitle = true; + } + + // 妫�鏌ヤ笁绾т繚鍏荤壒寰� + if (cellText.contains("淇濆吇閮ㄤ綅")) { + hasMaintenancePart = true; + } + } + } + + // 閫昏緫鍒ゆ柇 + if ("SECOND".equals(requestedType)) { + // 濡傛灉璇锋眰瀵煎叆浜岀骇淇濆吇锛屼絾鏂囨。涓湁涓夌骇淇濆吇鐗瑰緛 + return !(hasRepairTitle || hasOperatorTitle) || hasMaintenancePart; + } else if ("THIRD".equals(requestedType)) { + // 濡傛灉璇锋眰瀵煎叆涓夌骇淇濆吇锛屼絾鏂囨。涓湁浜岀骇淇濆吇鐗瑰緛 + return !hasMaintenancePart || (hasRepairTitle || hasOperatorTitle); + } + + return false; + } + + /** + * 鎻愬彇璁惧鍩烘湰淇℃伅 + */ + private EamMaintenanceStandard extractDeviceInfo(XWPFTable table) { + if (table.getNumberOfRows() < 2) return null; + + // 鎻愬彇鍓嶄袱琛屾暟鎹� + Map<String, String> row1Data = extractRowData(table.getRow(0)); + Map<String, String> row2Data = extractRowData(table.getRow(1)); + + // 鍒涘缓璁惧鏍囧噯瀵硅薄 + EamMaintenanceStandard standard = new EamMaintenanceStandard(); + standard.setEquipmentText(row1Data.get("璁惧绫诲埆")); + standard.setEquipmentCode(row1Data.get("璁惧缂栧彿")); + standard.setEquipmentName(row2Data.get("璁惧鍚嶇О")); + standard.setEquipmentModel(row2Data.get("璁惧鍨嬪彿")); + + // 鍏宠仈璁惧ID + if (isNotBlank(standard.getEquipmentCode()) && + isNotBlank(standard.getEquipmentName())) { + + List<EamEquipment> equipments = eamEquipmentService.list( + new QueryWrapper<EamEquipment>() + .eq("equipment_code", standard.getEquipmentCode()) + .eq("equipment_name", standard.getEquipmentName()) + ); + + if (!equipments.isEmpty()) { + standard.setEquipmentId(equipments.get(0).getId()); + }else { + return null; + } + } + + return standard; + } + + // 绠�鏄撶増瀛楃涓查潪绌哄垽鏂� + private boolean isNotBlank(String str) { + return str != null && !str.trim().isEmpty(); + } + + /** + * 琛ㄦ牸琛屾暟鎹В鏋� + */ + private Map<String, String> extractRowData(XWPFTableRow row) { + Map<String, String> data = new HashMap<>(); + int cellCount = row.getTableCells().size(); + + try { + // 閿�煎妯″紡 (鏍囩|鍊紎鏍囩|鍊�) + if (cellCount >= 4 && cellCount % 2 == 0) { + for (int i = 0; i < cellCount; i += 2) { + String key = cleanKey(getCellText(row.getCell(i))); + String value = getCellText(row.getCell(i + 1)); + if (!key.isEmpty()) data.put(key, value); + } + } + // 杩炵画鍗曞厓鏍兼ā寮� + else { + for (int i = 0; i < cellCount; i++) { + String text = getCellText(row.getCell(i)); + int colonIndex = text.indexOf('锛�'); + if (colonIndex > 0) { + String key = cleanKey(text.substring(0, colonIndex)); + String value = text.substring(colonIndex + 1); + data.put(key, value); + } + } + } + } catch (Exception e) { + log.error("琛屾暟鎹В鏋愬紓甯�", e); + } + return data; + } + + /** + * 閿悕鏍囧噯鍖栧鐞� + */ + private String cleanKey(String key) { + if (key == null) return ""; + // 绉婚櫎绌烘牸鍜屼腑鏂囧啋鍙� + return key.replaceAll("\\s", "").replace("锛�", ""); + } + + /** + * 閰嶇疆淇濆吇鏍囧噯鍙傛暟 + */ + private void configureStandard(EamMaintenanceStandard standard, String type, MultipartFile file) { + // 鍩虹鍙傛暟 + String filename = file.getOriginalFilename(); + if (filename != null && filename.contains(".")) { + filename = filename.substring(0, filename.lastIndexOf('.')); + } + + standard.setStandardName(filename) + .setInitialDate(new Date()) + .setStandardStatus(MaintenanceStandardStatusEnum.START.name()) + .setStandardVersion("v1.0") + .setDelFlag(0) + .setStandardCode(businessCodeRuleService.generateBusinessCodeSeq( + BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE + )); + + // 绫诲瀷鐗瑰畾鍙傛暟 + if ("SECOND".equals(type)) { + standard.setMaintenanceCategory("SECOND_MAINTENANCE") + .setMaintenancePeriod(6) + .setPeriodUnit("鏈�"); + } else { + standard.setMaintenanceCategory("THIRD_MAINTENANCE") + .setPeriodUnit("骞�"); + + // 鑾峰彇涓夌骇淇濆吇鍛ㄦ湡 + if (standard.getEquipmentId() != null) { + EamEquipmentExtend extend = eamEquipmentExtendService.getById(standard.getEquipmentId()); + if (extend != null) { + standard.setMaintenancePeriod(extend.getThirdMaintenancePeriod()); + } + } + } + } + + /** + * 鎻愬彇浜岀骇淇濆吇椤圭洰 + */ + private List<EamMaintenanceStandardDetail> extractSecondMaintenanceItems( + XWPFTable table, String standardId) { + + List<EamMaintenanceStandardDetail> items = new ArrayList<>(); + EamMaintenanceStandardDetailCategory currentCategory = null; + + for (int i = 0; i < table.getNumberOfRows(); i++) { + XWPFTableRow row = table.getRow(i); + if (row == null) continue; + + // 妫�鏌ユ槸鍚︽槸鏍囬琛岋紙缁翠慨浜哄憳淇濆吇鍐呭鎴栨搷浣滀汉鍛樹繚鍏诲唴瀹癸級 + String firstCell = getCellText(row.getCell(0)); + if (firstCell != null) { + for (String title : SECOND_CATEGORY_MAPPING.keySet()) { + if (firstCell.contains(title)) { + currentCategory = SECOND_CATEGORY_MAPPING.get(title); + + // 妫�鏌ョ浜屽垪鍜岀涓夊垪鏄惁鏄�"搴忓彿"鍜�"淇濆吇鍐呭" + if (row.getTableCells().size() > 2) { + String secondCell = getCellText(row.getCell(1)); + String thirdCell = getCellText(row.getCell(2)); + + // 鏄庣‘璺宠繃鏍囬琛� + if ("搴忓彿".equals(secondCell) && "淇濆吇鍐呭".equals(thirdCell)) { + continue; // 璺宠繃杩欎竴琛� + } + } + + // 灏濊瘯鎻愬彇鏍囬琛屼腑鐨勯」鐩紙濡傛灉瀛樺湪锛� + if (row.getTableCells().size() > 2) { + String content = getCellText(row.getCell(2)); + if (content != null && !content.trim().isEmpty() && + !"淇濆吇鍐呭".equals(content.trim())) { // 杩囨护鏃犳晥鍐呭 + items.add(createItem(currentCategory, content.trim(), standardId)); + } + } + continue; + } + } + } + + // 澶勭悊鏅�氶」鐩 + if (currentCategory != null && isValidItemRow(row)) { + // 鑾峰彇鍐呭 + String content = row.getTableCells().size() > 2 ? + getCellText(row.getCell(2)) : ""; + + // 鎺掗櫎鏍囬鍐呭 + if ("淇濆吇鍐呭".equals(content) || + "搴忓彿".equals(content) || + content.contains("缁翠慨浜哄憳淇濆吇鍐呭") || + content.contains("鎿嶄綔浜哄憳淇濆吇鍐呭")) { + continue; + } + + EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail(); + item.setItemCategory(String.valueOf(currentCategory)); + item.setStandardId(standardId); + item.setItemName(cleanContent(content)); + + // 澶勭悊搴忓彿锛堢浜屽垪锛� + if (row.getTableCells().size() > 1) { + String seqText = getCellText(row.getCell(1)); + try { + if (seqText != null && !seqText.trim().isEmpty()) { + item.setItemCode(Integer.parseInt(seqText.trim())); + } + } catch (NumberFormatException e) { + // 蹇界暐搴忓彿瑙f瀽閿欒 + } + } + + items.add(item); + } + } + return items; + } + + /** + * 鍒涘缓淇濆吇椤圭洰 + */ + private EamMaintenanceStandardDetail createItem( + EamMaintenanceStandardDetailCategory category, + String content, + String standardId) { + + EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail(); + item.setItemCategory(category.name()); + item.setStandardId(standardId); + item.setItemName(cleanContent(content)); + return item; + } + + /** + * 鎻愬彇涓夌骇淇濆吇椤圭洰锛堟棤绫诲瀷锛� + */ + private List<EamMaintenanceStandardDetail> extractThirdMaintenanceItems( + XWPFTable table, String standardId) { + + List<EamMaintenanceStandardDetail> items = new ArrayList<>(); + String currentPart = ""; + int itemCount = 1; + + // 浠庣涓夎寮�濮嬶紙璺宠繃琛ㄥご鍜岃澶囦俊鎭級 + for (int i = 2; i < table.getNumberOfRows(); i++) { + XWPFTableRow row = table.getRow(i); + if (row == null || isRowEmpty(row)) continue; + + // 璺宠繃"淇濆吇閮ㄤ綅"鏍囬琛� + String firstCell = getCellText(row.getCell(0)); + if ("淇濆吇閮ㄤ綅".equals(firstCell)) { + continue; + } + + EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail(); + // 涓夌骇淇濆吇涓嶉渶瑕佺被鍨嬶紝涓嶈缃甶temCategory + item.setStandardId(standardId); + item.setItemCode(itemCount++); + + // 澶勭悊閮ㄤ綅鍒� + if (!row.getTableCells().isEmpty()) { + String partCell = getCellText(row.getCell(0)); + if (!partCell.trim().isEmpty()) { + currentPart = partCell.trim(); + } + } + item.setItemPart(currentPart); + + // 鏍规嵁鍒楁暟纭畾鍐呭鍜屾爣鍑嗙殑浣嶇疆 + int cellCount = row.getTableCells().size(); + if (cellCount == 3) { // 閮ㄤ綅|鍐呭|鏍囧噯 + item.setItemName(getCellText(row.getCell(1))); + item.setItemDemand(getCellText(row.getCell(2))); + } + else if (cellCount == 2) { // 鍐呭|鏍囧噯 + item.setItemName(getCellText(row.getCell(0))); + item.setItemDemand(getCellText(row.getCell(1))); + } + else if (cellCount == 1) { // 鍗曞垪鍐呭 + item.setItemName(getCellText(row.getCell(0))); + } + else if (cellCount > 3) { // 澶氬垪澶勭悊 + // 鍙栫2鍒椾綔涓哄唴瀹癸紝鏈�鍚庝竴鍒椾綔涓烘爣鍑� + item.setItemName(getCellText(row.getCell(1))); + item.setItemDemand(getCellText(row.getCell(cellCount - 1))); + } + + items.add(item); + } + return items; + } + + /** + * 鍏煎鐗堝崟鍏冩牸鏂囨湰鎻愬彇 + */ + private String getCellText(XWPFTableCell cell) { + if (cell == null) return ""; + + StringBuilder text = new StringBuilder(); + for (XWPFParagraph para : cell.getParagraphs()) { + if (para != null) { + for (XWPFRun run : para.getRuns()) { + if (run != null) { + String runText = run.getText(0); + if (runText != null) { + text.append(runText); + } + } + } + } + } + return text.toString(); + } + + /** + * 鍐呭娓呯悊 + */ + private String cleanContent(String text) { + if (text == null) return ""; + + // 鏇挎崲鐗规畩绌烘牸鍜屽悎骞惰繛缁┖鏍� + text = text.replace('\u00A0', ' ') + .replace('\u2007', ' ') + .replace('\u202F', ' ') + .replaceAll("\\s+", " "); + + // 瑙勮寖鏍囩偣绗﹀彿 + return text.replace(',', '銆�') + .replace('锛�', '銆�') + .replace(';', '锛�') + .replace('锛�', '锛�') + .replace(':', '锛�') + .replace('锛�', '锛�') + .trim(); + } + + /** + * 楠岃瘉鏈夋晥椤圭洰琛� + */ + private boolean isValidItemRow(XWPFTableRow row) { + return row != null && + row.getTableCells().size() >= 2 && + !getCellText(row.getCell(1)).trim().isEmpty(); + } + + /** + * 绌鸿妫�娴� + */ + private boolean isRowEmpty(XWPFTableRow row) { + if (row == null) return true; + for (XWPFTableCell cell : row.getTableCells()) { + String text = getCellText(cell); + if (text != null && !text.trim().isEmpty()) { + return false; + } + } + return true; + } + + /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------缁撴潫*/ + } -- Gitblit v1.9.3