| | |
| | | |
| | | @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; |
| | |
| | | |
| | | 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) { |
| | |
| | | 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(); |
| | |
| | | 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) |
| | |
| | | .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() |
| | |
| | | .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); |
| | | } |
| | | } |
| | |
| | | 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) |
| | |
| | | .setJson(add.toJSONString()) // 将 JSONObject 转换为 String |
| | | .build() |
| | | .doPost(); |
| | | |
| | | // 解析响应 |
| | | JSONObject jsonResponse = JSON.parseObject(response); |
| | | |
| | | // 判断是否因为 token 过期 (errorCode = 401) |
| | | if ("401".equals(jsonResponse.getString("errorCode"))) { |
| | | log.error("认证失败,尝试重新获取 Token"); |
| | |
| | | .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); |
| | |
| | | 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); |
| | |
| | | // 保存接口日志 |
| | | saveApiLog(add, response, success); |
| | | } |
| | | |
| | | return success ? SUCCESS : FAIL; |
| | | } |
| | | |
| | |
| | | private void saveApiLog(JSONObject add, String response, boolean success) { |
| | | try { |
| | | apiLogService.save( |
| | | "进仓通知单上报新增", |
| | | "入库上报新增", |
| | | URL + path, |
| | | null, |
| | | "127.0.0.1", |