自动化立体仓库 - WMS系统
1
zc
昨天 6695e0e3e9b166a692b2f430ec09a3245b22a078
src/main/java/com/zy/third/lk/task/LKInTBScheduler.java
@@ -1,12 +1,15 @@
package com.zy.third.lk.task;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.core.common.DateUtils;
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.mapper.OrderMapper;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
@@ -19,9 +22,12 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
/**
 * 入库更新完成回报
@@ -45,38 +51,64 @@
    @Autowired
    private ErpSqlServer erpSqlServer;
    private final ReentrantLock lock = new ReentrantLock();
    @Resource
    private OrderMapper orderMapper;
    @Transactional(rollbackFor = Throwable.class)
    @Scheduled(cron = "${erp.refreshtime}")
    @Scheduled(cron = "0/10 * * * * ?")
    public void pakinOrderComplete() {
        //log.info("开始入库更新完成回报");
        // 所有订单
        List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L));
        DocType docType;
        for (Order order : orders) {
        // 拿不到锁直接跳过(关键)
        if (!lock.tryLock()) {
            System.out.println("上一次任务未执行完,跳过本次");
            return;
        }
            docType = docTypeService.selectById(order.getDocType());
            if (docType == null) {
                log.error("该订单类型不存在:" + order.getDocType());
                throw new CoolException("服务器内部错误,请联系管理员");
            }
            List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
            if (docType.getPakin() == 1) {
                //入库单
                for (OrderDetl orderDetl : orderDetls) {
                    insertInDet(orderDetl);
        // 所有订单
        try {
//            List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L));
            // 创建分页对象:页码 1,每页 2 条
            Page<Order> page = new Page<>(1, 10); // 一次10条,避免处理不过来
            // 使用 selectPage 获取前 2 条记录
            Page<Order> result = orderService.selectPage(
                    page,
                    new EntityWrapper<Order>().eq("settle", 4L)
            );
            List<Order> orders = result.getRecords(); // 这就是前 2 条
            DocType docType;
            for (Order order : orders) {
                docType = docTypeService.selectById(order.getDocType());
                if (docType == null) {
                    log.error("该订单类型不存在:" + order.getDocType());
                    throw new CoolException("服务器内部错误,请联系管理员");
                }
                insertInHed(order);
            } else {
                //出库单
                for (OrderDetl orderDetl : orderDetls) {
                    insertOutDet(orderDetl);
                List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
                if (docType.getPakin() == 1) {
                    //入库单
                    for (OrderDetl orderDetl : orderDetls) {
                        log.info("该入库单对象:" + orderDetl);
                        insertInDet(orderDetl);
                    }
                    insertInHed(order);
                } else {
                    //出库单
                    for (OrderDetl orderDetl : orderDetls) {
                        log.info("该出库单对象:" + orderDetl);
                        insertOutDet(orderDetl);
                    }
                    insertOutHed(order);
                }
                insertOutHed(order);
                // 修改订单状态 4.完成 ===>> 6.已上报
                if (!orderService.updateSettle(order.getId(), 6L, null)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                }
            }
            // 修改订单状态 4.完成 ===>> 6.已上报
            if (!orderService.updateSettle(order.getId(), 6L, null)) {
                throw new CoolException("服务器内部错误,请联系管理员");
            }
        } finally {
            lock.unlock();
        }
    }
@@ -89,17 +121,14 @@
     */
    @Transactional(rollbackFor = Throwable.class)
    public boolean insertInDet(OrderDetl orderDetl) {
        String sqlInDetTb = "select * from lk_InDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " +
                " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        String sqlInDetTb = "select * from lk_InDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "'";
        List<InDetTB> inDets = erpSqlServer.select(sqlInDetTb, InDetTB.class);
        String sqlInDetTbBak = "select * from lk_InDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " +
                " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        String sqlInDetTbBak = "select * from lk_InDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "'";
        List<InDetTBBak> inDetBaks = erpSqlServer.select(sqlInDetTbBak, InDetTBBak.class);
        if (!inDets.isEmpty() || !inDetBaks.isEmpty()) {
            log.error("该单号料号中间表表身已存在:" + orderDetl.getOrderNo() + "==>>" + orderDetl.getOrderNo());
            return true;
        }
        Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
        Map<String, Object> content = getMap(orderDetl);
        int insert = erpSqlServer.insert(InDetTB.class, content);
@@ -108,7 +137,7 @@
            return true;
        } else {
            log.error("入库回传失败,实体类打印:{}", content);
            return false;
            throw new CoolException("服务器内部错误,请联系管理员");
        }
    }
@@ -129,22 +158,29 @@
            log.error("该单号料号中间表表头已存在:" + order.getOrderNo());
            return true;
        }
        DocType docType = docTypeService.selectById(order.getDocType());
        HashMap<String, Object> content = new HashMap<>();
        content.put("BillNo", "'" + order.getOrderNo() + "'");
        content.put("IoKindID", "'" + order.getDocType() + "'");
        content.put("ObjectId", "'" + order.getCstmr() + "'");
        content.put("ObjectName", "'" + order.getCstmrName() + "'");
        content.put("Remark", "'" + order.getMemo() + "'");
        content.put("BillDate", "'" + DateUtils.convert(new Date()) + "'");
        if (!Cools.isEmpty(docType.getDocCode())) content.put("IoKindID", "'" + docType.getDocCode() + "'");
        if (!Cools.isEmpty(docType.getDocName())) content.put("IoKindName", "'" + docType.getDocName() + "'");
        if (!Cools.isEmpty(order.getWareId())) content.put("wareId", "'" + order.getWareId() + "'");
        if (!Cools.isEmpty(order.getWareName())) content.put("wareName", "'" + order.getWareName() + "'");
        if (!Cools.isEmpty(order.getTemp1())) content.put("temp1", "'" + order.getTemp1() + "'");
        if (!Cools.isEmpty(order.getTemp2())) content.put("temp2", "'" + order.getTemp2() + "'");
        if (!Cools.isEmpty(order.getTemp3())) content.put("temp3", "'" + order.getTemp3() + "'");
        if (!Cools.isEmpty(order.getCstmr())) content.put("ObjectId", "'" + order.getCstmr() + "'");
        if (!Cools.isEmpty(order.getCstmrName())) content.put("ObjectName", "'" + order.getCstmrName() + "'");
        if (!Cools.isEmpty(order.getMemo())) content.put("Remark", "'" + order.getMemo() + "'");
        content.put("LKName", "'中扬二期'");
        content.put("bPass", "1");
        int insert = erpSqlServer.insert(InHedTB.class, content);
        String sql = "UPDATE lk_InHedTB SET bPass = 1, LKName='中扬二期' WHERE BillNo = '" + order.getOrderNo() + "'";
        int update = erpSqlServer.update(sql);
        if (update == 1) {
        if (insert == 1) {
            log.info("入库单表头回传成功:" + content);
            return true;
        } else {
            log.error("入库单表头回传失败:" + content);
            return false;
            throw new CoolException("服务器内部错误,请联系管理员");
        }
    }
@@ -156,26 +192,23 @@
     */
    @Transactional(rollbackFor = Throwable.class)
    public boolean insertOutDet(OrderDetl orderDetl) {
        String sqlInDetTb = "select * from lk_OutDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " +
                " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        String sqlInDetTb = "select * from lk_OutDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        List<OutDetTB> inDets = erpSqlServer.select(sqlInDetTb, OutDetTB.class);
        String sqlInDetTbBak = "select * from lk_OutDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " +
                " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        String sqlInDetTbBak = "select * from lk_OutDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'";
        List<OutDetTBBak> inDetBaks = erpSqlServer.select(sqlInDetTbBak, OutDetTBBak.class);
        if (!inDets.isEmpty() || !inDetBaks.isEmpty()) {
            log.error("该单号料号中间表表身已存在:" + orderDetl.getOrderNo() + "==>>" + orderDetl.getOrderNo());
            return true;
        }
        Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
        Map<String, Object> content = getMap(orderDetl);
        int insert = erpSqlServer.insert(InDetTB.class, content);
        int insert = erpSqlServer.insert(OutDetTB.class, content);
        if (insert == 1) {
            log.info("入库单表身回传成功:" + content.toString());
            return true;
        } else {
            log.error("入库回传失败,实体类打印:" + content.toString());
            return false;
            throw new CoolException("服务器内部错误,请联系管理员");
        }
    }
@@ -196,46 +229,64 @@
            log.error("该单号料号中间表表头已存在:" + order.getOrderNo());
            return true;
        }
        DocType docType = docTypeService.selectById(order.getDocType());
        HashMap<String, Object> content = new HashMap<>();
        content.put("BillNo", "'" + order.getOrderNo() + "'");
        content.put("IoKindID", "'" + order.getDocType() + "'");
        content.put("ObjectId", "'" + order.getCstmr() + "'");
        content.put("ObjectName", "'" + order.getCstmrName() + "'");
        content.put("Remark", "'" + order.getMemo() + "'");
        content.put("BillDate", "'" + DateUtils.convert(new Date()) + "'");
        if (!Cools.isEmpty(docType.getDocCode())) content.put("IoKindID", "'" + docType.getDocCode() + "'");
        if (!Cools.isEmpty(docType.getDocName())) content.put("IoKindName", "'" + docType.getDocName() + "'");
        if (!Cools.isEmpty(order.getWareId())) content.put("wareId", "'" + order.getWareId() + "'");
        if (!Cools.isEmpty(order.getWareName())) content.put("wareName", "'" + order.getWareName() + "'");
        if (!Cools.isEmpty(order.getTemp1())) content.put("temp1", "'" + order.getTemp1() + "'");
        if (!Cools.isEmpty(order.getTemp2())) content.put("temp2", "'" + order.getTemp2() + "'");
        if (!Cools.isEmpty(order.getTemp3())) content.put("temp3", "'" + order.getTemp3() + "'");
        if (!Cools.isEmpty(order.getCstmr())) content.put("ObjectId", "'" + order.getCstmr() + "'");
        if (!Cools.isEmpty(order.getCstmrName())) content.put("ObjectName", "'" + order.getCstmrName() + "'");
        if (!Cools.isEmpty(order.getMemo())) content.put("Remark", "'" + order.getMemo() + "'");
        content.put("LKName", "'中扬二期'");
        content.put("bPass", "1");
        int insert = erpSqlServer.insert(OutHedTB.class, content);
        String sql = "UPDATE lk_OutHedTB SET bPass = 1, LKName='中扬二期' WHERE BillNo = '" + order.getOrderNo() + "'";
        int update = erpSqlServer.update(sql);
        if (update == 1) {
        if (insert == 1) {
            log.info("入库单表头回传成功:" + content);
            return true;
        } else {
            log.error("入库单表头回传失败:" + content);
            return false;
            throw new CoolException("服务器内部错误,请联系管理员");
        }
    }
    private Map<String, Object> getMap(OrderDetl orderDetl) {
        Map<String, Object> content = new HashMap<>();
        if (!Cools.isEmpty()) content.put("BillNo", "'" + orderDetl.getOrderNo() + "'");
        if (!Cools.isEmpty()) content.put("iNO", "'" + orderDetl.getINO() + "'");
        if (!Cools.isEmpty()) content.put("detId", orderDetl.getThreeCode());
        if (!Cools.isEmpty()) content.put("ItemId", "'" + orderDetl.getThreeCode() + "'");
        if (!Cools.isEmpty()) content.put("ItemCode", "'" + orderDetl.getMatnr() + "'");
        if (!Cools.isEmpty()) content.put("ItemBatch", "'" + orderDetl.getBatch() + "'");
        if (!Cools.isEmpty()) content.put("proType", "'" + orderDetl.getProType() + "'");
        if (!Cools.isEmpty()) content.put("remark", "'" + orderDetl.getMemo() + "'");
        if (!Cools.isEmpty()) content.put("OrderNo", "'" + orderDetl.getOutOrderNo() + "'");
        if (!Cools.isEmpty()) content.put("MainNum", orderDetl.getQty());
        if (!Cools.isEmpty()) content.put("WareId", "'" + orderDetl.getWareId() + "'");
        if (!Cools.isEmpty()) content.put("WareName", "'" + orderDetl.getWareName() + "'");
        if (!Cools.isEmpty()) content.put("Packing", "'" + orderDetl.getPacking() + "'");
        if (!Cools.isEmpty()) content.put("LuHao", "'" + orderDetl.getLuHao() + "'");
        if (!Cools.isEmpty()) content.put("sPgNO", "'" + orderDetl.getSPgNO() + "'");
        if (!Cools.isEmpty()) content.put("temp1", "'" + orderDetl.getTemp1() + "'");
        if (!Cools.isEmpty()) content.put("temp2", "'" + orderDetl.getTemp2() + "'");
        if (!Cools.isEmpty()) content.put("temp3", "'" + orderDetl.getTemp3() + "'");
        if (!Cools.isEmpty()) content.put("LKName", "'中扬二期'");
        if (!Cools.isEmpty(orderDetl.getOrderNo())) content.put("BillNo", "'" + orderDetl.getOrderNo() + "'");
        if (!Cools.isEmpty(orderDetl.getINo())) content.put("iNo", "'" + orderDetl.getINo() + "'");
        if (!Cools.isEmpty(orderDetl.getThreeCode())) content.put("detId", orderDetl.getThreeCode());
        if (!Cools.isEmpty(orderDetl.getMatnr())) content.put("ItemId", "'" + orderDetl.getMatnr() + "'");
        if (!Cools.isEmpty(orderDetl.getModel())) content.put("ItemCode", "'" + orderDetl.getModel() + "'");
        if (!Cools.isEmpty(orderDetl.getBatch())) content.put("ItemBatch", "'" + orderDetl.getBatch() + "'");
        if (!Cools.isEmpty(orderDetl.getProType())) content.put("proType", "'" + orderDetl.getProType() + "'");
        if (!Cools.isEmpty(orderDetl.getMemo())) content.put("remark", "'" + orderDetl.getMemo() + "'");
        if (!Cools.isEmpty(orderDetl.getOutOrderNo())) content.put("OrderNo", "'" + orderDetl.getOutOrderNo() + "'");
        if (!Cools.isEmpty(orderDetl.getQty())) {
            if (orderDetl.getQty() > orderDetl.getAnfme() && orderDetl.getQty() > orderDetl.getWorkQty()) {
                log.info("修正错误数量:{}", JSON.toJSON(orderDetl));
                content.put("MainNum", orderDetl.getWorkQty());
            } else if (orderDetl.getAnfme() == orderDetl.getWorkQty() && orderDetl.getQty() <= 0) {
                content.put("MainNum", orderDetl.getWorkQty());
            } else {
                content.put("MainNum", orderDetl.getQty());
            }
        }
        if (!Cools.isEmpty(orderDetl.getWareId())) content.put("WareId", "'" + orderDetl.getWareId() + "'");
        if (!Cools.isEmpty(orderDetl.getWareName())) content.put("WareName", "'" + orderDetl.getWareName() + "'");
        if (!Cools.isEmpty(orderDetl.getPacking())) content.put("Packing", "'" + orderDetl.getPacking() + "'");
        if (!Cools.isEmpty(orderDetl.getLuHao())) content.put("LuHao", "'" + orderDetl.getLuHao() + "'");
        if (!Cools.isEmpty(orderDetl.getSPgNO())) content.put("sPgNO", "'" + orderDetl.getSPgNO() + "'");
        if (!Cools.isEmpty(orderDetl.getTemp1())) content.put("temp1", "'" + orderDetl.getTemp1() + "'");
        if (!Cools.isEmpty(orderDetl.getTemp2())) content.put("temp2", "'" + orderDetl.getTemp2() + "'");
        if (!Cools.isEmpty(orderDetl.getTemp3())) content.put("temp3", "'" + orderDetl.getTemp3() + "'");
        content.put("LKName", "'中扬二期'");
        return content;
    }
}