自动化立体仓库 - WMS系统
#
lty
3 天以前 878014fe71ae76d4bfbc885f1daab8921c60f6ac
#
3个文件已修改
1251 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 1111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -50,6 +50,31 @@
    @Value("${erp.address.impurreceivebilldetl}")
    //进仓通知单
    private String imPurreceiveBillDetlAddress;
    @Value("${erp.address.imSaloutbill}")
    //销售出库单
    private String imSaloutbill;
    @Value("${erp.address.scpSalreturn}")
    //销售退货单
    private String scpSalreturn;
    @Value("${erp.address.scpSalreturnDetl}")
    //销售退货单
    private String scpSalreturnDetl;
    @Value("${erp.address.imMdcMftproorder}")
    //生产领料单
    private String imMdcMftproorder;
    @Value("${erp.address.imMdcMftreturnorder}")
    //生产退料单
    private String imMdcMftreturnorder;
    @Value("${erp.address.imMdcMftfeedorder}")
    //生产补料单
    private String imMdcMftfeedorder;
    @Value("${erp.address.imProductinbill}")
    //生产进仓单
    private String imProductinbill;
    @Value("${erp.address.qcppManuinspec}")
    //产品检验单
    private String qcppManuinspec;
    @Autowired
    private ApiLogService apiLogService;
@@ -131,7 +156,6 @@
                    path = orgAddress;
                    break;
                case "PUR_RECEIVEBIll": //已审核收料单查询
//                    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);
@@ -142,16 +166,84 @@
                    jsonObject.put("supplier_number", null);
                    path = imPurreceiveBillAddress;
                    break;
                case "SAL_OUTSTOCK"://销售出库单查询
                    path = imSaloutbill;
                    jsonObject.put("modify_starttime",  latestUpdateTime);//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("modify_endtime",  sdf1.format(now));//业务起始日期
                    break;
                case "SAL_RETURNSTOCK"://销售退货
                    path = scpSalreturn;
                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");//业务起始日期
                    jsonObject.put("billstatus",  "B");//单据状态
                    jsonObject.put("end_starttime",  sdf1.format(now));//业务起始日期
                    break;
                case "PRD_PickMtrl"://生产领料单
                    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("end_createtime", sdf1.format(now));
//                    jsonObject.put("end_auditdate", sdf1.format(now));
//                    jsonObject.put("end_modifytime", sdf1.format(now));
                    jsonObject.put("billno", null);
                    jsonObject.put("billstatus", Arrays.asList("B","C"));//数据状态 [A:暂存, B:已提交, C:已审核]
                    jsonObject.put("org_number", null);
                    jsonObject.put("id", null);
                    break;
                case "PRD_ReturnMtrl"://生产退料单
                    path = imMdcMftreturnorder;
                    jsonObject.put("id", null);
                    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("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
//                    jsonObject.put("end_auditdate", sdf1.format(now));
                    break;
                case "PRD_FeedMtrl"://生产补料单
                    path = imMdcMftfeedorder;
                    jsonObject.put("id", null);
                    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("end_createtime", sdf1.format(now));
//                    jsonObject.put("start_modifytime",  "2025-11-25 00:00:00");
//                    jsonObject.put("end_modifytime", sdf1.format(now));
//                    jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
//                    jsonObject.put("end_auditdate", sdf1.format(now));
                    break;
                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_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_end", sdf1.format(now));
                    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<>();
@@ -263,6 +355,7 @@
                        docTypeService.updateById(docType);
                    }
                }
                //供应商
                else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){//供应商同步
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
@@ -329,6 +422,7 @@
                        }
                    }
                }
                //收料单
                else if(kingDeeUtilType.formId.equals("PUR_RECEIVEBIll")){
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
@@ -357,7 +451,6 @@
                            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);
@@ -377,7 +470,7 @@
                                // ====== 处理明细 ======
                                for (int i = 0; i < rows.size(); i++) {
                                    JSONObject jsonObjectNew2 = rows.getJSONObject(i);
                                    Order order = orderService.selectByNo( billNo);//检索单据
                                    Order order = orderService.selectByNo(billNo);//检索单据
                                    LocOwner locOwner = null;
                                    if (ownerUuid != null) {
                                        locOwner = locOwnerService.selectByUuid(ownerUuid);
@@ -518,6 +611,1014 @@
                        docTypeService.updateById(docType);
                    }
                }
                //销售出库
                else if(kingDeeUtilType.formId.equals("SAL_OUTSTOCK")){
                    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 createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        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);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            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 detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                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);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
                //销售退货
                else if(kingDeeUtilType.formId.equals("SAL_RETURNSTOCK")){
                    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 createTime =  sdf1.parse(jsonObjectNew.get("createtime").toString());
                            String billNo = jsonObjectNew.get("billno").toString();//单据编号
                            String orderId = jsonObjectNew.get("id").toString();
                            JSONObject detailParam = new JSONObject();
                            JSONObject dataObj = new JSONObject();
                            dataObj.put("billno", billNo);
                            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(scpSalreturnDetl)
                                        .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 (Cools.isEmpty(order)) {
                                        // 单据主档
                                        order = new Order(
                                                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                                billNo,    // 订单编号
                                                createTime.toString(),    // 单据日期
                                                docType.getDocId(),    // 单据类型
                                                null,    // 项目编号
                                                orderId,    //收料单id
                                                null,    // 调拨项目编号
                                                null,    // 初始票据号
                                                null,    // 票据号
                                                null,    // 项目id
                                                null,    // 货主
                                                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);
                                        }
                                    }
//                                    String suppCode = jsonObjectNew2.getString("supplier_number"); //供应商
                                    String suppCode = null; //供应商
                                    JSONArray billEntryArray = jsonObjectNew2.getJSONArray("materialentry");
                                    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 totalNumItems = 0.0;
                                        Double Totalvolume = 0.0;//总体积
                                        String warehouse = null;//仓库编码
                                        String pOrderNo = "1";//采购单号
                                        String s3 = "1";//客户sku(客户编号)
                                        String s2 = "1"; //条码UPC
                                        String memo ="1"; //备注(英文描述)
                                        String s1 = "1"; //客户PO
//                                        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 detlId = entry.getString("id"); //明细id
                                        Long seq = entry.getLong("seq"); //分录行号
//                                        String
                                        if(anfme == 0){
                                            callApiLogSaveOrder(order,kingDeeUtilType, "单据数量异常"+matnr, false);
                                            continue;
                                        }
                                        //物料编码
                                        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.setThreeCode(detlId);//ERP明细id
                                        orderDetl.setLineNumber(seq);//分录行号
                                        orderDetl.setAnfme(anfme);//总箱数
                                        orderDetl.setErpAnfme(anfme);//erp数据
                                        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(null); //货主名称
                                        orderDetl.setBoxType2(null);//货主编号(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);
                                    }
                                }
                                // 是否还有下一页
                                boolean lastPage = detData.getBoolean("lastPage");
                                if (lastPage) {
                                    hasNext = false;
                                } else {
                                    // 下一页
                                    int currPage = detData.getIntValue("pageNo");
                                    detailParam.put("pageNo", currPage + 1);
                                }
                            }
                        }
                        docTypeService.updateById(docType);
                    }
                }
                //产品检验单
                else if(kingDeeUtilType.formId.equals("STK_InspectionForm")){
                    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 createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        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);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            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 detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                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);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
                //生产领料,生产补料
                else if(kingDeeUtilType.formId.equals("PRD_PickMtrl") || kingDeeUtilType.formId.equals("PRD_FeedMtrl")){
                    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 createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        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);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            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 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 detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "物料档案不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                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);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
                //生产退料单PRD_ReturnMtrl
                else if(kingDeeUtilType.formId.equals("PRD_ReturnMtrl") ) {
                    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 createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = jsonObjectNew.getString("org_name");
                            String ownerUuid = jsonObjectNew.getString("org_number");
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        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);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            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 detlId = entry.getString("id"); //明细id
                                Long seq = entry.getLong("seq"); //分录行号
//                                String suppCode = entry.getString("supplier_number");
                                String suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                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);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
                //生产汇报单
                else if(kingDeeUtilType.formId.equals("PRD_MORPT")) {
                    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 createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
                            String billNo = jsonObjectNew.getString("billno");
                            String owner = "和得科技";
                            String ownerUuid = "BU-00001";
                            String orderId = jsonObjectNew.getString("id");
                            // ========= 货主校验 =========
                            LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
//                            if (locOwner == null) {
//                                callApiLogSaveOwner(null, kingDeeUtilType,
//                                        "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
//                                continue;
//                            }
                            // ========= 创建订单主表 =========
                            Order order = orderService.selectByNo(billNo);
                            if (Cools.isEmpty(order)) {
                                order = new Order(
                                        // 单据主档
                                        String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                        billNo,    // 订单编号
                                        createTime.toString(),    // 单据日期
                                        docType.getDocId(),    // 单据类型
                                        null,    // 项目编号
                                        orderId,    //收料单id
                                        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);
                                }
                            }
                            // ========= 直接从主接口取明细 billentry =========
                            JSONArray billEntryArray = jsonObjectNew.getJSONArray("sumentry");
                            if (billEntryArray == null || billEntryArray.isEmpty()) {
                                continue;
                            }
                            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 totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
                                Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
                                String warehouse = entry.getString("warehouse_number");//仓库编码
                                String pOrderNo = entry.getString("eap7_textfield");//采购单号
                                String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
                                String s2 = entry.getString("eap7_textfield1"); //条码UPC
                                String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
                                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 suppCode = null;
                                if (anfme == null || anfme == 0) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "单据数量异常:" + matnr, false);
                                    continue;
                                }
                                // ========= 物料校验 =========
                                Mat mat = matService.selectByMatnr(matnr);
                                if (Cools.isEmpty(mat)) {
                                    callApiLogSaveOrder(order, kingDeeUtilType,
                                            "商品不存在:" + matnr, false);
                                    continue;
                                }
                                // ========= 明细去重 =========
                                List<OrderDetl> orderDetls =
                                        orderDetlService.selectByOrderId(order.getId());
                                boolean exists = orderDetls.stream()
                                        .anyMatch(o -> o.getMatnr().equals(matnr));
                                if (exists) continue;
//                                // ========= 供应商 =========
                                String supp = null;
//                                LocSupp locSupp = locSuppService.selectByUuid(suppCode);
//                                if (locSupp != null) {
//                                    supp = locSupp.getOwner();
//                                }
                                // ========= 保存明细 =========
                                OrderDetl orderDetl = new OrderDetl();
                                orderDetl.sync(mat);
                                orderDetl.setThreeCode(detlId);
                                orderDetl.setLineNumber(seq);
                                orderDetl.setAnfme(anfme);
                                orderDetl.setErpAnfme(anfme);
                                orderDetl.setOrderId(order.getId());
                                orderDetl.setOrderNo(order.getOrderNo());
                                orderDetl.setSupp(supp);
                                orderDetl.setSuppCode(suppCode);
                                orderDetl.setSku(matnr);
                                orderDetl.setStandby1(s1);
                                orderDetl.setStandby2(s2);
                                orderDetl.setStandby3(s3);
                                orderDetl.setBoxType1(owner);
                                orderDetl.setBoxType2(ownerUuid);
                                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);
                            }
                        }
                        docType.setUpdateTime(now);
                        docTypeService.updateById(docType);
                    }
                }
            } catch (Exception e) {
                log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -541,7 +1642,7 @@
    public void callApiLogSaveSupp(LocSupp locSupp, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
        apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
                "货主编号:" + locSupp.getOwnerUuid() + "、货主名称:" + locSupp.getOwner(),
                "供应商编号:" + locSupp.getOwnerUuid() + "、供应商名称:" + locSupp.getOwner(),
                response, bool);
    }
    public void callApiLogSaveOwner(LocOwner locOwner, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java
@@ -36,6 +36,10 @@
    @Value("${erp.address.imPurinbillAdd}")
    private String imPurinbillAdd;
    @Value("${erp.address.imOtheroutbill}")
    private String imOtheroutbill;
    @Value("${erp.address.imOtherinbill}")
    private String imOtherinbill;
    @Autowired
    private OrderService orderService;
@@ -82,7 +86,8 @@
    private JSONObject buildRequestParams(Order order, KingDeeUtilType kingDeeUtilType, SimpleDateFormat sdf1, SimpleDateFormat sdf2) {
        List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",order.getOrderNo()));
        if(kingDeeUtilType == null){
        if (kingDeeUtilType == null || kingDeeUtilType.formId == null) {
            log.warn("kingDeeUtilType 为空,已跳过本次同步!");
            return null;
        }
        switch (kingDeeUtilType.formId) {
@@ -92,8 +97,9 @@
                JSONArray billentryArray = new JSONArray();  // 用于存储 billentry 对象
                String suppCode = null;  // 供应商
                String boxType2 = null;  // 货主/货源
                // 遍历订单详情
                Date now = new Date();
                for (OrderDetl orderDetl : orderDetlList) {
                    suppCode = orderDetl.getSuppCode();
                    boxType2 = orderDetl.getBoxType2();
@@ -101,8 +107,7 @@
                        continue;
                    }
//                    JSONArray idArr = new JSONArray();
//                    idArr.add(0L);   // ✅ 注意必须是 Long 类型的 0L
//                    Double reportNum = orderDetl.getQty() - orderDetl.getWorkQty();//上报数量减去已上报数量
//                    idArr.add(0L);
                    // 创建 billentry_lk 对象
                    JSONObject billentryLk = new JSONObject()
                            .fluentPut("id", 0L)
@@ -124,11 +129,9 @@
                            .fluentPut("qty", orderDetl.getQty())  // 数量
                            .fluentPut("material_number", orderDetl.getMatnr())  // 物料编号
                            .fluentPut("billentry_lk", billentryLkArray);
                    billentryArray.add(billentry);
//                    orderDetl.setWorkQty(orderDetl.getQty());
//                    orderDetlService.updateById(orderDetl);//将上报数覆盖到历史上
                }
                Date now = new Date();
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
@@ -146,9 +149,73 @@
                                        .fluentPut("supplier_number", suppCode)  // 供应商编号
                                        .fluentPut("billentry", billentryArray)  // 将 billentry 数组添加到请求参数
                        )));
            case "STK_MISCELLANEOUS": // 其他入库单
                path = imOtherinbill;
                billentryArray = new JSONArray();
                for (OrderDetl orderDetl : orderDetlList) {
                    if (orderDetl.getQty() == 0) {
                        continue;
                    }
                    JSONObject billentry = new JSONObject()
                            .fluentPut("id", 0L)
                            .fluentPut("material_number", orderDetl.getMatnr())       // 物料编码
                            .fluentPut("qty", orderDetl.getQty())                    // 数量
                            .fluentPut("warehouse_number", "CK001")     // 仓库
                            .fluentPut("invstatus_number", "110")
                            .fluentPut("invtype_number", "110")
                            .fluentPut("outinvstatus_number", "110")
                            .fluentPut("outinvtype_number", "110")
                            .fluentPut("linetype_number", "010");
                    billentryArray.add(billentry);
                }
                Date nowMis = new Date();
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
//                                        .fluentPut("id", 0L)
                                        .fluentPut("billno", order.getOrderNo())
//                                        .fluentPut("bookdate", sdf1.format(nowMis))
                                        .fluentPut("biztime", sdf1.format(nowMis))
                                        .fluentPut("biztype_number", "354")
                                        .fluentPut("billtype_number", "im_OtherInBill_STD_BT_S")
                                        .fluentPut("org_number", "BU-00001")
                                        .fluentPut("invscheme_number", "354")
                                        .fluentPut("billentry", billentryArray)
                        )));
            case "STK_MisDelivery": // 其他出库单
                path = imOtheroutbill;
                billentryArray = new JSONArray();
                Date nowOut = new Date();
                for (OrderDetl orderDetl : orderDetlList) {
                    if (orderDetl.getQty() == 0) {
                        continue;
                    }
                    JSONObject billentry = new JSONObject()
                            .fluentPut("id", 0L)
                            .fluentPut("material_number", orderDetl.getMatnr())       // 物料编码
                            .fluentPut("qty", orderDetl.getQty())                    // 数量
                            .fluentPut("warehouse_number", "CK001")     // 仓库
                            .fluentPut("invstatus_number", "110")
                            .fluentPut("invtype_number", "110")
                            .fluentPut("outinvstatus_number", "110")
                            .fluentPut("outinvtype_number", "110")
                            .fluentPut("linetype_number", "010");
                    billentryArray.add(billentry);
                }
                return new JSONObject()
                        .fluentPut("data", new JSONArray(Arrays.asList(
                                new JSONObject()
//                                        .fluentPut("id", 0L)
                                        .fluentPut("billno", order.getOrderNo())
//                                        .fluentPut("bookdate", sdf1.format(nowMis))
                                        .fluentPut("biztime", sdf1.format(nowOut))
                                        .fluentPut("biztype_number", "354")
                                        .fluentPut("billtype_number", "im_OtherInBill_STD_BT_S")
                                        .fluentPut("org_number", "BU-00001")
                                        .fluentPut("invscheme_number", "354")
                                        .fluentPut("billentry", billentryArray)
                        )));
            default:
                // 默认处理:可以抛出异常或返回空对象
                throw new IllegalArgumentException("Unsupported formId: " + kingDeeUtilType.formId);
        }
    }
@@ -157,11 +224,9 @@
    private ReturnT<String> sendRequestAndProcessResponse(Order order, ErpSecret erpSecret, JSONObject add) {
        String response = "";
        boolean success = false;
        try {
            // 设置请求头
            HashMap<String, Object> headers = buildRequestHeaders(erpSecret);
            // 发送请求,将 JSONObject 转换为 String
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
@@ -170,10 +235,8 @@
                    .setJson(add.toJSONString()) // 将 JSONObject 转换为 String
                    .build()
                    .doPost();
            // 解析响应
            JSONObject jsonResponse = JSON.parseObject(response);
            // 判断是否因为 token 过期 (errorCode = 401)
            if ("401".equals(jsonResponse.getString("errorCode"))) {
                log.error("认证失败,尝试重新获取 Token");
@@ -190,18 +253,15 @@
                        .build()
                        .doPost();
            }
            // 解析返回的响应
            JSONObject data = jsonResponse.getJSONObject("data");
            String errorCode = jsonResponse.getString("errorCode");
            boolean status = jsonResponse.getBooleanValue("status");
            // 检查接口调用的整体状态
            if ("0".equals(errorCode) && status) {
                // 获取成功与失败的数量
                int successCount = data.getInteger("successCount");
                int failCount = data.getInteger("failCount");
                if (failCount == 0) {
                    success = true;
                    log.info("接口调用成功,成功的操作数量: {}", successCount);
@@ -211,10 +271,12 @@
                        JSONObject resultItem = resultArray.getJSONObject(i);
                        String billNo = resultItem.getString("number");  // 获取返回的单据号
                        String billId = resultItem.getString("id");      // 获取返回的ID
                        order.setNumber(billId);
                        orderService.updateById(order);
                        log.info("订单号 {} 与返回的单据号匹配,设置订单 ID 为 {}", order.getOrderNo(), billId);
                        // 判断返回的单据号与订单号是否一致
                        if (billNo != null && billNo.equals(order.getOrderNo())) {
                            // 如果一致,设置订单的 number
                            order.setNumber(billId);
                            log.info("订单号 {} 与返回的单据号匹配,设置订单 ID 为 {}", order.getOrderNo(), billId);
                        }
                    }
                } else {
                    log.error("接口调用失败,失败的操作数量: {}", failCount);
@@ -242,7 +304,6 @@
            // 保存接口日志
            saveApiLog(add, response, success);
        }
        return success ? SUCCESS : FAIL;
    }
@@ -256,7 +317,7 @@
    private void saveApiLog(JSONObject add, String response, boolean success) {
        try {
            apiLogService.save(
                    "进仓通知单上报新增",
                    "入库上报新增",
                    URL + path,
                    null,
                    "127.0.0.1",
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
@@ -1,27 +1,32 @@
package com.zy.erp.kingdee.enums;
public enum KingDeeUtilType {
    BD_MATERIAL(0, "物料档案","BD_MATERIAL","","","",1),
    BD_RRGANIZATION(2, "供应商","BD_RRGANIZATION","","","",1),
    PUR_RECEIVEBIll(3, "收料单","PUR_RECEIVEBIll","","","",1),
//    INR(1, "进仓通知库单上报","INR","FRealQty","","",1),
//    PUR_MRB(2, "采购退料单","PUR_MRB","FRMREALQTY","","",1),
//    PRD_PickMtrl(3, "生产领料单","PRD_PickMtrl","FActualQty","","",1),
//    PRD_ReturnMtrl(4, "生产退料单","PRD_ReturnMtrl","FQty","","",1),
//    PRD_FeedMtrl(5, "生产补料单","PRD_FeedMtrl","FActualQty","","",1),
//    BD_MATERIAL(0, "物料档案","BD_MATERIAL","","","",1),
//    BD_RRGANIZATION(2, "供应商","BD_RRGANIZATION","","","",1),
//    PUR_RECEIVEBIll(3, "收料单","PUR_RECEIVEBIll","","","",1),
//    SAL_OUTSTOCK(7, "销售出库单","SAL_OUTSTOCK","FRealQty","","",0),
//    STK_MisDelivery(19, "其他出库单","STK_MisDelivery","FQty","","",0),
//    STK_MISCELLANEOUS(18, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    SAL_RETURNSTOCK(9, "销售退货单","SAL_RETURNSTOCK","FRealQty","","",1),
//    PRD_PickMtrl(10, "生产领料单","PRD_PickMtrl","","","",0),
//    PRD_ReturnMtrl(12, "生产退料单","PRD_ReturnMtrl","FQty","","",1),
//    PRD_FeedMtrl(14, "生产补料单","PRD_FeedMtrl","FActualQty","","",0),
    PRD_MORPT(16, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    STK_InspectionForm(20, "产品检验单","STK_InspectionForm","","","",0),
    //    PUR_MRB(2, "采购退料单","PUR_MRB","FRMREALQTY","","",1),
//    STK_TransferDirect(6, "直接调拨单","STK_TransferDirect","","FQty","",1),
//    STK_StockCountGain(7, "盘盈单","STK_StockCountGain","FGainQty","","",1),
//    STK_StockCountLoss(8, "盘亏单","STK_StockCountLoss","FLossQty","","",1),
//    STK_MisDelivery(9, "其他出库单","STK_MisDelivery","FQty","","",1),
//    SP_PickMtrl(10, "简单生产领料单","SP_PickMtrl","FActualQty","","",1),
//    SP_ReturnMtrl(11, "简单生产退料单","SP_ReturnMtrl","FQty","","",1),
//    SAL_OUTSTOCK(12, "销售出库单","SAL_OUTSTOCK","FRealQty","","",1),
//    SAL_RETURNSTOCK(13, "销售退货单","SAL_RETURNSTOCK","FRealQty","","",1),
//    SAL_DELIVERYNOTICE(14, "发货通知单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0),
//    STK_MISCELLANEOUS(15, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    BD_Supplier(16, "供应商","BD_Supplier","","","",1),
//    PUR_ReceiveBill(17, "收料通知单","PUR_ReceiveBill","FPOQTY","采购入库单","STK_InStock",1),
//    PRD_MORPT(18, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    PRD_INSTOCK(19, "生产入库单","PRD_INSTOCK","","","",1),
//    SAL_RETURNNOTICE(20, "退货通知单","SAL_RETURNNOTICE","FBaseJunkedQty","销售退货单","SAL_RETURNSTOCK",1),
//    STK_OutStockApply(21, "出库申请单","STK_OutStockApply","FTotalSecQty","其他出库单","STK_MisDelivery",0),
@@ -43,7 +48,15 @@
        this.correspondingFormId = correspondingFormId;
        this.pakIn = pakIn;   //1入库  0出库
    }
    public static KingDeeUtilType getByFormId(String formId) {
        if (formId == null) return null;
        for (KingDeeUtilType type : values()) {
            if (formId.equals(type.formId)) {
                return type;
            }
        }
        return null;
    }
    public static KingDeeUtilType get(Short id) {
        if (null == id) {
            return null;