zhangherong
2025-07-09 7cd4326bda3ce46633e8590ba4e36c5d92d0e001
Merge remote-tracking branch 'origin/master'
已添加1个文件
已修改6个文件
499 ■■■■■ 文件已修改
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamEquipmentDto.java 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IBaseFactoryService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/EamEquipmentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,413 @@
package org.jeecg.modules.eam.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
 * è®¾å¤‡å°è´¦å¯¼å…¥ä¸“用
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class EamEquipmentDto {
    /**
     * ä¸»é”®
     */
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**
     * åˆ›å»ºäºº
     */
    @ApiModelProperty(value = "创建人")
    @Dict(dicCode = "sys_user, realname, username")
    private String createBy;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss ")
    private Date createTime;
    /**
     * æ›´æ–°äºº
     */
    @ApiModelProperty(value = "更新人")
    @Dict(dicCode = "sys_user, realname, username")
    private String updateBy;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss ")
    private Date updateTime;
    /**
     * åˆ é™¤æ ‡è®°
     */
    @ApiModelProperty(value = "删除标记")
    private Integer delFlag;
    /**
     * å…³é”®è®¾å¤‡æ ‡è¯†
     */
    @Excel(name = "关键设备标识", width = 15, orderNum = "1")
    @ApiModelProperty(value = "关键设备标识")
    @Dict(dicCode = "equipment_importance")
    private String equipmentImportance;
    /**
     * ç»Ÿä¸€ç¼–码
     */
    @Excel(name = "统一编码", width = 15, orderNum = "2")
    @ApiModelProperty(value = "统一编码")
    private String equipmentCode;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称", width = 15, orderNum = "3")
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    /**
     * å·¥æ®µ
     */
    @Excel(name = "中心/工区/工段", width = 15, orderNum = "4",dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    @ApiModelProperty(value = "中心/工区/工段")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "factory_code")
    private String factoryOrgCode;
    /**
     * æ‰€å±žåˆ†ç±»
     */
    @Excel(name = "所属分类", width = 15, orderNum = "5")
    @ApiModelProperty(value = "所属分类")
    @Dict(dicCode = "equipment_category")
    private String equipmentCategory;
    @TableField(exist = false)
    @Excel(name = "保养状态", width = 15, orderNum = "6",dicCode = "equipment_maintenance_status")
    @ApiModelProperty(value = "保养状态")
    @Dict(dicCode = "equipment_maintenance_status")
    private String maintenanceStatus;
    @TableField(exist = false)
    @Excel(name = "维修状态", width = 15, orderNum = "7",dicCode = "equipment_repair_status")
    @ApiModelProperty(value = "维修状态")
    @Dict(dicCode = "equipment_repair_status")
    private String repairStatus;
    /**技术状态*/
    @TableField(exist = false)
    @Excel(name = "技术状态", width = 15, orderNum = "8",dicCode = "equipment_technology_status")
    @ApiModelProperty(value = "技术状态")
    @Dict(dicCode = "equipment_technology_status")
    private String technologyStatus;
    /**
     * ABC标识
     */
    @Excel(name = "ABC标识", width = 15, orderNum = "9",dicCode = "abc_flag")
    @ApiModelProperty(value = "ABC标识")
    @Dict(dicCode = "abc_flag")
    private String abcFlag;
    /**
     * ç»´ä¿®ç­ç»„
     */
    @Excel(name = "维修班组", width = 15, orderNum = "10",dictTable = "eam_base_repair_depart",dicText = "depart_name",dicCode = "org_code")
    @ApiModelProperty(value = "维修班组")
    @Dict(dictTable = "eam_base_repair_depart",dicText = "depart_name",dicCode = "org_code")
    private String repairDepartOrgCode;
    /**
     * å®‰å…¨é…ç½®
     */
    @Excel(name = "安全配置", width = 15, orderNum = "11")
    @ApiModelProperty(value = "安全配置")
    private String securityConfiguration;
    /**
     * å†·å´ç³»ç»Ÿ
     */
    @Excel(name = "冷却系统", width = 15, orderNum = "15",dicCode = "cooling_system")
    @ApiModelProperty(value = "冷却系统")
    @Dict(dicCode = "cooling_system")
    private String coolSystem;
    /**
     * ç­ç«å™¨
     */
    @Excel(name = "灭火器", width = 15, orderNum = "16")
    @ApiModelProperty(value = "灭火器")
    private String fireExtinguisher;
    /**
     * ç­ç«å™¨æœ‰æ•ˆæœŸè‡³
     */
    @Excel(name = "灭火器有效期至", width = 15, orderNum = "17")
    @ApiModelProperty(value = "灭火器有效期至")
    private String fireExtinguisherExpirationDate;
    /**
     * æ“ä½œç³»ç»Ÿ
     */
    @Excel(name = "操作系统", width = 15, orderNum = "18",dicCode = "yn")
    @ApiModelProperty(value = "操作系统")
    @Dict(dicCode = "yn")
    private String operationSystem;
    /**
     * ç³»ç»Ÿ
     */
    @Excel(name = "系统", width = 15, orderNum = "19")
    @ApiModelProperty(value = "系统")
    private String system;
    /**
     * è®¾å¤‡ç«¯å£
     */
    @Excel(name = "设备端口", width = 15, orderNum = "20")
    @ApiModelProperty(value = "设备端口")
    private String equipmentPort;
    /**
     * åæ ‡æ•°é‡
     */
    @Excel(name = "坐标数量", width = 15, orderNum = "21")
    @ApiModelProperty(value = "坐标数量")
    private Integer coordinateNum;
    /**
     * é‡é‡(吨)
     */
    @Excel(name = "重量(吨)", width = 15, orderNum = "22")
    @ApiModelProperty(value = "重量(吨)")
    private BigDecimal equipmentWeight;
    /**
     * é‡é‡è®¡é‡å•位
     */
    @Excel(name = "重量计量单位", width = 15, orderNum = "23")
    @ApiModelProperty(value = "重量计量单位")
    private String weightUnit;
    /**
     * åŠŸèƒ½ä½ç½®
     */
    @Excel(name = "功能位置", width = 15, orderNum = "24")
    @ApiModelProperty(value = "功能位置")
    private String functionalLocation;
    /**
     * å®‰è£…位置
     */
    @Excel(name = "安装位置", width = 15, orderNum = "25")
    @ApiModelProperty(value = "安装位置")
    private String installationPosition;
    /**
     * å‡ºåŽ‚æ—¥æœŸ
     */
    @Excel(name = "出厂日期", width = 25, format = "yyyy/MM/dd", orderNum = "26")
    @ApiModelProperty(value = "出厂日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date leaveFactoryDate;
    /**
     * ç«‹é¡¹å¡å·
     */
    @Excel(name = "立项卡号", width = 15, orderNum = "27")
    @ApiModelProperty(value = "立项卡号")
    private String cardNumber;
    /**
     * èµ„金来源
     */
    @Excel(name = "资金来源", width = 15, orderNum = "28")
    @ApiModelProperty(value = "资金来源")
    private String fundingSource;
    /**
     * éªŒæ”¶æ—¥æœŸ
     */
    @Excel(name = "投用日期", width = 25, format = "yyyy/MM/dd", orderNum = "29")
    @ApiModelProperty(value = "验收日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date acceptanceCheckDate;
    /**
     * å‡ºåŽ‚ç¼–å·
     */
    @Excel(name = "出厂编号", width = 15, orderNum = "30")
    @ApiModelProperty(value = "出厂编号")
    private String factoryNumber;
    /**
     * èµ„产制造商
     */
    @Excel(name = "资产制造商", width = 25, orderNum = "31")
    @ApiModelProperty(value = "资产制造商")
    private String manufacturingEnterprise;
    /**
     * èµ„产来源国家
     */
    @Excel(name = "资产来源国家", width = 25, orderNum = "32")
    @ApiModelProperty(value = "资产来源国家")
    private String originCountry;
    /**
     * åž‹å·
     */
    @Excel(name = "型号", width = 15, orderNum = "33")
    @ApiModelProperty(value = "型号")
    private String equipmentModel;
    /**
     * è®¾å¤‡è§„æ ¼
     */
    @Excel(name = "设备规格", width = 15, orderNum = "34")
    @ApiModelProperty(value = "设备规格")
    private String equipmentSpecification;
    /**
     * æ€»åŠŸçŽ‡(KW)
     */
    @Excel(name = "总功率(KW)", width = 15, orderNum = "35")
    @ApiModelProperty(value = "总功率")
    private String equipmentPower;
    /**
     * è´¨ä¿å¼€å§‹æ—¥æœŸ
     */
    @Excel(name = "质保开始日期", width = 15, orderNum = "36")
    @ApiModelProperty(value = "质保开始日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date warrantyStartDate;
    /**
     * è´¨ä¿ç»“束日期
     */
    @Excel(name = "质保结束日期", width = 15, orderNum = "37")
    @ApiModelProperty(value = "质保结束日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date warrantyEndDate;
    /**
     * èµ„产状态
     */
    @Excel(name = "资产状态", width = 15, orderNum = "38",dicCode = "asset_status")
    @ApiModelProperty(value = "资产状态")
    @Dict(dicCode = "asset_status")
    private String assetStatus;
    /**最新二保日期*/
    @TableField(exist = false)
    @Excel(name = "最新二保日期", width = 15, orderNum = "39")
    @ApiModelProperty(value = "最新二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestSecondMaintenance;
    /**下次二保日期*/
    @TableField(exist = false)
    @Excel(name = "下次二保日期", width = 15, orderNum = "40")
    @ApiModelProperty(value = "下次二保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextSecondMaintenance;
    /**本次三保日期*/
    @TableField(exist = false)
    @Excel(name = "本次三保日期", width = 15, orderNum = "41")
    @ApiModelProperty(value = "本次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestThirdMaintenance;
    /**下次三保日期*/
    @TableField(exist = false)
    @Excel(name = "下次三保日期", width = 15, orderNum = "42")
    @ApiModelProperty(value = "下次三保日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextThirdMaintenance;
    /**三保周期(å¹´)*/
    @TableField(exist = false)
    @Excel(name = "三保周期(å¹´)", width = 15, orderNum = "43")
    @ApiModelProperty(value = "三保周期(å¹´)")
    private Integer thirdMaintenancePeriod;
    /**最新技术状态鉴定日期*/
    @TableField(exist = false)
    @Excel(name = "最新技术状态鉴定日期", width = 15, orderNum = "44")
    @ApiModelProperty(value = "最新技术状态鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date latestTechnologyCheck;
    /**技术状态下次鉴定日期*/
    @TableField(exist = false)
    @Excel(name = "技术状态下次鉴定日期", width = 15, orderNum = "45")
    @ApiModelProperty(value = "技术状态下次鉴定日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private java.util.Date nextTechnologyCheck;
    /**技术鉴定周期(å¹´)*/
    @TableField(exist = false)
    @Excel(name = "技术鉴定周期(å¹´)", width = 15, orderNum = "46")
    @ApiModelProperty(value = "技术鉴定周期(å¹´)")
    private Integer technologyCheckPeriod;
    /**
     * æ˜¯å¦ä¸»è®¾å¤‡
     */
    @Excel(name = "是否主设备", width = 15, dicCode = "yn", orderNum = "47")
    @ApiModelProperty(value = "是否主设备")
    @Dict(dicCode = "yn")
    private String masterFlag;
    /**
     * æ˜¯å¦æœ‰å·¥è‰ºå‚æ•°
     */
    @Excel(name = "有无工艺参数", width = 15, dicCode = "yn", orderNum = "48")
    @ApiModelProperty(value = "是否有工艺参数")
    @Dict(dicCode = "yn")
    private String processParametersFlag;
    /**
     * æ˜¯å¦æœ‰ç²¾åº¦å‚æ•°
     */
    @Excel(name = "有无精度参数", width = 15, dicCode = "yn", orderNum = "49")
    @ApiModelProperty(value = "是否有精度参数")
    @Dict(dicCode = "yn")
    private String precisionParametersFlag;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 50, orderNum = "50")
    @ApiModelProperty(value = "备注")
    private String remark;
}
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamEquipment.java
@@ -118,9 +118,9 @@
    /**
     * å·¥æ®µ
     */
    @Excel(name = "中心/工区/工段", width = 15, orderNum = "4",dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    @Excel(name = "中心/工区/工段", width = 15, orderNum = "4")
    @ApiModelProperty(value = "中心/工区/工段")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "org_code")
    @Dict(dictTable = "eam_base_factory",dicText = "factory_name",dicCode = "factory_code")
    private String factoryOrgCode;
    /**
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -292,7 +292,7 @@
        if (sysUser == null) {
            return null;
        }
        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
            //选择了设备,根据设备id过滤设备
            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
            queryWrapper.in("equipment_code", equipArr);
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java
@@ -18,6 +18,7 @@
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.TranslateDictTextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.dto.EamEquipmentDto;
import org.jeecg.modules.eam.entity.EamEquipment;
import org.jeecg.modules.eam.entity.EamEquipmentExtend;
import org.jeecg.modules.eam.request.EamEquipmentQuery;
@@ -27,11 +28,14 @@
import org.jeecg.modules.eam.vo.EquipmentSearchResult;
//import org.jeecg.modules.mdc.entity.MdcEquipment;
//import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.system.entity.BaseFactory;
import org.jeecg.modules.system.service.IBaseFactoryService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -41,6 +45,7 @@
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;
@@ -70,6 +75,8 @@
    private ObjectMapper objectMapper;
    @Autowired
    private TranslateDictTextUtils translateDictTextUtils;
    @Autowired
    private IBaseFactoryService baseFactoryService;
    /**
     * åˆ†é¡µåˆ—表查询
@@ -211,18 +218,23 @@
    public ModelAndView exportXls(HttpServletRequest request,EamEquipmentQuery eamEquipment) {
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        List<EamEquipment> equipmentList=eamEquipmentService.exportList(eamEquipment);
        List<EamEquipmentDto> eamEquipmentDtos=new ArrayList<>();
        String selections = request.getParameter("selections");
        if (oConvertUtils.isNotEmpty(selections)) {
            List<String> selectionList = Arrays.asList(selections.split(","));
            equipmentList = equipmentList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
        }
        equipmentList.forEach(item -> {
            EamEquipmentDto eamEquipmentDto = new EamEquipmentDto();
            BeanUtils.copyProperties(item,eamEquipmentDto);
            eamEquipmentDtos.add(eamEquipmentDto);
        });
        // Step.3 AutoPoi å¯¼å‡ºExcel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.FILE_NAME, "设备台账"); //此处设置的filename无效 ,前端会重更新设置一下
        mv.addObject(NormalExcelConstants.CLASS, EamEquipment.class);
        mv.addObject(NormalExcelConstants.CLASS, EamEquipmentDto.class);
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("设备台账" + "报表", "导出人:" + sysUser.getRealname(), "设备台账"));
        mv.addObject(NormalExcelConstants.DATA_LIST, equipmentList);
        mv.addObject(NormalExcelConstants.DATA_LIST, eamEquipmentDtos);
        return mv;
    }
@@ -268,6 +280,13 @@
                        sb.append(String.format("设备编码[%s]已存在,无法重复导入\n\r", eamEquipment.getEquipmentCode()));
                        continue;
                    }
                    BaseFactory baseFactory=baseFactoryService.searchCenterByKeyWord(eamEquipment.getFactoryOrgCode());
                    if(baseFactory==null){
                        sb.append(String.format("EAM中心信息[%s]不存在,无法导入\n\r", eamEquipment.getFactoryOrgCode()));
                        continue;
                    }else {
                        eamEquipment.setFactoryOrgCode(baseFactory.getOrgCode());
                    }
                    EamEquipment equipment = eamEquipmentService.saveEquipment(eamEquipment);
                    if (equipment == null) {
                        //保存失败,跳过本次循环
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -960,7 +960,6 @@
            List<XWPFTable> tables = doc.getTables();
            EamMaintenanceStandard standard = null;
            boolean firstTableProcessed = false;
            List<EamMaintenanceStandardDetail> items = new ArrayList<>();
            String standardId = null;
@@ -1185,7 +1184,7 @@
            } else if (cellContents.size() == 1) {
                // å•列模式:视为内容
                item.setItemName(cellContents.get(0));
            } else if (cellContents.isEmpty() && !isRowEmpty(row)) {
            } else if (!isRowEmpty(row)) {
                // ç‰¹æ®Šå¤„理:行非空但没有提取到内容(可能是复杂合并单元格)
                // å°è¯•提取整行文本作为内容
                StringBuilder content = new StringBuilder();
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IBaseFactoryService.java
@@ -32,7 +32,10 @@
     */
    List<EamBaseFactoryTreeModel> searchByKeyWord(String keyWord);
    /**
     * æ ¹æ®å…³é”®å­—获取中心数据
     */
    BaseFactory searchCenterByKeyWord(String keyWord);
    /**
     * ä¿å­˜äº§çº¿æ•°æ®
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java
@@ -102,7 +102,54 @@
        return Collections.emptyList();
    }
    public BaseFactory searchCenterByKeyWord(String keyWord) {
        if (StringUtils.isBlank(keyWord)) {
            return null;
        }
        if (keyWord.contains("/")) {
            return searchByHierarchy(keyWord);
        } else {
            return searchByCode(keyWord);
        }
    }
    private BaseFactory searchByHierarchy(String path) {
        String[] levels = path.split("/");
        int depth = levels.length;
        // æ£€æŸ¥å±‚级深度
        if (depth < 2 || depth > 3) {
            return null; // æ— æ•ˆçš„层级深度
        }
        // æŸ¥è¯¢ç¬¬ä¸€çº§ä¸­å¿ƒ
        BaseFactory center = findFactory(levels[0], 1, null);
        if (center == null) return null;
        // æŸ¥è¯¢ç¬¬äºŒçº§å·¥åŒº
        BaseFactory workArea = findFactory(levels[1], null, center.getId());
        if (workArea == null || depth == 2) return workArea;
        // æŸ¥è¯¢ç¬¬ä¸‰çº§å·¥æ®µ
        return findFactory(levels[2], null, workArea.getId());
    }
    private BaseFactory searchByCode(String code) {
        LambdaQueryWrapper<BaseFactory> query = new LambdaQueryWrapper<>();
        query.like(BaseFactory::getFactoryCode, code);
        return this.baseMapper.selectOne(query); // ä½¿ç”¨selectOne避免多个结果
    }
    private BaseFactory findFactory(String name, Integer category, String parentId) {
        LambdaQueryWrapper<BaseFactory> query = new LambdaQueryWrapper<>();
        query.eq(BaseFactory::getFactoryName, name);
        if (category != null) query.eq(BaseFactory::getFactoryCategory, category);
        if (parentId != null) query.eq(BaseFactory::getParentId, parentId);
        return this.baseMapper.selectOne(query);
    }
    /**
     * saveProductionData å¯¹åº” add ä¿å­˜ç”¨æˆ·åœ¨é¡µé¢æ·»åŠ çš„æ–°çš„è®¾å¤‡è½¦é—´ç®¡ç†å¯¹è±¡æ•°æ®