From 8c6327da1e57033a8d331d11e7f2e81496f1d6b5 Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期五, 23 五月 2025 15:15:24 +0800
Subject: [PATCH] 修改导入导出规则

---
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java                                   |   59 ----
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessServiceImpl.java                |   64 +++-
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsShopService.java                                   |    9 
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsShopMapper.java                                      |   35 ++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java |   40 ++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java            |   24 +
 aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java    |   27 +
 aps-modules/aps-core/src/main/resources/templates/标准工序数据模板v1.0.xlsx                                            |    0 
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java                           |    3 
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsStandardProcess.java                                 |    8 
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java          |  112 +++-----
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java                  |   65 +----
 aps-modules/aps-core/src/main/resources/templates/气体工单数据模板v1.0.xlsx                                            |    0 
 aps-common/aps-common-security/src/main/java/com/aps/common/security/utils/DictUtils.java                      |   65 +++-
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsShopServiceImpl.java                           |   19 +
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java |  157 +++++-------
 aps-modules/aps-core/src/main/resources/templates/气体预测数据模板v1.0.xlsx                                            |    0 
 aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessMapper.java                           |    3 
 18 files changed, 360 insertions(+), 330 deletions(-)

diff --git a/aps-common/aps-common-security/src/main/java/com/aps/common/security/utils/DictUtils.java b/aps-common/aps-common-security/src/main/java/com/aps/common/security/utils/DictUtils.java
index b3466a3..b1b7fe1 100644
--- a/aps-common/aps-common-security/src/main/java/com/aps/common/security/utils/DictUtils.java
+++ b/aps-common/aps-common-security/src/main/java/com/aps/common/security/utils/DictUtils.java
@@ -1,43 +1,43 @@
 package com.aps.common.security.utils;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
+
 import com.alibaba.fastjson2.JSONArray;
 import com.aps.common.core.constant.CacheConstants;
 import com.aps.common.core.utils.SpringUtils;
 import com.aps.common.core.utils.StringUtils;
 import com.aps.common.redis.service.RedisService;
 import com.aps.system.api.domain.SysDictData;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 瀛楀吀宸ュ叿绫�
- * 
+ *
  * @author ruoyi
  */
-public class DictUtils
-{
+public class DictUtils {
     /**
      * 璁剧疆瀛楀吀缂撳瓨
-     * 
-     * @param key 鍙傛暟閿�
+     *
+     * @param key       鍙傛暟閿�
      * @param dictDatas 瀛楀吀鏁版嵁鍒楄〃
      */
-    public static void setDictCache(String key, List<SysDictData> dictDatas)
-    {
+    public static void setDictCache(String key, List<SysDictData> dictDatas) {
         SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas);
     }
 
     /**
      * 鑾峰彇瀛楀吀缂撳瓨
-     * 
+     *
      * @param key 鍙傛暟閿�
      * @return dictDatas 瀛楀吀鏁版嵁鍒楄〃
      */
-    public static List<SysDictData> getDictCache(String key)
-    {
+    public static List<SysDictData> getDictCache(String key) {
         JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
-        if (StringUtils.isNotNull(arrayCache))
-        {
+        if (StringUtils.isNotNull(arrayCache)) {
             return arrayCache.toList(SysDictData.class);
         }
         return null;
@@ -45,31 +45,56 @@
 
     /**
      * 鍒犻櫎鎸囧畾瀛楀吀缂撳瓨
-     * 
+     *
      * @param key 瀛楀吀閿�
      */
-    public static void removeDictCache(String key)
-    {
+    public static void removeDictCache(String key) {
         SpringUtils.getBean(RedisService.class).deleteObject(getCacheKey(key));
     }
 
     /**
      * 娓呯┖瀛楀吀缂撳瓨
      */
-    public static void clearDictCache()
-    {
+    public static void clearDictCache() {
         Collection<String> keys = SpringUtils.getBean(RedisService.class).keys(CacheConstants.SYS_DICT_KEY + "*");
         SpringUtils.getBean(RedisService.class).deleteObject(keys);
     }
 
     /**
      * 璁剧疆cache key
-     * 
+     *
      * @param configKey 鍙傛暟閿�
      * @return 缂撳瓨閿甼ey
      */
-    public static String getCacheKey(String configKey)
-    {
+    public static String getCacheKey(String configKey) {
         return CacheConstants.SYS_DICT_KEY + configKey;
     }
+
+
+    public static interface CacheValue{
+        String get(String label);
+    }
+
+    /**
+     * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿��
+     *
+     * @param dictType
+     * @return
+     */
+    public static CacheValue getCacheValue(String dictType) {
+
+        List<SysDictData> cacheData = StringUtils.isEmpty(dictType) ? Collections.emptyList() : getDictCache(dictType);
+        return label -> {
+            if (CollectionUtils.isEmpty(cacheData)){
+                return null;
+            }
+            if(StringUtils.isEmpty(label)){
+                return null;
+            }
+            return cacheData.stream().filter(item -> Objects.equals(item.getDictLabel(), label))
+                    .findFirst()
+                    .map(SysDictData::getDictValue)
+                    .orElse(null);
+        };
+    }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
index ac1167d..0b08b15 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsGasPipelineCapacityPlanController.java
@@ -10,8 +10,10 @@
 import com.aps.common.security.annotation.RequiresPermissions;
 import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.domain.ApsGasPipelineCapacityPlan;
+import com.aps.core.domain.ApsShop;
 import com.aps.core.domain.ApsStandardProcess;
 import com.aps.core.service.IApsGasPipelineCapacityPlanService;
+import com.aps.core.service.IApsShopService;
 import com.aps.core.service.IApsStandardProcessService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -20,6 +22,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 
@@ -40,6 +43,9 @@
     @Autowired
     private IApsStandardProcessService apsStandardProcessService;
 
+    @Autowired
+    private IApsShopService apsShopService;
+
     /**
      * 鏌ヨ姘斾綋绠¤矾浜ц兘瑙勫垝鍒楄〃
      */
@@ -53,20 +59,30 @@
         apsStandardProcess.setMajor(apsGasPipelineCapacityPlan.getMajor());
         apsStandardProcess.setPlant(apsGasPipelineCapacityPlan.getOrgCode());
         List<ApsStandardProcess> processList = apsStandardProcessService.selectApsStandardProcessListAll(apsStandardProcess);
+        List<ApsShop> apsShops = apsShopService.findShopByFactory(apsGasPipelineCapacityPlan.getOrgCode());
         if (list.isEmpty()) {
             for (ApsStandardProcess apsStandardProcessTemp : processList) {
                 ApsGasPipelineCapacityPlan apsGasPipelineCapacityPlanTemp = new ApsGasPipelineCapacityPlan();
                 apsGasPipelineCapacityPlanTemp.setProcessName(apsStandardProcessTemp.getProcessName());
                 apsGasPipelineCapacityPlanTemp.setOrgCode(apsStandardProcessTemp.getPlant());
-                apsGasPipelineCapacityPlanTemp.setWorkshop(apsStandardProcessTemp.getWorkShop());
+                apsGasPipelineCapacityPlanTemp.setWorkshop(apsShops.stream()
+                        .filter(shop -> Objects.equals(shop.getShopName(), apsStandardProcessTemp.getWorkShop()))
+                        .map(ApsShop::getShopCode)
+                        .findFirst()
+                        .orElse(null));
                 list.add(apsGasPipelineCapacityPlanTemp);
             }
         } else {
-            list.forEach(item -> {
-                processList.stream().filter(p -> Objects.equals(p.getPlant(), item.getOrgCode()))
-                        .filter(p -> Objects.equals(p.getProcessName(), item.getProcessName()))
+            list.forEach(capacityPlan -> {
+                processList.stream().filter(p -> Objects.equals(p.getPlant(), capacityPlan.getOrgCode()))
+                        .filter(p -> Objects.equals(p.getMajor(), capacityPlan.getMajor()))
+                        .filter(p -> p.getWorkShop() != null)
                         .findFirst().ifPresent(p -> {
-                            item.setWorkshop(p.getWorkShop());
+                            capacityPlan.setWorkshop(apsShops.stream()
+                                    .filter(shop -> Objects.equals(shop.getShopCode(), p.getWorkShop()))
+                                    .map(ApsShop::getShopName)
+                                    .findFirst()
+                                    .orElse(null));
                         });
             });
         }
@@ -84,15 +100,19 @@
                     newProcess.add(apsStandardProcessTemp);
                 }
             }
-            for (ApsStandardProcess processName : newProcess) {
+            for (ApsStandardProcess process : newProcess) {
                 ApsGasPipelineCapacityPlan apsGasPipelineCapacityPlanTemp = new ApsGasPipelineCapacityPlan();
-                apsGasPipelineCapacityPlanTemp.setProcessName(processName.getProcessName());
-                apsGasPipelineCapacityPlanTemp.setOrgCode(processName.getPlant());
-                apsGasPipelineCapacityPlanTemp.setWorkshop(processName.getWorkShop());
+                apsGasPipelineCapacityPlanTemp.setProcessName(process.getProcessName());
+                apsGasPipelineCapacityPlanTemp.setOrgCode(process.getPlant());
+                apsGasPipelineCapacityPlanTemp.setWorkshop(apsShops.stream()
+                        .filter(shop -> Objects.equals(shop.getShopName(), process.getWorkShop()))
+                        .map(ApsShop::getShopCode)
+                        .findFirst()
+                        .orElse(null));
                 list.add(apsGasPipelineCapacityPlanTemp);
             }
         }
-        list.sort((a, b) -> a.getProcessName().compareTo(b.getProcessName()));
+        list.sort(Comparator.comparing(ApsGasPipelineCapacityPlan::getProcessName));
         return getDataTable(list);
     }
 
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
index f99787f..10d4244 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
@@ -7,13 +7,19 @@
 import com.aps.common.log.annotation.Log;
 import com.aps.common.log.enums.BusinessType;
 import com.aps.common.security.annotation.RequiresPermissions;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.core.domain.ApsGasPipelineMo;
 import com.aps.core.service.IApsGasPipelineMoService;
+import com.aps.system.api.domain.SysDictData;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
 import org.apache.commons.io.IOUtils;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.http.HttpHeaders;
@@ -21,6 +27,8 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -56,7 +64,7 @@
 
     @Operation(summary = "瀵煎叆绠¤矾鎵嬪伐姘斾綋宸ュ崟鏁版嵁", description = "鎵归噺瀵煎叆")
     @Log(title = "瀵煎叆绠¤矾鎵嬪伐姘斾綋宸ュ崟鏁版嵁", businessType = BusinessType.IMPORT)
-    @RequiresPermissions("gasPipeline:mo:import")
+//    @RequiresPermissions("gasPipeline:mo:import")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
 
@@ -135,6 +143,20 @@
     @GetMapping("/template")
     public ResponseEntity<ByteArrayResource> exportTemplate() {
         byte[] file = IOUtils.resourceToByteArray("/templates/姘斾綋宸ュ崟鏁版嵁妯℃澘v1.0.xlsx");
+        Workbook workbook = WorkbookFactory.create(new ByteArrayInputStream(file));
+        Sheet sheet = workbook.getSheet("瀛楀吀-鐢熶骇鍩哄湴");
+        List<SysDictData> sysDictDataList = DictUtils.getDictCache("aps_factory");
+        if (sysDictDataList != null) {
+            for (int i = 0; i < sysDictDataList.size(); i++) {
+                Row row = sheet.createRow(i + 1);
+                row.createCell(0).setCellValue(sysDictDataList.get(i).getDictValue());
+                row.createCell(1).setCellValue(sysDictDataList.get(i).getDictLabel());
+            }
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            workbook.write(baos);
+            file = baos.toByteArray();
+        }
+        workbook.close();
         ByteArrayResource resource = new ByteArrayResource(file);
         return ResponseEntity.ok()
                 .header("Access-Control-Expose-Headers", HttpHeaders.CONTENT_DISPOSITION)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
index faf5e0a..1200905 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
@@ -7,23 +7,28 @@
 import com.aps.common.log.annotation.Log;
 import com.aps.common.log.enums.BusinessType;
 import com.aps.common.security.annotation.RequiresPermissions;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.core.domain.ApsGasPipelinePrediction;
-import com.aps.core.domain.ApsMaterialProductGroupManagement;
 import com.aps.core.service.IApsGasPipelinePredictionService;
+import com.aps.system.api.domain.SysDictData;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
 import org.apache.commons.io.IOUtils;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.InputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -57,7 +62,7 @@
 
     @Operation(summary = "瀵煎叆鎵嬪伐姘斾綋棰勬祴鏁版嵁", description = "鎵归噺瀵煎叆")
     @Log(title = "瀵煎叆鎵嬪伐姘斾綋棰勬祴鏁版嵁", businessType = BusinessType.IMPORT)
-    @RequiresPermissions("gasPipeline:prediction:import")
+//    @RequiresPermissions("gasPipeline:prediction:import")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
 
@@ -75,6 +80,20 @@
     @GetMapping("/template")
     public ResponseEntity<ByteArrayResource> exportTemplate() {
         byte[] file = IOUtils.resourceToByteArray("/templates/姘斾綋棰勬祴鏁版嵁妯℃澘v1.0.xlsx");
+        Workbook workbook = WorkbookFactory.create(new ByteArrayInputStream(file));
+        Sheet sheet = workbook.getSheet("瀛楀吀-鐢熶骇鍩哄湴");
+        List<SysDictData> sysDictDataList = DictUtils.getDictCache("aps_factory");
+        if (sysDictDataList != null) {
+            for (int i = 0; i < sysDictDataList.size(); i++) {
+                Row row = sheet.createRow(i + 1);
+                row.createCell(0).setCellValue(sysDictDataList.get(i).getDictValue());
+                row.createCell(1).setCellValue(sysDictDataList.get(i).getDictLabel());
+            }
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            workbook.write(baos);
+            file = baos.toByteArray();
+        }
+        workbook.close();
         ByteArrayResource resource = new ByteArrayResource(file);
         return ResponseEntity.ok()
                 .header("Access-Control-Expose-Headers", HttpHeaders.CONTENT_DISPOSITION)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java
index 2c83cd4..d031ba2 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java
@@ -11,6 +11,7 @@
 
 import java.math.BigDecimal;
 import java.sql.Timestamp;
+import java.util.Date;
 
 /**
  * 绠¤矾鎵嬪伐姘斾綋宸ュ崟鏁版嵁瀵硅薄 aps_gas_pipeline_mo
@@ -49,66 +50,10 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "璁″垝瀹屽伐鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @Schema(description = "璁″垝瀹屽伐鏃ユ湡")
-    private Timestamp planEnd;
+    private Date planEnd;
 
     /** 鏁伴噺 */
     @Excel(name = "鏁伴噺")
     @Schema(description = "鏁伴噺")
     private BigDecimal quantity;
-
-    public void setId(Long id) 
-    {
-        this.id = id;
-    }
-
-    public Long getId() 
-    {
-        return id;
-    }
-
-    public void setMo(String mo) 
-    {
-        this.mo = mo;
-    }
-
-    public String getMo() 
-    {
-        return mo;
-    }
-
-    public void setFactory(String factory) 
-    {
-        this.factory = factory;
-    }
-
-    public String getFactory() 
-    {
-        return factory;
-    }
-
-    public void setMaterialCode(String materialCode) 
-    {
-        this.materialCode = materialCode;
-    }
-
-    public String getMaterialCode() 
-    {
-        return materialCode;
-    }
-
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("mo", getMo())
-            .append("factory", getFactory())
-            .append("materialCode", getMaterialCode())
-            .append("planEnd", getPlanEnd())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
index 6a23249..4f60a7f 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
@@ -12,6 +12,7 @@
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -48,7 +49,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "棰勬祴鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @Schema(description = "棰勬祴鏃ユ湡")
-    private Timestamp predictDate;
+    private Date predictDate;
 
     /** 鏁伴噺 */
     @Excel(name = "鏁伴噺")
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsStandardProcess.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsStandardProcess.java
index e7d134b..e6f7157 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsStandardProcess.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsStandardProcess.java
@@ -2,9 +2,13 @@
 
 import com.aps.common.core.annotation.Excel;
 import com.aps.common.core.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.data.annotation.Id;
 
 import java.math.BigDecimal;
 
@@ -20,6 +24,10 @@
 {
     private static final long serialVersionUID = 1L;
 
+    @Id
+    @TableId(type = IdType.AUTO)
+    /** 涓婚敭id */
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
     /** 涓婚敭id */
     @Schema(description = "涓婚敭id", type = "Long")
     private Long id;
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsShopMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsShopMapper.java
index 491ee60..7de4790 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsShopMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsShopMapper.java
@@ -1,8 +1,13 @@
 package com.aps.core.mapper;
 
 import java.util.List;
+import java.util.Set;
+
 import com.aps.core.domain.ApsShop;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * 杞﹂棿Mapper鎺ュ彛
@@ -11,7 +16,7 @@
  * @date 2025-04-14
  */
 @Mapper
-public interface ApsShopMapper 
+public interface ApsShopMapper extends BaseMapper<ApsShop>
 {
     /**
      * 鏌ヨ杞﹂棿
@@ -60,4 +65,32 @@
      * @return 缁撴灉
      */
     public int deleteApsShopByIds(String[] ids);
+
+
+    @Select("""
+        <script>
+            select * from aps_shop where 1 = 0
+            <if test="!codes.isEmpty()"> or shop_name in
+                <foreach collection="names" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>                                 
+            </if> 
+        </script>
+    """)
+    List<ApsShop> selectApsByName(@NotNull Set<String> names);
+
+    @Select("select * from aps_shop where plant_code = #{orgCode}")
+    List<ApsShop> selectApsByFactory(String orgCode);
+
+    @Select("""
+        <script>
+            select * from aps_shop where 1 = 0
+            <if test="!codes.isEmpty()"> or shop_code in
+                <foreach collection="codes" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>                                 
+            </if> 
+        </script>
+    """)
+    List<ApsShop> selectByCodes(Set<String> codes);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessMapper.java
index fdf5d23..3cb17d4 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsStandardProcessMapper.java
@@ -1,6 +1,7 @@
 package com.aps.core.mapper;
 
 import com.aps.core.domain.ApsStandardProcess;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 import java.util.List;
 
@@ -10,7 +11,7 @@
  * @author hjy
  * @date 2025-04-23
  */
-public interface ApsStandardProcessMapper 
+public interface ApsStandardProcessMapper extends BaseMapper<ApsStandardProcess>
 {
     /**
      * 鏌ヨ鏍囧噯宸ュ簭
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsShopService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsShopService.java
index 118614e..666c56c 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsShopService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsShopService.java
@@ -1,7 +1,10 @@
 package com.aps.core.service;
 
 import java.util.List;
+import java.util.Set;
+
 import com.aps.core.domain.ApsShop;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * 杞﹂棿Service鎺ュ彛
@@ -58,4 +61,10 @@
      * @return 缁撴灉
      */
     public int deleteApsShopById(String id);
+
+    List<ApsShop> findAllShops();
+
+    List<ApsShop> findShopByFactory(String orgCode);
+
+    List<ApsShop> findShopByCodes(@NotNull Set<String> collect);
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java
index d714577..b326ae6 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java
@@ -2,25 +2,18 @@
 
 import cn.hutool.core.util.IdUtil;
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.domain.ApsGasPipelineMo;
 import com.aps.core.mapper.ApsGasPipelineMoMapper;
 import com.aps.core.service.IApsGasPipelineMoService;
-import io.micrometer.common.util.StringUtils;
 import lombok.SneakyThrows;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -108,49 +101,21 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public int batchInsertGasPipelineMo(MultipartFile file) {
-        Workbook workbook = WorkbookFactory.create(file.getInputStream());
 
-        Sheet sheet = workbook.getSheetAt(0);
-        int rows = sheet.getLastRowNum();
-        if (rows > 0) {
-            List<ApsGasPipelineMo> list = new ArrayList<>();
+        ExcelUtil<ApsGasPipelineMo> util = new ExcelUtil<>(ApsGasPipelineMo.class);
+        List<ApsGasPipelineMo> tempList = util.importExcel(file.getInputStream());
+        DictUtils.CacheValue cacheValue = DictUtils.getCacheValue("aps_factory");
+        tempList.forEach(apsGasPipelineMo -> {
+            apsGasPipelineMo.setId(IdUtil.getSnowflakeNextId());
+            apsGasPipelineMo.setFactory(cacheValue.get(apsGasPipelineMo.getFactory()));
+            apsGasPipelineMo.setCreateBy(SecurityUtils.getUsername());
+            apsGasPipelineMo.setCreateTime(DateUtils.getNowDate());
+        });
 
-            /*鏁版嵁鍒椾粠1寮�濮�*/
-            for (int i = 1; i <= rows; i++) {
-                Row row = sheet.getRow(i);
-                if (row.getCell(0) == null){
-                    continue;
-                }
-                String mo = row.getCell(0).getStringCellValue();
-                if (StringUtils.isEmpty(mo)){
-                    continue;
-                }
-                String factory = row.getCell(1).getStringCellValue();
-                String materialNum = row.getCell(2).getStringCellValue();
-                double quantity = row.getCell(3).getNumericCellValue();
-                Date planEnd = row.getCell(4).getDateCellValue();
-                if (StringUtils.isNotBlank(factory) &&
-                    StringUtils.isNotBlank(materialNum) &&
-                    planEnd != null) {
-                    ApsGasPipelineMo apsGasPipelineMo = new ApsGasPipelineMo();
-                    apsGasPipelineMo.setMo(mo);
-                    apsGasPipelineMo.setMaterialCode(materialNum);
-                    apsGasPipelineMo.setId(IdUtil.getSnowflakeNextId());
-                    apsGasPipelineMo.setFactory(factory);
-                    apsGasPipelineMo.setCreateBy(SecurityUtils.getUsername());
-                    apsGasPipelineMo.setCreateTime(DateUtils.getNowDate());
-                    apsGasPipelineMo.setQuantity(new BigDecimal(quantity));
-                    apsGasPipelineMo.setPlanEnd(new Timestamp(planEnd.getTime()));
-                    list.add(apsGasPipelineMo);
-                }
-            }
-            if (!list.isEmpty()) {
-                apsGasPipelineMoMapper.deleteAll();
-                apsGasPipelineMoMapper.insert(list);
-            }
-            return list.size();
+        if (!tempList.isEmpty()) {
+            apsGasPipelineMoMapper.deleteAll();
+            apsGasPipelineMoMapper.insert(tempList);
         }
-        return 0;
-
+        return tempList.size();
     }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
index f4715e4..c9f6153 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
@@ -2,27 +2,19 @@
 
 import cn.hutool.core.util.IdUtil;
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.common.security.utils.SecurityUtils;
 import com.aps.core.domain.ApsGasPipelinePrediction;
-import com.aps.core.domain.ApsMaterialProductGroupManagement;
 import com.aps.core.mapper.ApsGasPipelinePredictionMapper;
 import com.aps.core.service.IApsGasPipelinePredictionService;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import io.micrometer.common.util.StringUtils;
 import lombok.SneakyThrows;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.math.BigDecimal;
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 /**
@@ -107,72 +99,54 @@
     @SneakyThrows
     @Override
     public int batchInsertApsGasPipelinePrediction(MultipartFile file) {
-        Workbook workbook = WorkbookFactory.create(file.getInputStream());
 
-        Sheet sheet = workbook.getSheetAt(0);
-        int rows = sheet.getLastRowNum();
-        if (rows > 0) {
-            List<ApsGasPipelinePrediction> list = new ArrayList<>();
-            Set<String> keys = new HashSet<>();
-            /*鏁版嵁琛屼粠1寮�濮�*/
-            for (int i = rows; i > 0; --i) {
-                Row row = sheet.getRow(i);
-                if (row.getCell(0) == null) {
-                    continue;
-                }
+        ExcelUtil<ApsGasPipelinePrediction> util = new ExcelUtil<>(ApsGasPipelinePrediction.class);
+        List<ApsGasPipelinePrediction> list = util.importExcel(file.getInputStream());
+        DictUtils.CacheValue cacheValue = DictUtils.getCacheValue("aps_factory");
+        Set<String> keys = new HashSet<>();
+        list.forEach(item -> {
+            item.setId(IdUtil.getSnowflakeNextId());
+            item.setFactory(cacheValue.get(item.getFactory()));
+            item.setCreateBy(SecurityUtils.getUsername());
+            item.setCreateTime(DateUtils.getNowDate());
+        });
+        Collections.reverse(list);
+        list = list.stream().filter(item -> {
+            item.setKey(null);
+            if (!keys.contains(item.getKey())) {
+                keys.add(item.getKey());
+                return true;
+            }
+            return false;
+        }).collect(Collectors.toList());
 
-                String materialCode = row.getCell(0).getStringCellValue();
-                if (StringUtils.isEmpty(materialCode)) {
-                    continue;
-                }
-                String factory = row.getCell(1).getStringCellValue();
-                double quantity = row.getCell(2).getNumericCellValue();
-                Date date = row.getCell(3).getDateCellValue();
-                if (StringUtils.isNotBlank(factory) &&
-                    date != null) {
-                    ApsGasPipelinePrediction item = new ApsGasPipelinePrediction();
-                    item.setId(IdUtil.getSnowflakeNextId());
-                    item.setFactory(factory);
-                    item.setMaterialCode(materialCode);
-                    item.setCreateBy(SecurityUtils.getUsername());
-                    item.setCreateTime(DateUtils.getNowDate());
-                    item.setPredictQuantity(new BigDecimal(quantity));
-                    item.setPredictDate(new Timestamp(date.getTime()));
-                    if (!keys.contains(item.getKey())) {
-                        keys.add(item.getKey());
-                        list.add(item);
+        if (!list.isEmpty()) {
+            List<Map<String, Object>> facCodeKey = apsGasPipelinePredictionMapper.selectByFacOrMaterial(keys);
+            if (!facCodeKey.isEmpty()) {
+                Iterator<ApsGasPipelinePrediction> it = list.iterator();
+                while (it.hasNext()) {
+                    ApsGasPipelinePrediction item = it.next();
+                    int count = 0;
+                    for (Map<String, Object> map : facCodeKey) {
+                        if (map.get("key").equals(item.getKey())) {
+                            item.setId((Long) map.get("id"));
+                            item.setCreateBy(null);
+                            item.setCreateTime(null);
+                            item.setUpdateBy(SecurityUtils.getUsername());
+                            item.setUpdateTime(new Timestamp(System.currentTimeMillis()));
+                            apsGasPipelinePredictionMapper.updateById(item);
+                            count++;
+                        }
+                    }
+                    if (count > 0) {
+                        it.remove();
                     }
                 }
             }
             if (!list.isEmpty()) {
-                List<Map<String, Object>> facCodeKey = apsGasPipelinePredictionMapper.selectByFacOrMaterial(keys);
-                if (!facCodeKey.isEmpty()) {
-                    Iterator<ApsGasPipelinePrediction> it = list.iterator();
-                    while (it.hasNext()) {
-                        ApsGasPipelinePrediction item = it.next();
-                        int count = 0;
-                        for (Map<String, Object> map : facCodeKey) {
-                            if (map.get("key").equals(item.getKey())) {
-                                item.setId((Long) map.get("id"));
-                                item.setCreateBy(null);
-                                item.setCreateTime(null);
-                                item.setUpdateBy(SecurityUtils.getUsername());
-                                item.setUpdateTime(new Timestamp(System.currentTimeMillis()));
-                                apsGasPipelinePredictionMapper.updateById(item);
-                                count++;
-                            }
-                        }
-                        if (count > 0){
-                            it.remove();
-                        }
-                    }
-                }
-                if (!list.isEmpty()) {
-                    apsGasPipelinePredictionMapper.insert(list);
-                }
+                apsGasPipelinePredictionMapper.insert(list);
             }
-            return list.size();
         }
-        return 0;
+        return list.size();
     }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
index 9cb9f90..b89e432 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
@@ -1,73 +1,64 @@
 package com.aps.core.service.impl;
 
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.*;
-import java.util.stream.Collectors;
-
 import cn.hutool.core.util.IdUtil;
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.common.security.utils.SecurityUtils;
-import com.aps.core.domain.ApsGasPipelinePrediction;
 import com.aps.core.domain.ApsMaterialProductGroupManagement;
 import com.aps.core.mapper.ApsMaterialProductGroupManagementMapper;
 import com.aps.core.service.IApsMaterialProductGroupManagementService;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import io.micrometer.common.util.StringUtils;
 import lombok.SneakyThrows;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.sql.Timestamp;
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * 鐗╂枡浜у搧缁勬暟鎹鐞哠ervice涓氬姟灞傚鐞�
- * 
+ *
  * @author ruoyi
  * @date 2025-05-19
  */
 @Service
-public class ApsMaterialProductGroupManagementServiceImpl implements IApsMaterialProductGroupManagementService
-{
+public class ApsMaterialProductGroupManagementServiceImpl implements IApsMaterialProductGroupManagementService {
     @Autowired
     private ApsMaterialProductGroupManagementMapper apsMaterialProductGroupManagementMapper;
 
     /**
      * 鏌ヨ鐗╂枡浜у搧缁勬暟鎹鐞�
-     * 
+     *
      * @param id 鐗╂枡浜у搧缁勬暟鎹鐞嗕富閿�
      * @return 鐗╂枡浜у搧缁勬暟鎹鐞�
      */
     @Override
-    public ApsMaterialProductGroupManagement selectApsMaterialProductGroupManagementById(Long id)
-    {
+    public ApsMaterialProductGroupManagement selectApsMaterialProductGroupManagementById(Long id) {
         return apsMaterialProductGroupManagementMapper.selectApsMaterialProductGroupManagementById(id);
     }
 
     /**
      * 鏌ヨ鐗╂枡浜у搧缁勬暟鎹鐞嗗垪琛�
-     * 
+     *
      * @param apsMaterialProductGroupManagement 鐗╂枡浜у搧缁勬暟鎹鐞�
      * @return 鐗╂枡浜у搧缁勬暟鎹鐞�
      */
     @Override
-    public List<ApsMaterialProductGroupManagement> selectApsMaterialProductGroupManagementList(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
-    {
+    public List<ApsMaterialProductGroupManagement> selectApsMaterialProductGroupManagementList(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement) {
         return apsMaterialProductGroupManagementMapper.selectApsMaterialProductGroupManagementList(apsMaterialProductGroupManagement);
     }
 
     /**
      * 鏂板鐗╂枡浜у搧缁勬暟鎹鐞�
-     * 
+     *
      * @param apsMaterialProductGroupManagement 鐗╂枡浜у搧缁勬暟鎹鐞�
      * @return 缁撴灉
      */
     @Override
-    public int insertApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
-    {
+    public int insertApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement) {
         apsMaterialProductGroupManagement.setId(IdUtil.getSnowflakeNextId());
         apsMaterialProductGroupManagement.setCreateBy(SecurityUtils.getUsername());
         apsMaterialProductGroupManagement.setCreateTime(DateUtils.getNowDate());
@@ -76,13 +67,12 @@
 
     /**
      * 淇敼鐗╂枡浜у搧缁勬暟鎹鐞�
-     * 
+     *
      * @param apsMaterialProductGroupManagement 鐗╂枡浜у搧缁勬暟鎹鐞�
      * @return 缁撴灉
      */
     @Override
-    public int updateApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
-    {
+    public int updateApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement) {
         apsMaterialProductGroupManagement.setUpdateTime(DateUtils.getNowDate());
         apsMaterialProductGroupManagement.setUpdateBy(SecurityUtils.getUsername());
         return apsMaterialProductGroupManagementMapper.updateApsMaterialProductGroupManagement(apsMaterialProductGroupManagement);
@@ -90,98 +80,79 @@
 
     /**
      * 鎵归噺鍒犻櫎鐗╂枡浜у搧缁勬暟鎹鐞�
-     * 
+     *
      * @param ids 闇�瑕佸垹闄ょ殑鐗╂枡浜у搧缁勬暟鎹鐞嗕富閿�
      * @return 缁撴灉
      */
     @Override
-    public int deleteApsMaterialProductGroupManagementByIds(Long[] ids)
-    {
+    public int deleteApsMaterialProductGroupManagementByIds(Long[] ids) {
         return apsMaterialProductGroupManagementMapper.deleteApsMaterialProductGroupManagementByIds(ids);
     }
 
     /**
      * 鍒犻櫎鐗╂枡浜у搧缁勬暟鎹鐞嗕俊鎭�
-     * 
+     *
      * @param id 鐗╂枡浜у搧缁勬暟鎹鐞嗕富閿�
      * @return 缁撴灉
      */
     @Override
-    public int deleteApsMaterialProductGroupManagementById(Long id)
-    {
+    public int deleteApsMaterialProductGroupManagementById(Long id) {
         return apsMaterialProductGroupManagementMapper.deleteApsMaterialProductGroupManagementById(id);
     }
 
     @SneakyThrows
     @Override
     public int batchInsertApsMaterialProductGroupManagement(MultipartFile file) {
-        Workbook workbook = WorkbookFactory.create(file.getInputStream());
-
-        Sheet sheet = workbook.getSheetAt(0);
-        int rows = sheet.getLastRowNum();
-        if (rows > 0) {
-            List<ApsMaterialProductGroupManagement> list = new ArrayList<>();
-
-            /*鏁版嵁琛屼粠1寮�濮�*/
-            Set<String> keys = new HashSet<>();
-            for (int i = rows; i > 0; --i) {
-                Row row = sheet.getRow(i);
-                if (row.getCell(0) == null) {
-                    continue;
-                }
-                String materialCode = row.getCell(0).getStringCellValue();
-                if (StringUtils.isEmpty(materialCode)){
-                    continue;
-                }
-                String materialType = row.getCell(1).getStringCellValue();
-                String domain = row.getCell(2).getStringCellValue();
-                String isMain = row.getCell(3).getStringCellValue();
-                String factory = row.getCell(4).getStringCellValue();
-                if (StringUtils.isNotBlank(materialType) &&
-                    StringUtils.isNotBlank(domain) &&
-                    StringUtils.isNotBlank(isMain) &&
-                    StringUtils.isNotBlank(factory)) {
-                    ApsMaterialProductGroupManagement item = new ApsMaterialProductGroupManagement();
-                    item.setId(IdUtil.getSnowflakeNextId());
-                    item.setFactory(factory);
-                    item.setDomain(domain);
-                    item.setMaterialType(materialType);
-                    item.setMaterialCode(materialCode);
-                    item.setIsMain(isMain);
-                    item.setCreateBy(SecurityUtils.getUsername());
-                    item.setCreateTime(DateUtils.getNowDate());
+        ExcelUtil<ApsMaterialProductGroupManagement> util = new ExcelUtil<>(ApsMaterialProductGroupManagement.class);
+        List<ApsMaterialProductGroupManagement> list = util.importExcel(file.getInputStream());
+        DictUtils.CacheValue cacheValue = DictUtils.getCacheValue("aps_factory");
+        DictUtils.CacheValue cacheDomain = DictUtils.getCacheValue("aps_domain");
+        Set<String> keys = new HashSet<>();
+        list.forEach(item -> {
+            item.setId(IdUtil.getSnowflakeNextId());
+            item.setDomain(cacheDomain.get(item.getDomain()));
+            item.setFactory(cacheValue.get(item.getFactory()));
+            item.setCreateBy(SecurityUtils.getUsername());
+            item.setCreateTime(DateUtils.getNowDate());
+        });
+        Collections.reverse(list);
+        list = list.stream()
+                .filter(item -> {
+                    item.setKey(null);
                     if (!keys.contains(item.getKey())) {
                         keys.add(item.getKey());
-                        list.add(item);
+                        return true;
                     }
-                }
-            }
-            if (!list.isEmpty()) {
-                Set<String> facCodeKey = apsMaterialProductGroupManagementMapper.selectByFacOrMaterial(keys);
-                if (!facCodeKey.isEmpty()) {
-                    Iterator<ApsMaterialProductGroupManagement> it = list.iterator();
-                    while (it.hasNext()) {
-                        ApsMaterialProductGroupManagement item = it.next();
-                        if (facCodeKey.contains(item.getKey())) {
-                            LambdaUpdateWrapper<ApsMaterialProductGroupManagement> wrapper = new LambdaUpdateWrapper<>();
-                            wrapper.eq(ApsMaterialProductGroupManagement::getFactory, item.getFactory());
-                            wrapper.eq(ApsMaterialProductGroupManagement::getMaterialCode, item.getMaterialCode());
-                            item.setCreateBy(null);
-                            item.setCreateTime(null);
-                            item.setUpdateBy(SecurityUtils.getUsername());
-                            item.setUpdateTime(new Timestamp(System.currentTimeMillis()));
-                            apsMaterialProductGroupManagementMapper.update(item, wrapper);
-                            it.remove();
-                        }
-                    }
-                }
+                    return false;
+                })
+                .collect(Collectors.toList());
 
-                if (!list.isEmpty()) {
-                    apsMaterialProductGroupManagementMapper.insert(list);
+        if (!list.isEmpty()) {
+            Set<String> facCodeKey = apsMaterialProductGroupManagementMapper.selectByFacOrMaterial(keys);
+            if (!facCodeKey.isEmpty()) {
+                Iterator<ApsMaterialProductGroupManagement> it = list.iterator();
+                while (it.hasNext()) {
+                    ApsMaterialProductGroupManagement item = it.next();
+                    if (facCodeKey.contains(item.getKey())) {
+                        LambdaUpdateWrapper<ApsMaterialProductGroupManagement> wrapper = new LambdaUpdateWrapper<>();
+                        wrapper.eq(ApsMaterialProductGroupManagement::getFactory, item.getFactory());
+                        wrapper.eq(ApsMaterialProductGroupManagement::getMaterialCode, item.getMaterialCode());
+                        item.setCreateBy(null);
+                        item.setCreateTime(null);
+                        item.setId(null);
+                        item.setUpdateBy(SecurityUtils.getUsername());
+                        item.setUpdateTime(new Timestamp(System.currentTimeMillis()));
+                        apsMaterialProductGroupManagementMapper.update(item, wrapper);
+                        it.remove();
+                    }
                 }
             }
-            return list.size();
+
+            if (!list.isEmpty()) {
+                apsMaterialProductGroupManagementMapper.insert(list);
+            }
         }
-        return 0;
+        return list.size();
+
     }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsShopServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsShopServiceImpl.java
index a83b730..b154f2d 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsShopServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsShopServiceImpl.java
@@ -1,9 +1,13 @@
 package com.aps.core.service.impl;
 
 import java.util.List;
+import java.util.Set;
+
 import com.aps.common.core.utils.DateUtils;
 import com.aps.common.core.utils.uuid.IdUtils;
 import com.aps.common.security.utils.SecurityUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.aps.core.mapper.ApsShopMapper;
@@ -97,4 +101,19 @@
     {
         return apsShopMapper.deleteApsShopById(id);
     }
+
+    @Override
+    public List<ApsShop> findAllShops() {
+        return apsShopMapper.selectList(new QueryWrapper<>());
+    }
+
+    @Override
+    public List<ApsShop> findShopByFactory(String orgCode) {
+        return apsShopMapper.selectApsByFactory(orgCode);
+    }
+
+    @Override
+    public List<ApsShop> findShopByCodes(@NotNull Set<String> codes) {
+        return apsShopMapper.selectByCodes(codes);
+    }
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessServiceImpl.java
index cfb2f8a..b2fee3c 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsStandardProcessServiceImpl.java
@@ -1,60 +1,65 @@
 package com.aps.core.service.impl;
 
 import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.StringUtils;
+import com.aps.common.security.utils.DictUtils;
 import com.aps.common.security.utils.SecurityUtils;
+import com.aps.core.domain.ApsShop;
 import com.aps.core.domain.ApsStandardProcess;
+import com.aps.core.mapper.ApsShopMapper;
 import com.aps.core.mapper.ApsStandardProcessMapper;
 import com.aps.core.service.IApsStandardProcessService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 鏍囧噯宸ュ簭Service涓氬姟灞傚鐞�
- * 
+ *
  * @author hjy
  * @date 2025-04-23
  */
 @Service
-public class ApsStandardProcessServiceImpl implements IApsStandardProcessService 
-{
+public class ApsStandardProcessServiceImpl implements IApsStandardProcessService {
     @Autowired
     private ApsStandardProcessMapper apsStandardProcessMapper;
 
+    @Autowired
+    private ApsShopMapper apsShopMapper;
+
     /**
      * 鏌ヨ鏍囧噯宸ュ簭
-     * 
+     *
      * @param id 鏍囧噯宸ュ簭涓婚敭
      * @return 鏍囧噯宸ュ簭
      */
     @Override
-    public ApsStandardProcess selectApsStandardProcessById(Long id)
-    {
+    public ApsStandardProcess selectApsStandardProcessById(Long id) {
         return apsStandardProcessMapper.selectApsStandardProcessById(id);
     }
 
     /**
      * 鏌ヨ鏍囧噯宸ュ簭鍒楄〃
-     * 
+     *
      * @param apsStandardProcess 鏍囧噯宸ュ簭
      * @return 鏍囧噯宸ュ簭
      */
     @Override
-    public List<ApsStandardProcess> selectApsStandardProcessList(ApsStandardProcess apsStandardProcess)
-    {
+    public List<ApsStandardProcess> selectApsStandardProcessList(ApsStandardProcess apsStandardProcess) {
         return apsStandardProcessMapper.selectApsStandardProcessList(apsStandardProcess);
     }
 
     /**
      * 鏂板鏍囧噯宸ュ簭
-     * 
+     *
      * @param apsStandardProcess 鏍囧噯宸ュ簭
      * @return 缁撴灉
      */
     @Override
-    public int insertApsStandardProcess(ApsStandardProcess apsStandardProcess)
-    {
+    public int insertApsStandardProcess(ApsStandardProcess apsStandardProcess) {
         apsStandardProcess.setCreateTime(DateUtils.getNowDate());
         apsStandardProcess.setCreateBy(SecurityUtils.getUsername());
         return apsStandardProcessMapper.insertApsStandardProcess(apsStandardProcess);
@@ -62,13 +67,12 @@
 
     /**
      * 淇敼鏍囧噯宸ュ簭
-     * 
+     *
      * @param apsStandardProcess 鏍囧噯宸ュ簭
      * @return 缁撴灉
      */
     @Override
-    public int updateApsStandardProcess(ApsStandardProcess apsStandardProcess)
-    {
+    public int updateApsStandardProcess(ApsStandardProcess apsStandardProcess) {
         apsStandardProcess.setUpdateTime(DateUtils.getNowDate());
         apsStandardProcess.setUpdateBy(SecurityUtils.getUsername());
         return apsStandardProcessMapper.updateApsStandardProcess(apsStandardProcess);
@@ -76,30 +80,29 @@
 
     /**
      * 鎵归噺鍒犻櫎鏍囧噯宸ュ簭
-     * 
+     *
      * @param ids 闇�瑕佸垹闄ょ殑鏍囧噯宸ュ簭涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteApsStandardProcessByIds(Long[] ids)
-    {
+    public int deleteApsStandardProcessByIds(Long[] ids) {
         return apsStandardProcessMapper.deleteApsStandardProcessByIds(ids);
     }
 
     /**
      * 鍒犻櫎鏍囧噯宸ュ簭淇℃伅
-     * 
+     *
      * @param id 鏍囧噯宸ュ簭涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteApsStandardProcessById(Long id)
-    {
+    public int deleteApsStandardProcessById(Long id) {
         return apsStandardProcessMapper.deleteApsStandardProcessById(id);
     }
 
     /**
      * 瀵煎叆鏁版嵁
+     *
      * @param tempList
      * @return true/false
      */
@@ -107,11 +110,26 @@
     public boolean importData(List<ApsStandardProcess> tempList) {
         try {
             if (!tempList.isEmpty()) {
-                tempList.forEach(temp->{
+                DictUtils.CacheValue cacheFactory = DictUtils.getCacheValue("aps_factory");
+                DictUtils.CacheValue cacheDomain = DictUtils.getCacheValue("aps_domain");
+
+                List<ApsShop> shops = apsShopMapper.selectApsByName(tempList.stream()
+                        .map(ApsStandardProcess::getWorkShop)
+                        .filter(StringUtils::isNotEmpty)
+                        .collect(Collectors.toSet()));
+                tempList.forEach(temp -> {
                     temp.setCreateBy(SecurityUtils.getUsername());
                     temp.setCreateTime(DateUtils.getNowDate());
-                    apsStandardProcessMapper.insertApsStandardProcess(temp);
+                    temp.setMajor(cacheDomain.get(temp.getMajor()));
+                    temp.setPlant(cacheFactory.get(temp.getPlant()));
+                    temp.setWorkShop(shops.stream()
+                            .filter(shop -> Objects.equals(shop.getShopName(), temp.getWorkShop()))
+                            .filter(shop -> Objects.equals(shop.getPlantCode(), temp.getPlant()))
+                            .map(ApsShop::getShopCode)
+                            .findFirst()
+                            .orElse(null));
                 });
+                apsStandardProcessMapper.insert(tempList);
             }
         } catch (Exception e) {
             e.printStackTrace();
diff --git "a/aps-modules/aps-core/src/main/resources/templates/\346\240\207\345\207\206\345\267\245\345\272\217\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx" "b/aps-modules/aps-core/src/main/resources/templates/\346\240\207\345\207\206\345\267\245\345\272\217\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
new file mode 100644
index 0000000..090ea01
--- /dev/null
+++ "b/aps-modules/aps-core/src/main/resources/templates/\346\240\207\345\207\206\345\267\245\345\272\217\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
Binary files differ
diff --git "a/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\345\267\245\345\215\225\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx" "b/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\345\267\245\345\215\225\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
index e67251f..3168a65 100644
--- "a/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\345\267\245\345\215\225\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
+++ "b/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\345\267\245\345\215\225\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
Binary files differ
diff --git "a/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\351\242\204\346\265\213\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx" "b/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\351\242\204\346\265\213\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
index 50fb427..f30117d 100644
--- "a/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\351\242\204\346\265\213\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
+++ "b/aps-modules/aps-core/src/main/resources/templates/\346\260\224\344\275\223\351\242\204\346\265\213\346\225\260\346\215\256\346\250\241\346\235\277v1.0.xlsx"
Binary files differ

--
Gitblit v1.9.3