自动化立体仓库 - WMS系统
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -2,10 +2,21 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.MatServiceImpl;
import com.zy.asrs.service.impl.OrderDetl1ServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.system.entity.User;
import com.zy.system.service.impl.UserServiceImpl;
import com.zy.third.entity.ExdInstockTarget;
import com.zy.third.entity.ExdStock;
import com.zy.third.entity.ExdvYanbu;
import com.zy.third.mapper.ExdMaterialMapper;
import com.zy.third.service.ExdInstockTargetService;
import com.zy.third.service.ExdStockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -36,18 +47,33 @@
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ExdInstockTargetService exdInstockTargetService;
    @Autowired
    private ExdMaterialMapper exdMaterialMapper;
    @Autowired
    private ExdStockService exdStockService;
    @Autowired
    private MatServiceImpl matServiceImpl;
    @Autowired
    private OrderDetl1ServiceImpl orderDetl1Service;
    @Autowired
    private UserServiceImpl userService;
    @Transactional
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
        if (wrkMast.getWrkSts() == 4) {
            return doIn(wrkMast);
        // 14.出库完成
        } else  if (wrkMast.getWrkSts() == 14) {
            // 14.出库完成
        } else if (wrkMast.getWrkSts() == 14) {
            return doOut(wrkMast);
        }
        return SUCCESS;
    }
    private ReturnT<String> doIn(WrkMast wrkMast){
    private ReturnT<String> doIn(WrkMast wrkMast) {
        Date now = new Date();
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        try {
@@ -116,19 +142,43 @@
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if (orderDetl == null) {
                            orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
                        }
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        wrkDetl.getBatch(),wrkDetl.getAnfme())){
                            if (!Cools.isEmpty(orderDetl)) {
                                if (!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore){}
                        } catch (Exception ignore) {
                        }
                        // 更新子订单完成数量
                        OrderDetl1 orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if (orderDetl1 == null) {
                            orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
                        }
                        try {
                            if (!Cools.isEmpty(orderDetl)) {
                                if (!orderDetl1Service.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 写入中间表数据
                    write(wrkMast, wrkDetls);
                    // 修改库位状态 S ====>> F
                    if (locMast.getLocSts().equals("S")) {
                        locMast.setLocSts("F");
@@ -162,22 +212,63 @@
                            }
                        }
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if(orderDetl==null){
                            orderDetl=orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
                        }
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        orderDetl.getBatch(),wrkDetl.getAnfme())){
//                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("拣料入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                                }
                        if(!Cools.isEmpty(wrkDetl.getOrderNo())){
                            String orderNo = wrkDetl.getOrderNo().split("-")[0];
                            // 更新订单完成数量
                            OrderDetl orderDetl = orderDetlService.selectItem(orderNo, wrkDetl.getMatnr(), wrkDetl.getBatch());
                            if (orderDetl == null) {
                                orderDetl = orderDetlService.selectItem(orderNo, wrkDetl.getMatnr(), null);
                            }
                        } catch (Exception ignore){}
                            try {
                                if (!Cools.isEmpty(orderDetl)) {
                                    if (!orderDetlService.increaseQtyByOrderNo(orderNo, wrkDetl.getMatnr(),
                                            orderDetl.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                        return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                    }
                                }
                            } catch (Exception ignore) {
                            }
                            //子表数据完成
                            String batch = null;
                            if(!Cools.isEmpty(wrkDetl.getBatch())){
                                batch = wrkDetl.getBatch();
                            }
                            OrderDetl1 orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), batch);
                            try {
                                if (!Cools.isEmpty(orderDetl1)) {
                                    if (!orderDetl1Service.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                            batch, wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                        return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                    }
                                }
                            } catch (Exception ignore) {
                            }
                        }
//                        // 更新订单完成数量
//                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
//                        if (orderDetl == null) {
//                            orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), null);
//                        }
//                        try {
//                            if (!Cools.isEmpty(orderDetl)) {
//                                if (!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
//                                        orderDetl.getBatch(), wrkDetl.getAnfme())) {
////                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
////                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
//                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                                    return FAIL.setMsg("拣料入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
//                                }
//                            }
//                        } catch (Exception ignore) {
//                        }
                    }
                    // 修改库位状态 Q ====>> F
@@ -203,7 +294,7 @@
                        return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                    }
                    // 修改库存明细数量,如无库存,曾新增
                    for (WrkDetl wrkDetl:wrkDetls54) {
                    for (WrkDetl wrkDetl : wrkDetls54) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        if (null != locDetl) {
@@ -251,7 +342,7 @@
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y")?"F":"D");
                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y") ? "F" : "D");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
@@ -320,7 +411,7 @@
        return SUCCESS;
    }
    private ReturnT<String> doOut(WrkMast wrkMast){
    private ReturnT<String> doOut(WrkMast wrkMast) {
        Date now = new Date();
        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
        try {
@@ -345,19 +436,46 @@
                        return FAIL.setMsg("全板出库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                    }
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // 更新订单完成数量
                        OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                        try {
                            if(!Cools.isEmpty(orderDetl)){
                                if(!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                        wrkDetl.getBatch(),wrkDetl.getAnfme())){
                        if(!Cools.isEmpty(wrkDetl.getOrderNo())){
                            String orderNo = wrkDetl.getOrderNo().split("-")[0];
                            // 更新订单完成数量
                            OrderDetl orderDetl = orderDetlService.selectItem(orderNo, wrkDetl.getMatnr(), wrkDetl.getBatch());
                            if (orderDetl == null) {
                                orderDetl = orderDetlService.selectItem(orderNo, wrkDetl.getMatnr(), null);
                            }
                            try {
                                if (!Cools.isEmpty(orderDetl)) {
                                    if (!orderDetlService.increaseQtyByOrderNo(orderNo, wrkDetl.getMatnr(),
                                            orderDetl.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                    return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                        return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                    }
                                }
                            } catch (Exception ignore) {
                            }
                        } catch (Exception ignore){}
                            //子表数据完成
                            String batch = null;
                            if(!Cools.isEmpty(wrkDetl.getBatch())){
                                batch = wrkDetl.getBatch();
                            }
                            OrderDetl1 orderDetl1 = orderDetl1Service.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), batch);
                            try {
                                if (!Cools.isEmpty(orderDetl1)) {
                                    if (!orderDetl1Service.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
                                            orderDetl1.getBatch(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("全板出库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                                        return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                                    }
                                }
                            } catch (Exception ignore) {
                            }
                        }
                    }
                    // 删除工作档源库位的库存明细
                    if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
@@ -396,8 +514,13 @@
                default:
                    break;
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(15L);
            if (Cools.isEmpty(wrkMast.getMemo())) {
                // 修改工作主档状态
                wrkMast.setWrkSts(15L);
            } else {
                wrkMast.setWrkSts(30L);
            }
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
//                exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
@@ -413,4 +536,78 @@
        return SUCCESS;
    }
    private void write(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
        ExdInstockTarget exdInstockTarge;
        int i = 1;
        for (WrkDetl wrkDetl : wrkDetls) {
            if (Cools.isEmpty(wrkDetl.getOrderNo()) && !Cools.isEmpty(wrkDetl.getInspect()) && wrkDetl.getInspect() == 1) {
                ExdvYanbu bacode = exdMaterialMapper.getBacode(wrkDetl.getThreeCode());
                if (bacode == null) {
                    log.info("验布数据没有,{}", wrkDetl.getThreeCode());
                    return;
                }
                exdInstockTarge = new ExdInstockTarget();
                exdInstockTarge.setFtrantype(2);
                exdInstockTarge.setFdate(new Date());
                exdInstockTarge.setFrob(1);
                exdInstockTarge.setFdeptid(7502);
                //供应商/客户ID
                exdInstockTarge.setFsupplyid(0);
                //wms操作员
                User id = userService.selectOne(new EntityWrapper<User>().eq("id", wrkDetl.getColor()));
                exdInstockTarge.setFbillerid(Integer.valueOf(id.getEmail()));
                exdInstockTarge.setFfmanagerid(17938);
                exdInstockTarge.setFsmanagerid(17938);
                exdInstockTarge.setFentryid(i);
                //物料ID
                Mat mat = matServiceImpl.selectByMatnr(wrkDetl.getMatnr());
                exdInstockTarge.setFitemid(Integer.valueOf(mat.getUuid()));
                exdInstockTarge.setFqty(wrkDetl.getAnfme());
                //单价
                exdInstockTarge.setFprice(0.0);
                exdInstockTarge.setFbatchno(bacode.getBatchno());
                //单价ID
                exdInstockTarge.setFunitid(0);
                //源单号
                exdInstockTarge.setFsourcebillno(bacode.getIcmono());
                //源单细表ID
                exdInstockTarge.setFsourceentryid(1);
                //源单单据类型
                exdInstockTarge.setFsourcetrantype(85);
                //库位ID
                exdInstockTarge.setFdcspid(0);
                //仓库ID
                Integer Fdcstockid = 19382;
                if(!Cools.isEmpty(wrkDetl.getBrand())){
                    ExdStock fname = exdStockService.selectOne(new EntityWrapper<ExdStock>().eq("Fname", wrkDetl.getBrand()));
                    Fdcstockid = Integer.valueOf(fname.getId());
                }
                exdInstockTarge.setFdcstockid(Integer.valueOf(Fdcstockid));
                //exdInstockTarge.setFdcspid(wrkMast.getLocNo());
                exdInstockTarge.setBarcode(wrkDetl.getBatch());
                exdInstockTarge.setGross(bacode.getGross());
                exdInstockTarge.setWidth(bacode.getWidth());
                exdInstockTarge.setDefects(bacode.getDefects());
                exdInstockTarge.setBackcode(bacode.getBackcode());
                exdInstockTarge.setWritetime(new Date());
                exdInstockTarge.setWritor("WMS");
                exdInstockTarge.setStatus(0);
                //仓库
                exdInstockTarge.setProdinkind(bacode.getProdinkind());
                //生产入库对一坨物料进行绑定。唯一值
                exdInstockTarge.setFbillno(wrkDetl.getOrigin());
                //exdInstockTarge.setProdInKind("特采库");
                if(!exdInstockTargetService.insert(exdInstockTarge)){
                    throw new CoolException("验布入库完成插入入库表失败");
                }
                i++;
            }
        }
    }
}