From 5fac1dbc81262639bb7bfac11e2d7b56795f6d44 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期四, 29 五月 2025 11:39:22 +0800 Subject: [PATCH] feat(eims): 优化保养计划导入功能 --- eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java | 281 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 149 insertions(+), 132 deletions(-) diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java index 4518514..1343ecc 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java @@ -204,153 +204,170 @@ } - public String importData(MultipartFile is, boolean updateSupport) throws IOException { - int successNum = 0; - int failureNum = 0; - StringBuilder successMsg = new StringBuilder(); - StringBuilder failureMsg = new StringBuilder(); + public String importData(MultipartFile is, boolean updateSupport) { + try { + int successNum = 0; + int failureNum = 0; + // 淇濆吇椤圭洰鍒楄〃 + MaintCheckItemImportListener checkItemImportListener = new MaintCheckItemImportListener(updateSupport); + EasyExcel.read(is.getInputStream(), MaintCheckItemVo.class, checkItemImportListener).headRowNumber(4).sheet().doRead(); + List<MaintCheckItemVo> successList = checkItemImportListener.getSuccessList(); - // 淇濆吇椤圭洰鍒楄〃 - MaintCheckItemImportListener checkItemImportListener = new MaintCheckItemImportListener(updateSupport); - EasyExcel.read(is.getInputStream(), MaintCheckItemVo.class, checkItemImportListener).headRowNumber(4).sheet().doRead(); - List<MaintCheckItemVo> successList = checkItemImportListener.getSuccessList(); + // 璇诲彇鍥哄畾璧勪骇缂栧彿 + EasyExcelCellListener readListener = new EasyExcelCellListener(3, 1); + EasyExcel.read(is.getInputStream(), readListener).headRowNumber(0).sheet().doReadSync(); + String assetNo = Optional.ofNullable(readListener.getCellValue()) + .map(value -> { + int colonIndex = Math.max(value.indexOf(":"), value.indexOf("锛�")); // 鍚堝苟鍐掑彿澶勭悊 + return colonIndex != -1 ? value.substring(colonIndex + 1) : value; + }) + .map(String::trim) + .orElse(""); - - // 璇诲彇鍥哄畾璧勪骇缂栧彿 - EasyExcelCellListener readListener = new EasyExcelCellListener(3, 1); - EasyExcel.read(is.getInputStream(), readListener).headRowNumber(0).sheet().doReadSync(); - String assetNo = Optional.ofNullable(readListener.getCellValue()) - .map(value -> { - int colonIndex = Math.max(value.indexOf(":"), value.indexOf("锛�")); // 鍚堝苟鍐掑彿澶勭悊 - return colonIndex != -1 ? value.substring(colonIndex + 1) : value; - }) - .map(String::trim) - .orElseThrow(() -> new ServiceException("瀵煎叆澶辫触锛屾棤娉曡鍙栧浐瀹氳祫浜х紪鍙�")); - - - - // 璇诲彇淇濆吇璁″垝骞翠唤 - EasyExcelCellListener readYearListener = new EasyExcelCellListener(2, 3); - EasyExcel.read(is.getInputStream(), readYearListener).headRowNumber(0).sheet().doReadSync(); - String yearStr = readYearListener.getCellValue(); - String year = yearStr.replaceAll("[^\\d]", ""); // 鍘婚櫎闈炴暟瀛楀瓧绗� - year = (year.length() == 4) ? year : DateUtils.getDate().substring(0,4); - - QueryWrapper<EimsEqu> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("asset_no", assetNo); - EimsEquVo eimsEquVo = equMapper.selectVoOne(queryWrapper); - if (eimsEquVo == null) throw new ServiceException("瀵煎叆澶辫触锛岃澶囨湭鎵惧埌璇峰湪璁惧鍙板笎涓坊鍔�"); - - // 鏈堜唤瀛楁澶勭悊浼樺寲 - String[] monthFields = {"january","february","march","april","may","june", - "july","august","september","october","november","december"}; - - for (MaintCheckItemVo itemVo : successList) { - if ("鎵ц浜虹鍚�".equals(itemVo.getItemName())) break; - - EimsMaintPlanBo maintPlanBo = new EimsMaintPlanBo(); - maintPlanBo.setEquId(eimsEquVo.getEquId()); - maintPlanBo.setMaintName(itemVo.getItemName()); - maintPlanBo.setStatus("0"); - maintPlanBo.setMaintType("1"); - maintPlanBo.setMaintRule("0"); - // 娣诲姞period鏍¢獙 - String period = itemVo.getPeriod(); - if (StringUtils.isBlank(period)) { - failureNum++; - failureMsg.append(failureNum).append("銆佸懆鏈熷瓧娈典负绌�<br>"); - continue; + if (assetNo.isEmpty()) { + return is.getOriginalFilename() + " 瀵煎叆澶辫触锛屾棤娉曡鍙栧浐瀹氳祫浜х紪鍙�"; } - try { - if (period.length() > 1) { - maintPlanBo.setMaintCycle(Long.parseLong(period.substring(0, period.length() - 1))); - String substring = period.substring(period.length() - 1); - // 杞崲鍛ㄦ湡鍗曚綅锛孧杞崲涓�3锛孌杞崲涓�1锛孻杞崲涓�5锛學杞崲涓�2锛孮杞崲涓�4 - switch (substring) { - case "M": - substring = "3"; - break; - case "D": - substring = "1"; - break; - case "Y": - substring = "5"; - break; - case "W": - substring = "2"; - break; - case "Q": - substring = "4"; - break; - default: - } - maintPlanBo.setMaintCycleUnit(substring); - } else { - maintPlanBo.setMaintCycle(Long.parseLong(period)); - maintPlanBo.setMaintCycleUnit(""); - } - } catch (NumberFormatException e) { - failureNum++; - failureMsg.append(failureNum).append("銆佹棤鏁堢殑鍛ㄦ湡鏍煎紡:").append(period).append("<br>"); - continue; + // 璇诲彇淇濆吇璁″垝骞翠唤 + EasyExcelCellListener readYearListener = new EasyExcelCellListener(2, 3); + EasyExcel.read(is.getInputStream(), readYearListener).headRowNumber(0).sheet().doReadSync(); + String yearStr = readYearListener.getCellValue(); + String year = yearStr.replaceAll("[^\\d]", ""); // 鍘婚櫎闈炴暟瀛楀瓧绗� + year = (year.length() == 4) ? year : DateUtils.getDate().substring(0,4); + + QueryWrapper<EimsEqu> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("asset_no", assetNo); + EimsEquVo eimsEquVo = equMapper.selectVoOne(queryWrapper); + if (eimsEquVo == null) { + return is.getOriginalFilename() + " 璁惧鏈壘鍒帮紝璇峰厛鍦ㄨ澶囧彴甯愪腑娣诲姞"; } - // 鏈堜唤鍒ゆ柇浼樺寲 - for (int i = 0; i < monthFields.length; i++) { - try { - String monthValue = (String) MaintCheckItemVo.class - .getMethod("get" + StringUtils.capitalize(monthFields[i])) - .invoke(itemVo); + // 鏈堜唤瀛楁澶勭悊浼樺寲 + String[] monthFields = {"january","february","march","april","may","june", + "july","august","september","october","november","december"}; - if (StringUtils.isNotBlank(monthValue)) { - String month = String.format("%02d", i+1); // 淇濊瘉涓や綅鏈堜唤 - maintPlanBo.setMaintFirstTime(DateUtils.parseDate(year + "-" + month + "-01")); - break; - } - } catch (Exception e) { - // 鍙嶅皠寮傚父澶勭悊 + for (MaintCheckItemVo itemVo : successList) { + if ("鎵ц浜虹鍚�".equals(itemVo.getItemName())) break; + + EimsMaintPlanBo maintPlanBo = new EimsMaintPlanBo(); + maintPlanBo.setEquId(eimsEquVo.getEquId()); + maintPlanBo.setMaintName(itemVo.getItemName()); + maintPlanBo.setStatus("0"); + maintPlanBo.setMaintType("1"); + maintPlanBo.setMaintRule("0"); + + // 娣诲姞period鏍¢獙 + String period = itemVo.getPeriod(); + if (StringUtils.isBlank(period)) { failureNum++; - failureMsg.append(failureNum).append("銆佹湀浠藉瓧娈佃闂紓甯�<br>"); continue; } + + try { + if (period.length() > 1) { + String num = period.replaceAll("[^\\d]", ""); + maintPlanBo.setMaintCycle(Long.parseLong(num)); + String substring = period.replace(num, ""); + // 杞崲鍛ㄦ湡鍗曚綅锛孧杞崲涓�3锛孌杞崲涓�1锛孻杞崲涓�5锛學杞崲涓�2锛孮杞崲涓�4 + switch (substring) { + case "M": + substring = "3"; + break; + case "D": + substring = "1"; + break; + case "Y": + substring = "5"; + break; + case "W": + substring = "2"; + break; + case "Q": + substring = "4"; + break; + case "涓湀": + substring = "3"; + break; + case "澶�": + substring = "1"; + break; + case "骞�": + substring = "5"; + break; + case "鍛�": + substring = "2"; + break; + case "瀛e害": + substring = "4"; + break; + default: + } + maintPlanBo.setMaintCycleUnit(substring); + } else { + maintPlanBo.setMaintCycle(Long.parseLong(period)); + maintPlanBo.setMaintCycleUnit(""); + } + } catch (NumberFormatException e) { + failureNum++; + continue; + } + + // 鏈堜唤鍒ゆ柇浼樺寲 + boolean monthFound = false; + for (int i = 0; i < monthFields.length; i++) { + try { + String monthValue = (String) MaintCheckItemVo.class + .getMethod("get" + StringUtils.capitalize(monthFields[i])) + .invoke(itemVo); + + if (StringUtils.isNotBlank(monthValue)) { + String month = String.format("%02d", i+1); // 淇濊瘉涓や綅鏈堜唤 + maintPlanBo.setMaintFirstTime(DateUtils.parseDate(year + "-" + month + "-01")); + monthFound = true; + break; + } + } catch (Exception e) { + // 鍙嶅皠寮傚父澶勭悊锛岀户缁笅涓�涓湀浠� + continue; + } + } + + if (!monthFound) { + failureNum++; + continue; + } + + if (maintPlanBo.getMaintFirstTime() != null) { + Date firstTime = maintPlanBo.getMaintFirstTime(); + Date nextTime = calcNextTime(firstTime, maintPlanBo.getMaintCycle().intValue(), 1); + maintPlanBo.setMaintNextTime(nextTime); + } + + // 濡傛灉鍏佽瑕嗙洊锛屽垯鍒犻櫎宸插瓨鍦ㄧ殑鐩稿悓鏉′欢璁板綍 + if (updateSupport) { + LambdaQueryWrapper<EimsMaintPlan> deleteWrapper = Wrappers.lambdaQuery(); + deleteWrapper.eq(EimsMaintPlan::getEquId, maintPlanBo.getEquId()) + .eq(EimsMaintPlan::getMaintName, maintPlanBo.getMaintName()) + .eq(EimsMaintPlan::getStatus, maintPlanBo.getStatus()) + .eq(EimsMaintPlan::getMaintCycle, maintPlanBo.getMaintCycle()) + .eq(EimsMaintPlan::getMaintCycleUnit, maintPlanBo.getMaintCycleUnit()); + baseMapper.delete(deleteWrapper); + } + + if (!insertByBo(maintPlanBo)) { + failureNum++; + } else { + successNum++; + } } - if (maintPlanBo.getMaintFirstTime() != null) { - Date firstTime = maintPlanBo.getMaintFirstTime(); - Date nextTime = calcNextTime(firstTime, maintPlanBo.getMaintCycle().intValue(), 1); - maintPlanBo.setMaintNextTime(nextTime); - } - - // 濡傛灉鍏佽瑕嗙洊锛屽垯鍒犻櫎宸插瓨鍦ㄧ殑鐩稿悓鏉′欢璁板綍 - if (updateSupport) { - LambdaQueryWrapper<EimsMaintPlan> deleteWrapper = Wrappers.lambdaQuery(); - deleteWrapper.eq(EimsMaintPlan::getEquId, maintPlanBo.getEquId()) - .eq(EimsMaintPlan::getMaintName, maintPlanBo.getMaintName()) - .eq(EimsMaintPlan::getStatus, maintPlanBo.getStatus()) - .eq(EimsMaintPlan::getMaintCycle, maintPlanBo.getMaintCycle()) - .eq(EimsMaintPlan::getMaintCycleUnit, maintPlanBo.getMaintCycleUnit()); - baseMapper.delete(deleteWrapper); - } - - if (!insertByBo(maintPlanBo)) { - failureNum++; - failureMsg.append(failureNum).append("銆佽澶囷細").append(eimsEquVo.getEquName()).append("锛屽鍏ュけ璐�<br>"); - } else { - successNum++; - successMsg.append("<br/>").append(successNum).append("銆佽澶囷細").append(eimsEquVo.getEquName()).append("锛屽鍏ユ垚鍔�"); - } + return is.getOriginalFilename() + " 瀵煎叆鎴愬姛锛�" + successNum + "鏉★紝瀵煎叆澶辫触锛�" + failureNum + "鏉�"; + } catch (Exception e) { + return is.getOriginalFilename() + " 瀵煎叆寮傚父锛�" + e.getMessage(); } - - if (failureNum > 0) { - failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細"); - return failureMsg.toString(); - } else { - successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�"); - return successMsg.toString(); } -} + private Date calcNextTime(Date firstTime, int intervalMonths, int initialOffset) { -- Gitblit v1.9.3