自动化立体仓库 - WMS系统
lty
2025-06-24 dcae969ee04f67b6dc46f3ca061116f44558307a
#订单导入去重
1个文件已修改
42 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
@@ -16,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
@@ -61,37 +59,54 @@
        this.userId = userId;
    }
    /**
     * 这个每一条数据解析都会来调用
     */
    private Set<String> uniquePackNos = new HashSet<>(); // 用于去重包装组号
    @SneakyThrows
    @Override
    public void invoke(ImportOrderDto data, AnalysisContext context) {
        log.info("解析到第 {} 条数据:{}", ++count, JSON.toJSONString(data));
        // 获取包装组号(column1)
        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);
            Order order2 = orderService.selectByNo(list.get(0).getColumn2()); // 订单号
            if(order2 != null) {
            String time = DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F);
            Order order2 = orderService.selectByNo(list.get(0).getColumn2());
            if (order2 != null) {
                throw new ExcelAnalysisException("单据已存在!");
            }
            DocType docType = docTypeService.selectOrAdd(list.get(1).getColumn2(), Boolean.FALSE); // 订单类型
            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);
            order.setOrderTime(time);
            order.setDocType(docType.getDocId());
//            order.setCstmrName(Cools.isEmpty(list.get(2).getColumn2()) ? "" : list.get(2).getColumn2()); // 客户名称
//            order.setMemo(Cools.isEmpty(list.get(3).getColumn2()) ? "" : list.get(3).getColumn2()); // 备注
            order.setSettle(1L);
            order.setStatus(1);
            order.setCreateBy(userId);
            order.setCreateTime(new Date());
            orderService.insert(order);
            Order order1 = orderService.selectByNo(orderNo);
            orderId = order1.getId();
@@ -99,14 +114,13 @@
            return;
        }
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
    }
    /**
     * 所有数据解析完成了 都会来调用
     */