自动化立体仓库 - WMS系统
whycq
2023-08-26 82bcd0328dddbaad65933e2fada22bc68e82b3d5
src/main/java/com/zy/asrs/controller/OutController.java
@@ -1,11 +1,16 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.LocDto;
import com.zy.common.model.OrderDto;
import com.zy.common.model.OrderMergeVo;
@@ -39,6 +44,8 @@
    private WorkService workService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private MatService matService;
    @PostMapping("/out/pakout/orderDetlIds/auth")
    @ManagerAuth
@@ -66,7 +73,8 @@
                if (issued > 0) {
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
                    int ioType = (issued >= locDetl.getAnfme() && locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo())) == 1) ? 101 : 103;
                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType);
                    locDto.setStaNos(staNos);
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
@@ -108,24 +116,46 @@
        // 订单预校验  ===>> 1.订单状态; 2.订单带出数量
        List<OrderDto> orderDtos = new ArrayList<>();
        for (LocDto locDto : locDtos) {
            if (Cools.isEmpty(locDto.getOrderNo())) { continue; }
            OrderDto orderDto = new OrderDto(locDto.getOrderNo(), locDto.getMatnr(), locDto.getAnfme());
            if (OrderDto.has(orderDtos, orderDto)) {
                OrderDto dto = OrderDto.find(orderDtos, orderDto);
                assert dto != null;
                dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
            if (!isJSON(locDto.getOrderNo())) {
                if (Cools.isEmpty(locDto.getOrderNo())) { continue; }
                OrderDto orderDto = new OrderDto(locDto.getOrderNo(), locDto.getMatnr(), locDto.getAnfme());
                if (OrderDto.has(orderDtos, orderDto)) {
                    OrderDto dto = OrderDto.find(orderDtos, orderDto);
                    assert dto != null;
                    dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
                } else {
                    orderDtos.add(orderDto);
                }
            } else {
                orderDtos.add(orderDto);
                // 订单合并出库
//                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                for (OrderDto one : orderDtoList) {
                    OrderDto orderDto = new OrderDto(one.getOrderNo(), locDto.getMatnr(), one.getAnfme());
                    if (OrderDto.has(orderDtos, orderDto)) {
                        OrderDto dto = OrderDto.find(orderDtos, orderDto);
                        assert dto != null;
                        dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
                    } else {
                        orderDtos.add(orderDto);
                    }
                }
            }
        }
        for (OrderDto orderDto : orderDtos) {
            Order order = orderService.selectByNo(orderDto.getOrderNo());
            if (order.getSettle() > 2) {
                return R.error(orderDto.getOrderNo() + "订单已失效,请及时刷新页面");
            if (!Cools.isEmpty(order)){
                if (order.getSettle() > 2) {
                    return R.error(orderDto.getOrderNo() + "订单已失效,请及时刷新页面");
                }
            }
            OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), orderDto.getMatnr(), null);
            if (orderDetl.getAnfme() - orderDetl.getQty() < orderDto.getAnfme()) {
                return R.ok(orderDto.getOrderNo() + "订单已作业,请及时刷新页面");
            if (!Cools.isEmpty(orderDetl)){
                if (orderDetl.getAnfme() - orderDetl.getQty() < orderDto.getAnfme()) {
                    return R.ok(orderDto.getOrderNo() + "订单已作业,请及时刷新页面");
                }
            }
        }
@@ -148,12 +178,51 @@
                taskDtos.add(taskDto);
            }
        }
        List<String> locNos = new ArrayList<>();
        for (TaskDto taskDto : taskDtos) {
            if (!locNos.contains(taskDto.getLocNo())){
                locNos.add(taskDto.getLocNo());
            }
        }
        List<TaskDto> taskDtos1 = new ArrayList<>();
        for (TaskDto taskDto : taskDtos) {
            String locNo = taskDto.getLocNo();
            List<String> groupOuterSingleLoc = Utils.getGroupOuterSingleLoc(locNo);
            if (Utils.getBay(locNo)>=21){
                groupOuterSingleLoc = Utils.getGroupOuterSingleLocLowFrequency(locNo);
            }
            for (String locNo1 : groupOuterSingleLoc){
                if (!locNos.contains(locNo1)){
                    locNos.add(locNo1);
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo1));
                    if (locMast.getLocSts().equals("F")){
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo1));
                        if (Cools.isEmpty(locDetls) || locDetls.size()==0) {
                            TaskDto taskDto1 = new TaskDto(locNo1, taskDto.getStaNo());
                            taskDtos1.add(taskDto1);
                        }else {
                            List<LocDto> locDtos1 = new ArrayList<>();
                            for (LocDetl locDetl:locDetls){
                                LocDto locDto = new LocDto(locDetl,taskDto.getLocDtos().get(0),"伴生出库");
                                locDtos1.add(locDto);
                            }
                            TaskDto taskDto1 = new TaskDto(locNo1, taskDto.getStaNo(),locDtos1);
                            taskDtos1.add(taskDto1);
                        }
                    }else if (locMast.getLocSts().equals("D")){
                        TaskDto taskDto1 = new TaskDto(locNo1, taskDto.getStaNo());
                        taskDtos1.add(taskDto1);
                    }
                }
            }
        }
        taskDtos.addAll(taskDtos1);
        // -----------------------------------------------------------------------------------------------
        List<String> excludeLocNos = taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
        for (TaskDto taskDto : taskDtos) {
            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
            workService.stockOut(staNo, taskDto, getUserId());
            locMastService.breakUp(taskDto.getLocNo(), excludeLocNos);
//            locMastService.breakUp(taskDto.getLocNo(), excludeLocNos);
        }
        return R.ok();
    }
@@ -174,20 +243,20 @@
        if (Cools.isEmpty(list)) {
            return R.parse(BaseRes.PARAM);
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        Set<String> exist = new HashSet<>();
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
        for (OrderMergeVo vo : list) {
            double issued = Optional.of(vo.getAnfme()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            List<LocDetl> locDetls = locDetlService.queryStock(vo.getMatnr(), vo.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), JSON.toJSONString(vo.getOrderDtos()),
                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
                    int count = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("loc_no", locDto.getLocNo()));
                    int ioType = (issued >= locDetl.getAnfme() && count == 1 ? 101 : 103);
                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), ioType);
                    locDto.setStaNos(staNos);
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
@@ -198,11 +267,16 @@
                }
            }
            if (issued > 0) {
                LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), JSON.toJSONString(vo.getOrderDtos()), issued);
                locDto.setLack(Boolean.TRUE);
                locDtos.add(locDto);
            }
        }
        for (LocDto locDto : locDtos) {
            Mat mat = matService.selectByMatnr(locDto.getMatnr());
            assert mat != null;
            locDto.setSpecs(mat.getSpecs());
        }
        return R.ok().add(locDtos);
    }