From c354b62e324e63691418974d5f88b916e8a35f0a Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期一, 07 七月 2025 15:37:45 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java | 4 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekInspectionDetail.java | 8 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java | 2 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml | 2 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java | 2 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java | 9 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/model/EamBaseRepairDepartTreeModel.java | 6 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java | 26 +- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 440 +++++++++++++++++++++++++++++++++++++++++++++++- 9 files changed, 470 insertions(+), 29 deletions(-) diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java index 277a3a9..5f8f044 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrder.java @@ -113,4 +113,8 @@ @ApiModelProperty(value = "璁惧鍚嶇О") @TableField(exist = false) private String equipmentName; + + @ApiModelProperty(value = "璁惧鍨嬪彿") + @TableField(exist = false) + private String equipmentModel; } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekInspectionDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekInspectionDetail.java index 744467c..5d3ecea 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekInspectionDetail.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekInspectionDetail.java @@ -65,6 +65,14 @@ /**淇濆吇瑕佹眰*/ @ApiModelProperty(value = "淇濆吇瑕佹眰") private String itemDemand; + /**鐐规浜�*/ + @Excel(name = "鐐规浜�", width = 15) + @ApiModelProperty(value = "鐐规浜�") + private String inspector; + /**鐐规鏃堕棿*/ + @Excel(name = "鐐规鏃堕棿", width = 15) + @ApiModelProperty(value = "鐐规鏃堕棿") + private String inspectTime; public EamWeekInspectionDetail(){} diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java index f714e0a..e8d2bc8 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java @@ -7,18 +7,13 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.base.controller.JeecgController; -import org.jeecg.common.util.FileUtil; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; @@ -36,7 +31,6 @@ import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.util.PoiPublicUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -75,7 +69,7 @@ @ApiOperation(value = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�", notes = "淇濆吇鏍囧噯-娴佺▼鍚姩淇濆瓨瀵瑰簲鐨勬暟鎹�") @GetMapping(value = "/saveEamMaintenanceStandardProcess") public Result<?> saveEamMaintenanceStandardProcess(String id){ - return Result.OK(eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id)); + return eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id); } /** @@ -85,8 +79,8 @@ */ @ApiOperation(value = "淇濆吇鏍囧噯-娴佺▼瀹℃牳", notes = "淇濆吇鏍囧噯-娴佺▼瀹℃牳") @PostMapping(value = "/audit") - public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo){ - return Result.OK(eamMaintenanceStandardService.auditEamMaintenanceStandard(eamMaintenanceStandardVo)); + public Result<?> auditEamMaintenanceStandard(@RequestBody EamMaintenanceStandardVo eamMaintenanceStandardVo){ + return eamMaintenanceStandardService.auditEamMaintenanceStandard(eamMaintenanceStandardVo); } /** @@ -166,7 +160,7 @@ */ @AutoLog(value = "淇濆吇鏍囧噯-鍗囩増") @ApiOperation(value = "淇濆吇鏍囧噯-鍗囩増", notes = "淇濆吇鏍囧噯-鍗囩増") - @RequestMapping(value = "/upgrade", method = {RequestMethod.PUT, RequestMethod.POST}) + @PutMapping(value = "/upgrade") public Result<?> upgrade(@RequestBody EamMaintenanceStandardRequest standardRequest) { if (standardRequest == null) { return Result.error("娣诲姞鐨勫璞′笉鑳戒负绌猴紒"); @@ -281,6 +275,18 @@ return super.exportXls(request, eamMaintenanceStandard, EamMaintenanceStandard.class, "淇濆吇鏍囧噯"); } + @PostMapping("/import") + public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); + for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { + // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 + MultipartFile file = entity.getValue(); + eamMaintenanceStandardService.importPointInspectionExcel(file); + } + return Result.ok("瀵煎叆鎴愬姛"); + } + /** * 閫氳繃excel瀵煎叆鏁版嵁 * diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java index b6be351..fa75c22 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java @@ -111,7 +111,7 @@ * 鏍囧噯鐗堟湰 */ @ApiModelProperty(value = "鏍囧噯鐗堟湰") - private Integer standardVersion; + private String standardVersion; /** * 缂栧埗浜� */ diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml index 9461c66..2c34c4a 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamInspectionOrderMapper.xml @@ -3,7 +3,7 @@ <mapper namespace="org.jeecg.modules.eam.mapper.EamInspectionOrderMapper"> <select id="queryPageList" resultType="org.jeecg.modules.eam.entity.EamInspectionOrder"> - select wmo.*, e.equipment_code, e.equipment_name + select wmo.*, e.equipment_code, e.equipment_name, e.equipment_model from eam_inspection_order wmo inner join eam_equipment e on wmo.equipment_id = e.id diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java index c392904..544d7de 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java @@ -49,7 +49,7 @@ private String standardStatus; /**鏍囧噯鐗堟湰*/ @ApiModelProperty(value = "鏍囧噯鐗堟湰") - private Integer standardVersion; + private String standardVersion; /**鏂囦欢缂栧彿*/ @ApiModelProperty(value = "鏂囦欢缂栧彿") private String fileCode; diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java index ba2d94e..61bef31 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java @@ -7,6 +7,7 @@ import org.jeecg.modules.eam.entity.EamMaintenanceStandard; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -32,7 +33,7 @@ boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest); /** - * 鏂板 淇濆吇鏍囧噯 + * 缂栬緫 淇濆吇鏍囧噯 * @param standardRequest */ boolean editMaintenanceStandard(EamMaintenanceStandardRequest standardRequest); @@ -74,7 +75,6 @@ */ Result<?> saveEamMaintenanceStandardProcess(String id); - /** * 瀹℃壒鎿嶄綔 * @param eamMaintenanceStandardVo @@ -82,4 +82,9 @@ */ Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo); + + /** + * 鐐规琛ㄥ鍏ュ叆鍙� + */ + public Result<?> importPointInspectionExcel(MultipartFile file); } 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 d69efd8..596714b 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 @@ -9,13 +9,12 @@ 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 org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.*; 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.exception.JeecgBootException; @@ -34,7 +33,7 @@ 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.EamMaintenanceStandardVo; +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; @@ -47,9 +46,14 @@ 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.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -133,6 +137,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); @@ -145,7 +153,7 @@ 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()); //鍒犻櫎鏍囪 @@ -209,9 +217,6 @@ if(entity == null){ throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�"); } - entity.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name()); - //鍘熸潵鐨勪綔搴� - eamMaintenanceStandardMapper.updateById(entity); //鏂板涓�涓増鏈� EamMaintenanceStandard newEntity = new EamMaintenanceStandard(); @@ -222,7 +227,16 @@ newEntity.setInitialDate(standardRequest.getInitialDate()); 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()); //鍒犻櫎鏍囪 @@ -277,7 +291,7 @@ query.setEquipmentId(equipmentId); query.setKeyword(keyword); query.setMaintenanceCategory(maintenanceCategory); - query.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name()); + query.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query); return pageData.getRecords(); } @@ -398,13 +412,27 @@ // 璁剧疆娴佺▼鍙橀噺 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()); } @@ -416,6 +444,20 @@ 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()); } @@ -428,7 +470,6 @@ } else { return result; } - return Result.OK("鎿嶄綔鎴愬姛"); } catch (Exception e) { return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage()); @@ -439,13 +480,15 @@ Map<String, Object> values = new HashMap<>(); values.put("dataId", eamMaintenanceStandard.getId()); values.put("assignee", userId); - values.put("organization", eamMaintenanceStandardVo.getComment()); - values.put("comment", eamMaintenanceStandardVo.getComment()); 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; } @@ -475,4 +518,373 @@ } /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/ + + + /*瀵煎叆鏂囦欢--------------------------寮�濮�*/ + /** + * 鐐规琛ㄥ鍏ュ叆鍙� + */ + @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) { + throw new BusinessException("璁惧淇℃伅鎻愬彇澶辫触"); + } + + eamMaintenanceStandard.setStandardName(name); + eamMaintenanceStandardMapper.insert(eamMaintenanceStandard); + + // 2. 鎻愬彇姣忔棩鐐规椤圭洰 + List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard); + + // 3. 鎻愬彇鍛ㄤ繚鍏婚」鐩� + List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard); + + // 鍚堝苟骞朵繚瀛樻墍鏈夐」鐩� + 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+)")); + standard.setStandardCode(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) { + + } + } + + standard.setMaintenanceCategory("POINT_INSPECTION"); + standard.setPeriodUnit("澶�"); + standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name()); + standard.setStandardVersion("v" + CommonConstant.OPERATE_TYPE_1); + standard.setDelFlag(0); + + 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 ""; + } + } + /*瀵煎叆鏂囦欢--------------------------缁撴潫*/ } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/model/EamBaseRepairDepartTreeModel.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/model/EamBaseRepairDepartTreeModel.java index 73860b3..82f8435 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/model/EamBaseRepairDepartTreeModel.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/model/EamBaseRepairDepartTreeModel.java @@ -1,10 +1,12 @@ package org.jeecg.modules.system.model; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.modules.system.entity.EamBaseRepairDepart; +import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.ArrayList; @@ -69,10 +71,14 @@ private String createBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; private String updateBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** -- Gitblit v1.9.3