自动化立体仓库 - WMS系统
#
Junjie
3 天以前 78067a1c03707766f3d6561c22e165af68ad36b9
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -98,7 +98,7 @@
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, findLocNoAttributeVo, locTypeDto, param.getBarcode());
        // 生成工作号
        int workNo = dto.getWorkNo();
        int workNo = dto.getTaskNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
@@ -221,10 +221,6 @@
                throw new CoolException(dto.getLocNo()+"托盘非在库状态");
            }
            Integer outSta = staNo.getDevNo();
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, outSta);
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            // 生成工作档
@@ -235,9 +231,8 @@
            wrkMast.setIoType(ioType); // 入出库状态
            wrkMast.setIoPri(10D); // 优先级
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
            wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
            wrkMast.setSourceLocNo(dto.getLocNo()); // 源库位
            wrkMast.setStaNo(staNo.getDevNo());// 目标站
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
@@ -284,93 +279,131 @@
                throw new CoolException(dto.getLocNo() + "库位不是在库状态");
            }
        }
        //检测是否存在浅库位
        for (OutLocDto dto : dtos) {
            //判断是否是深库位 触发移库任务
            if (Utils.isDeepLoc(dto.getLocNo())) {
                String deepLoc = dto.getLocNo();
                String shallowLocNo = Utils.getShallowLocNo(deepLoc);
                LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo));
                if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) {
                    //触发移库任务
                    String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo);
                    if (locTransferLocNo == null) {
                        throw new CoolException(shallowLocNo + "浅库位搜索移库空库位失败");
                    }
                    this.locMove(shallowLocNo, locTransferLocNo, userId);
                }
            }
        }
    }
    @Override
    @Transactional
    public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
        Date now = new Date();
        List<LocDto> locDtos = taskDto.getLocDtos();
        for (LocDto locDto : locDtos) {
            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
                throw new CoolException("订单出库异常,请联系管理员");
    public void stockOut(List<TaskDto> taskDtoList, Long userId) {
        for (TaskDto taskDto : taskDtoList) {
            Date now = new Date();
            List<LocDto> locDtos = taskDto.getLocDtos();
            for (LocDto locDto : locDtos) {
                if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
                    throw new CoolException("订单出库异常,请联系管理员");
                }
            }
            // 获取库位
            LocMast locMast = locMastService.selectById(taskDto.getLocNo());
            // 获取路径
            int ioType = taskDto.isAll() ? 101 : 103;
            // 生成工作号
            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.setIoPri(13D); // 优先级:13
            wrkMast.setCrnNo(locMast.getCrnNo());
            wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位
            wrkMast.setStaNo(taskDto.getStaNo());// 目标站
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk("N"); // 空板
            wrkMast.setLinkMis("N");
            wrkMast.setBarcode(locMast.getBarcode());
            wrkMast.setAppeUser(userId); // 操作人员数据
            wrkMast.setAppeTime(now);
            wrkMast.setModiUser(userId);
            wrkMast.setModiTime(now);
            if (!wrkMastService.insert(wrkMast)) {
                throw new CoolException("保存工作档失败,出库库位号:"+taskDto.getLocNo());
            }
            // 生成工作档明细
            for (LocDto locDto : taskDto.getLocDtos()) {
                if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
                OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
                if (orderDetl == null) {
                    orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
                }
                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr()));
                Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr()));
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(orderDetl);
                wrkDetl.setZpallet(wrkMast.getBarcode());
                wrkDetl.setIoTime(now);
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setBatch(locDto.getBatch());
                wrkDetl.setOrderNo(locDto.getOrderNo());
                wrkDetl.setModel(mat.getModel());
                wrkDetl.setPrice(locDetl.getAnfme());//库存数量
                wrkDetl.setAnfme(locDto.getAnfme()); // 数量
                wrkDetl.setWeight(locDetl.getAnfme());//总数
                wrkDetl.setAppeTime(now);
                wrkDetl.setAppeUser(userId);
                wrkDetl.setModiTime(now);
                wrkDetl.setModiUser(userId);
                if (!wrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作档明细失败");
                }
                // 修改订单明细
                if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
                    throw new CoolException("修改订单明细数量失败");
                }
                orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
            }
            // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
            locMast = locMastService.selectById(taskDto.getLocNo());
            if (locMast.getLocSts().equals("F")) {
                locMast.setLocSts(ioType==101?"R":"P");
                locMast.setModiUser(userId);
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException("预约库位状态失败,库位号:"+taskDto.getLocNo());
                }
            } else {
                throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
            }
        }
        // 获取库位
        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
        // 获取路径
        int ioType = taskDto.isAll() ? 101 : 103;
        StaDesc staDesc = staDescService.queryCrnStn(ioType, 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.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setBarcode(locMast.getBarcode());
        wrkMast.setAppeUser(userId); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:"+taskDto.getLocNo());
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme()==null || locDto.getAnfme() <= 0.0D) { continue; }
            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            if (orderDetl == null) {
                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
        //检测是否存在浅库位
        for (TaskDto taskDto : taskDtoList) {
            //判断是否是深库位 触发移库任务
            if (Utils.isDeepLoc(taskDto.getLocNo())) {
                String deepLoc = taskDto.getLocNo();
                String shallowLocNo = Utils.getShallowLocNo(deepLoc);
                LocMast shallowLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLocNo));
                if (shallowLocMast.getLocSts().equals("F") || shallowLocMast.getLocSts().equals("D")) {
                    //触发移库任务
                    String locTransferLocNo = commonService.getLocTransferLocNo(shallowLocNo);
                    if (locTransferLocNo == null) {
                        throw new CoolException(shallowLocNo + "浅库位搜索移库空库位失败");
                    }
                    this.locMove(shallowLocNo, locTransferLocNo, userId);
                }
            }
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()).eq("matnr", locDto.getMatnr()));
            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr()));
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(orderDetl);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setModel(mat.getModel());
            wrkDetl.setPrice(locDetl.getAnfme());//库存数量
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
            wrkDetl.setWeight(locDetl.getAnfme());//总数
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
                throw new CoolException("修改订单明细数量失败");
            }
            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType==101?"R":"P");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:"+taskDto.getLocNo());
            }
        } else {
            throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
        }
    }
@@ -385,7 +418,7 @@
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, findLocNoAttributeVo, locTypeDto, "");
        int workNo = dto.getWorkNo();
        int workNo = dto.getTaskNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
@@ -850,18 +883,6 @@
            }
        }
//        // 订单关联
//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
//        for (WrkDetl wrkDetl : wrkDetls) {
//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
//                    throw new CoolException("订单数据回滚失败");
//                }
//                // 生成新的出库作业
////                        stockOutRe(wrkMast, wrkDetls);
//            }
//        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");