From b6f1e646ac5005b4f4bad7c1eec706c96f2eaca7 Mon Sep 17 00:00:00 2001
From: Administrator <335182714>
Date: 星期二, 05 八月 2025 14:39:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java |  105 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 87 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
index 4fefeb9..d6e1505 100644
--- a/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
+++ b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
@@ -4,6 +4,7 @@
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.exception.ExcelAnalysisException;
 import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SnowflakeIdWorker;
 import com.zy.asrs.entity.DocType;
@@ -15,9 +16,7 @@
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author pang.jiabao
@@ -60,26 +59,44 @@
         this.userId = userId;
     }
 
-    /**
-     * 杩欎釜姣忎竴鏉℃暟鎹В鏋愰兘浼氭潵璋冪敤
-     */
+    private Set<String> uniquePackNos = new HashSet<>(); // 鐢ㄤ簬鍘婚噸鍖呰缁勫彿
+
     @SneakyThrows
     @Override
     public void invoke(ImportOrderDto data, AnalysisContext context) {
         log.info("瑙f瀽鍒扮 {} 鏉℃暟鎹�:{}", ++count, JSON.toJSONString(data));
+
+        // 鑾峰彇鍖呰缁勫彿锛坈olumn1锛�
+        String packNo = data.getColumn1();
+        if (Cools.isEmpty(packNo)) {
+            log.warn("鍖呰缁勫彿涓虹┖锛岃烦杩囪琛岋紒");
+            return;
+        }
+
+        // 濡傛灉宸茬粡澶勭悊杩囪鍖呰缁勫彿锛屽垯璺宠繃
+        if (uniquePackNos.contains(packNo)) {
+            log.info("閲嶅鐨勫寘瑁呯粍鍙凤細{}锛岃烦杩�", packNo);
+            return;
+        }
+
+        // 棣栨鍑虹幇锛岃褰曞苟澶勭悊
+        uniquePackNos.add(packNo);
         list.add(data);
+
         if (context.getCurrentRowNum() == 3) {
-            String time = DateUtils.convert(new Date(),DateUtils.yyyyMMddHHmmss_F);
+            String time = DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F);
             Order order2 = orderService.selectByNo(list.get(0).getColumn2());
-            if(order2 != null) {
+            if (order2 != null) {
                 throw new ExcelAnalysisException("鍗曟嵁宸插瓨鍦紒");
             }
             DocType docType = docTypeService.selectOrAdd(list.get(1).getColumn2(), Boolean.FALSE);
             if (docType == null) {
                 throw new ExcelAnalysisException("鍗曟嵁绫诲瀷閿欒锛�" + list.get(1).getColumn2());
             }
+
             orderNo = list.get(0).getColumn2();
             docTypeId = docType.getDocId();
+
             Order order = new Order();
             order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
             order.setOrderNo(orderNo);
@@ -89,6 +106,7 @@
             order.setStatus(1);
             order.setCreateBy(userId);
             order.setCreateTime(new Date());
+
             orderService.insert(order);
             Order order1 = orderService.selectByNo(orderNo);
             orderId = order1.getId();
@@ -96,13 +114,12 @@
             return;
         }
 
-        // 杈惧埌BATCH_COUNT浜嗭紝闇�瑕佸幓瀛樺偍涓�娆℃暟鎹簱锛岄槻姝㈡暟鎹嚑涓囨潯鏁版嵁鍦ㄥ唴瀛橈紝瀹规槗OOM
         if (list.size() >= BATCH_COUNT) {
             saveData();
-            // 瀛樺偍瀹屾垚娓呯悊 list
             list.clear();
         }
     }
+
 
     /**
      * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡 閮戒細鏉ヨ皟鐢�
@@ -116,26 +133,69 @@
         log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
     }
 
+//    /**
+//     * 鍔犱笂瀛樺偍鏁版嵁搴�
+//     */
+//    private void saveData() {
+//        log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size());
+//        log.info("鍗曟嵁鍙凤細{}锛屾暟鎹細{},",orderNo, JSON.toJSONString(list));
+//        List<OrderDetl> orderDetlList = new ArrayList<>();
+//        list.forEach(importOrderDto -> {
+//            OrderDetl orderDetl = new OrderDetl();
+//            if (docTypeId == 24) {
+//                orderDetl.setSpecs(String.format("%07d",Integer.parseInt(importOrderDto.getColumn1()))); // 婧愬簱浣�
+//                if (importOrderDto.getColumn2() != null) {
+//                    orderDetl.setModel(String.format("%07d",Integer.parseInt(importOrderDto.getColumn2()))); // 鐩爣搴撲綅
+//                }
+//                if (importOrderDto.getColumn3() != null) {
+//                    orderDetl.setBeBatch(Integer.parseInt(importOrderDto.getColumn3())); //宸烽亾
+//                }
+//            } else {
+//                orderDetl.setBrand(importOrderDto.getColumn1());
+//            }
+//            orderDetl.setBatch("");
+//            orderDetl.setOrderId(orderId);
+//            orderDetl.setOrderNo(orderNo);
+//            orderDetl.setCreateBy(9527L);
+//            orderDetl.setCreateTime(new Date());
+//            orderDetl.setUpdateBy(9527L);
+//            orderDetl.setUpdateTime(new Date());
+//            orderDetl.setStatus(1);
+//            orderDetl.setQty(0.0D);
+//            orderDetl.setAnfme(1.0);
+//            orderDetlList.add(orderDetl);
+//        });
+//        orderDetlMapper.batchDetls(orderDetlList);
+//
+//        log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
+//    }
+private static final int MAX_BATCH_SIZE = 50; // 寤鸿 100~200锛屾牴鎹瓧娈垫暟鎺у埗
+
     /**
-     * 鍔犱笂瀛樺偍鏁版嵁搴�
+     * 鍒嗘壒瀛樺偍鏁版嵁搴擄紝閬垮厤SQL Server鍙傛暟涓婇檺锛�2100锛夐敊璇�
      */
     private void saveData() {
         log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", list.size());
-        log.info("鍗曟嵁鍙凤細{}锛屾暟鎹細{},",orderNo, JSON.toJSONString(list));
+        log.info("鍗曟嵁鍙凤細{}锛屾暟鎹細{},", orderNo, JSON.toJSONString(list));
+
         List<OrderDetl> orderDetlList = new ArrayList<>();
-        list.forEach(importOrderDto -> {
+        for (ImportOrderDto importOrderDto : list) {
             OrderDetl orderDetl = new OrderDetl();
+
             if (docTypeId == 24) {
-                orderDetl.setSpecs(String.format("%07d",Integer.parseInt(importOrderDto.getColumn1()))); // 婧愬簱浣�
+                orderDetl.setSpecs(String.format("%07d", Integer.parseInt(importOrderDto.getColumn1()))); // 婧愬簱浣�
                 if (importOrderDto.getColumn2() != null) {
-                    orderDetl.setModel(String.format("%07d",Integer.parseInt(importOrderDto.getColumn2()))); // 鐩爣搴撲綅
+                    orderDetl.setModel(String.format("%07d", Integer.parseInt(importOrderDto.getColumn2()))); // 鐩爣搴撲綅
                 }
                 if (importOrderDto.getColumn3() != null) {
-                    orderDetl.setBeBatch(Integer.parseInt(importOrderDto.getColumn3())); //宸烽亾
+                    orderDetl.setBeBatch(Integer.parseInt(importOrderDto.getColumn3())); // 宸烽亾
                 }
             } else {
                 orderDetl.setBrand(importOrderDto.getColumn1());
+                orderDetl.setSupp(importOrderDto.getColumn3());
+                orderDetl.setMemo(importOrderDto.getColumn4());
             }
+
             orderDetl.setBatch("");
             orderDetl.setOrderId(orderId);
             orderDetl.setOrderNo(orderNo);
@@ -146,12 +206,21 @@
             orderDetl.setStatus(1);
             orderDetl.setQty(0.0D);
             orderDetl.setAnfme(1.0);
+
             orderDetlList.add(orderDetl);
-        });
-        orderDetlMapper.batchDetls(orderDetlList);
+        }
+
+        // 鉁� 鍏抽敭鐐癸細鍒嗘壒鎻愪氦
+        for (int i = 0; i < orderDetlList.size(); i += MAX_BATCH_SIZE) {
+            int end = Math.min(i + MAX_BATCH_SIZE, orderDetlList.size());
+            List<OrderDetl> batch = orderDetlList.subList(i, end);
+            orderDetlMapper.batchDetls(batch);
+        }
 
         log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
     }
+
+
     /**
      *瑙f瀽鍑虹幇閿欒浼氳繘鍏ヨ鏂规硶 鍏蜂綋鐪嬫簮浠g爜鎴栨枃妗�
      */

--
Gitblit v1.9.1