From 088e145409aa4f3a4e4fb355843d2e6a6c02f8cb Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期五, 12 九月 2025 18:03:06 +0800 Subject: [PATCH] 保养标准 --- src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java | 229 ++++++++++++++++++++++++++++++++++++++++----- src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java | 44 +++++++- src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java | 1 3 files changed, 240 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java index 5f8d97e..a43dc02 100644 --- a/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java +++ b/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java @@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; @@ -25,7 +25,6 @@ import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; import org.jeecg.modules.eam.service.IEamEquipmentService; -import org.jeecg.modules.eam.service.IEamMaintenanceOrderDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; import org.jeecg.modules.eam.vo.MaintenanceStandardDetailVo; @@ -43,10 +42,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.*; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -296,37 +299,68 @@ * @return */ @RequestMapping(value = "/inspectionImportExcel", method = RequestMethod.POST) - public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) { + public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); + for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 MultipartFile file = entity.getValue(); + byte[] bytes = file.getBytes(); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setSheetNum(1); - params.setLastOfInvalidRow(23); + params.setTitleRows(2); // 璺宠繃鍓�2琛屾爣棰� + params.setHeadRows(1); // 绗�3琛屾槸琛ㄥご + params.setSheetNum(1); // 璇诲彇绗竴涓伐浣滆〃 + + int dataEndRow = findDataEndRow(file.getInputStream()); + log.info("璁$畻鍑虹殑鏁版嵁缁撴潫琛�: {}", dataEndRow); + + params.setLastOfInvalidRow(dataEndRow); params.setNeedSave(true); + EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { //璇诲彇璁惧缂栧彿锛屽浘鐗囩瓑 readExcel(file, standardRequest); + log.info("璇诲彇鍒扮殑璁惧缂栫爜: {}", standardRequest.getEquipmentCode()); + EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode()); if(equipment == null) { log.error("璁惧涓嶅瓨鍦細{}", standardRequest.getEquipmentCode()); continue; } + standardRequest.setStandardName(standardRequest.getEquipmentName() + "鐐规鏍囧噯"); standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.POINT_INSPECTION.name()); standardRequest.setEquipmentId(equipment.getId()); - //璇诲彇淇濆吇鏄庣粏鍐呭 + // 璇诲彇淇濆吇鏄庣粏鍐呭鍓嶆坊鍔犺皟璇曚俊鎭� + log.info("Excel瀵煎叆鍙傛暟: titleRows={}, headRows={}, lastOfInvalidRow={}", + params.getTitleRows(), params.getHeadRows(), params.getLastOfInvalidRow()); + List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.class, params); + log.info("瀹為檯璇诲彇鍒扮殑鏄庣粏鏁伴噺: {}", list.size()); + + // 鎵撳嵃鍓嶅嚑鏉¤褰曠敤浜庤皟璇� + if (!list.isEmpty()) { + log.info("鍓�3鏉¤褰曡鎯�:"); + for (int i = 0; i < Math.min(3, list.size()); i++) { + MaintenanceStandardImport item = list.get(i); + log.info("绗瑊}鏉�: NO={}, 鐐规鏉′欢={}, 閮ㄤ綅鍚嶇О={}, 鐐规鍐呭={}", + i+1, item.getItemCode(), item.getCondition(), + item.getItemPart(), item.getItemName()); + } + } else { + log.warn("鏈鍙栧埌浠讳綍鏄庣粏璁板綍"); + } //鏄庣粏椤� List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList()); standardRequest.setTableDetailList(tableList); + log.info("杞崲鍚庣殑鏄庣粏鏁伴噺: {}", tableList.size()); + String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); standardRequest.setStandardCode(codeSeq); boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest); @@ -334,10 +368,8 @@ log.error("淇濆瓨澶辫触锛� {}", standardRequest.getEquipmentCode()); } } catch (Exception e) { - //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず String msg = e.getMessage(); log.error("鏂囦欢 {} 澶勭悊寮傚父锛� {}", file.getOriginalFilename(), msg, e); - //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず } finally { try { file.getInputStream().close(); @@ -350,8 +382,10 @@ } + + /** - * 閫氳繃excel瀵煎叆鏁版嵁 + * 瀛d繚閫氳繃excel瀵煎叆鏁版嵁 * * @param request * @param response @@ -368,6 +402,7 @@ params.setTitleRows(2); params.setHeadRows(1); params.setSheetNum(1); + params.setLastOfInvalidRow(23); params.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { @@ -379,6 +414,7 @@ continue; } standardRequest.setStandardName(standardRequest.getEquipmentName() + "淇濆吇鏍囧噯"); + standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.QUARTERLY_MAINTENANCE.name()); standardRequest.setEquipmentId(equipment.getId()); //璇诲彇淇濆吇鏄庣粏鍐呭 @@ -408,6 +444,68 @@ return Result.ok("鏂囦欢瀵煎叆瀹屾垚锛�"); } + + + /** + * 骞翠繚閫氳繃excel瀵煎叆鏁版嵁 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/annualMaintenanceImportExcel", method = RequestMethod.POST) + public Result<?> annualMaintenanceImportExcel(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(); + + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setSheetNum(1); + params.setLastOfInvalidRow(23); + params.setNeedSave(true); + EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); + try { + //璇诲彇璁惧缂栧彿锛屽浘鐗囩瓑 + readWeekExcel(file, standardRequest); + EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode()); + if(equipment == null) { + log.error("璁惧涓嶅瓨鍦細{}", standardRequest.getEquipmentCode()); + continue; + } + standardRequest.setStandardName(standardRequest.getEquipmentName() + "淇濆吇鏍囧噯"); + + standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.ANNUAL_MAINTENANCE.name()); + standardRequest.setEquipmentId(equipment.getId()); + //璇诲彇淇濆吇鏄庣粏鍐呭 + List<WeekMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), WeekMaintenanceStandardImport.class, params); + //鏄庣粏椤� + List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList()); + standardRequest.setTableDetailList(tableList); + String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); + standardRequest.setStandardCode(codeSeq); + boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest); + if (!b) { + log.error("淇濆瓨澶辫触锛� {}", standardRequest.getEquipmentCode()); + } + } catch (Exception e) { + //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず + String msg = e.getMessage(); + log.error("鏂囦欢 {} 澶勭悊寮傚父锛� {}", file.getOriginalFilename(), msg, e); + //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + return Result.ok("鏂囦欢瀵煎叆瀹屾垚锛�"); + } /** * 璇诲彇Excel 绗竴琛岋紝 绗簩琛岀殑淇℃伅锛屽寘鎷浘鐗囦俊鎭� * @param file @@ -426,7 +524,7 @@ //绗簩琛岃鍙� Row row = sheet.getRow(1); //璁惧缂栫爜 - Cell equipmentCode = row.getCell(5); + Cell equipmentCode = row.getCell(8); Cell targetCell = row.getCell(0); //鏂囦欢缂栫爜 String fileCodeValue = getCellValue(targetCell); @@ -434,11 +532,16 @@ throw new JeecgBootException("Excel銆�" + file.getOriginalFilename() + "銆戠浜岃绗竴鍒楄幏鍙栧埌鐨勮澶囩紪鍙蜂负绌猴紒"); } request.setFileCode(fileCodeValue.trim()); - if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { - request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); - }else if(CellType.STRING.equals(equipmentCode.getCellType())) { - request.setEquipmentCode(equipmentCode.getStringCellValue()); +// if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { +// request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); +// }else if(CellType.STRING.equals(equipmentCode.getCellType())) { +// request.setEquipmentCode(equipmentCode.getStringCellValue()); +// } + String equipmentCodeStr = extractEquipmentCode(equipmentCode); + if (StringUtils.isBlank(equipmentCodeStr)) { + throw new JeecgBootException("Excel銆� " + file.getOriginalFilename() + "銆戞病鏈夎鍙栧埌鏈夋晥鐨勮澶囩紪鍙凤紝瀵煎叆澶辫触锛�"); } + request.setEquipmentCode(equipmentCodeStr); if (StringUtils.isBlank(request.getEquipmentCode())) { throw new JeecgBootException("Excel銆� " + file.getOriginalFilename() + "銆戞病鏈夎鍙栧埌璁惧缂栧彿锛屽鍏ュけ璐ワ紒"); } @@ -502,10 +605,16 @@ } Sheet sheet = book.getSheetAt(0); - //绗竴琛岃鍙� - Row row = sheet.getRow(0); + //绗簩琛岃鍙� + Row row = sheet.getRow(1); //璁惧缂栫爜 - Cell equipmentCode = row.getCell(10); + Cell equipmentCode = row.getCell(13); + Cell targetCell = row.getCell(0); + String fileCodeValue = getCellValue(targetCell); + if (fileCodeValue == null || fileCodeValue.trim().isEmpty()) { + throw new JeecgBootException("Excel銆�" + file.getOriginalFilename() + "銆戠浜岃绗竴鍒楄幏鍙栧埌鐨勮澶囩紪鍙蜂负绌猴紒"); + } + request.setFileCode(fileCodeValue.trim()); if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); }else if(CellType.STRING.equals(equipmentCode.getCellType())) { @@ -515,20 +624,20 @@ throw new JeecgBootException("Excel銆� " + file.getOriginalFilename() + "銆戞病鏈夎鍙栧埌璁惧缂栧彿锛屽鍏ュけ璐ワ紒"); } //鍒濆鏃ユ湡 - Cell initialDate = row.getCell(6); + Cell initialDate = row.getCell(11); if (DateUtil.isCellDateFormatted(initialDate)) { request.setInitialDate(initialDate.getDateCellValue()); } else { request.setInitialDate(new Date()); } //璁惧鍚嶇О - Cell equipmentName = row.getCell(8); - request.setEquipmentName(equipmentName.getStringCellValue()); +// Cell equipmentName = row.getCell(8); +// request.setEquipmentName(equipmentName.getStringCellValue()); //绗簩琛岃鍙� - row = sheet.getRow(1); + row = sheet.getRow(4); //淇濆吇鍛ㄦ湡 - Cell period = row.getCell(6); + Cell period = row.getCell(7); if (CellType.NUMERIC.equals(period.getCellType())) { request.setMaintenancePeriod((int) period.getNumericCellValue()); } else { @@ -541,4 +650,72 @@ log.error("璇诲彇Excel淇℃伅澶辫触锛歿}", e.getMessage(), e); } } + + private int findDataEndRow(InputStream inputStream) throws IOException { + Workbook workbook = null; + try { + workbook = WorkbookFactory.create(inputStream); + Sheet sheet = workbook.getSheetAt(0); + int lastRowNum = sheet.getLastRowNum(); + log.info("Excel鏂囦欢鎬昏鏁�: {}", lastRowNum); + + // 鎵惧埌"瀹炴柦瑕侀"琛岋紝浣滀负鏁版嵁缁撴潫鐨勬爣蹇� + for (int i = 0; i <= lastRowNum; i++) { + Row row = sheet.getRow(i); + if (row == null) continue; + + // 妫�鏌ョA鍒楁槸鍚﹀寘鍚�"瀹炴柦瑕侀" + Cell cell = row.getCell(0); + if (cell != null && cell.getCellType() == CellType.STRING) { + String value = getCellValue(cell).replaceAll("\\s+", ""); + if ("瀹炴柦瑕侀".equals(value)) { + log.info("鎵惧埌'瀹炴柦瑕侀'鍦ㄧ{}琛�", i); + return i - 1; // 杩斿洖"瀹炴柦瑕侀"琛屼箣鍓嶇殑琛屽彿 + } + } + } + + // 濡傛灉娌℃湁鎵惧埌"瀹炴柦瑕侀"锛岃繑鍥炴渶鍚庝竴琛� + log.info("鏈壘鍒�'瀹炴柦瑕侀'锛岃繑鍥炴渶鍚庝竴琛�: {}", lastRowNum); + return lastRowNum; + } finally { + if (workbook != null) { + workbook.close(); + } + } + } + + + + + + /** + * 浠庡崟鍏冩牸涓彁鍙栬澶囩紪鍙凤紝鍘婚櫎鍓嶇紑濡�"璁惧缂栧彿:" + * @param cell 鍗曞厓鏍煎璞� + * @return 绾澶囩紪鍙峰瓧绗︿覆 + */ + private String extractEquipmentCode(Cell cell) { + if (cell == null) { + return null; + } + + String cellValue = getCellValue(cell); + if (StringUtils.isBlank(cellValue)) { + return null; + } + + // 鍘婚櫎鍓嶅悗绌烘牸 + cellValue = cellValue.trim(); + + // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨暟瀛楅儴鍒� + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(cellValue); + + if (matcher.find()) { + return matcher.group(); + } + + // 濡傛灉娌℃湁鎵惧埌鏁板瓧锛岃繑鍥炲師鍊硷紙鍙兘鏈夊叾浠栨牸寮忥級 + return cellValue; + } } diff --git a/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java b/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java index 7b3bcf8..f054b30 100644 --- a/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java +++ b/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java @@ -8,18 +8,46 @@ @Data public class MaintenanceStandardImport implements Serializable { - @Excel(name = "NO", width = 15) +// @Excel(name = "NO", width = 15) +// private String itemCode; +// +// @Excel(name = "鐐规鍐呭", width = 15) +// private String itemName; +// +// @Excel(name = "鐐规鏂规硶", width = 15) +// private String subItemName; +// +// @Excel(name = "閮ㄤ綅鍚嶇О", width = 15) +// private String itemPart; +// +// @Excel(name = "鍩哄噯", width = 15) +// private String itemDemand; + + + + + @Excel(name = "NO", orderNum = "1") private String itemCode; - @Excel(name = "鐐规鍐呭", width = 15) - private String itemName; + @Excel(name = "鐐规鏉′欢", orderNum = "2") + private String condition; - @Excel(name = "鐐规鏂规硶", width = 15) - private String subItemName; - - @Excel(name = "閮ㄤ綅鍚嶇О", width = 15) + @Excel(name = "閮ㄤ綅鍚嶇О", orderNum = "3") private String itemPart; - @Excel(name = "鍩哄噯", width = 15) + @Excel(name = "鐐规鍐呭", orderNum = "4") + private String itemName; + + @Excel(name = "鐐规鏂规硶", orderNum = "5") + private String subItemName; + + @Excel(name = "鍩哄噯", orderNum = "6") private String itemDemand; + + @Excel(name = "寮傚父澶勭悊鍩哄噯", orderNum = "7") + private String abnormal; + + @Excel(name = "鍛ㄦ湡", orderNum = "8") + private String period; + } diff --git a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java index ceecea8..c415d80 100644 --- a/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java +++ b/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java @@ -75,6 +75,7 @@ public EamMaintenanceStandardDetail(MaintenanceStandardImport dto) { this.itemCode = Integer.valueOf(dto.getItemCode()); this.itemPart = dto.getItemPart(); + this.checkMethod=dto.getCondition(); this.itemName = dto.getItemName(); this.itemDemand = dto.getItemDemand(); } -- Gitblit v1.9.3