车间能级提升-智能设备管理系统
zhuguifei
2025-06-06 00cf6c13531447af59a8d2121bbfb1a3a1f68c0d
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintPlanServiceImpl.java
@@ -204,18 +204,15 @@
    }
    public String importData(MultipartFile is, boolean updateSupport) throws IOException {
    public String importData(MultipartFile is, boolean updateSupport) {
        try {
    int successNum = 0;
    int failureNum = 0;
    StringBuilder successMsg = new StringBuilder();
    StringBuilder failureMsg = new StringBuilder();
        // 保养项目列表
        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);
@@ -226,21 +223,29 @@
                return colonIndex != -1 ? value.substring(colonIndex + 1) : value;
            })
            .map(String::trim)
            .orElseThrow(() -> new ServiceException("导入失败,无法读取固定资产编号"));
                .orElse("");
            if (assetNo.isEmpty()) {
                return is.getOriginalFilename() + " 导入失败,无法读取固定资产编号";
            }
        // 读取保养计划年份
        EasyExcelCellListener readYearListener = new EasyExcelCellListener(2, 3);
        EasyExcel.read(is.getInputStream(), readYearListener).headRowNumber(0).sheet().doReadSync();
        String yearStr = readYearListener.getCellValue();
            if (yearStr == null || yearStr.isEmpty()) {
                yearStr = "";
            }
        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("导入失败,设备未找到请在设备台帐中添加");
            if (eimsEquVo == null) {
                return is.getOriginalFilename() + " 设备未找到,请先在设备台帐中添加";
            }
        // 月份字段处理优化
        String[] monthFields = {"january","february","march","april","may","june",
@@ -255,18 +260,49 @@
            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 (period.length() == 1) {
                    period = "1"+period;
            }
            try {
                if (period.length() > 1) {
                    maintPlanBo.setMaintCycle(Long.parseLong(period.substring(0, period.length() - 1)));
                    String substring = period.substring(period.length() - 1);
                        String num = period.replaceAll("[^\\d]", "");
                        if ("".equals(num)) {
                            switch (period) {
                                case "一个月":
                                    maintPlanBo.setMaintCycle(1L);
                                    maintPlanBo.setMaintCycleUnit("3");
                                    break;
                                case "两个月":
                                    maintPlanBo.setMaintCycle(2L);
                                    maintPlanBo.setMaintCycleUnit("3");
                                    break;
                                case "二个月":
                                    maintPlanBo.setMaintCycle(2L);
                                    maintPlanBo.setMaintCycleUnit("3");
                                    break;
                                case "三个月":
                                    maintPlanBo.setMaintCycle(3L);
                                    maintPlanBo.setMaintCycleUnit("3");
                                    break;
                                case "六个月":
                                    maintPlanBo.setMaintCycle(6L);
                                    maintPlanBo.setMaintCycleUnit("3");
                                    break;
                                default:
                                    break;
                            }
                        }else {
                            maintPlanBo.setMaintCycle(Long.parseLong(num));
                            String substring = period.replace(num, "");
                    // 转换周期单位,M转换为3,D转换为1,Y转换为5,W转换为2,Q转换为4
                    switch (substring) {
                        case "M":
@@ -284,20 +320,36 @@
                        case "Q":
                            substring = "4";
                            break;
                                case "个月":
                                    substring = "3";
                                    break;
                                case "天":
                                    substring = "1";
                                    break;
                                case "年":
                                    substring = "5";
                                    break;
                                case "周":
                                    substring = "2";
                                    break;
                                case "季度":
                                    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;
            }
            // 月份判断优化
                boolean monthFound = false;
            for (int i = 0; i < monthFields.length; i++) {
                try {
                    String monthValue = (String) MaintCheckItemVo.class
@@ -307,14 +359,18 @@
                    if (StringUtils.isNotBlank(monthValue)) {
                        String month = String.format("%02d", i+1); // 保证两位月份
                        maintPlanBo.setMaintFirstTime(DateUtils.parseDate(year + "-" + month + "-01"));
                            monthFound = true;
                        break;
                    }
                } catch (Exception e) {
                    // 反射异常处理
                    failureNum++;
                    failureMsg.append(failureNum).append("、月份字段访问异常<br>");
                        // 反射异常处理,继续下一个月份
                    continue;
                }
                }
                if (!monthFound) {
                    failureNum++;
                    continue;
            }
            if (maintPlanBo.getMaintFirstTime() != null) {
@@ -336,23 +392,25 @@
            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(",导入成功");
            }
        }
    if (failureNum > 0) {
        failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
        return failureMsg.toString();
            // 如果失败条件小于1则不打印信息
            if (failureNum <= 0) {
                return "成功!";
    } else {
        successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
        return successMsg.toString();
                return is.getOriginalFilename() + " 导入成功:" + successNum + "条,导入失败:" + failureNum + "条";
            }
        } catch (Exception e) {
            return is.getOriginalFilename() + " 导入异常:" + e.getMessage();
    }
}
private Date calcNextTime(Date firstTime, int intervalMonths, int initialOffset) {
    if (intervalMonths <= 0) {
        throw new IllegalArgumentException("Interval months must be positive");