自动化立体仓库 - WMS系统
#
LSH
2023-05-16 41012324d4afa371ac50d45e3e93e802cf8d6e28
src/main/java/com/zy/asrs/controller/OutController.java
@@ -1,12 +1,11 @@
package com.zy.asrs.controller;
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.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
@@ -41,6 +40,10 @@
    private WorkService workService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private ManPakOutService manPakOutService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -75,6 +78,7 @@
//                    //速腾只有全板,所以只能101全板出库
//                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 101);
                    locDto.setStaNos(staNos);
                    locDto.setManu(locDetl.getManu());
                    locDtos.add(locDto);
                    exist.add(locDetl.getLocNo());
                    // 剩余待出数量递减
@@ -96,8 +100,23 @@
    @PostMapping("/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        int[][] is=new int[locDtos.size()][2];
        for (int i=0;i<locDtos.size();i++){
            LocDto locDto=locDtos.get(locDtos.size()-1-i);
            if (locDto.getLocNo()==null || locDto.getManu().equals("平库")){
                is[i][0]=1;
            }else {
                is[i][0]=0;
            }
            is[i][1]=locDtos.size()-1-i;
        }
        for (int[] i:is){
            if (i[0]==1){
                locDtos.remove(i[1]);
            }
        }
        if (Cools.isEmpty(locDtos)) {
            return R.parse(BaseRes.PARAM);
            return R.error("立库参数为空,请生成拣货单,平库拣货出库");
        }
        boolean lack = true;
        for (LocDto locDto : locDtos) {
@@ -133,4 +152,95 @@
        return R.ok();
    }
    @PostMapping("/out/pakout2/auth")
    @ManagerAuth(memo = "生成拣货单")
    public synchronized R pakout2(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        int[][] is = new int[locDtos.size()][2];
        for (int i = 0; i < locDtos.size(); i++) {
            LocDto locDto = locDtos.get(locDtos.size() - 1 - i);
            if (locDto.getLocNo() == null || locDto.getManu().equals("立库")) {
                is[i][0] = 1;
            } else {
                is[i][0] = 0;
            }
            is[i][1] = locDtos.size() - 1 - i;
        }
        for (int[] i : is) {
            if (i[0] == 1) {
                locDtos.remove(i[1]);
            }
        }
        if (Cools.isEmpty(locDtos)) {
            return R.error("平库参数为空,没有生成拣货单");
        }
        boolean lack = true;
        for (LocDto locDto : locDtos) {
            if (!locDto.isLack()) {
                lack = false;
                break;
            }
        }
        if (lack) {
            return R.error("库存不足");
        }
        for (LocDto locDto:locDtos){
            ManLocDetl manLocDetl = manLocDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
            if (!(locDto.getAnfme()>manLocDetl.getAnfme())) {
                manLocDetl.setStatus(0);
                if (manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("uuid", manLocDetl.getUuid()))) {
                    if (addPakOUT(locDto).equals(R.ok())) {
                        Order order = orderService.selectByNo(locDto.getOrderNo());
                        if (Cools.isEmpty(order)){
                            return R.error("查询订单失败,请联系管理员"+locDto.getOrderNo());
                        }
                        if (order.getSettle()==1){
                            if (!orderService.updateSettle(order.getId(),2L,null)){
                                return R.error("修改订单状态失败,请联系管理员"+locDto.getOrderNo());
                            }
                        }
                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", locDto.getOrderNo()).eq("matnr", locDto.getMatnr()));
                        if (Cools.isEmpty(orderDetl)){
                            return R.error("查询订单明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                        }
                        orderDetl.setWorkQty(orderDetl.getWorkQty()+locDto.getAnfme());
                        if (!orderDetlService.update(orderDetl,new EntityWrapper<OrderDetl>().eq("order_no", locDto.getOrderNo()).eq("matnr", locDto.getMatnr()))){
                            return R.error("修改订单明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                        }
                    } else {
                        return R.error("添加拣货明细失败,请联系管理员"+locDto.getOrderNo()+locDto.getMatnr());
                    }
                }
            }
        }
        return R.ok();
    }
    private R addPakOUT(LocDto locDto){
        ManPakOut manPakOut=new ManPakOut();
        manPakOut.setWrkNo(locDto.getOrderNo()+"-"+System.currentTimeMillis());
        manPakOut.setWrkSts((long)1);
        manPakOut.setAnfme(locDto.getAnfme());
        manPakOut.setLocNo(locDto.getLocNo());
        manPakOut.setMatnr(locDto.getMatnr());
        manPakOut.setMaktx(locDto.getMaktx());
        manPakOut.setDocNum(locDto.getOrderNo());
        manPakOut.setStatus(0);
        manPakOut.setCreateTime(new Date());
        manPakOut.setBatch(locDto.getBatch());
        manPakOut.setUpdateTime(new Date());
        if (Cools.isEmpty(manPakOutService.selectOne(new EntityWrapper<ManPakOut>().eq("doc_num",locDto.getOrderNo())))){
            manPakOut.setName(locDto.getMaktx());
        }
        try{
            if (!manPakOutService.insert(manPakOut)){
                return R.error("添加拣货明细失败,请联系管理员");
            }
        }catch (Exception e){
            return R.error("添加拣货明细失败,请联系管理员");
        }
        return R.ok();
    }
}