自动化立体仓库 - WMS系统
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -78,6 +78,10 @@
    private SlaveProperties slaveProperties;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private OrderDetl1ServiceImpl orderDetl1Service;
    @Autowired
    private Order1ServiceImpl order1Service;
    @Override
    @Transactional
@@ -390,6 +394,159 @@
            throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public void stockOutCheckAnfme(BasDevp staNo, TaskDto taskDto, User user, String agvStaNo) {
        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());
        String orderNo = "";
        int i = 0;
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (i++ == 0) {
                orderNo = locDto.getOrderNo();
            } else if (!orderNo.equals(locDto.getOrderNo())) {
                throw new CoolException("出库订单不一致无法出库");
            }
            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);
            }
//            if (orderDetl.getAnfme() - orderDetl.getWorkQty() == 0) {
//                return;
//            }
        }
        // 获取路径
        int ioType = taskDto.isAll() ? 101 : 103;
        Integer outSta = 0;
        if (locMast.getCrnNo() == 1) {
            outSta = 106;
        } else if (locMast.getCrnNo() == 2) {
            outSta = 104;
        } else if (locMast.getCrnNo() == 3) {
            outSta = 102;
        }
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), outSta);
        // 生成工作号
        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(user.getId()); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(user.getId());
        wrkMast.setModiTime(now);
        wrkMast.setMemo(Cools.isEmpty(agvStaNo) ? "" : agvStaNo);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        Order order = orderService.selectByNo(orderNo);
        if (Cools.isEmpty(order.getAccountDay())) {
            order.setAccountDay(1);
        } else {
            order.setAccountDay(order.getAccountDay() + 1);
        }
        orderNo = order.getOrderNo() + "-" + order.getAccountDay();
        Order1 order2 = order1Service.selectByNo(orderNo);
        if (Cools.isEmpty(order2)) {
            //创建子表表头
            Order1 order1 = new Order1();
            order1.sync(order);
            order1.setOrderNo(orderNo);
            order1.setCreateBy(user.getId());
            order1.setCreateTime(now);
            order1.setUpdateTime(new Date());
            order1.setSettle(2L);
            order1Service.insert(order1);
        }
        // 生成工作档明细
        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);
            }
            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(orderNo);
            wrkDetl.setModel(mat.getModel());
            wrkDetl.setAnfme(locDto.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(user.getId());
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(user.getId());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), wrkDetl.getAnfme(), user.getEmail())) {
                throw new CoolException("修改订单明细数量失败");
            }
            //生成出货单
            OrderDetl1 orderDetl1 = new OrderDetl1();
            orderDetl1.sync(wrkDetl);
            orderDetl1.setOrderId(order2.getId());
            orderDetl1.setWorkQty(wrkDetl.getAnfme());
            orderDetl1.setStatus(1);
            orderDetl1.setCreateBy(user.getId());
            orderDetl1.setUpdateBy(user.getId());
            orderDetl1.setCreateTime(new Date());
            orderDetl1.setUpdateTime(new Date());
            orderDetl1Service.insert(orderDetl1);
            orderService.updateSettle(orderDetl.getOrderId(), 2L, user.getId());
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(user.getId());
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:" + taskDto.getLocNo());
            }
        } else {
            throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
@@ -841,30 +998,43 @@
            List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
            for (WrkDetl wrkDetl : wrkDetls) {
                //字符串不为空
                String orderNo = wrkDetl.getOrderNo().split("-")[0];
                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                    if (!orderDetlService.decrease(orderNo, wrkDetl.getMatnr(), null, wrkDetl.getAnfme())) {
                        throw new CoolException("订单数据回滚失败");
                    }
                    //修改订单主表状态,没有作业数量时才可以修改
                    boolean flag = true;
                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", wrkDetl.getOrderNo()));
                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", orderNo));
                    for (OrderDetl orderDetl : orderDetls) {
                        if (orderDetl.getWorkQty() > 0) {
                            flag = false;
                        }
                    }
                    if (flag) {
                        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", wrkDetl.getOrderNo()));
                        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo));
                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
                            order.setSettle(1L);
                            order.setUpdateBy(userId);
                            order.setUpdateTime(now);
                        }
                        if (!orderService.update(order, new EntityWrapper<Order>().eq("order_no", wrkDetl.getOrderNo()))) {
                        if (!orderService.update(order, new EntityWrapper<Order>().eq("order_no", orderNo))) {
                            throw new CoolException("修改订单状态失败");
                        }
                    }
                    //对子表进行删减
                    if (Cools.isEmpty(wrkDetl.getBatch())) {
                        orderDetl1Service.delete(new EntityWrapper<OrderDetl1>().eq("order_no", wrkDetl.getOrderNo()).eq("matnr", wrkDetl.getMatnr()));
                    } else {
                        orderDetl1Service.delete(new EntityWrapper<OrderDetl1>().eq("order_no", wrkDetl.getOrderNo()).eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
                    }
                    int orderNo1 = orderDetl1Service.selectCount(new EntityWrapper<OrderDetl1>().eq("order_no", wrkDetl.getOrderNo()));
                    if (orderNo1 == 0) {
                        order1Service.delete(new EntityWrapper<Order1>().eq("order_no", wrkDetl.getOrderNo()));
                    }
                }
            }