自动化立体仓库 - WMS系统
zjj
2023-09-14 d0cbcf35900093c606937a6f78423a0c75d6f939
src/main/java/com/zy/asrs/controller/ManPakOutController.java
@@ -8,6 +8,8 @@
import com.core.common.*;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.entity.param.PakOutDTO;
import com.zy.asrs.entity.result.LocDetlAll;
import com.zy.asrs.service.*;
import com.zy.common.CodeRes;
import com.zy.common.config.AdminInterceptor;
@@ -53,9 +55,7 @@
        EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
            wrapper.orderBy("create_time",false);
        }
        return R.ok(manPakOutService.selectPage(new Page<>(curr, limit), wrapper));
    }
@@ -69,12 +69,32 @@
        EntityWrapper<ManPakOut> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else {
            wrapper.orderBy("create_time",false);
        String docnum = String.valueOf(param.get("doc_num"));
        if (Cools.isEmpty(docnum) || docnum.equals("null")) {
            docnum = null;
        }
        wrapper.isNotNull("name");
        Page<ManPakOut> manPakOutPage = manPakOutService.selectPage(new Page<>(curr, limit), wrapper);
        return R.ok(manPakOutPage);
        List<PakOutDTO> pakOutDTOS = manPakOutService.selectPakOut(docnum, curr, limit);
        for (PakOutDTO pakOutDTO:pakOutDTOS){
            List<ManPakOut> manPakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num", pakOutDTO.getDoc_num()));
            for (ManPakOut manPakOut:manPakOuts){
                if (manPakOut.getCount() < manPakOut.getAnfme()){
                        pakOutDTO.setStatus(0);
                        break;
                }
            }
            if (pakOutDTO.getStatus() == null){
                pakOutDTO.setStatus(1);
            }
        }
        int count = manPakOutService.selectPakOutCount(docnum, curr, limit);
        Page<PakOutDTO> page = new Page<>();
        page.setRecords(pakOutDTOS);
        page.setTotal(count);
        return R.ok(page);
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
@@ -88,6 +108,293 @@
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/ManPakOut/add/auth")
    @ManagerAuth(memo = "生成拣货单")
    @Transactional
    public R manPakOutAdd(@RequestBody OrderDomainParam param){
        if (Cools.isEmpty(param)){
            return R.error("数据异常");
        }
        if (!Cools.isEmpty(param.getOrderNo())){
            Order order = orderService.selectOne(new EntityWrapper<Order>()
                    .eq("order_no", param.getOrderNo())
            );
            if (Cools.isEmpty(order)){
                return R.error("单据不存在");
            }
            List<OrderDetl> orderDetls =orderDetlService.selectList(new EntityWrapper<OrderDetl>()
                    .eq("order_no", param.getOrderNo())
            );
            if (Cools.isEmpty(orderDetls)){
                return R.error("单据明细为空");
            }
            for (OrderDetl orderDetl : orderDetls){
                List<ManLocDetl> manLocDetls=null;
                try{
                    if (Cools.isEmpty(orderDetl.getBatch())){
                        manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>()
                                .eq("matnr",orderDetl.getMatnr())
                        );
                    }else {
                        manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>()
                                .eq("matnr",orderDetl.getMatnr())
                                .eq("batch",orderDetl.getBatch())
                        );
                    }
                }catch (Exception e){
                    return R.error("添加拣货单失败");
                }
                if (!Cools.isEmpty(manLocDetls)){
                    for (ManLocDetl manLocDetl:manLocDetls){
                        Double statusAnfme = 0.0;
                        if (Cools.isEmpty(manLocDetl.getStatus())){
                            manLocDetl.setStatus(1);
                        }
                        try{
                            if (manLocDetl.getStatus$().equals("禁用")){
                                if (Cools.isEmpty(manLocDetl.getBatch())){
                                    List<ManPakOut> manPakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>()
                                            .eq("loc_no", manLocDetl.getLocNo())
                                            .eq("matnr", manLocDetl.getMatnr())
                                            .eq("status",0)
                                    );
                                    if (!Cools.isEmpty(manPakOuts)){
                                        for (ManPakOut manPakOut:manPakOuts){
                                            statusAnfme=statusAnfme+manPakOut.getAnfme();
                                        }
                                    }
                                }else {
                                    List<ManPakOut> manPakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>()
                                            .eq("loc_no", manLocDetl.getLocNo())
                                            .eq("matnr", manLocDetl.getMatnr())
                                            .eq("batch",manLocDetl.getBatch())
                                            .eq("status",0)
                                    );
                                    if (!Cools.isEmpty(manPakOuts)){
                                        for (ManPakOut manPakOut:manPakOuts){
                                            statusAnfme=statusAnfme+manPakOut.getAnfme();
                                        }
                                    }
                                }
                            }
                        }catch (Exception e){
                            return R.error("查询库存禁用数量失败");
                        }
                        Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>()
                                .eq("loc_no", manLocDetl.getLocNo())
                                .eq("matnr", manLocDetl.getMatnr());
                        if (orderDetl.getAnfme() > manLocDetl.getAnfme()-statusAnfme){
                            if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){
                                manLocDetl.setStatus(0);
                                try{
                                    if (Cools.isEmpty(manLocDetl.getBatch())){
                                        manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime()));
                                    }else {
                                        manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch()));
                                    }
                                }catch (Exception e){
                                    return R.error("更新库存失败");
                                }
                                orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme());
                            }else {
                                return R.error("添加拣货单失败");
                            }
                        }else if (orderDetl.getAnfme()-manLocDetl.getAnfme()-statusAnfme==0){
                            if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){
                                manLocDetl.setStatus(0);
                                try{
                                    if (Cools.isEmpty(manLocDetl.getBatch())){
                                        manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime()));
                                    }else {
                                        manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch()));
                                    }
                                }catch (Exception e){
                                    return R.error("更新库存失败");
                                }
                                orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme());
                            }else {
                                return R.error("添加拣货单失败");
                            }
                        }else if (orderDetl.getAnfme()<manLocDetl.getAnfme()-statusAnfme){
                            Double a=manLocDetl.getAnfme();
                            manLocDetl.setAnfme(orderDetl.getAnfme());
                            if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){
                                orderDetl.setAnfme(orderDetl.getAnfme()-manLocDetl.getAnfme());
                                manLocDetl.setStatus(0);
                                manLocDetl.setAnfme(a);
                                try{
                                    if (Cools.isEmpty(manLocDetl.getBatch())){
                                        manLocDetlService.update(manLocDetl,wrapper.eq("modi_time",manLocDetl.getModiTime()));
                                    }else {
                                        manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch()));
                                    }
                                }catch (Exception e){
                                    return R.error("更新库存失败");
                                }
                            }else {
                                return R.error("添加拣货单失败");
                            }
                        }else {
                            return R.error("系统出错,请联系管理员");
                        }
                        if (orderDetl.getAnfme()==0){
                            break;
                        }
                    }
                    if (orderDetl.getAnfme()!=0){
                        ManLocDetl manLocDetl=new ManLocDetl();
                        manLocDetl.setAnfme(0.0);
                        manLocDetl.setMatnr(orderDetl.getMatnr());
                        manLocDetl.setMaktx(orderDetl.getMaktx());
                        manLocDetl.setMemo(orderDetl.getMemo()+"库存不足");
                        if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){
                            continue;
                        }else {
                            return R.error("添加拣货单失败");
                        }
                    }
                }else {
                    ManLocDetl manLocDetl=new ManLocDetl();
                    manLocDetl.setAnfme(0.0);
                    manLocDetl.setMatnr(orderDetl.getMatnr());
                    manLocDetl.setMaktx(orderDetl.getMaktx());
                    manLocDetl.setMemo(orderDetl.getMemo()+"无库存");
                    if (addPakOUT(manLocDetl,param.getOrderNo()).equals(R.ok())){
                        continue;
                    }else {
                        return R.error("添加拣货单失败");
                    }
                }
            }
            orderService.updateSettle(order.getId(),(long)2,null);
        }else {
            return R.error("单据编号异常");
        }
        return R.ok("拣货单添加成功");
    }
    private R addPakOUT(ManLocDetl manLocDetl,String OrderNo){
        ManPakOut manPakOut=new ManPakOut();
        manPakOut.setWrkNo(OrderNo+"-"+System.currentTimeMillis());
        manPakOut.setWrkSts((long)1);
        manPakOut.setAnfme(manLocDetl.getAnfme());
        manPakOut.setLocNo(manLocDetl.getLocNo());
        manPakOut.setNodeId(manLocDetl.getNodeId());
        manPakOut.setMatnr(manLocDetl.getMatnr());
        manPakOut.setMaktx(manLocDetl.getMaktx());
        manPakOut.setSpecs(manLocDetl.getSpecs());
        manPakOut.setUnit(manLocDetl.getUnit());
        manPakOut.setBarcode(manLocDetl.getBarcode());
        manPakOut.setDocNum(OrderNo);
        manPakOut.setStatus(0);
        manPakOut.setCreateTime(new Date());
        if (!Cools.isEmpty(manLocDetl.getBatch())){
            manPakOut.setBatch(manLocDetl.getBatch());
            manPakOut.setUpdateTime(new Date());
        }else {
            manPakOut.setUpdateTime(manLocDetl.getModiTime());//用于识别货物
        }
        manPakOut.setMemo(manLocDetl.getMemo());
        if (Cools.isEmpty(manPakOutService.selectOne(new EntityWrapper<ManPakOut>().eq("doc_num",OrderNo)))){
            manPakOut.setName(manLocDetl.getMaktx());
        }
        try{
            if (!manPakOutService.insert(manPakOut)){
                return R.error("添加拣货明细失败,请联系管理员");
            }
        }catch (Exception e){
            return R.error("添加拣货明细失败,请联系管理员");
        }
        return R.ok();
    }
    @RequestMapping("/manPakOut/finish")
    public R finish(@RequestBody ManPakOut manPakOut){
        Wrapper<ManLocDetl> wrapper = new EntityWrapper<ManLocDetl>()
                .eq("loc_no", manPakOut.getLocNo())
                .eq("matnr", manPakOut.getMatnr());
        try{
            if (Cools.isEmpty(manPakOut.getBatch())){
                List<ManLocDetl> manLocDetls = manLocDetlService.selectList(wrapper);
                Double anfme=manPakOut.getAnfme();
                for (ManLocDetl manLocDetl:manLocDetls){
                    if (anfme<manLocDetl.getAnfme()){
                        manLocDetl.setAnfme(manLocDetl.getAnfme()-anfme);
                        manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch()));
                        anfme=0.0;
                    }else if (anfme>=manLocDetl.getAnfme()){
                        manLocDetlService.delete(wrapper.eq("batch",manLocDetl.getBatch()));
                        anfme=anfme-manLocDetl.getAnfme();
                    }
                    if (anfme==0.0){
                        break;
                    }
                }
            }else {
                ManLocDetl manLocDetl = manLocDetlService.selectOne(wrapper.eq("batch", manPakOut.getBatch()));
                if (manPakOut.getAnfme()<manLocDetl.getAnfme()){
                    manLocDetl.setAnfme(manLocDetl.getAnfme()-manPakOut.getAnfme());
                    manLocDetlService.update(manLocDetl,wrapper.eq("batch",manLocDetl.getBatch()));
                }else if (manPakOut.getAnfme()-manLocDetl.getAnfme()==0){
                    manLocDetlService.delete(wrapper.eq("batch",manLocDetl.getBatch()));
                }
            }
        }catch (Exception e){
            return R.error("更新库存数量失败");
        }
        ManPakOut out = Cools.isEmpty(manPakOut.getBatch())? manPakOutService.selectOne(new EntityWrapper<ManPakOut>()
                .eq("wrk_no", manPakOut.getWrkNo())
                .eq("matnr", manPakOut.getMatnr()))
                :manPakOutService.selectOne(new EntityWrapper<ManPakOut>()
                .eq("wrk_no", manPakOut.getWrkNo())
                .eq("matnr", manPakOut.getMatnr())
                .eq("batch",manPakOut.getBatch()));
        out.setWrkSts(manPakOut.getWrkSts());
        out.setZpallet(manPakOut.getZpallet());
        out.setAnfme(manPakOut.getAnfme());
        out.setNodeId(manPakOut.getNodeId());
        out.setLocNo(manPakOut.getLocNo());
        out.setMatnr(manPakOut.getMatnr());
        out.setMaktx(manPakOut.getMaktx());
        out.setBatch(manPakOut.getBatch());
        out.setStatus(manPakOut.getStatus());
        boolean update =Cools.isEmpty(manPakOut.getBatch())? manPakOutService.update(out, new EntityWrapper<ManPakOut>()
                .eq("wrk_no", manPakOut.getWrkNo())
                .eq("matnr", manPakOut.getMatnr()))
                :manPakOutService.update(out, new EntityWrapper<ManPakOut>()
                .eq("wrk_no", manPakOut.getWrkNo())
                .eq("matnr", manPakOut.getMatnr())
                .eq("batch",manPakOut.getBatch()));
        try {
            Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", manPakOut.getDocNum()));
            List<ManPakOut> pakOuts = manPakOutService.selectList(new EntityWrapper<ManPakOut>().eq("doc_num", order.getOrderNo()));
            if (Cools.isEmpty(pakOuts)){
                return R.error("查询拣货单明细失败");
            }else {
                Long settle = order.getSettle();
                for (ManPakOut pakOut:pakOuts){
                    if (pakOut.getStatus()==0 || pakOut.getStatus()==8){
                        order.setSettle(settle);
                        break;
                    }else {
                        order.setSettle(4L);
                    }
                }
            }
            orderService.updateSettle(order.getId(),order.getSettle(),(long)9527);
        }catch (Exception e){
            return R.error("更新订单状态失败");
        }
        return update? R.ok("更新成功") : R.error("更新失败");
    }
    @RequestMapping("/manPakOut/notIssued")
@@ -107,6 +414,12 @@
        return R.ok(orders1);
    }
    public static void main(String[] args) {
        ManPakOutService bean = SpringUtils.getBean(ManPakOutService.class);
        ManPakOut out = bean.selectOne(null);
        System.out.println("JSON.toJSONString(out) = " + JSON.toJSONString(out));
    }
    @RequestMapping(value = "/ManPakOut/print/auth")
    @ManagerAuth(memo = "订单编码打印")
    public R manPakOutPrint(@RequestParam(value = "param[]") String[] param) {