自动化立体仓库 - WMS系统
#
Junjie
4 天以前 4c7ab64e5a6bf855ece40e760ba7ad16cf6c367b
src/main/java/com/zy/asrs/service/impl/ReportToThirdServiceImpl.java
@@ -8,8 +8,10 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.nc.SendUtil;
import com.zy.nc.entity.*;
import com.zy.nc.service.NccSaleDbddWmsService;
import com.zy.nc.service.NccSaleXsfhmxWmsService;
import com.zy.nc.service.NccScPcdaWmsService;
import com.zy.nc.util.NcResultMessage;
@@ -19,6 +21,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -47,6 +50,8 @@
    @Autowired
    private NccSaleXsfhmxWmsService nccSaleXsfhmxWmsService;
    @Autowired
    private NccSaleDbddWmsService  nccSaleDbddWmsService;
    @Value("${NYNC.ip}")
    private String nyncIp;
@@ -84,6 +89,8 @@
        Object process2 = null;
        String memo = order.getMemo();
        String remark = "";
        boolean success = false;
        log.info("订单开始上报:{}", JSON.toJSONString(order));
        try {
            switch (order.getDocType$().toString()) {
                case "销售退货":
@@ -93,6 +100,7 @@
                    if (!Cools.isEmpty(response) && response.isSuccess()) {
                        log.info("销售发货response:{}", response);
                        step = 10;
                        success = true;
                    } else {
                        remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                    }
@@ -104,6 +112,7 @@
                    if (!Cools.isEmpty(response) && response.isSuccess()) {
                        log.info("销售发货response:{}", response);
                        step = 10;
                        success = true;
                    } else {
                        remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                    }
@@ -115,6 +124,7 @@
                    if (!Cools.isEmpty(response) && response.isSuccess()) {
                        log.info("转库-入库response:{}", response);
                        step = 10;
                        success = true;
                    } else {
                        remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                    }
@@ -144,6 +154,7 @@
                        if (!Cools.isEmpty(response) && response.isSuccess()) {
                            log.info("转库-出库2response:{}", response);
                            step = 10;
                            success = true;
                        } else {
                            remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                        }
@@ -166,6 +177,7 @@
                            if (!Cools.isEmpty(response) && response.isSuccess()) {
                                log.info("转库-出库2response:{}", response);
                                step = 10;
                                success = true;
                            } else {
                                remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                            }
@@ -179,6 +191,7 @@
                    if (!Cools.isEmpty(response) && response.isSuccess()) {
                        log.info("集团内部调拨response:{}", response);
                        step = 10;
                        success = true;
                    } else {
                        remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
                    }
@@ -201,39 +214,100 @@
            e.printStackTrace();
            throw new CoolException("调用接口报错,请联系管理员");
        } finally {
            reportApiLog(response, order.getDocType$(), nyncIp, saveRefDelivery);
            reportApiLog(order, process1, process2, response, order.getDocType$(), nyncIp, saveRefDelivery, success);
        }
    }
    @Override
    public boolean reportTkrk(String matnr, String batch, String orderNo, Double anfme) {
        Object process1 = processTKRK(matnr, batch, orderNo, anfme);
        //发送请求
        NcResultMessage response = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, saveRefDelivery, JSONObject.toJSONString(process1));
        log.info("退库入库response:{}", response);
        if (!Cools.isEmpty(response) && response.isSuccess()) {
            log.info("退库入库response:{}", response);
            return true;
        } else {
//            remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
            return false;
        Object process1 = null;
        NcResultMessage response1 = null;
        boolean success1 = false;
        try {
            process1 = processTKRK(matnr, batch, orderNo, anfme);
            //发送请求
            response1 = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, saveRefDelivery, JSONObject.toJSONString(process1));
            log.info("退库入库response:{}", response1);
            if (!Cools.isEmpty(response1) && response1.isSuccess()) {
                log.info("退库入库response:{}", response1);
                success1 = true;
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            process1 = e.getMessage();
        } finally {
            reportApiLog(null, process1, process1, response1, "TKRK", nyncIp, saveRefDelivery, success1);
        }
        Object process2 = null;
        NcResultMessage response2 = null;
        boolean success2 = false;
        try {
            process2 = processDBTK(matnr, batch, orderNo, anfme);
            //发送请求
            response2 = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, dbdd, JSONObject.toJSONString(process2));
            log.info("退库入库response:{}", response2);
            if (!Cools.isEmpty(response2) && response2.isSuccess()) {
                log.info("退库入库response:{}", response2);
                success2 = true;
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            process2 = e.getMessage();
        } finally {
            reportApiLog(null, process2, process2, response2, "DBRK", nyncIp, dbdd, success2);
        }
        return false;
    }
    @Override
    public boolean reportCheckOrder(InventoryCheckOrder checkOrder) {
        Object process1 = processInvcount(checkOrder);
        //发送请求
        NcResultMessage response = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, invcountAdd, JSONObject.toJSONString(process1));
        log.info("盘点单response:{}", response);
        if (!Cools.isEmpty(response) && response.isSuccess()) {
            log.info("盘点单response:{}", response);
            return true;
        } else {
//            remark = response.getMessage() + "--" + response.getErrorStack().substring(0, 100);
            return false;
    public boolean reportCheckOrder(String matnr, String batch) {
        List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>()
                .eq("matnr", matnr)
                .eq("batch", batch)
        );
        ArrayList<String> warehouseIdList = new ArrayList<>();
        ArrayList<String> orderNoList = new ArrayList<>();
        for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) {
            if (!warehouseIdList.contains(checkOrderDetl.getCwarehouseid())) {
                warehouseIdList.add(checkOrderDetl.getCwarehouseid());
            }
            if (!orderNoList.contains(checkOrderDetl.getOrderNo())) {
                orderNoList.add(checkOrderDetl.getOrderNo());
            }
        }
        boolean result = true;
        for (String cwarehouseid : warehouseIdList) {
            Object process1 = processInvcount(matnr, batch, cwarehouseid);
            //发送请求
            NcResultMessage response = SendUtil.sendDataToNc(SendUtil.token, nyncIp + ":" + port, invcountAdd, JSONObject.toJSONString(process1));
            log.info("盘点单response:{}", response);
            if (!Cools.isEmpty(response) && response.isSuccess()) {
                log.info("盘点单response:{}", response);
            } else {
                result = false;
            }
        }
        if (result) {
            List<InventoryCheckOrder> inventoryCheckOrders = inventoryCheckOrderService.selectList(new EntityWrapper<InventoryCheckOrder>()
                    .in("order_no", orderNoList)
                    .eq("status", 1)
            );
            for (InventoryCheckOrder inventoryCheckOrder : inventoryCheckOrders) {
                inventoryCheckOrder.setStatus("2");
                inventoryCheckOrderService.updateById(inventoryCheckOrder);
            }
        }
        return result;
    }
    private Object processXSFH(List<OrderDetl> orderDetls, Boolean flag) {
@@ -268,6 +342,7 @@
            saleOutBodyVO.setVbatchcode(orderDetl.getBatch());
            saleOutBodyVO.setNshouldnum(flag ? -orderDetl.getQty() : orderDetl.getQty());
            saleOutBodyVO.setNnum(flag ? -orderDetl.getQty() : orderDetl.getQty());
            saleOutBodyVO.setCstateid(orderDetl.getCstateid());
            saleOutBodyVOList.add(saleOutBodyVO);
        }
        data.put("SaleOutHeadVO", saleOutHeadVO);
@@ -313,46 +388,82 @@
        return data;
    }
    private Object processInvcount(InventoryCheckOrder checkOrder) {
        List<InventoryCheckOrderDetl> inventoryCheckOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>()
                .eq("order_no", checkOrder.getOrderNo()));
        if (inventoryCheckOrderDetls.isEmpty()) {
            throw new CoolException("盘点明细不存在");
    private Object processDBTK(String matnr, String batch, String orderNo, Double anfme) {
        List<NccSaleDbddWms> nccSaleDbddWmsList = nccSaleDbddWmsService.selectList(new EntityWrapper<NccSaleDbddWms>()
                .eq("wlbm", matnr)
                .eq("vbillcode", orderNo)
        );
        if (nccSaleDbddWmsList.isEmpty()) {
            throw new CoolException("调拨订单ERP数据为空");
        }
        NccSaleDbddWms nccSaleDbddWms = nccSaleDbddWmsList.get(0);
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
        //仓库id
        String cwarehouseid = null;
        List<InvCountBodyVO> invCountBodyVOList = new ArrayList<>();
        for (InventoryCheckOrderDetl inventoryCheckOrderDetl : inventoryCheckOrderDetls) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>()
                    .eq("matnr", inventoryCheckOrderDetl.getMatnr())
                    .eq("batch", inventoryCheckOrderDetl.getBatch())
            );
            if (wrkDetls.isEmpty()) {
                throw new CoolException("工作档明细不存在");
            }
            NccScPcdaWms nccScPcdaWms = nccScPcdaWmsService.selectOne(new EntityWrapper<NccScPcdaWms>()
                    .eq("WLBM", inventoryCheckOrderDetl.getMatnr())
                    .eq("VBATCHCODE", inventoryCheckOrderDetl.getBatch())
            );
            if(null == nccScPcdaWms) {
                throw new CoolException("ERP数据库无法查询到盘点上报数据");
            }
            cwarehouseid = wrkDetls.get(0).getStandby1();
            InvCountBodyVO invCountBodyVO = new InvCountBodyVO();
            invCountBodyVO.setCmaterialoid(inventoryCheckOrderDetl.getMatnr());
            invCountBodyVO.setVbatchcode(inventoryCheckOrderDetl.getBatch());
            invCountBodyVO.setNcountnum(inventoryCheckOrderDetl.getCheckAnfme());
            invCountBodyVO.setCstateid(nccScPcdaWms.getPkStorestate());
            invCountBodyVO.setPk_batchcode(nccScPcdaWms.getPkBatchcode());
            invCountBodyVOList.add(invCountBodyVO);
        List<IaIjBillB> bids = new ArrayList<>();
        IaIjBillB iaIjBillB = new IaIjBillB();
        NccScPcdaWms nccScPcdaWms = nccScPcdaWmsService.selectOne(new EntityWrapper<NccScPcdaWms>().eq("vbatchcode", batch).eq("wlbm", matnr));
        if (nccScPcdaWms == null) {
            throw new CoolException("批次[{}]物料[{}]未找到" + batch + "-" + matnr);
        }
        Double weight = MatUtils.calcWeight(matnr, anfme);
        iaIjBillB.setBid(nccSaleDbddWms.getCbill_bid());
        iaIjBillB.setNassistnum(weight * -1);
        iaIjBillB.setNnum(anfme * -1);
        iaIjBillB.setVbatchcode(batch);
        iaIjBillB.setClocationid("");
        iaIjBillB.setCstateid(nccScPcdaWms.getVcode());
        bids.add(iaIjBillB);
        data.put("hid", nccSaleDbddWms.getCbillid());
        data.put("bids", bids);
        return data;
    }
    private Object processInvcount(String matnr, String batch, String cwarehouseid) {
        List<InventoryCheckOrderDetl> inventoryCheckOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>()
                .eq("matnr", matnr)
                .eq("batch", batch)
                .eq("cwarehouseid", cwarehouseid)
        );
        if (inventoryCheckOrderDetls.isEmpty()) {
            throw new CoolException("盘点明细不存在");
        }
        //合并数量
        BigDecimal checkAnfmeDecimal = new BigDecimal(0);
        for (InventoryCheckOrderDetl checkOrderDetl : inventoryCheckOrderDetls) {
            checkAnfmeDecimal = checkAnfmeDecimal.add(BigDecimal.valueOf(checkOrderDetl.getCheckAnfme()));
        }
        //计算辅数量
        Double weight = MatUtils.calcWeight(matnr, checkAnfmeDecimal.doubleValue());
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
        List<InvCountBodyVO> invCountBodyVOList = new ArrayList<>();
        NccScPcdaWms nccScPcdaWms = nccScPcdaWmsService.selectOne(new EntityWrapper<NccScPcdaWms>()
                .eq("WLBM", matnr)
                .eq("VBATCHCODE", batch)
        );
        if (null == nccScPcdaWms) {
            throw new CoolException("ERP数据库无法查询到盘点上报数据");
        }
        InvCountBodyVO invCountBodyVO = new InvCountBodyVO();
        invCountBodyVO.setCmaterialoid(matnr);
        invCountBodyVO.setVbatchcode(batch);
        invCountBodyVO.setNcountnum(checkAnfmeDecimal.doubleValue());
        invCountBodyVO.setNcountastnum(weight);
        invCountBodyVO.setCstateid(nccScPcdaWms.getPkStorestate());
        invCountBodyVO.setPk_batchcode(nccScPcdaWms.getPkBatchcode());
        invCountBodyVOList.add(invCountBodyVO);
        InvCountHeaderVO invCountHeaderVO = new InvCountHeaderVO();
        invCountHeaderVO.setPk_org("FYT");
@@ -401,26 +512,31 @@
    private Object processDBDD(List<OrderDetl> orderDetls) {
        //组装对象数据
        Map<String, Object> data = new HashMap<String, Object>();
        IaIjBill iaIjBill = new IaIjBill();
        iaIjBill.setPk_org("FYT");
        //iaIjBill.setCwarehouseid("6101");
        IaIjBillB iaIjBillB = null;
        List<IaIjBillB> iaIjBillBS = new ArrayList<>();
        String hid = "";
        List<IaIjBillB> bids = new ArrayList<>();
        for (OrderDetl orderDetl : orderDetls) {
            iaIjBillB = new IaIjBillB();
            if (orderDetl.getQty() <= 0) {
                continue;
            }
            IaIjBillB iaIjBillB = new IaIjBillB();
            String remark = orderDetl.getRemark();
            if (!Cools.isEmpty(remark)) {
                NccSaleDbddWms nccSaleXsfhmxWms = JSONObject.parseObject(remark, NccSaleDbddWms.class);
                iaIjBillB.setCinventoryid(nccSaleXsfhmxWms.getWlbm());
                iaIjBillB.setCinventoryvid(nccSaleXsfhmxWms.getWlbm());
                iaIjBillB.setCsrcid(nccSaleXsfhmxWms.getCbillid());
                iaIjBillB.setNnum(orderDetl.getQty().intValue() + "");
                iaIjBillB.setPk_org("FYT");
                Double weight = MatUtils.calcWeight(orderDetl.getMatnr(), orderDetl.getQty());
                NccSaleDbddWms nccSaleDbddWms = JSONObject.parseObject(remark, NccSaleDbddWms.class);
                iaIjBillB.setBid(nccSaleDbddWms.getCbill_bid());
                iaIjBillB.setNassistnum(weight);
                iaIjBillB.setNnum(orderDetl.getQty());
                iaIjBillB.setVbatchcode(orderDetl.getBatch());
                iaIjBillB.setClocationid("");
                iaIjBillB.setCstateid(orderDetl.getCstateidVcode());
                hid = nccSaleDbddWms.getCbillid();
            }
            iaIjBillBS.add(iaIjBillB);
            bids.add(iaIjBillB);
        }
        data.put("ia_ijbill", iaIjBill);
        data.put("ia_ijbill_b", iaIjBillBS);
        data.put("hid", hid);
        data.put("bids", bids);
        return data;
    }
@@ -548,16 +664,19 @@
    }
    private Boolean reportApiLog(Object data, String docType, String url, String path) {
        String response = "";
        boolean success = false;
    private Boolean reportApiLog(Order order, Object process1, Object process2, Object response, String docType, String url, String path, Boolean success) {
        HashMap<String, Object> request = new HashMap<>();
        request.put("order", order);
        request.put("process1", process1);
        request.put("process2", process2);
        apiLogService.save(
                docType,
                url + path,
                null,
                "127.0.0.1",
                JSON.toJSONString(data),
                response,
                JSON.toJSONString(request),
                JSON.toJSONString(response),
                success
        );
        return false;