自动化立体仓库 - WMS系统
zyx
2023-08-04 d55581ed00fd0a8ecce78a6ebe6f9e2ee86274b3
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -159,6 +159,57 @@
    @Override
    @Transactional
    public void startupFullTakeStore(StockOutParam param, Long userId) {
        ArrayList<String> locNos = new ArrayList<>();
        for (StockOutParam.LocDetl locDetl:param.getLocDetls()){
            if (!locNos.contains(locDetl.getLocNo())){
                locNos.add(locDetl.getLocNo());
            }
        }
        //检测是否为浅库位
        boolean sign=false;
        String th = "";
        for (String locNo:locNos){
            if (sign){
                break;
            }
            //检测出库的货物中是否有状态为禁止的货物。
            for (LocDetl locDetl : locDetlService.selectByLocNo(locNo)) {
                if (locDetl.getStockFreeze() == 0) {
                    th="库位号:"+locNo+" 有禁止出库的货物!";
                    throw new CoolException("出库失败;"+th);
                }
                Mat mat = matService.selectByMatnr(locDetl.getMatnr());
                if (mat == null) {
                    continue;
                }
                if (mat.getStatus() == 0) {
                    th="库位号:"+locNo+" 有禁止出库的货物!";
                    throw new CoolException("出库失败;"+th);
                }
            }
            List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo);
            if (!Cools.isEmpty(groupInsideLoc)) {
                for (String insideLoc : groupInsideLoc) {
                    if (locNos.contains(insideLoc)){
                        continue;
                    }
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
                    if (locMast != null) {
                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){
                            sign=true;
                            th="库位号:"+locNo+" 浅库位有非空库位!";
                            break;
                        }
                    }
                }
            }
        }
        if (sign){
            throw new CoolException("出库失败;"+th);
        }
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
@@ -175,6 +226,33 @@
        } else {
            throw new CoolException("库存不存在");
        }
    }
    /**
     * 通过库位号获取 排
     */
    public static int getRow(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(0, 2));
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 通过库位号获取 列
     */
    public static int getBay(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(2, 5));
        }
        throw new RuntimeException("库位解析异常");
    }
    /**
     * 通过库位号获取 层
     */
    public static int getLev(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(5, 7));
        }
        throw new RuntimeException("库位解析异常");
    }
    @Override
@@ -229,7 +307,7 @@
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(now);
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
            wrkMast.setIoType(ioType); // 入出库状态
            Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
            wrkMast.setIoPri(ioPri); // 优先级:13
@@ -308,7 +386,7 @@
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
        wrkMast.setIoType(ioType); // 入出库状态
        Double ioPri = wrkMastService.getIoPri(ioType, taskDto.getLocNo());
        wrkMast.setIoPri(ioPri); // 优先级:13
@@ -367,12 +445,26 @@
            } else {
                // 订单合并出库
                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                //实际出库数量
                Double locAnfme = locDto.getAnfme();
                //订单实际出库数量
                Double orderAnfme;
                for (OrderDto orderDto : orderDtoList) {
                    OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
                    if (orderDetl == null) {
                        orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
                    }
                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
                    if(locAnfme > orderDetl.getAnfme()){
                        orderAnfme = orderDetl.getAnfme();
                        locAnfme -= orderAnfme;
                    }else {
                        orderAnfme = locAnfme;
                    }
                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) {
                        throw new CoolException("修改订单明细数量失败");
                    }
                    orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
@@ -455,6 +547,34 @@
    @Override
    @Transactional
    public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
        List<String> locNos = param.getLocNos();
        //检测是否为浅库位
        boolean sign=false;
        String th = "";
        for (String locNo:locNos){
            if (sign){
                break;
            }
            List<String> groupInsideLoc = Utils.getGroupInsideLoc(locNo);
            if (!Cools.isEmpty(groupInsideLoc)) {
                for (String insideLoc : groupInsideLoc) {
                    if (locNos.contains(insideLoc)){
                        continue;
                    }
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", insideLoc));
                    if (locMast != null) {
                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")){
                            sign=true;
                            th="库位号:"+locNo+" 浅库位有非空库位!";
                            break;
                        }
                    }
                }
            }
        }
        if (sign){
            throw new CoolException("出库失败;"+th);
        }
        if (Cools.isEmpty(param.getOutSite())) {
            throw new CoolException("站点不存在");
        }
@@ -492,7 +612,7 @@
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(new Date());
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
            wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
            wrkMast.setIoType(110); // 入出库状态: 110.空板出库
            Double ioPri = wrkMastService.getIoPri(110, locNo);
            wrkMast.setIoPri(ioPri);
@@ -569,7 +689,7 @@
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
        wrkMast.setIoType(11); // 入出库状态: 11.库格移载
        wrkMast.setIoPri(10D);
        wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
@@ -840,9 +960,23 @@
                    }
                } else {
                    // 订单合并出库
                    //实际取消的出库数量
                    Double wrkDetlAnfme = wrkDetl.getAnfme();
                    //订单实际出库数量
                    Double orderAnfme;
                    List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
                    for (OrderDto orderDto : orderDtoList) {
                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
                        if(wrkDetlAnfme > orderDto.getAnfme()){
                            orderAnfme = orderDto.getAnfme();
                            wrkDetlAnfme -= orderAnfme;
                        }else {
                            orderAnfme = wrkDetlAnfme;
                        }
                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) {
                            throw new CoolException("订单数据回滚失败");
                        }
                    }
@@ -1015,7 +1149,7 @@
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务
                wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                wrkMast.setIoPri(15D);
                wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false)?1:0);;