自动化立体仓库 - WMS系统
zjj
2025-03-21 abb7c67088e18f8052eeff6d35b611286eedcee5
#出入库改动
5个文件已修改
269 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pakStore/stockOut.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pakStore/stockOut.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -160,57 +160,7 @@
    @Override
    @Transactional
    public void startupFullTakeStore(StockOutParam param, Long userId) {
        ArrayList<String> locNos = new ArrayList<>();
        for (StockOutParam.LocDetl locDetl:param.getLocDetls()){
            locNos.add(locDetl.getLocNo());
        }
        //检测是否为浅库位
        List<LocMast> locMasts = null;
        boolean sign=false;
        String th = "";
        for (StockOutParam.LocDetl locDetl:param.getLocDetls()){
            int row = getRow(locDetl.getLocNo());
            int bay = getBay(locDetl.getLocNo());
            int lev = getLev(locDetl.getLocNo());
            if (!(row==4 || row==5)){
                if (row>5){
                    locMasts=locMastService.selectList(new EntityWrapper<LocMast>().ge("row1", 5).le("row1", row)
                            .eq("bay1",bay).eq("lev1",lev));
                    for (LocMast locMast1:locMasts){
                        if (locNos.contains(locMast1.getLocNo())){
                            continue;
                        }
                        if (locMast1.getRow1()<row){
                            if (!locMast1.getLocSts().equals("O")){
                                sign=true;
                                th="库位号:"+locDetl.getLocNo()+" 浅库位有非空库位!";
                                break;
                            }
                        }
                    }
                }else {
                    locMasts=locMastService.selectList(new EntityWrapper<LocMast>().le("row1", 4).ge("row1", row)
                            .eq("bay1",bay).eq("lev1",lev));
                    for (LocMast locMast1:locMasts){
                        if (locNos.contains(locMast1.getLocNo())){
                            continue;
                        }
                        if (locMast1.getRow1()>row){
                            if (!locMast1.getLocSts().equals("O")){
                                sign=true;
                                th="库位号:"+locDetl.getLocNo()+" 浅库位有非空库位!";
                                break;
                            }
                        }
                    }
                }
            }
        }
        if (sign){
            throw new CoolException("出库失败;"+th);
        }
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
@@ -221,7 +171,7 @@
        }
        if (!locDetlDtos.isEmpty()) {
            // 启动出库开始 101.出库
            stockOut(staNo, locDetlDtos, null, userId);
            stockOut(null, locDetlDtos, null, userId);
        } else {
            throw new CoolException("库存不存在");
        }
@@ -299,22 +249,25 @@
            // 获取路径
            Boolean outMost = locMastService.isOutMost(dto.getLocNo(), false);
            Integer outCrnNo = locMastService.getOutCrnNo(locMast);
            StaDesc staDesc = staDescService.queryCrnStn(ioType, outCrnNo, staNo.getDevNo());
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(ioType); // 入出库状态
            wrkMast.setWrkSts(ioType == 101?17L:9L); // 工作状态:11.生成出库ID
            wrkMast.setIoType(ioType == 101?101:53); // 入出库状态
            Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
            wrkMast.setIoPri(ioPri); // 优先级:13
            wrkMast.setOutMost(outMost?1:0);;
            wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            if (ioType == 101){
                wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            }else {
                wrkMast.setLocNo(dto.getLocNo());
            }
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
@@ -349,7 +302,7 @@
            // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
            locMast = locMastService.selectById(dto.getLocNo());
            if (locMast.getLocSts().equals("F")) {
                locMast.setLocSts(ioType==101?"R":"P");
                locMast.setLocSts(ioType==101?"R":"Q");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -67,37 +67,24 @@
                if (wrkMast.getIoType() == 1) {
                    // 入库通知单
                    if (!Cools.isEmpty(wrkMast.getBarcode())) {
                        // 保存入库通知档历史档
                        if (!waitPakinLogService.save(wrkMast.getBarcode())) {
                            exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                        // 删除入库通知档
                        if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) {
                            exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo());
                        }
//                        // 保存入库通知档历史档
//                        if (!waitPakinLogService.save(wrkMast.getBarcode())) {
//                            exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo());
//                        }
//                        // 删除入库通知档
//                        if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) {
//                            exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo());
//                        }
                    }
                    // 手动入库生成单据 【 上报三方平台 】
                    if (!Cools.isEmpty(wrkDetls)) {
                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) {
                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
                    // 拣料再入库
                } else if (wrkMast.getIoType() == 53) {
                    if (!Cools.isEmpty(wrkDetls)) {
                        if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
                            exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
                }
                // 出库 --------------------------------------------------------------------------------
            } else if (wrkMast.getWrkSts() == 18) {
                if (!Cools.isEmpty(wrkDetls)) {
                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                    }
                }
            }
            // 保存工作主档历史档
src/main/webapp/static/js/pakStore/stockOut.js
@@ -70,13 +70,7 @@
                if (locDetlData.length === 0){
                    layer.msg('请先提取商品库存', {icon: 2});
                } else {
                    var staNo = $("#staNoSelect").val();
                    if (staNo === "" || staNo === null){
                        layer.msg("请选择出库口", {icon: 2});
                        return;
                    }
                    let param = {
                        outSite: staNo,
                        locDetls: locDetlData
                    }
                    $.ajax({
src/main/webapp/views/pakStore/stockOut.html
@@ -95,11 +95,6 @@
    <script type="text/html" id="toolbar">
        <div class="layui-form">
            <div class="layui-btn-container">
                <!-- 1.选择出库口 -->
                <span id="staNoSpan">出库口:</span>
                <select id="staNoSelect" lay-verify="required">
                    <option value="">请选择站点</option>
                </select>
                <!-- 2.启动出库 -->
                <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动出库</button>
            </div>