| | |
| | | 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; |
| | |
| | | list.add(data); |
| | | if (context.getCurrentRowNum() == 3) { |
| | | String time = DateUtils.convert(new Date(),DateUtils.yyyyMMddHHmmss_F); |
| | | Order order2 = orderService.selectByNo(list.get(0).getColumn2()); |
| | | 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()); |
| | | } |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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("存储数据库成功!"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | *解析出现错误会进入该方法 具体看源代码或文档 |
| | | */ |