自动化立体仓库 - WMS系统
zwl
6 天以前 57610f520d214c9b5797191f7dbc68c121c7f0c1
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -6,10 +6,7 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.BasStationServiceImpl;
import com.zy.asrs.service.impl.LocCacheServiceImpl;
import com.zy.asrs.service.impl.OrderPakinServiceImpl;
import com.zy.asrs.service.impl.TaskDetlServiceImpl;
import com.zy.asrs.service.impl.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
@@ -58,6 +55,8 @@
    private BasStationServiceImpl basStationService;
    @Autowired
    private WorkService workService;
    @Autowired
    private LocAroundBindService locAroundBindService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 4.入库完成
@@ -115,7 +114,6 @@
                    }
                    // 遍历工作明细,更新库存明细和入库通知档
                    for (WrkDetl wrkDetl : wrkDetls) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                        if (null != locDetl) {
@@ -141,8 +139,34 @@
                        }
                        //判断匹配编码不为空,且任务编码包含-2,确认为有上组任务
                        if (!Objects.isNull(wrkMast.getWrkCode()) && wrkMast.getWrkCode().contains("-2")) {
                            //不需要更新单据信息(子任务无单据
                        if (!Objects.isNull(wrkMast.getWrkCode())) {
                            //TODO 获取101出库 主任务档总数量 - 子任务档的实际数量 = 当前作业完成数量
                            WrkDetl selectOne = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                            Double v = Math.round((selectOne.getStockQty() - selectOne.getAnfme()) * 10000) / 10000.0;
                            OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), "", "", "", "",
                                    null, null, null);
                            if (!Objects.isNull(orderDetlPakout)) {
                                orderDetlPakout.setQty(v);
                                if (!orderDetlPakoutService.updateById(orderDetlPakout)) {
                                    throw new CoolException("单据完成数量修改失败!!");
                                }
                            }
                            int indexOf = wrkMast.getWrkCode().indexOf("-1");
                            if (indexOf != -1) {
                                String wrkNo = wrkMast.getWrkCode().substring(0, indexOf);
                                WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
                                if (Objects.isNull(mast)) {
                                    throw new CoolException("数据错误,主任务档不存在或已删除!!");
                                }
                                mast.setWrkCode(null);
                                if (!wrkMastService.updateById(mast)) {
                                    throw new CoolException("原任务档删除失败!!");
                                }
                            }
                        } else {
                            //正常单据才存存入库单,作入库单据信息更新
                            // 更新订单完成数量
@@ -444,37 +468,94 @@
            return FAIL.setMsg(e.getMessage());
        }
        /***/
        if (wrkMast.getIoType() !=2){
            if (!Objects.isNull(wrkMast.getWrkCode())) {
                LocMast lcmst = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
                lcmst.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                if (!locMastService.updateById(lcmst)) {
                    throw new CoolException("库位状态修改失败!!");
                }
                LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
                if (Objects.isNull(bLocNo)) {
                    throw new CoolException("工位不存在 !!");
                }
                bLocNo.setLocType(LocStsType.LOC_STS_TYPE_O.type);
                if (!locAroundBindService.updateById(bLocNo)) {
                    throw new CoolException("工位状态修改失败!!");
                }
                locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
            }
        }
        return SUCCESS;
    }
    public void movLoc(WrkMast wrkMast) {
        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
        if (Objects.isNull(locMast)) {
            throw new CoolException("目标库位不存在!!");
        }
        Date now = new Date();
        Long operatorUser = wrkMast.getModiUser();
        if (Objects.isNull(operatorUser)) {
            operatorUser = wrkMast.getAppeUser();
        }
        // 默认目标库位是空板
        String locSts = "D";
        // 库位移转判断是否为空板移转
        if (wrkMast.getEmptyMk().equals("N")) {
        if ("N".equals(wrkMast.getEmptyMk())) {
            locSts = "F";
            // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
            if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
//                            exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                log.info("库位移转 ===>> 转移库存明细数据失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            List<LocDetl> sourceDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
            for (LocDetl sourceDetl : sourceDetls) {
                LocDetl targetDetl = locDetlService.selectItem(wrkMast.getLocNo(), sourceDetl.getMatnr(), sourceDetl.getBatch(), sourceDetl.getBrand(),
                        sourceDetl.getStandby1(), sourceDetl.getStandby2(), sourceDetl.getStandby3(), sourceDetl.getBoxType1(),
                        sourceDetl.getBoxType2(), sourceDetl.getBoxType3());
                if (null != targetDetl && !Objects.equals(targetDetl.getId(), sourceDetl.getId())) {
                    Double targetQty = targetDetl.getAnfme() == null ? 0D : targetDetl.getAnfme();
                    Double sourceQty = sourceDetl.getAnfme() == null ? 0D : sourceDetl.getAnfme();
                    targetDetl.setAnfme(Math.round((targetQty + sourceQty) * 10000) / 10000.0);
                    targetDetl.setAreaId(locMast.getAreaId());
                    targetDetl.setAreaName(locMast.getAreaName());
                    targetDetl.setModiTime(now);
                    if (!Objects.isNull(operatorUser)) {
                        targetDetl.setModiUser(operatorUser);
                    }
                    if (!locDetlService.updateById(targetDetl)) {
                        throw new CoolException("库位移转 ===>> 合并库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[sourceLoc=" + wrkMast.getSourceLocNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                    }
                    if (!locDetlService.deleteById(sourceDetl.getId())) {
                        throw new CoolException("库位移转 ===>> 删除源库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[sourceLoc=" + wrkMast.getSourceLocNo() + "]");
                    }
                } else {
                    sourceDetl.setLocNo(wrkMast.getLocNo());
                    sourceDetl.setAreaId(locMast.getAreaId());
                    sourceDetl.setAreaName(locMast.getAreaName());
                    sourceDetl.setModiTime(now);
                    if (!Objects.isNull(operatorUser)) {
                        sourceDetl.setModiUser(operatorUser);
                    }
                    if (!locDetlService.updateById(sourceDetl)) {
                        throw new CoolException("库位移转 ===>> 转移库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[sourceLoc=" + wrkMast.getSourceLocNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                    }
                }
            }
        }
        // 修改源库位状态 ==> O
        LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
        if (null != sourceLoc) {
            sourceLoc.setBarcode("");
            sourceLoc.setLocSts("O");
            sourceLoc.setModiTime(now);
            sourceLoc.setIoTime(now);
            if (!locMastService.updateById(sourceLoc)) {
//                            exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                log.info("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            }
        if (null == sourceLoc) {
            throw new CoolException("源库位不存在!!");
        }
        sourceLoc.setBarcode("");
        sourceLoc.setLocSts("O");
        sourceLoc.setModiTime(now);
        sourceLoc.setIoTime(now);
        if (!locMastService.updateById(sourceLoc)) {
            throw new CoolException("库位移转 ===>> 修改源库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
        }
        // 修改目标库位状态 ==> .locSts
        locMast.setLocSts(locSts);
@@ -482,14 +563,13 @@
        locMast.setIoTime(now);
        locMast.setModiTime(now);
        if (!locMastService.updateById(locMast)) {
//                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
           log.info("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            throw new CoolException("库位移转 ===>> 修改目标库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
        }
    }
    private ReturnT<String> doOut(WrkMast wrkMast) {
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> doOut(WrkMast wrkMast) {
        Date now = new Date();
        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
        try {
@@ -507,7 +587,18 @@
                    if (!Objects.isNull(wrkMast.getWrkCode())) {
                        //TODO 移库
//                        workService.locMove(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), wrkMast.getAppeUser());
                        movLoc(wrkMast);
                        //修改工位库态
                        LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getLocNo()));
                        if (Objects.isNull(bLocNo)) {
                            throw new CoolException("数据错误, 目标工位不存在!!");
                        }
                        bLocNo.setLocType(LocStsType.LOC_STS_TYPE_F.type);
                        if (!locAroundBindService.updateById(bLocNo)) {
                            throw new CoolException("工位状态修改失败!!");
                        }
                    } else {
//                    // 出库确认信号位
//                    if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) {