From 35a6e242f935f942d70146e293213c7182e505ae Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期一, 07 七月 2025 21:11:53 +0800
Subject: [PATCH] 保养规范点检导入  设备二保 三保导入

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java |  523 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 516 insertions(+), 7 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
index 596714b..76b2db9 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
+++ b/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 @@
     /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/
 
 
-    /*瀵煎叆鏂囦欢--------------------------寮�濮�*/
+    /*瀵煎叆鐐规鏂囦欢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) {
+                        // 蹇界暐搴忓彿瑙f瀽閿欒
+                    }
+                }
+
+                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();
+            // 涓夌骇淇濆吇涓嶉渶瑕佺被鍨嬶紝涓嶈缃甶temCategory
+            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--------------------------缁撴潫*/
+
 }

--
Gitblit v1.9.3