自动化立体仓库 - WMS系统
pang.jiabao
2 天以前 a1dd6ff24f7cae0b529ad313ba07351c07965605
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -2,18 +2,22 @@
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.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.SaasUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * Created by vincent on 2020/7/4
@@ -35,6 +39,15 @@
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Resource
    private OrderService orderService;
    @Resource
    private ManLocDetlService manLocDetlService;
    @Resource
    private NodeService nodeService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -116,14 +129,39 @@
                        // 更新订单完成数量
                        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())){
                                        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() + "]");
                                } else {
                                    // 插入调拨入库单对应线边仓出库记录
                                    Order order = orderService.selectByNo(orderDetl.getOrderNo());
                                    if (order.getDocType$().equals("调拨入库单")) {
                                        String locNo = orderDetl.getSupp();
                                        ManLocDetl locDetl2 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        if (locDetl2 == null) { // 线边库无此库存
                                            log.warn("调拨入库单对应线边库库存无:{locNo:{},matnr:{},batch:{}}", locNo, wrkDetl.getMatnr(), wrkDetl.getBatch());
                                        } else if (locDetl2.getAnfme() < wrkDetl.getAnfme()) { // 线边库此库存不够
                                            manLocDetlService.delete(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                            log.warn("调拨入库单对应线边库库存不足:{locNo:{},matnr:{},batch:{},locAnfme:{},wrkAnfme:{}}", locNo, wrkDetl.getMatnr(), wrkDetl.getBatch(), locDetl2.getAnfme(), wrkDetl.getAnfme());
                                        } else if (Objects.equals(locDetl2.getAnfme(), wrkDetl.getAnfme())) { // 删除该物料线边库库存数据
                                            manLocDetlService.delete(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        } else { // 更新该物料线边库库存
                                            locDetl2.setAnfme(locDetl2.getAnfme() - wrkDetl.getAnfme());
                                            locDetl2.setUpdateBy(wrkDetl.getAppeUser());
                                            locDetl2.setModiTime(new Date());
                                            manLocDetlService.update(locDetl2, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                                        }
                                        // 记录日志
                                        SaasUtils.insertLog(3, locNo, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getAppeUser(), wrkDetl.getBatch());
                                    }
                                }
                            }
                        } catch (Exception ignore){}
@@ -164,10 +202,13 @@
                        // 更新订单完成数量
                        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())){
                                        orderDetl.getBatch(),wrkDetl.getAnfme())){
//                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -344,14 +385,60 @@
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // 更新订单完成数量
                        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())){
                                        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() + "]");
                                } else  { // 插入调拨出库单对应线边仓入库记录
                                    Order order = orderService.selectByNo(orderDetl.getOrderNo());
                                    if(order.getDocType$().equals("调拨出库单")) {
                                        String locNo = orderDetl.getSuppCode(); // 线边仓
                                        Node node = nodeService.selectByUuid(locNo);
                                        if (Cools.isEmpty(node)) {
                                            throw new CoolException(locNo + ":库位不存在");
                                        }
                                        ManLocDetl locDetl1 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).
                                                eq("batch", wrkDetl.getBatch()));
                                        if (!Cools.isEmpty(locDetl1)) {
                                            locDetl1.setAnfme(locDetl1.getAnfme() + wrkDetl.getAnfme());
                                            locDetl1.setModiTime(now);
                                            manLocDetlService.update(locDetl1, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", wrkDetl.getMatnr()).
                                                    eq("batch", wrkDetl.getBatch()));
                                        } else {
                                            ManLocDetl manLocDetl = new ManLocDetl();
                                            manLocDetl.setLocNo(locNo);
//                                            manLocDetl.setBarcode(barcode);
//                                            manLocDetl.setZpallet(barcode);
                                            manLocDetl.setNodeId(node.getId());
                                            manLocDetl.setMaktx(wrkDetl.getMaktx());
                                            manLocDetl.setMatnr(wrkDetl.getMatnr());
                                            manLocDetl.setSpecs(wrkDetl.getSpecs());
                                            manLocDetl.setBatch(Cools.isEmpty(wrkDetl.getBatch()) ? "" : wrkDetl.getBatch());
                                            manLocDetl.setAnfme(wrkDetl.getAnfme());
                                            manLocDetl.setCreateBy(wrkDetl.getAppeUser());
                                            manLocDetl.setCreateTime(now);
                                            if (!manLocDetlService.insert(manLocDetl)) {
                                                log.error("库存更新时插入线边库明细失败");
                                                throw new CoolException("库存更新时插入线边库明细失败!");
                                            }
                                            node.setUpdateBy(wrkDetl.getAppeUser());
                                            node.setUpdateTime(now);
                                            nodeService.updateById(node);
                                        }
                                        // 记录日志
                                        SaasUtils.insertLog(2, locNo, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getAppeUser(),wrkDetl.getBatch());
                                    }
                                }
                            }
                        } catch (Exception ignore){}