自动化立体仓库 - WMS系统
1
14 小时以前 5e567919108b4e1c914cdb1aae5d91ff2eb337d7
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -47,6 +47,9 @@
    @Value("${erp.address.impurreceivebilladdress}")
    //收料单查询
    private String imPurreceiveBillAddress;
    @Value("${erp.address.impurreceivebilldetl}")
    //进仓通知单
    private String imPurreceiveBillDetlAddress;
    @Autowired
    private ApiLogService apiLogService;
@@ -73,6 +76,8 @@
    @Autowired
    private LocOwnerService locOwnerService;
    @Autowired
    private LocSuppService locSuppService;
    @Autowired
    private ErpSecretServiceImpl erpSecretService;
    @Value("${erp.login.accountId}")
@@ -113,7 +118,7 @@
                    jsonObject.put("status", Arrays.asList("B", "C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    path = matAddress;
                    break;
                case "BD_RRGANIZATION": //货主同步
                case "BD_RRGANIZATION": //供应商同步
                    jsonObject.put("start_createtime", "2025-01-01 00:00:00");//id
                    jsonObject.put("end_createtime", sdf1.format(now));
                    jsonObject.put("id", null);
@@ -123,10 +128,11 @@
                    path = orgAddress;
                    break;
                case "PUR_RECEIVEBIll": //已审核收料单查询
                    jsonObject.put("start_biztime", latestUpdateTime);//业务起始日期
//                    jsonObject.put("start_biztime", latestUpdateTime);//业务起始日期
                    jsonObject.put("start_biztime",  "2025-01-01 00:00:00");//业务起始日期
                    jsonObject.put("end_biztime", sdf1.format(now));//业务结束日期
                    jsonObject.put("billno", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("billno", Arrays.asList("CGSL-251125-000001"));
                    jsonObject.put("billstatus", Arrays.asList("A","B","C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_auditdate", null);//id
                    jsonObject.put("end_auditdate", null);
                    jsonObject.put("org_number", null);
@@ -195,7 +201,13 @@
                            Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("height").toString()).doubleValue() : 0.0;
                            Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("width").toString()).doubleValue() : 0.0;
                            Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("length").toString()).doubleValue() : 0.0;
                            Double netweight = jsonObjectNew.get("netweight") != null ? new BigDecimal(jsonObjectNew.get("grossweight").toString()).doubleValue() : 0.0;
                            // ---- 排序逻辑 ----
                            List<Double> dims = Arrays.asList(height, width, length);
                            dims.sort(Double::compareTo); // 升序排列:最小、中间、最大
                            Double min = dims.get(0);
                            Double mid = dims.get(1);
                            Double max = dims.get(2);
                            // 生成商品档案
                            Mat mat = matService.selectByMatnr(matnr);
                            if (mat == null) {
@@ -203,10 +215,11 @@
                                mat.setMatnr(matnr);
                                mat.setMaktx(name);
                                mat.setTagId(tag.getId());
                                mat.setWeight(grossweight);
                                mat.setManLength(length);
                                mat.setHeight(height);
                                mat.setWidth(width);
                                mat.setWeight(grossweight);//净重
                                mat.setUnits(netweight);//毛重
                                mat.setManLength(max);
                                mat.setHeight(min);
                                mat.setWidth(mid);
                                mat.setCreateTime(sdf1.parse(createTime));
                                mat.setUpdateTime(modifyTime);
                                mat.setStatus(1);
@@ -250,7 +263,7 @@
                        docTypeService.updateById(docType);
                    }
                }
                else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){//货主同步
                else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){//供应商同步
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
@@ -276,49 +289,47 @@
                            String owner = jsonObjectNew.get("name").toString();
                            Date createTime =  sdf1.parse(jsonObjectNew.get("createtime").toString());
                            // 生成商品档案
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
                            if (locOwner == null) {
                                locOwner = new LocOwner();
                                locOwner.setOwner(owner);
                                locOwner.setOwnerUuid(ownerUuid);
                                locOwner.setCreateTime(createTime);
                                locOwner.setUpdateTime(updateTime);
                                locOwner.setStatus(1);
                                if (!locOwnerService.insert(locOwner)) {
                                    callApiLogSaveOwner(locOwner, kingDeeUtilType, "同步新货主出错!" + locOwner, false);
                                    log.info("同步新货主出错!参数:[{}]、[{}]", locOwner, jsonObjectNew);
                            LocSupp locSupp = locSuppService.selectByUuid(ownerUuid);
                            if (locSupp == null) {
                                locSupp = new LocSupp();
                                locSupp.setOwner(owner);
                                locSupp.setOwnerUuid(ownerUuid);
                                locSupp.setCreateTime(createTime);
                                locSupp.setUpdateTime(updateTime);
                                locSupp.setStatus(1);
                                if (!locSuppService.insert(locSupp)) {
                                    callApiLogSaveSupp(locSupp, kingDeeUtilType, "同步新供应商出错!" + locSupp, false);
                                    log.info("同步新供应商出错!参数:[{}]、[{}]", locSupp, jsonObjectNew);
                                } else {
                                    callApiLogSaveOwner(locOwner, kingDeeUtilType, "同步新货主成功!", true);
                                    success = true;
                                    callApiLogSaveSupp(locSupp, kingDeeUtilType, "同步新供应商成功!", true);
                                }
                            } else {
                                boolean isUpdated = false;
                                if (locOwner.getUpdateTime().compareTo(updateTime) != 0) {
                                if (locSupp.getUpdateTime().compareTo(updateTime) != 0) {
                                    // 更新字段
                                    if (!locOwner.getOwner().equals(owner)) locOwner.setOwner(owner);
                                    if (!locOwner.getOwnerUuid().equals(ownerUuid)) locOwner.setOwnerUuid(ownerUuid);
                                    if (!locSupp.getOwner().equals(owner)) locSupp.setOwner(owner);
                                    if (!locSupp.getOwnerUuid().equals(ownerUuid)) locSupp.setOwnerUuid(ownerUuid);
                                    if (locOwner.getCreateTime().compareTo(createTime) != 0)
                                        locOwner.setCreateTime(createTime);
                                    locOwner.setUpdateTime(updateTime);
                                    if (locSupp.getCreateTime().compareTo(createTime) != 0)
                                        locSupp.setCreateTime(createTime);
                                    locSupp.setUpdateTime(updateTime);
                                    isUpdated = true;
                                }
                                // 执行更新操作
                                if (isUpdated) {
                                    if (!locOwnerService.updateById(locOwner)) {
                                        callApiLogSaveOwner(locOwner, kingDeeUtilType, "更新物料出错!" + locOwner, false);
                                        log.info("更新货主[货主编号:{}], 更新失败!", locOwner.getOwnerUuid());
                                    if (!locSuppService.updateById(locSupp)) {
                                        callApiLogSaveSupp(locSupp, kingDeeUtilType, "更新供应商出错!" + locSupp, false);
                                        log.info("更新供应商[供应商编号:{}], 更新失败!", locSupp.getOwnerUuid());
                                    } else {
                                        callApiLogSaveOwner(locOwner, kingDeeUtilType, "更新物料成功!", true);
                                        success = true;
                                        log.info("更新货主[货主编号:{}]", locOwner.getOwnerUuid());
                                        callApiLogSaveSupp(locSupp, kingDeeUtilType, "更新供应商成功!", true);
                                        log.info("更新供应商[供应商编号:{}]", locSupp.getOwnerUuid());
                                    }
                                }
                            }
                        }
                    }
                }
                else {
                else if(kingDeeUtilType.formId.equals("PUR_RECEIVEBIll")){
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
@@ -338,98 +349,158 @@
                        data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                        for (int j = 0; j < data.size(); j++) {
                            JSONObject jsonObjectNew = data.getJSONObject(j);
                            Date updateTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
                            String ownerUuid = jsonObjectNew.get("supplier_number").toString();//货主编码
                            String owner = jsonObjectNew.get("supplier_name").toString();//货主名称
                            Date createTime =  sdf1.parse(jsonObjectNew.get("createtime").toString());
                            String billNo = jsonObjectNew.get("billno").toString();
                            Order order = OrderInAndOutUtil.selectByNo(kingDeeUtilType.pakIn == 1, billNo);//检索单据
                            LocOwner locOwner = null;
                            if (ownerUuid != null) {
                                locOwner = locOwnerService.selectByUuid(ownerUuid);
                                if (locOwner == null) {
                                    callApiLogSaveOrder(order,kingDeeUtilType, "货主检索失败,请先添加对应货主编号:"+ownerUuid, false);continue;
                                }
                            } else{
                                callApiLogSaveOrder(order,kingDeeUtilType, "货主检索失败,未查询到货主编号!", false);continue;
                            }
                            if (Cools.isEmpty(order)) {
                                // 单据主档
                                order = new Order(
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        "1",    //项目名称 客户PO号  暂时不知道字段是哪个
                                        null,    // 调拨项目编号
                                        null,    // 初始票据号
                                        null,    // 票据号
                                        null,    // 项目id
                                        locOwner.getOwner(),    // 客户
                                        null,    // 联系方式
                                        null,    // 操作人员
                                        null,    // 合计金额
                                        null,    // 优惠率
                                        null,    // 优惠金额
                                        null,    // 销售或采购费用合计
                                        null,    // 实付金额
                                        null,    // 付款类型
                                        null,    // 业务员
                                        null,    // 结算天数
                                        null,    // 邮费支付类型
                                        null,    // 邮费
                                        null,    // 付款时间
                                        null,    // 发货时间
                                        null,    // 物流名称
                                        null,    // 物流单号
                                        1L,    // 订单状态
                                        1,    // 状态
                                        9527L,    // 添加人员
                                        now,    // 添加时间
                                        9527L,    // 修改人员
                                        now,    // 修改时间
                                        null    // 备注
                                );
                                OrderInAndOutUtil.insertOrder(kingDeeUtilType.pakIn == 1, order);
                            }
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            for (int k = 0; k < billEntryArray.size(); k++) {
                                JSONObject entry = billEntryArray.getJSONObject(k);
                                String matnr = entry.getString("material_number");
                                Double qty = entry.getDouble("qty");
                                //物料编码
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
                                    continue;
                                }
                                Order order1 = OrderInAndOutUtil.selectByNo(kingDeeUtilType.pakIn == 1, billNo);
                                List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(kingDeeUtilType.pakIn == 1, order1.getId());
                                boolean sign = false;
                                for (OrderDetl orderDetl : orderDetls){
                                    if (orderDetl.getMatnr().equals(matnr)){
                                        sign = true;
                                        break;
                            String billNo = jsonObjectNew.get("billno").toString();//单据编号
                            String owner = jsonObjectNew.get("org_name").toString();//货主名称
                            String ownerUuid = jsonObjectNew.get("org_number").toString();//erp货主编号
                            JSONObject detailParam = new JSONObject();
                            JSONObject dataObj = new JSONObject();
                            dataObj.put("billno", billNo);
                            detailParam.put("data", dataObj);
                            detailParam.put("pageNo", 1);
                            detailParam.put("pageSize", 100);
                            detailParam.put("data", dataObj);
                            boolean hasNext = true;
                            while (hasNext) {
                                String reqJson = detailParam.toJSONString();
                                String detailResp = new HttpHandler.Builder()
                                        .setHeaders(headers)
                                        .setUri(URL)
                                        .setPath(imPurreceiveBillDetlAddress)
                                        .setJson(reqJson)
                                        .build()
                                        .doPost();
                                JSONObject detailJson = JSON.parseObject(detailResp);
                                JSONObject detData = detailJson.getJSONObject("data");
                                JSONArray rows = detData.getJSONArray("rows");
                                // ====== 处理明细 ======
                                for (int i = 0; i < rows.size(); i++) {
                                    JSONObject jsonObjectNew2 = rows.getJSONObject(i);
                                    Order order = orderService.selectByNo( billNo);//检索单据
                                    LocOwner locOwner = null;
                                    if (ownerUuid != null) {
                                        locOwner = locOwnerService.selectByUuid(ownerUuid);
                                        if (locOwner == null) {
                                            callApiLogSaveOrder(order,kingDeeUtilType, "货主检索失败,请先添加对应货主编号:"+ownerUuid, false);continue;
                                        }
                                    } else{
                                        callApiLogSaveOrder(order,kingDeeUtilType, "货主检索失败,未查询到货主编号!", false);continue;
                                    }
                                    if (Cools.isEmpty(order)) {
                                        // 单据主档
                                        order = new Order(
                                                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                                billNo,    // 订单编号
                                                createTime.toString(),    // 单据日期
                                                docType.getDocId(),    // 单据类型
                                                null,    // 项目编号
                                                null,    //项目名称 客户PO号  暂时不知道字段是哪个
                                                null,    // 调拨项目编号
                                                null,    // 初始票据号
                                                null,    // 票据号
                                                null,    // 项目id
                                                owner,    // 货主
                                                null,    // 联系方式
                                                null,    // 操作人员
                                                null,    // 合计金额
                                                null,    // 优惠率
                                                null,    // 优惠金额
                                                null,    // 销售或采购费用合计
                                                null,    // 实付金额
                                                null,    // 付款类型
                                                null,    // 业务员
                                                null,    // 结算天数
                                                null,    // 邮费支付类型
                                                null,    // 邮费
                                                null,    // 付款时间
                                                null,    // 发货时间
                                                null,    // 物流名称
                                                null,    // 物流单号
                                                1L,    // 订单状态
                                                1,    // 状态
                                                9527L,    // 添加人员
                                                now,    // 添加时间
                                                9527L,    // 修改人员
                                                now,    // 修改时间
                                                null,    // 备注
                                                kingDeeUtilType.pakIn !=1?2:1
                                        );
                                        if( orderService.insert(order)){
                                            callApiLogSaveOrder(order, kingDeeUtilType, "创建入库单成功!单号:" + billNo, true);
                                        }
                                    }
                                    JSONArray billEntryArray = jsonObjectNew2.getJSONArray("billentry");
                                    for (int k = 0; k < billEntryArray.size(); k++) {
                                        JSONObject entry = billEntryArray.getJSONObject(k);
                                        String matnr = entry.getString("material_number"); //物料编码,内部SKU
                                        Double anfme = entry.getDouble("eap7_decimalfield");//箱数
                                        Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                        Double Totalvolume = entry.getDouble("eap7_decimalfield2");//总体积
                                        String warehouse = entry.getString("warehouse_number");//仓库编码
                                        String pOrderNo = entry.getString("eap7_textfield3");//采购单号
                                        String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
                                        String s2 = entry.getString("eap7_textfield5"); //条码UPC
                                        String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
                                        String s1 = entry.getString("eap7_textfield7"); //客户PO
                                        String suppCode = entry.getString("supplier_number"); //供应商
                                        //物料编码
                                        Mat mat = matService.selectByMatnr(matnr);
                                        if (Cools.isEmpty(mat)) {
                                            callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
                                            continue;
                                        }
                                        Order order1 = orderService.selectByNo( billNo);
                                        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId());
                                        boolean sign = false;
                                        for (OrderDetl orderDetl : orderDetls){
                                            if (orderDetl.getMatnr().equals(matnr)){
                                                sign = true;
                                                break;
                                            }
                                        }
                                        if (sign){
                                            continue;
                                        }
                                        LocSupp locSupp = null;
                                        String supp =null;
                                        locSupp = locSuppService.selectByUuid(suppCode);
                                        if(locSupp != null){supp = locSupp.getOwner();}
                                        OrderDetl orderDetl = new OrderDetl();
                                        orderDetl.sync(mat);
                                        orderDetl.setAnfme(anfme);//总箱数
                                        orderDetl.setOrderId(order.getId());
                                        orderDetl.setOrderNo(order.getOrderNo());//表头单据
                                        orderDetl.setSupp(supp);//供应商名称(货源)
                                        orderDetl.setSuppCode(suppCode);//供应商编码
                                        orderDetl.setSku(matnr);//内部SKU
                                        orderDetl.setStandby1(s1);//客户PO
                                        orderDetl.setStandby2(s2);//条码UPC
                                        orderDetl.setStandby3(s3);//客户SKU
                                        orderDetl.setBoxType1(owner); //货主名称
                                        orderDetl.setBoxType2(ownerUuid);//货主编号(erp组织)
                                        orderDetl.setBoxType3(pOrderNo);//采购单号
                                        orderDetl.setMemo(memo);//英文备注
                                        orderDetl.setVolume(Totalvolume);//总体积
                                        orderDetl.setSafeQty(totalNumItems);//总件数
                                        orderDetl.setManu(warehouse);//仓库编码
                                        orderDetl.setCreateBy(9527L);
                                        orderDetl.setCreateTime(new Date());
                                        orderDetl.setUpdateBy(9527L);
                                        orderDetl.setUpdateTime(new Date());
                                        orderDetl.setStatus(1);
                                        orderDetl.setQty(0.0D);
                                        orderDetlService.insert(orderDetl);
                                    }
                                }
                                if (sign){
                                    continue;
                                // 是否还有下一页
                                boolean lastPage = detData.getBoolean("lastPage");
                                if (lastPage) {
                                    hasNext = false;
                                } else {
                                    // 下一页
                                    int currPage = detData.getIntValue("pageNo");
                                    detailParam.put("pageNo", currPage + 1);
                                }
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setBatch(null);
                                orderDetl.setAnfme(qty);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setCreateBy(9527L);
                                orderDetl.setCreateTime(new Date());
                                orderDetl.setUpdateBy(9527L);
                                orderDetl.setUpdateTime(new Date());
                                orderDetl.setStatus(1);
                                orderDetl.setQty(0.0D);
                                OrderInAndOutUtil.insertOrderDetl(kingDeeUtilType.pakIn == 1,order,orderDetl);
                            }
                        }
                        docTypeService.updateById(docType);
@@ -456,9 +527,9 @@
                response, bool);
    }
    public void callApiLogSaveOwner(LocOwner locOwner, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
    public void callApiLogSaveSupp(LocSupp locSupp, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
        apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
                "货主编号:" + locOwner.getOwnerUuid() + "、货主名称:" + locOwner.getOwner(),
                "货主编号:" + locSupp.getOwnerUuid() + "、货主名称:" + locSupp.getOwner(),
                response, bool);
    }