自动化立体仓库 - WMS系统
#
lty
7 天以前 b302f1da85a18ae264b638398224b0ccf492164a
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -71,7 +71,9 @@
    @Value("${erp.address.qcppManuinspec}")
    //产品检验单
    private String qcppManuinspec;
    @Value("${erp.address.omOutsourcereceiptQuery}")
    //委外入库单
    private String omOutsourcereceiptQuery;
    @Autowired
    private ApiLogService apiLogService;
@@ -153,16 +155,21 @@
                    path = orgAddress;
                    break;
                case "PUR_RECEIVEBIll": //已审核收料单查询
                    jsonObject.put("start_biztime",  "2025-01-01 00:00:00");//业务起始日期
                    jsonObject.put("start_biztime",  latestUpdateTime);//业务起始日期
                    jsonObject.put("end_biztime", sdf1.format(now));//业务结束日期
                    jsonObject.put("billno", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
                    jsonObject.put("start_auditdate", latestUpdateTime);
                    jsonObject.put("end_auditdate", sdf1.format(now));
                    jsonObject.put("org_number", null);
                    jsonObject.put("supplier_number", null);
                    path = imPurreceiveBillAddress;
                    break;
                case "OUI_RECEIVEBIll"://委外入库单
                    jsonObject.put("billstatus", Arrays.asList("A"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("auditdate_start", latestUpdateTime);
                    jsonObject.put("auditdate_end", sdf1.format(now));
                    path = omOutsourcereceiptQuery;
                case "SAL_OUTSTOCK"://销售出库单查询
                    path = imSaloutbill;
                    jsonObject.put("modify_starttime",  latestUpdateTime);//业务起始日期
@@ -171,7 +178,7 @@
                    break;
                case "SAL_RETURNSTOCK"://销售退货
                    path = scpSalreturn;
                    jsonObject.put("modify_starttime",  "2025-11-25 00:00:00");//业务起始日期
                    jsonObject.put("modify_starttime",  latestUpdateTime);//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("modify_endtime",  sdf1.format(now));//业务起始日期
                    jsonObject.put("billtype_number",  "im_SalOutBill_STD_BT_S_R");//单据类型
@@ -180,7 +187,7 @@
                    path = imMdcMftproorder;
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("start_createtime", latestUpdateTime);
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("end_auditdate", sdf1.format(now));
//                    jsonObject.put("end_modifytime", sdf1.format(now));
@@ -195,7 +202,7 @@
                    jsonObject.put("billno", null);
                    jsonObject.put("org_number", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("start_createtime", latestUpdateTime);
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
@@ -208,7 +215,7 @@
                    jsonObject.put("billno", null);
                    jsonObject.put("org_number", null);
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("start_createtime", "2025-11-25 00:00:00");
                    jsonObject.put("start_createtime", latestUpdateTime);
                    jsonObject.put("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
@@ -218,13 +225,13 @@
                case "PRD_MORPT"://生产进仓单
                    path = imProductinbill;
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("modifytime_start", "2025-11-25 00:00:00");
                    jsonObject.put("modifytime_start",latestUpdateTime);
                    jsonObject.put("modifytime_end", sdf1.format(now));
                    break;
                case "STK_InspectionForm"://产品检验
                    path = qcppManuinspec;
                    jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("auditdate_start", "2025-11-25 00:00:00");
                    jsonObject.put("auditdate_start", latestUpdateTime);
                    jsonObject.put("auditdate_end", sdf1.format(now));
                    break;
            }
@@ -263,7 +270,7 @@
                JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                if(data.size()<=0)  continue;
                //商品档案同步
                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                if(kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                    Tag tag = tagService.selectByName("全部", 1);
                    // 处理分页:根据返回的totalCount和pageSize计算页数
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
@@ -290,11 +297,12 @@
                            String matnr = jsonObjectNew.get("number").toString();
                            String name = jsonObjectNew.get("name").toString();
                            String createTime = jsonObjectNew.get("createtime").toString();
                            Double grossweight = jsonObjectNew.get("grossweight") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield6").toString()).doubleValue() : 0.0;
                            Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield9").toString()).doubleValue() : 0.0;
                            Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield8").toString()).doubleValue() : 0.0;
                            Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield7").toString()).doubleValue() : 0.0;
                            Double netweight = jsonObjectNew.get("netweight") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield").toString()).doubleValue() : 0.0;
                            Double height = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield9");
                            Double width = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield8");
                            Double length = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield7");
                            Double grossweight= getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield6");
                            Double netweight = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield");
                            Double unit = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield2");
                            // 生成商品档案
                            Double height1 = height*10;
                            Double width1 = width*10;
@@ -307,6 +315,7 @@
                                mat.setTagId(tag.getId());
                                mat.setWeight(grossweight);//净重
                                mat.setUnits(netweight);//毛重
                                mat.setSafeQty(unit);//
                                mat.setManLength(length1);
                                mat.setHeight(height1);
                                mat.setWidth(width1);
@@ -326,6 +335,8 @@
                                    // 更新字段
                                    if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
                                    if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
                                    if (mat.getUnits().compareTo(netweight) != 0) mat.setUnits(netweight);
                                    if (mat.getSafeQty().compareTo(unit) != 0) mat.setSafeQty(unit);
                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length1);
                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height1);
                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width1);
@@ -419,6 +430,8 @@
                            }
                        }
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //收料单
                else if(kingDeeUtilType.formId.equals("PUR_RECEIVEBIll")){
@@ -552,6 +565,12 @@
                                            callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
                                            continue;
                                        }
                                        if (mat.getSafeQty() == null || mat.getSafeQty() == 0) {
                                            callApiLogSaveOrder(order, kingDeeUtilType,
                                                    "档案箱数量异常:" + matnr, false);
                                            continue;
                                        }
                                        Double erpAnfme = anfme*mat.getSafeQty();
                                        Order order1 = orderService.selectByNo( billNo);
                                        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId());
                                        boolean sign = false;
@@ -573,7 +592,7 @@
                                        orderDetl.setThreeCode(detlId);//ERP明细id
                                        orderDetl.setLineNumber(seq);//分录行号
                                        orderDetl.setAnfme(anfme);//总箱数
                                        orderDetl.setErpAnfme(anfme);//erp数据
                                        orderDetl.setErpAnfme(erpAnfme);//erp数据
                                        orderDetl.setOrderId(order.getId());
                                        orderDetl.setOrderNo(order.getOrderNo());//表头单据
                                        orderDetl.setSupp(supp);//供应商名称(货源)
@@ -587,7 +606,7 @@
                                        orderDetl.setBoxType3(pOrderNo);//采购单号
                                        orderDetl.setMemo(memo);//英文备注
                                        orderDetl.setVolume(Totalvolume);//总体积
                                        orderDetl.setSafeQty(totalNumItems);//总件数
                                        orderDetl.setPrice(totalNumItems);//总件数
                                        orderDetl.setManu(warehouse);//仓库编码
                                        orderDetl.setCreateBy(9527L);
                                        orderDetl.setCreateTime(new Date());
@@ -609,8 +628,9 @@
                                }
                            }
                        }
                        docTypeService.updateById(docType);
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //销售出库
                else if(kingDeeUtilType.formId.equals("SAL_OUTSTOCK")){
@@ -728,6 +748,12 @@
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                if (mat.getSafeQty() == null || mat.getSafeQty() == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "档案箱数量异常:" + matnr, false);
                                    continue;
                                }
                                Double erpAnfme = anfme*mat.getSafeQty();
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
@@ -747,7 +773,7 @@
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setErpAnfme(erpAnfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
@@ -869,9 +895,7 @@
                            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 anfme = 1.0;//箱数
                                Double anfme = entry.getDouble("eap7_decimalfield");//箱数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
@@ -896,6 +920,12 @@
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                if (mat.getSafeQty() == null || mat.getSafeQty() == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "档案箱数量异常:" + matnr, false);
                                    continue;
                                }
                                Double erpAnfme = anfme*mat.getSafeQty();
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
@@ -915,7 +945,7 @@
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setErpAnfme(erpAnfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
@@ -941,9 +971,9 @@
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //产品检验单
                else if(kingDeeUtilType.formId.equals("STK_InspectionForm")){
@@ -1106,9 +1136,9 @@
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //生产领料,生产补料
@@ -1191,7 +1221,8 @@
                            for (int k = 0; k < billEntryArray.size(); k++) {
                                JSONObject entry = billEntryArray.getJSONObject(k);
                                String matnr = entry.getString("material_number"); //物料编码,内部SKU
                                Double anfme = entry.getDouble("qty");//箱数
                                Double anfme = entry.getDouble("qty");//个数
                                Double anfmeBox = 0.0;//箱数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
@@ -1203,6 +1234,10 @@
                                String detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                if(anfme == 0){
                                    callApiLogSaveOrder(order,kingDeeUtilType, "单据数量异常"+matnr, false);
                                    continue;
                                }
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
@@ -1216,9 +1251,16 @@
                                            "物料档案不存在:" + matnr, false);
                                    continue;
                                }
                                if (mat.getSafeQty() == null || mat.getSafeQty() == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "档案箱数量异常:" + matnr, false);
                                    continue;
                                }
                                anfmeBox = Math.floor(anfme / mat.getSafeQty());
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
@@ -1234,7 +1276,7 @@
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setAnfme(anfmeBox);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
@@ -1259,12 +1301,13 @@
                                orderDetl.setQty(0.0D);
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //生产退料单PRD_ReturnMtrl
                else if(kingDeeUtilType.formId.equals("PRD_ReturnMtrl") ) {
@@ -1357,9 +1400,8 @@
                            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 anfme = 1.0;//箱数
                                Double anfme = entry.getDouble("qty");//个数
                                Double anfmeBox = 0.0;
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
@@ -1383,6 +1425,12 @@
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                if (mat.getSafeQty() == null || mat.getSafeQty() == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "档案箱数量异常:" + matnr, false);
                                    continue;
                                }
                                anfmeBox = Math.floor(anfme / mat.getSafeQty());
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
@@ -1397,11 +1445,12 @@
                                    supp = locSupp.getOwner();
                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setAnfme(anfmeBox);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
@@ -1428,13 +1477,12 @@
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
                //生产汇报单
                else if(kingDeeUtilType.formId.equals("PRD_MORPT")) {
                else if(kingDeeUtilType.formId.equals("PRD_MORPT") || kingDeeUtilType.formId.equals("OUI_RECEIVEBIll")) {
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
@@ -1461,6 +1509,7 @@
                            String owner = "和得科技";
                            String ownerUuid = "BU-00001";
                            String orderId = jsonObjectNew.getString("id");
                            String manuBill = jsonObjectNew.getString("manufacturenun");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
@@ -1481,7 +1530,7 @@
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        null,    // 调拨项目编号
                                        null,    // 初始票据号
                                        manuBill,    // 初始票据号
                                        null,    // 票据号
                                        null,    // 项目id
                                        owner,    // 货主
@@ -1524,7 +1573,8 @@
                            for (int k = 0; k < billEntryArray.size(); k++) {
                                JSONObject entry = billEntryArray.getJSONObject(k);
                                String matnr = entry.getString("material_number"); //物料编码,内部SKU
                                Double anfme = entry.getDouble("completqty");//箱数
                                Double anfmeBox = 0.0;//箱数
                                Double anfme = entry.getDouble("completqty");//个数
                                Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
@@ -1535,7 +1585,17 @@
                                String s1 = entry.getString("eap7_textfield7"); //客户PO
                                String detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String manubill = entry.getString("manufacturenun");
                                String manubillid = entry.getString("orderid_id");
                                String manuentryid = null;
                                String manuentry = null;
                                if(kingDeeUtilType.formId.equals("PRD_MORPT")){
                                    manuentryid = entry.getString("mftentryid");
                                }else{
                                    manuentryid = entry.getString("osentryid");
                                    manuentry = entry.getString("manufacturerow");
                                }
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
@@ -1549,6 +1609,7 @@
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                anfmeBox = Math.floor(anfme / mat.getSafeQty());
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
@@ -1565,10 +1626,14 @@
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setModel(manubillid);//orderid_id
                                orderDetl.setBrand(manuentryid);//manuentryid
                                orderDetl.setSpecs(manuentry);//manufacturerow
                                orderDetl.setColor(manubill);//manufacturenun
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setAnfme(anfmeBox);
                                orderDetl.setErpAnfme(anfme);//汇报单个数
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
@@ -1594,10 +1659,9 @@
                                orderDetlService.insert(orderDetl);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                    docType.setUpdateTime(now);
                    docTypeService.updateById(docType);
                }
@@ -1607,6 +1671,176 @@
                return FAIL.setMsg(e.getMessage());
            } finally {
            }
        }
        return SUCCESS;
    }
    public synchronized ReturnT<String> syncMaterialData(){
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
        //读取token
        ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
        for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
            if (!kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                continue;
            }
            DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
            if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1));
            }
            //条件和需要获得的结果拼接
            JSONObject jsonObject = new JSONObject();
            String path = null;
            Date now = new Date();
            String latestUpdateTime = sdf1.format(docType.getUpdateTime());
            switch (kingDeeUtilType.formId) {
                case "BD_MATERIAL": //物料同步
                    jsonObject.put("id", null);//id
                    jsonObject.put("number", null);//编码
                    jsonObject.put("createorg_number", null);//创建组织
                    jsonObject.put("start_createtime", "2025-01-01 00:00:00");//创建起始
                    jsonObject.put("end_createtime", sdf1.format(now));//创建截止
                    jsonObject.put("start_modifytime", latestUpdateTime);//更新起始
                    jsonObject.put("end_modifytime", sdf1.format(now));//更新截止
                    jsonObject.put("start_approvedate", "2025-01-01");//审核起始
                    jsonObject.put("end_approvedate", sdf2.format(now));//审核截止
                    jsonObject.put("status", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    path = matAddress;
                    break;
            }
            if (path == null) {
                continue;
            }
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("data", jsonObject);
            jsonObject1.put("pageSize", 20);
            jsonObject1.put("pageNo", 1);
            String add = jsonObject1.toJSONString();
            //上报
            String response = "";
            boolean success = false;
            if (path == null) {
                continue;
            }
            try {
                //获取Cookie值
                HashMap<String, Object> headers = new HashMap<>();
                headers.put("accesstoken", erpSecret.getAccessToken());
                headers.put("x-acgw-identity", xAcfwIdentity);  // 自定义请求头
                response = new HttpHandler.Builder()
                        .setHeaders(headers)
                        .setUri(URL)
                        .setPath(path)
                        .setJson(add)
                        .build()
                        .doPost();
                JSONObject jsonResponse = JSON.parseObject(response);
                if (jsonResponse.getString("errorCode").equals("401")) {
                    log.error("检索失败错误信息:{}", jsonResponse.getString("message"));
                    loginAuthenticationHandler.start();
                    continue;
                }
                JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                if (data.size() <= 0) continue;
                //商品档案同步
                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                    Tag tag = tagService.selectByName("全部", 1);
                    // 处理分页:根据返回的totalCount和pageSize计算页数
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
                    for (int page = 1; page <= totalPages; page++) {
                        jsonObject1.put("pageNo", page);
                        add = jsonObject1.toJSONString();
                        // 重新发起请求以获取该页的数据
                        response = new HttpHandler.Builder()
                                .setHeaders(headers)
                                .setUri(URL)
                                .setPath(path)
                                .setJson(add)
                                .build()
                                .doPost();
                        jsonResponse = JSON.parseObject(response);
                        data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                        for (int j = 0; j < data.size(); j++) {
                            JSONObject jsonObjectNew = data.getJSONObject(j);
                            Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
                            String matnr = jsonObjectNew.get("number").toString();
                            String name = jsonObjectNew.get("name").toString();
                            String createTime = jsonObjectNew.get("createtime").toString();
                            Double height = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield9");
                            Double width = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield8");
                            Double length = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield7");
                            Double grossweight = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield6");
                            Double netweight = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield");
                            Double unit = getDecimalFieldAsDouble(jsonObjectNew, "eap7_decimalfield2");
                            // 生成商品档案
                            Double height1 = height * 10;
                            Double width1 = width * 10;
                            Double length1 = length * 10;
                            Mat mat = matService.selectByMatnr(matnr);
                            if (mat == null) {
                                mat = new Mat();
                                mat.setMatnr(matnr);
                                mat.setMaktx(name);
                                mat.setTagId(tag.getId());
                                mat.setWeight(grossweight);//净重
                                mat.setUnits(netweight);//毛重
                                mat.setSafeQty(unit);//
                                mat.setManLength(length1);
                                mat.setHeight(height1);
                                mat.setWidth(width1);
                                mat.setCreateTime(sdf1.parse(createTime));
                                mat.setUpdateTime(modifyTime);
                                mat.setStatus(1);
                                if (!matService.insert(mat)) {
                                    callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料出错!" + mat, false);
                                    log.info("同步新物料出错!参数:[{}]、[{}]", mat, jsonObjectNew);
                                } else {
                                    callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料成功!", true);
                                    success = true;
                                }
                            } else {
                                boolean isUpdated = false;
                                if (mat.getUpdateTime().compareTo(modifyTime) != 0) {
                                    // 更新字段
                                    if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
                                    if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
                                    if (mat.getUnits().compareTo(netweight) != 0) mat.setUnits(netweight);
                                    if (mat.getSafeQty().compareTo(unit) != 0) mat.setSafeQty(unit);
                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length1);
                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height1);
                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width1);
                                    if (mat.getCreateTime().compareTo(sdf1.parse(createTime)) != 0)
                                        mat.setCreateTime(sdf1.parse(createTime));
                                    mat.setUpdateTime(modifyTime);
                                    isUpdated = true;
                                }
                                // 执行更新操作
                                if (isUpdated) {
                                    if (!matService.updateById(mat)) {
                                        callApiLogSaveMat(mat, kingDeeUtilType, "更新物料出错!" + mat, false);
                                        log.info("更新物料[商品编号:{}], 更新失败!", mat.getMatnr());
                                    } else {
                                        callApiLogSaveMat(mat, kingDeeUtilType, "更新物料成功!", true);
                                        success = true;
                                        log.info("更新物料[商品编号:{}]", mat.getMatnr());
                                    }
                                }
                            }
                        }
                    }
                    if (success) {
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
            }catch (Exception e) {
                log.error("fail", e);
                return FAIL.setMsg(e.getMessage());
            }
        }
        return SUCCESS;
@@ -1638,5 +1872,19 @@
                "单据编号:" + order.getOrderNo() +  "、状态:" + order.getStatus$(),
                response, bool);
    }
    public Double getDecimalFieldAsDouble(JSONObject jsonObject, String fieldName) {
        Object field = jsonObject.get(fieldName);
        if (field instanceof BigDecimal) {
            return ((BigDecimal) field).doubleValue();
        } else if (field instanceof Integer) {
            return ((Integer) field).doubleValue();
        } else if (field instanceof Double) {
            return (Double) field;
        } else {
            return 0.0; // 默认值
        }
    }
}