db/template/生产设备三级保养规范.docx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
db/template/生产设备二级保养规范.docx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
db/template/设备台账导入模板.xls | 补丁 | 查看 | 原始文档 | blame | 历史 | |
db/template/设备点检标准导入模板.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
db/template/Éú²úÉ豸Èý¼¶±£Ñø¹æ·¶.docxBinary files differ
db/template/Éú²úÉ豸¶þ¼¶±£Ñø¹æ·¶.docxBinary files differ
db/template/É豸̨Õ˵¼ÈëÄ£°å.xlsBinary files differ
db/template/É豸µã¼ì±ê×¼µ¼ÈëÄ£°å.xlsxBinary files differ
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/EamMaintenanceStandardDetailCategory.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package org.jeecg.modules.eam.constant; public enum EamMaintenanceStandardDetailCategory { DAY_INSPECTION, //æ¥ç¹æ£ WEEK_INSPECTION, //å¨ç¹æ£ OPERATOR_MAINTENANCE, //æä½å·¥ REPAIRER_MAINTENANCE //维修工 } lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/ImportException.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,7 @@ package org.jeecg.modules.eam.request; public class ImportException extends RuntimeException { public ImportException(String message) { super(message); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -6,31 +6,22 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.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.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum; import org.jeecg.modules.eam.dto.MaintenanceStandardImport; import org.jeecg.modules.eam.dto.SecondMaintenanceStandardImport; import org.jeecg.modules.eam.dto.ThirdMaintenanceStandardImport; import org.jeecg.modules.eam.dto.WeekMaintenanceStandardImport; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; 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.IEamMaintenanceStandardService; import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -38,10 +29,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; /** * @Description: ä¿å »æ å @@ -63,23 +51,25 @@ /** * æµç¨å¯å¨,ä¿å对åºçæ°æ® * * @param id * @return */ @ApiOperation(value = "ä¿å »æ å-æµç¨å¯å¨ä¿å对åºçæ°æ®", notes = "ä¿å »æ å-æµç¨å¯å¨ä¿å对åºçæ°æ®") @GetMapping(value = "/saveEamMaintenanceStandardProcess") public Result<?> saveEamMaintenanceStandardProcess(String id){ public Result<?> saveEamMaintenanceStandardProcess(String id) { return eamMaintenanceStandardService.saveEamMaintenanceStandardProcess(id); } /** * æµç¨å®¡æ ¸ * * @param eamMaintenanceStandardVo * @return */ @ApiOperation(value = "ä¿å »æ å-æµç¨å®¡æ ¸", notes = "ä¿å »æ å-æµç¨å®¡æ ¸") @PostMapping(value = "/audit") public Result<?> auditEamMaintenanceStandard(@RequestBody EamMaintenanceStandardVo eamMaintenanceStandardVo){ public Result<?> auditEamMaintenanceStandard(@RequestBody EamMaintenanceStandardVo eamMaintenanceStandardVo) { return eamMaintenanceStandardService.auditEamMaintenanceStandard(eamMaintenanceStandardVo); } @@ -179,7 +169,8 @@ /** * æ¥è¯¢æ åå表-å端å±ç¤ºè¯¥ç¨æ·æ¥æçæ å * @param keyword 设å¤ç¼å· * * @param keyword 设å¤ç¼å· * @param maintenanceCategory ä¿å »ç±»å * @return */ @@ -243,7 +234,8 @@ List<String> list = Arrays.asList(ids.split(",")); list.forEach(id -> { EamMaintenanceStandard entity = eamMaintenanceStandardService.getById(id); if (entity != null) { if (entity != null&&entity.getStandardStatus().equals(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name())) { //åªå é¤ç¶æä¸ºå¾ æäº¤ç entity.setDelFlag(CommonConstant.DEL_FLAG_1); eamMaintenanceStandardService.updateById(entity); } @@ -275,358 +267,150 @@ 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å¯¼å ¥æ°æ® * * @param request * @param response * @return */ @RequestMapping(value = "/inspectionImportExcel", method = RequestMethod.POST) public Result<?> inspectionImportExcel(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.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { //读å设å¤ç¼å·ï¼å¾çç readExcel(file, standardRequest); 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()); //读åä¿å »æç»å 容 List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.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 request * @param response * @return */ @RequestMapping(value = "/weekMaintenanceImportExcel", method = RequestMethod.POST) public Result<?> weekMaintenanceImportExcel(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.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.WEEK_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 request * @param response * @return */ @RequestMapping(value = "/secondMaintenanceImportExcel", method = RequestMethod.POST) public Result<?> secondMaintenanceImportExcel(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.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.SECOND_MAINTENANCE.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 List<SecondMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), SecondMaintenanceStandardImport.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 request * @param response * @return */ @RequestMapping(value = "/thirdMaintenanceImportExcel", method = RequestMethod.POST) public Result<?> thirdMaintenanceImportExcel(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.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.THIRD_MAINTENANCE.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 List<ThirdMaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), ThirdMaintenanceStandardImport.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 * @param request */ private void readExcel(MultipartFile file, EamMaintenanceStandardRequest request) { Workbook book = null; boolean isXSSFWorkbook = false; * ç¹æ£å¯¼å ¥ */ @PostMapping("/importPointInspection") public Result<?> importPointInspectionExcel(HttpServletRequest request) { try { book = WorkbookFactory.create(file.getInputStream()); if (book instanceof XSSFWorkbook) { isXSSFWorkbook = true; MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); Map<String, String> results = new LinkedHashMap<>(); int successCount = 0; int failureCount = 0; for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { MultipartFile file = entity.getValue(); String fileName = file.getOriginalFilename(); Result<?> importResult = eamMaintenanceStandardService.importPointInspectionExcel(file); if (importResult.isSuccess()) { results.put(fileName, "æå: " + importResult.getMessage()); successCount++; } else { results.put(fileName, "失败: " + importResult.getMessage()); failureCount++; } } Sheet sheet = book.getSheetAt(0); //第ä¸è¡è¯»å Row row = sheet.getRow(0); //设å¤ç¼ç Cell equipmentCode = row.getCell(15); 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 (StringUtils.isBlank(request.getEquipmentCode())) { throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°è®¾å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } //åå§æ¥æ Cell initialDate = row.getCell(11); if (DateUtil.isCellDateFormatted(initialDate)) { request.setInitialDate(initialDate.getDateCellValue()); } else { request.setInitialDate(new Date()); } //设å¤åç§° Cell equipmentName = row.getCell(13); request.setEquipmentName(equipmentName.getStringCellValue()); // æå»ºååº Map<String, Object> response = new HashMap<>(); response.put("results", results); response.put("totalFiles", fileMap.size()); response.put("successCount", successCount); response.put("failureCount", failureCount); //第äºè¡è¯»å row = sheet.getRow(1); //ä¿å »å¨æ Cell period = row.getCell(11); if (CellType.NUMERIC.equals(period.getCellType())) { request.setMaintenancePeriod((int) period.getNumericCellValue()); if (failureCount == 0) { return Result.ok("ææç¹æ£æä»¶å¯¼å ¥æå"+response); } else if (successCount == 0) { return Result.error("ææç¹æ£æä»¶å¯¼å ¥å¤±è´¥", response); } else { //é»è®¤ç¹æ£å¨æ 1 request.setMaintenancePeriod(1); return Result.error("é¨åç¹æ£æä»¶å¯¼å ¥å¤±è´¥", response); } //æä»¶ç¼ç Cell fileCode = row.getCell(13); request.setFileCode(fileCode.getStringCellValue()); } catch (Exception e) { log.error("读åExcelä¿¡æ¯å¤±è´¥ï¼{}", e.getMessage(), e); log.error("ç¹æ£å¯¼å ¥å¤çå¼å¸¸", e); return Result.error("ç¹æ£å¯¼å ¥å¤ç失败: " + e.getMessage()); } } /** * äºä¿å¯¼å ¥ */ @PostMapping("/importSecondMaintenanceStandard") public Result<?> importSecondMaintenanceStandard(HttpServletRequest request) { try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, String> results = new LinkedHashMap<>(); Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); // ç»è®¡å¯¼å ¥ç»æ int successCount = 0; int failureCount = 0; for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { MultipartFile file = entity.getValue(); String fileName = file.getOriginalFilename(); Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND"); if (importResult.isSuccess()) { results.put(fileName, "æå: " + importResult.getMessage()); successCount++; } else { results.put(fileName, "失败: " + importResult.getMessage()); failureCount++; } } // æå»ºæç»ååº Map<String, Object> response = new HashMap<>(); response.put("results", results); response.put("totalFiles", fileMap.size()); response.put("successCount", successCount); response.put("failureCount", failureCount); if (failureCount > 0) { return Result.error("é¨åæä»¶å¯¼å ¥å¤±è´¥", response); } return Result.ok("æææä»¶å¯¼å ¥æå"+response); } catch (Exception e) { log.error("å¯¼å ¥å¤çå¼å¸¸", e); return Result.error("å¯¼å ¥å¤ç失败: " + e.getMessage()); } } /** * 读åExcel 第ä¸è¡ï¼ 第äºè¡çä¿¡æ¯ * @param file * @param request * ä¸ä¿å¯¼å ¥ */ public void readWeekExcel(MultipartFile file, EamMaintenanceStandardRequest request) { Workbook book = null; boolean isXSSFWorkbook = false; @PostMapping("/importThirdMaintenanceStandard") public Result<?> importThirdMaintenanceStandard(HttpServletRequest request) { try { book = WorkbookFactory.create(file.getInputStream()); if (book instanceof XSSFWorkbook) { isXSSFWorkbook = true; MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, String> results = new LinkedHashMap<>(); Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); // ç»è®¡å¯¼å ¥ç»æ int successCount = 0; int failureCount = 0; for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { MultipartFile file = entity.getValue(); String fileName = file.getOriginalFilename(); Result<?> importResult = eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD"); if (importResult.isSuccess()) { results.put(fileName, "æå: " + importResult.getMessage()); successCount++; } else { results.put(fileName, "失败: " + importResult.getMessage()); failureCount++; } } Sheet sheet = book.getSheetAt(0); //第ä¸è¡è¯»å Row row = sheet.getRow(0); //设å¤ç¼ç Cell equipmentCode = row.getCell(10); 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 (StringUtils.isBlank(request.getEquipmentCode())) { throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°è®¾å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } //åå§æ¥æ Cell initialDate = row.getCell(6); if (DateUtil.isCellDateFormatted(initialDate)) { request.setInitialDate(initialDate.getDateCellValue()); } else { request.setInitialDate(new Date()); } //设å¤åç§° Cell equipmentName = row.getCell(8); request.setEquipmentName(equipmentName.getStringCellValue()); // æå»ºæç»ååº Map<String, Object> response = new HashMap<>(); response.put("results", results); response.put("totalFiles", fileMap.size()); response.put("successCount", successCount); response.put("failureCount", failureCount); //第äºè¡è¯»å row = sheet.getRow(1); //ä¿å »å¨æ Cell period = row.getCell(6); if (CellType.NUMERIC.equals(period.getCellType())) { request.setMaintenancePeriod((int) period.getNumericCellValue()); } else { request.setMaintenancePeriod(null); if (failureCount > 0) { return Result.error("é¨åæä»¶å¯¼å ¥å¤±è´¥", response); } //æä»¶ç¼ç Cell fileCode = row.getCell(8); request.setFileCode(fileCode.getStringCellValue()); return Result.ok("æææä»¶å¯¼å ¥æå"+response); } catch (Exception e) { log.error("读åExcelä¿¡æ¯å¤±è´¥ï¼{}", e.getMessage(), e); log.error("å¯¼å ¥å¤çå¼å¸¸", e); return Result.error("å¯¼å ¥å¤ç失败: " + e.getMessage()); } } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -9,6 +9,7 @@ import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; /** @@ -87,4 +88,7 @@ * ç¹æ£è¡¨å¯¼å ¥å ¥å£ */ public Result<?> importPointInspectionExcel(MultipartFile file); Result<?> importMaintenanceStandard(MultipartFile file, String type); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -10,8 +10,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.flowable.engine.TaskService; import org.flowable.task.api.Task; @@ -24,12 +29,16 @@ 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; @@ -40,15 +49,18 @@ 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.cloud.commons.ConfigDataMissingEnvironmentPostProcessor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -87,6 +99,22 @@ 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) { QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>(); @@ -520,7 +548,7 @@ /*æµç¨ä¸å¡ä»£ç --------------------------ç»æ*/ /*å¯¼å ¥æä»¶--------------------------å¼å§*/ /*å¯¼å ¥ç¹æ£æä»¶Excel--------------------------å¼å§*/ /** * ç¹æ£è¡¨å¯¼å ¥å ¥å£ */ @@ -536,7 +564,7 @@ // 1. æå设å¤ä¿¡æ¯ EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet); if (eamMaintenanceStandard == null) { throw new BusinessException("设å¤ä¿¡æ¯æå失败"); return Result.error("设å¤ä¿¡æ¯æå失败"); } eamMaintenanceStandard.setStandardName(name); @@ -544,9 +572,15 @@ // 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<>(); @@ -618,7 +652,7 @@ 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+)"); @@ -633,11 +667,31 @@ } } // å ³è设å¤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; } @@ -800,7 +854,7 @@ } /** * è¯å«æ°è¡¨å¤´å¼å§ * è¯å«æ°è¡¨å¤´å¼å§ */ private boolean isNewHeaderStart(Row row) { for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) { @@ -837,7 +891,6 @@ */ 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) : ""; @@ -848,7 +901,6 @@ */ private String getCellStringValue(Cell cell) { if (cell == null) return ""; switch (cell.getCellType()) { case STRING: return cell.getStringCellValue().trim(); @@ -886,5 +938,462 @@ 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) { // 忽ç¥åºå·è§£æé误 } } 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(); // ä¸çº§ä¿å »ä¸éè¦ç±»åï¼ä¸è®¾ç½®itemCategory 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--------------------------ç»æ*/ }