自动化立体仓库 - WMS系统
pang.jiabao
2025-04-28 65e54b6d197856b889481098caecceaa04d26691
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,5 +1,6 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -14,9 +15,7 @@
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.entity.result.ZphjcdgzVo;
import com.zy.asrs.entity.result.ZphjcdwcVo;
import com.zy.asrs.mapper.LocDetlMapper;
import com.zy.asrs.mapper.MatMapper;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.constant.MesConstant;
@@ -106,6 +105,12 @@
    @Resource
    private ConfigMapper configMapper;
    @Resource
    private OrderMapper orderMapper;
    @Resource
    private BasCrnpMapper basCrnpMapper;
    @Override
    @Transactional
@@ -1243,6 +1248,7 @@
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setWhsType(iotype == 1 && param.getPalletizingNo() == 2051 ? 1 : 0); // 返修入库标记
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(1L); // 工作状态:设备上走
        wrkMast.setIoType(iotype); // 入出库状态:1.入库
@@ -1305,14 +1311,14 @@
                    }
                    // 物料表备份一份
                    Mat mat = new Mat();
                    mat.sync(wrkDetl);
                    mat.setTagId(6L);
                    mat.setCreateTime(now);
                    mat.setUpdateTime(now);
                    if (!matService.insert(mat)) {
                        throw new CoolException("备份物料表失败");
                    }
//                    Mat mat = new Mat();
//                    mat.sync(wrkDetl);
//                    mat.setTagId(6L);
//                    mat.setCreateTime(now);
//                    mat.setUpdateTime(now);
//                    if (!matService.insert(mat)) {
//                        throw new CoolException("备份物料表失败");
//                    }
                });
            }
@@ -1372,6 +1378,9 @@
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        if (docType == null) {
            return R.parse("单据类型不存在,请检查:" + param.getOrderType());
        }
        Date now = new Date();
        // 单据主档
@@ -1483,7 +1492,97 @@
            wrkMastService.updateById(wrkMast);
        }
        // 出库上报推送mes记录
        ckjgsbPushMes(wrkMast,wrkDetls);
        return "出库结果上报成功";
    }
    private void ckjgsbPushMes(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
        GwmsGenerateInventoryDto gwmsGenerateInventoryDto = new GwmsGenerateInventoryDto();
        gwmsGenerateInventoryDto.setBarcode(wrkMast.getBarcode());
        gwmsGenerateInventoryDto.setPalletizingNo(wrkMast.getStaNo());
        List<GwmsGenerateInventoryDto.MatList> matLists = new ArrayList<>();
        for (WrkDetl wrkDetl:wrkDetls) {
            boolean flag = true;
            for (GwmsGenerateInventoryDto.MatList matList : matLists) {
                if (matList.getPackageGroupNo().equals(wrkDetl.getBrand())) {
                    matList.getRolls().add(new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
                                    wrkDetl.getUnit(),wrkDetl.getMaktx(),wrkDetl.getLength(),
                                    Integer.parseInt(wrkDetl.getSpecs()),wrkDetl.getWeight(),wrkDetl.getVolume(),
                                    wrkDetl.getManuDate()));
                    flag = false;
                    break;
                }
            }
            if (flag) {
                GwmsGenerateInventoryDto.MatList matList = new GwmsGenerateInventoryDto.MatList();
                matList.setBoxPos(wrkDetl.getOrigin());
                matList.setPackageGroupNo(wrkDetl.getBrand());
                matList.setOutOrIn("out");
                matList.setStockType(wrkMast.getStaNo() == 2041 ? "返修出库" : "成品出库");
                matList.setBoxType(wrkDetl.getColor());
                matList.setRollType(wrkDetl.getManu());
                matList.setWideInWidth(wrkDetl.getSku());
                matList.setThickness(wrkDetl.getItemNum());
                List<GwmsGenerateInventoryDto.Rolls> rollsList = new ArrayList<>();
                GwmsGenerateInventoryDto.Rolls roll = new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
                        wrkDetl.getUnit(),wrkDetl.getMaktx(),wrkDetl.getLength(),
                        Integer.parseInt(wrkDetl.getSpecs()),wrkDetl.getWeight(),wrkDetl.getVolume(),
                        wrkDetl.getManuDate());
                rollsList.add(roll);
                matList.setRolls(rollsList);
                matLists.add(matList);
            }
        }
       gwmsGenerateInventoryDto.setMatList(matLists);
        boolean success = false;
        // 获取请求头
        Map<String,Object> headers = new HashMap<>();
        headers.put("Content-Type","application/json;charset=UTF-8");
        // 构造请求体
        String body = JSON.toJSONString(gwmsGenerateInventoryDto);
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(MesConstant.MES_CC_IP_PORT)
                    .setPath(MesConstant.MES_CC_FXRK_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
                    .doPost();
            if (!Cools.isEmpty(response)) {
                JSONObject jsonObject1 = JSONObject.parseObject(response);
                int code = (int) jsonObject1.get("code");
                boolean state  = jsonObject1.getBoolean("state");
                if (code == 200 && state) {
                    success = true;
                }
            } else {
                log.error("出库上报推送mes记录失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL, body, response);
            }
        } catch (Exception e) {
            log.error("出库上报推送mes记录异常:{}", e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "出库上报推送mes记录",
                        MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL,
                        null,
                        "127.0.0.1",
                        body,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
    }
    @Autowired
@@ -1726,7 +1825,7 @@
    @Override
    public R kxlhCdwc(KxlhcdwcParam param) {
        if (Cools.isEmpty(param.getWorkNo(),param.getSourceStaNo(),param.getSite())) {
        if (Cools.isEmpty(param.getWorkNo(),param.getSourceStaNo(),param.getSite(),param.getBarcode())) {
            return R.parse("参数不能为空,请检查入参");
        }
        WrkMast wrkMast = wrkMastService.selectById(param.getWorkNo());
@@ -1831,7 +1930,7 @@
            zphjcdwcVo.setWorkNo(wrkMast1.getWrkNo());
            zphjcdwcVo.setStaNo(wrkMast1.getStaNo());
            zphjcdwcVo.setSourceStaNo(site);
            zphjcdwcVo.setBarcode(site == 3046 ? "T1046" : "T1042");
            zphjcdwcVo.setBarcode(param.getBarcode());
            zphjcdwcVos.add(zphjcdwcVo);
        }
@@ -1867,6 +1966,73 @@
    }
    @Override
    public R getUnfulfilledOrders() {
        // 获取未完成订单统计信息
        List<OrderStatisticsDto> unfulfilledOrders = orderMapper.getUnfulfilledOrders("");
        return R.ok(unfulfilledOrders);
    }
    @Override
    public R getCrnLaneWayInfo() {
        List<CrnLaneWayInfoDto> crnLaneWayInfo = basCrnpMapper.getCrnLaneWayInfo();
        return R.ok(crnLaneWayInfo);
    }
    @Override
    public R getOutLocInfoByBarcode(String barcode) {
        // 根据托盘码获取任务主档
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        // 根据任务主档获取工作档明细
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        // 提取包装组号
        List<String> brandList = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList());
        OutLocInfoDto outLocInfoDto = new OutLocInfoDto();
        outLocInfoDto.setWrkNo(wrkMast.getWrkNo());
        List<OutLocInfoDto.Material> materialList = new ArrayList<>();
        for (String brand : brandList) {
            // 一个木箱
            OutLocInfoDto.Material material = new OutLocInfoDto.Material();
            material.setPackageGroupNo(brand); // 包装组号
            // 按包装组号过滤
            List<WrkDetl> wrkDetls1 = wrkDetls.stream().filter(wrkDetl -> Objects.equals(wrkDetl.getBrand(), brand)).collect(Collectors.toList());
            // 卷信息
            List<OutLocInfoDto.Material.MaterialDetail> materialDetailList = new ArrayList<>();
            for (WrkDetl wrkDetl : wrkDetls1) {
                OutLocInfoDto.Material.MaterialDetail materialDetail = new OutLocInfoDto.Material.MaterialDetail();
                materialDetail.setRollNo(wrkDetl.getModel());
                materialDetail.setBoxNo(wrkDetl.getUnit());
                materialDetail.setSpecs(wrkDetl.getMatnr());
                material.setBoxPos(wrkDetl.getOrigin()); // 托盘上木箱位置
                materialDetailList.add(materialDetail);
            }
            // 订单信息
            WrkDetl wrkDetl = wrkDetls1.get(0);
            if (wrkDetl != null && wrkDetl.getOrderNo() != null) {
                Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", wrkDetl.getOrderNo()));
                if (order != null) {
                    material.setOrderNo(order.getOrderNo());
                    material.setMemo(order.getMemo());
                    material.setCustomerName(order.getCstmrName());
                    List<OrderStatisticsDto> unfulfilledOrders = orderMapper.getUnfulfilledOrders(order.getOrderNo());
                    if (unfulfilledOrders.size() == 1) {
                        OrderStatisticsDto orderStatisticsDto = unfulfilledOrders.get(0);
                        material.setSum(orderStatisticsDto.getSum());
                        material.setToShipQuantity(orderStatisticsDto.getToShipQuantity());
                        material.setWorkQuantity(orderStatisticsDto.getWorkQuantity());
                    }
                }
            }
            material.setMaterialDetailList(materialDetailList);
            materialList.add(material);
        }
        outLocInfoDto.setMaterialList(materialList);
        return R.ok(outLocInfoDto);
    }
    /**
     * 创建桁架理货出库的工作档
     */