自动化立体仓库 - WMS系统
#
zyx
2024-06-04 0cdf3e50751dee9c76fec7ca4a9b9be0d967da68
src/main/java/com/zy/asrs/controller/PakoutController.java
@@ -1,21 +1,29 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.Pakout;
import com.zy.asrs.service.PakoutService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.entity.result.PakoutVo;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
import com.zy.system.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
@RestController
@@ -23,6 +31,14 @@
    @Autowired
    private PakoutService pakoutService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private PlaService plaService;
    @RequestMapping(value = "/pakout/{id}/auth")
    @ManagerAuth
@@ -40,6 +56,12 @@
        EntityWrapper<Pakout> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        User user = getUser();
        if (user.getRoleId() != 2 || user.getRoleId() != 24) {
            wrapper.eq("create_by", user.getId());
        }
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(pakoutService.selectPage(new Page<>(curr, limit), wrapper));
    }
@@ -52,19 +74,217 @@
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
                wrapper.eq(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/pakout/add/auth")
    @ManagerAuth
    public R add(Pakout pakout) {
        pakoutService.insert(pakout);
        return R.ok();
    public R add(@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<Pakout> manPakOuts = pakoutService.selectList(new EntityWrapper<Pakout>()
                                            .eq("loc_no", manLocDetl.getLocNo())
                                            .eq("matnr", manLocDetl.getMatnr())
                                            .eq("status",0)
                                    );
                                    if (!Cools.isEmpty(manPakOuts)){
                                        for (Pakout manPakOut:manPakOuts){
                                            statusAnfme=statusAnfme+manPakOut.getAnfme();
                                        }
                                    }
                                }else {
                                    List<Pakout> manPakOuts = pakoutService.selectList(new EntityWrapper<Pakout>()
                                            .eq("loc_no", manLocDetl.getLocNo())
                                            .eq("matnr", manLocDetl.getMatnr())
                                            .eq("batch",manLocDetl.getBatch())
                                            .eq("status",0)
                                    );
                                    if (!Cools.isEmpty(manPakOuts)){
                                        for (Pakout 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("拣货单添加成功");
    }
   @RequestMapping(value = "/pakout/update/auth")
    private R addPakOUT(ManLocDetl manLocDetl,String OrderNo){
        Pakout manPakOut=new Pakout();
        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(pakoutService.selectOne(new EntityWrapper<Pakout>().eq("doc_num",OrderNo)))){
            manPakOut.setName(manLocDetl.getMaktx());
        }
        try{
            if (!pakoutService.insert(manPakOut)){
                return R.error("添加拣货明细失败,请联系管理员");
            }
        }catch (Exception e){
            return R.error("添加拣货明细失败,请联系管理员");
        }
        return R.ok();
    }
    @RequestMapping(value = "/pakout/update/auth")
   @ManagerAuth
    public R update(Pakout pakout){
        if (Cools.isEmpty(pakout) || null==pakout.getMatnr()){
@@ -75,12 +295,25 @@
    }
    @RequestMapping(value = "/pakout/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            pakoutService.deleteById(id);
    @ManagerAuth(memo = "手动删除订单")
    public R delete(@RequestParam String docNum){
        try{
            pakoutService.deletePakout(docNum);
        }catch (Exception e){
            return R.error(e+"");
        }
        return R.ok();
        return R.ok("拣货单删除成功");
    }
    @RequestMapping(value = "/pakout/deleteDetl/auth")
    @ManagerAuth(memo = "手动删除订单")
    public R deleteDetl(@RequestParam String wrkNo){
        try{
            pakoutService.deletePakoutByWrkNo(wrkNo);
        }catch (Exception e){
            return R.error(e+"");
        }
        return R.ok("拣货单删除成功");
    }
    @RequestMapping(value = "/pakout/export/auth")
@@ -120,4 +353,33 @@
        return R.ok();
    }
    @RequestMapping(value = "/pakout/printExport/auth")
    //   @ManagerAuth(memo = "盘点单导出")
    public void export(HttpServletResponse response, @RequestParam String orderNo) throws IOException {
        //从数据库查询数据
        EntityWrapper<Pakout> locCheckEntityWrapper = new EntityWrapper<>();
        locCheckEntityWrapper.eq("doc_num",orderNo);
        List<Pakout> list = pakoutService.selectList(locCheckEntityWrapper);
        List<PakoutVo> pakoutVos=new ArrayList<>();
        for (Pakout pakout: list) {
            PakoutVo pakoutVo = new PakoutVo();
            Pla pla = plaService.selectOne(new EntityWrapper<Pla>()
                    .eq("batch", pakout.getBatch())
                    .eq("package_no", pakout.getBarcode())
                    .eq("brand", pakout.getMaktx()));
            BeanUtils.copyProperties(pla,pakoutVo);
            BeanUtils.copyProperties(pakout,pakoutVo);
            pakoutVos.add(pakoutVo);
        }
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("拣货单", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName+ orderNo + ".xlsx");
        EasyExcel.write(response.getOutputStream(), PakoutVo.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .sheet("表1")
                .doWrite(pakoutVos);
    }
}