package com.zy.asrs.utils;
|
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.SpringUtils;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.DocType;
|
import com.zy.asrs.entity.Mat;
|
import com.zy.asrs.entity.Order;
|
import com.zy.asrs.entity.OrderDetl;
|
import com.zy.asrs.service.DocTypeService;
|
import com.zy.asrs.service.MatService;
|
import com.zy.asrs.service.OrderDetlService;
|
import com.zy.asrs.service.OrderService;
|
import com.zy.common.entity.OrderExcel;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.util.*;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@Slf4j
|
public class OrderExcelListener extends AnalysisEventListener<OrderExcel> {
|
|
private int total = 0;
|
private Long userId;
|
|
public OrderExcelListener(Long userId) {
|
this.userId = userId;
|
}
|
|
/**
|
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
|
*/
|
private static final int BATCH_COUNT = 50;
|
|
private final List<OrderExcel> list = new ArrayList<>();
|
|
/**
|
* 这里会一行行的返回头
|
*/
|
@Override
|
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
|
}
|
|
/**
|
* 单据导入实现
|
* @author Ryan
|
* @date 2026/1/8 17:25
|
* @param data
|
* @param context
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void invoke(OrderExcel data, AnalysisContext context) {
|
OrderService orderService = (OrderService) SpringUtils.getBean(OrderService.class);
|
OrderDetlService detlService = (OrderDetlService) SpringUtils.getBean(OrderDetlService.class);
|
MatService matService = SpringUtils.getBean(MatService.class);
|
DocTypeService docTypeService = SpringUtils.getBean(DocTypeService.class);
|
Date now = new Date();
|
if (Objects.isNull(data)) {
|
throw new CoolException("参数不能为空!!");
|
}
|
if (Objects.isNull(data.getOrderNo())) {
|
throw new CoolException("订单已创建,不可以重复创建!!");
|
}
|
if (Objects.isNull(data.getDocType())) {
|
throw new CoolException("单据类型不能为空!");
|
}
|
DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", data.getDocType()));
|
if (Objects.isNull(docType)) {
|
throw new CoolException("单据类型[" + data.getDocType() + "]不存在!!");
|
}
|
|
Order order = new Order();
|
order.setOrderNo(data.getOrderNo());
|
order.setDocType(docType.getDocId());
|
order.setCreateTime(now);
|
order.setUpdateTime(now);
|
order.setSettle(1L);
|
order.setStatus(1);
|
order.setCreateBy(userId);
|
order.setUpdateBy(userId);
|
order.setPakinPakoutStatus(docType.getPakin() == 1 ? 1 : 2);
|
if (!orderService.insert(order)) {
|
throw new CoolException("订单创建失败!!");
|
}
|
if (Objects.isNull(data.getMatnr())) {
|
throw new CoolException("物料编码不能为空!");
|
}
|
Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", data.getMatnr()));
|
if (Objects.isNull(mat)) {
|
throw new CoolException("物料[" + data.getMatnr() + "]不存在!!");
|
}
|
OrderDetl detl = new OrderDetl();
|
detl.setOrderNo(data.getOrderNo());
|
detl.setOrderId(order.getId());
|
detl.setMatnr(data.getMatnr());
|
detl.setMaktx(mat.getMaktx());
|
detl.setQty(data.getQty());
|
detl.setBatch(data.getBatch());
|
detl.setVolume(data.getVolume());
|
detl.setSafeQty(mat.getSafeQty());
|
detl.setAnfme(data.getAnfme());
|
detl.setBarcode(data.getBarcode());
|
detl.setUpdateTime(now);
|
detl.setCreateTime(now);
|
detl.setUpdateBy(userId);
|
detl.setCreateBy(userId);
|
if (!detlService.insert(detl)) {
|
throw new CoolException("订单详情创建失败!!");
|
}
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
log.info("新增{}条物料信息!", total);
|
}
|
|
public int getTotal() {
|
return total;
|
}
|
|
}
|