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