| | |
| | | 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 |
| | |
| | | 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(); |
| | |
| | | return; |
| | | } |
| | | |
| | | // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM |
| | | if (list.size() >= BATCH_COUNT) { |
| | | saveData(); |
| | | // 存储完成清理 list |
| | | list.clear(); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 所有数据解析完成了 都会来调用 |
| | | */ |