自动化立体仓库 - WMS系统
zjj
2025-03-21 abb7c67088e18f8052eeff6d35b611286eedcee5
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -20,6 +20,7 @@
import com.zy.common.entity.Parameter;
import com.zy.common.model.DetlDto;
import com.zy.common.model.MesCombParam;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +64,10 @@
    private ApiLogService apiLogService;
    @Autowired
    private WorkLogHandler workLogHandler;
    @Autowired
    private CommonService commonService;
    @Autowired
    private LocMastService locMastService;
    @Override
    @Transactional
@@ -77,11 +82,11 @@
        }
        // todo: 不下线重新入库
        WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
        if (wrkMast != null && wrkMast.getWrkSts() == 18) {
            ReturnT<String> start = workLogHandler.start(wrkMast);
        WrkMast wrkMast18 = wrkMastService.selectByBarcode(param.getBarcode());
        if (wrkMast18 != null && wrkMast18.getWrkSts() == 18) {
            ReturnT<String> start = workLogHandler.start(wrkMast18);
            if (!start.isSuccess()) {
                log.error("工作档[workNo={}]历史档处理失败", wrkMast.getWrkNo());
                log.error("工作档[workNo={}]历史档处理失败", wrkMast18.getWrkNo());
            }
        }
@@ -90,40 +95,6 @@
        // 无单组托
        if (Cools.isEmpty(param.getOrderNo())) {
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
                } else {
                    detlDtos.add(detlDto);
                }
            });
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setBatch(detlDto.getBatch());
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            }
        // 关联组托
        } else {
            Order order = orderService.selectByNo(param.getOrderNo());
@@ -153,30 +124,93 @@
                    detlDtos.add(detlDto);
                }
            });
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                }
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setBatch(detlDto.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
                waitPakin.setStatus("Y");    // 状态
                waitPakin.setAppeUser(userId);
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            }
            orderService.updateSettle(order.getId(), 2L, userId);
        }
        LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getLocno()));
        if (Cools.isEmpty(locMast1)) {
            throw new CoolException("未找到正确的库位信息");
        }
        int workNo = commonService.getWorkNo(0);
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(9L); // 工作状态:生成入库ID
        wrkMast.setIoType(1); // 入出库状态:1.入库
        Double ioPri = wrkMastService.getIoPri(1, locMast1.getLocNo());
        wrkMast.setIoPri(ioPri); // 优先级
        wrkMast.setCrnNo(locMast1.getCrnNo());
        wrkMast.setOutMost(locMastService.isOutMost(locMast1.getLocNo(), true)?1:0);;
        wrkMast.setSourceStaNo(null);
        wrkMast.setStaNo(null);
        wrkMast.setLocNo(locMast1.getLocNo());
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(null); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        for (CombParam.CombMat paramMat : param.getCombMats() )
        {
            Mat mat = matService.selectByMatnr(paramMat.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(paramMat.getMatnr() + "商品档案不存在");
            }
            // 生成工作档明细
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(mat);
            wrkDetl.setAnfme(paramMat.getAnfme());
            wrkDetl.setZpallet(param.getBarcode());
//        wrkDetl.setAnfme(1.0D);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        }
//        // 更新入库通知档 ioStatus ===>> Y
//        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
//                .eq("zpallet", barcode);
//        WaitPakin setParam = new WaitPakin();
//        setParam.setIoStatus("Y");
//        setParam.setModiTime(now);
//        if (!waitPakinService.update(setParam, wrapper)) {
//            throw new CoolException("更新通知档失败");
//        }
        // 更新目标库位状态
        if (locMast1.getLocSts().equals("O")){
            locMast1.setLocSts("S"); // S.入库预约
            locMast1.setModiTime(now);
            if (!locMastService.updateById(locMast1)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(locMast1.getLocNo()+"目标库位已被占用");
        }
    }
    @Override