lyh
5 天以前 d76b518341ec0644c3500555d5c4121bc30d581e
台账导入导出字段修改
已修改5个文件
218 ■■■■ 文件已修改
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -257,7 +257,15 @@
    /**
     * 出厂日期
     */
    @Excel(name = "出厂日期", width = 25, format = "yyyy/MM/dd", orderNum = "26")
    @Excel(name = "出厂日期", width = 25,  orderNum = "26")
    @ApiModelProperty(value = "出厂日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private transient String leaveFactory;
    /**
     * 出厂日期
     */
    @ApiModelProperty(value = "出厂日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -389,7 +397,7 @@
    /**下次三保日期*/
    @TableField(exist = false)
    @Excel(name = "下次三保日期", width = 15, format = "yyyy/MM/dd", orderNum = "43")
    @Excel(name = "三保日期", width = 15, format = "yyyy/MM/dd", orderNum = "43")
    @ApiModelProperty(value = "下次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -410,7 +418,7 @@
    private java.util.Date latestTechnologyCheck;
    /**技术状态下次鉴定日期*/
    @TableField(exist = false)
    @Excel(name = "技术状态下次鉴定日期", width = 15, format = "yyyy/MM/dd", orderNum = "46")
    @Excel(name = "技术状态鉴定日期", width = 15, format = "yyyy/MM/dd", orderNum = "46")
    @ApiModelProperty(value = "技术状态下次鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java
@@ -41,15 +41,16 @@
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.apache.commons.lang3.time.DateUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.text.ParseException;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.time.LocalDate;
import java.time.ZoneId;
/**
 * @Description: 设备台账
@@ -308,6 +309,51 @@
                    }else {
                        eamEquipment.setRepairDepartOrgCode(eamBaseRepairDepart.getOrgCode());
                    }
                    // 字段校验与填充
                    if (StringUtils.isNotBlank(eamEquipment.getLeaveFactory())) {
                        String leaveFactoryStr = eamEquipment.getLeaveFactory();
                        try {
                            // 定义支持解析的日期格式
                            String[] parsePatterns = {
                                    "yyyy/MM/dd", "yyyy-MM-dd", "yyyyMMdd"
                            };
                            // 格式1: 包含分隔符的日期格式 (如2025/07/30, 2025-07-30等)
                            if (leaveFactoryStr.contains("/") || leaveFactoryStr.contains("-") ||
                                    (leaveFactoryStr.length() == 8 && leaveFactoryStr.matches("\\d{8}"))) {
                                // 使用指定的格式数组解析日期
                                Date leaveFactoryDate = DateUtils.parseDate(leaveFactoryStr, parsePatterns);
                                eamEquipment.setLeaveFactoryDate(leaveFactoryDate);
                            } else {
                                log.warn("离开工厂日期格式无效: {}", leaveFactoryStr);
                            }
                        } catch (ParseException e) {
                            log.error("日期解析失败: {}", leaveFactoryStr, e);
                        }
                    }
                    // 计算三保日期
                    if (eamEquipment.getNextThirdMaintenance() != null &&
                            eamEquipment.getThirdMaintenancePeriod() != null) {
                        calculateMaintenanceDates(
                                eamEquipment.getNextThirdMaintenance(),
                                eamEquipment.getThirdMaintenancePeriod(),
                                newDate -> eamEquipment.setNextThirdMaintenance(newDate),
                                latestDate -> eamEquipment.setLatestThirdMaintenance(latestDate)
                        );
                    }
                    // 计算技术状态鉴定日期
                    if (eamEquipment.getNextTechnologyCheck() != null &&
                            eamEquipment.getTechnologyCheckPeriod() != null) {
                        calculateMaintenanceDates(
                                eamEquipment.getNextTechnologyCheck(),
                                eamEquipment.getTechnologyCheckPeriod(),
                                newDate -> eamEquipment.setNextTechnologyCheck(newDate),
                                latestDate -> eamEquipment.setLatestTechnologyCheck(latestDate)
                        );
                    }
                    EamEquipment equipment = eamEquipmentService.saveEquipment(eamEquipment);
                    if (equipment == null) {
                        //保存失败,跳过本次循环
@@ -401,4 +447,45 @@
        }
    }
    // 日期计算工具方法
    private void calculateMaintenanceDates(Date nextDate, Integer periodYears,
                                           Consumer<Date> setNextMaintenance,
                                           Consumer<Date> setLatestMaintenance) {
        if (nextDate == null || periodYears == null || periodYears <= 0) {
            return;
        }
        // 转换为Java 8日期类型
        LocalDate nextLocal = nextDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate today = LocalDate.now();
        // 确保有效的计算周期
        int period = Math.max(1, periodYears); // 防止传入0或负值
        if (nextLocal.isAfter(today)) {
            // 未过期:计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        } else {
            // 已过期:计算新的下次维护日期
            while (!nextLocal.isAfter(today)) {
                nextLocal = nextLocal.plusYears(period);
            }
            // 设置新日期
            setNextMaintenance.accept(
                    Date.from(nextLocal.atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
            // 计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        }
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -286,7 +286,7 @@
            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                MultipartFile file = entity.getValue();
                String fileName = file.getOriginalFilename();
                Result<?> importResult=eamMaintenanceStandardService.importPointInspectionExcel(file);
                Result<?> importResult=eamMaintenanceStandardService.importPointInspectionExcel(file,null);
                if (importResult.isSuccess()) {
                    successCount++;
                } else {
@@ -322,7 +322,7 @@
            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                MultipartFile file = entity.getValue();
                String fileName = file.getOriginalFilename();
                Result<?> importResult=eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND");
                Result<?> importResult=eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND",null);
                if (importResult.isSuccess()) {
                    successCount++;
                } else {
@@ -357,7 +357,7 @@
            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                MultipartFile file = entity.getValue();
                String fileName = file.getOriginalFilename();
                Result<?> importResult= eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD");
                Result<?> importResult= eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD",null);
                if (importResult.isSuccess()) {
                    successCount++;
                } else {
@@ -375,6 +375,35 @@
        }
    }
    /**
     * 升版导入
     * @param id,file
     * @return
     */
    @ApiOperation(value = "升版导入", notes = "升版导入")
    @PostMapping(value = "/importUpgrade")
    public Result<?> importUpgrade(String id,MultipartFile file) {
        EamMaintenanceStandard eamMaintenanceStandard=eamMaintenanceStandardService.getById(id);
        if (eamMaintenanceStandard==null) {
            return Result.error("请选择需要升版的保养标准");
        }else {
            switch (eamMaintenanceStandard.getMaintenanceCategory()){
                case "POINT_INSPECTION":
                    //点检升版导入
                    return eamMaintenanceStandardService.importPointInspectionExcel(file,id);
                case "SECOND_MAINTENANCE":
                    //二保升版导入
                    return eamMaintenanceStandardService.importMaintenanceStandard(file, "SECOND",id);
                case "THIRD_MAINTENANCE":
                    //三保升版导入
                    return eamMaintenanceStandardService.importMaintenanceStandard(file, "THIRD",id);
                default:
                    break;
            }
        }
        return Result.error("升版导入失败");
    }
    private Result<?> getResult(Map<String, String> results, int fileCount, int successCount, int failureCount) {
        List<String> response = new ArrayList<>();
        response.add("总文件数:" + fileCount);
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamMaintenanceStandardService.java
@@ -87,10 +87,10 @@
    /**
     * 点检表导入入口
     */
    Result<?> importPointInspectionExcel(MultipartFile file);
    Result<?> importPointInspectionExcel(MultipartFile file,String id);
    Result<?> importMaintenanceStandard(MultipartFile file, String type);
    Result<?> importMaintenanceStandard(MultipartFile file, String type,String id);
    /**
     * 查询保养类型下正常的保养标准
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -562,7 +562,11 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result<?> importPointInspectionExcel(MultipartFile file) {
    public Result<?> importPointInspectionExcel(MultipartFile file,String id) {
        EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard();
        if (StrUtil.isNotEmpty(id)){
            eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id);
        }
        try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
            Sheet sheet = workbook.getSheetAt(0);
@@ -577,14 +581,32 @@
            eamMaintenanceStandard.setStandardName(name);
            // 检查重复
            EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(),
                    eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name());
            if (exist != null) {
                return Result.error(name + ": 设备标准已存在,不能重复添加");
            // 检查重复,只导入校验,升版不校验
            if (StrUtil.isEmpty(id)){
                EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(),
                        eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name());
                if (exist != null) {
                    return Result.error(name + ": 设备标准已存在,不能重复添加");
                }
            }
            if (eamMaintenanceStandardOld.getEquipmentId().equals(eamMaintenanceStandard.getEquipmentId())
                &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(eamMaintenanceStandard.getMaintenanceCategory())) {
                //升版操作,作废原有
                eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
                eamMaintenanceStandardMapper.updateById(eamMaintenanceStandard);
                //版本递增获取数字
                Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$");
                Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion());
                if (matcher.find()) {
                    try {
                        int mainVersion = Integer.parseInt(matcher.group(1));
                        eamMaintenanceStandard.setStandardVersion("v" + (mainVersion + 1));
                    } catch (NumberFormatException ignored) {
                    }
                }
            }
            eamMaintenanceStandard.setInitialDate(new Date());
            eamMaintenanceStandardMapper.insert(eamMaintenanceStandard);
            eamMaintenanceStandardMapper.insert(eamMaintenanceStandardOld);
            Map<Integer, String> rowErrors = new HashMap<>();
@@ -1094,7 +1116,7 @@
     */
    @Override
    @Transactional
    public Result<?> importMaintenanceStandard(MultipartFile file, String type) {
    public Result<?> importMaintenanceStandard(MultipartFile file, String type,String id) {
        String fileName = file.getOriginalFilename();
        try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) {
@@ -1140,11 +1162,35 @@
                        return Result.error(fileName + ": 设备信息提取失败");
                    }
                    EamMaintenanceStandard eamMaintenanceStandardOld=new EamMaintenanceStandard();
                    if (StrUtil.isNotEmpty(id)){
                        eamMaintenanceStandardOld=eamMaintenanceStandardMapper.selectById(id);
                    }
                    // 配置类型相关参数
                    configureStandard(standard, type, file);
                    EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name());
                    if (exist != null) {
                        return Result.error(fileName + ": 设备标准已存在,不能重复添加");
                    if (StrUtil.isEmpty(id)){
                        EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.ABOLISH.name());
                        if (exist != null) {
                            return Result.error(fileName + ": 设备标准已存在,不能重复添加");
                        }
                    }
                    if (eamMaintenanceStandardOld.getEquipmentId().equals(standard.getEquipmentId())
                            &&eamMaintenanceStandardOld.getMaintenanceCategory().equals(standard.getMaintenanceCategory())) {
                        //升版操作,作废原有
                        eamMaintenanceStandardOld.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
                        eamMaintenanceStandardMapper.updateById(eamMaintenanceStandardOld);
                        //版本递增获取数字
                        Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$");
                        Matcher matcher = pattern.matcher(eamMaintenanceStandardOld.getStandardVersion());
                        if (matcher.find()) {
                            try {
                                int mainVersion = Integer.parseInt(matcher.group(1));
                                standard.setStandardVersion("v" + (mainVersion + 1));
                            } catch (NumberFormatException ignored) {
                            }
                        }
                    }
                    standard.setStandardName(documentTitle);
                    eamMaintenanceStandardMapper.insert(standard);