From 891476e60dda5b78f8207876b379514a60efc7d3 Mon Sep 17 00:00:00 2001 From: itzhang <2019326567@qq.com> Date: Tue, 26 Aug 2025 15:19:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=A9=E8=B5=9B=E9=9B=86=E6=88=90=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E5=92=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../magicboot/Enum/OrderTradeTypeEnum.java | 33 ++ .../ssssssss/magicboot/Enum/SalesOrgEnum.java | 40 ++ .../ssssssss/magicboot/Enum/TaxRateEnum.java | 44 ++ .../controller/CustomerController.java | 23 +- .../magicboot/controller/DeptController.java | 8 +- .../controller/FHSQBackController.java | 264 +++++++++ .../magicboot/controller/FHSQController.java | 31 +- .../controller/SalesOrderBGController.java | 539 ++++++++++++++++++ .../controller/SalesOrderController.java | 88 +-- .../magicboot/controller/XXTHController.java | 8 +- 10 files changed, 1032 insertions(+), 46 deletions(-) create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/Enum/OrderTradeTypeEnum.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/Enum/SalesOrgEnum.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/Enum/TaxRateEnum.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQBackController.java create mode 100644 magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderBGController.java diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/OrderTradeTypeEnum.java b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/OrderTradeTypeEnum.java new file mode 100644 index 0000000..12602cc --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/OrderTradeTypeEnum.java @@ -0,0 +1,33 @@ +package org.ssssssss.magicboot.Enum; + +import java.util.HashMap; +import java.util.Map; + +public enum OrderTradeTypeEnum { + 普通销售("x1t62v6gw"), + 直运销售("Jr5i6W1HU"), + 实验服务销售("option1"), + 其他服务销售("QT001"); + + + private final String value; + private static final Map MAPPING = new HashMap<>(); + + static { + for (OrderTradeTypeEnum e : values()) { + MAPPING.put(e.name(), e.getValue()); + } + } + + OrderTradeTypeEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static String getValueByName(String name) { + return MAPPING.get(name); + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/SalesOrgEnum.java b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/SalesOrgEnum.java new file mode 100644 index 0000000..deaf661 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/SalesOrgEnum.java @@ -0,0 +1,40 @@ +package org.ssssssss.magicboot.Enum; + +import java.util.HashMap; +import java.util.Map; + +public enum SalesOrgEnum { + 浩赛集团("3gTA4C2xh"), + 山东思科捷生物技术有限公司("3gTA4C2xh"), + 山东浩赛科技有限公司("5b595vac9"), + 青岛浩赛科技股份有限公司("7T938S18Y"), + 上海浩赛科技有限公司("kk1vq3awb"), + 北京浩赛科技有限公司("98MwRKR0k"), + 青岛铠聚生物科技有限公司("eFqhIbW7c"), + 青岛逸鸿生物科技有限公司("rq68TgzoR"), + 青岛贝好生物科技有限公司("59p76ry3D"), + 江苏贝艾欧生物科技有限公司("bBXJf8W3Q"), + 山东谦益生物科技有限公司("QY"); + + + private final String value; + private static final Map MAPPING = new HashMap<>(); + + static { + for (SalesOrgEnum e : values()) { + MAPPING.put(e.name(), e.getValue()); + } + } + + SalesOrgEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static String getValueByName(String name) { + return MAPPING.get(name); + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/TaxRateEnum.java b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/TaxRateEnum.java new file mode 100644 index 0000000..5bbeb9c --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/Enum/TaxRateEnum.java @@ -0,0 +1,44 @@ +package org.ssssssss.magicboot.Enum; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +public enum TaxRateEnum { + RATE_13(new BigDecimal("13.0"), "VATR1"), + RATE_06(new BigDecimal("6.0"), "RT7"), + RATE_4_8(new BigDecimal("4.8"), "RT5"), + RATE_4(new BigDecimal("4.0"), "RT4"), + RATE_2(new BigDecimal("2.0"), "RT2"), + RATE_0_005(new BigDecimal("0.005"), "SDR5"), + RATE_0_025(new BigDecimal("0.025"), "SDR4"), + RATE_0_03(new BigDecimal("0.03"), "SDR3"), + RATE_0_05(new BigDecimal("0.05"), "SDR2"), + RATE_9(new BigDecimal("9.0"), "VATR2"), + RATE_5(new BigDecimal("5.0"), "VATR4"), + RATE_3(new BigDecimal("3.0"), "VATR5"), + RATE_1_5(new BigDecimal("1.5"), "VATR6"), + RATE_0(new BigDecimal("0.0"), "VATZR"), + RATE_1(new BigDecimal("1.0"), "VATR01"), + RATE_17(new BigDecimal("17.0"), "VATR17"), + RATE_16(new BigDecimal("16.0"), "VATR16"); + + + private final BigDecimal rate; + private final String code; + + TaxRateEnum(BigDecimal rate, String code) { + this.rate = rate.stripTrailingZeros(); + this.code = code; + } + + public static String getCode(BigDecimal rate) { + if (rate == null) return null; + for (TaxRateEnum r : values()) { + if (r.rate.compareTo(rate.stripTrailingZeros()) == 0) { + return r.code; + } + } + return null; + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/CustomerController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/CustomerController.java index 9e6d3be..7aa0829 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/CustomerController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/CustomerController.java @@ -18,6 +18,7 @@ import org.ssssssss.magicboot.utils.CrmRequestUtil; import org.ssssssss.magicboot.utils.YSSignUtils; import java.util.*; +import java.util.stream.Collectors; /** * 客户 @@ -518,8 +519,28 @@ public class CustomerController { nameMap.put("simplifiedName", customerData.getString("name")); contactMap.put("name", nameMap); //客户简称 + //客户简称生成 + String contactName = customerData.getString("name"); + + //课题组 + String researchName = customerData.getString("research_group_name__c__r") != null ? customerData.getString("research_group_name__c__r") : ""; + + //科室院所 + String institute = customerData.getString("institute_department__c__r") != null ? customerData.getString("institute_department__c__r") : ""; + + //客户单位 + String customer = customerData.getString("account_id__r") != null ? customerData.getString("account_id__r") : ""; + + //开始拼接客户单位 + List parts = Arrays.asList(contactName, researchName, institute, customer); + + // 过滤掉 null 或空字符串,然后用 "#" 拼接 + String shortName = parts.stream() + .filter(s -> s != null && !s.isEmpty()) + .collect(Collectors.joining("#")); + Map shortnameMap = new HashMap<>(); - shortnameMap.put("simplifiedName", customerData.getString("name")); + shortnameMap.put("simplifiedName", shortName); contactMap.put("shortname", shortnameMap); //上级客户 contactMap.put("parentCustomerCode", customerData.getString("parent_customer_code__c") != null ? customerData.getString("parent_customer_code__c") : ""); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DeptController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DeptController.java index 71dfa07..cbbf98a 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DeptController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DeptController.java @@ -53,7 +53,7 @@ public class DeptController { getDeptReq.put("pageIndex", 1); getDeptReq.put("externalOrg", 0); getDeptReq.put("sourceType", 1); - getDeptReq.put("codes", Arrays.asList("SKJ-BM12.03")); + //getDeptReq.put("codes", Arrays.asList("SKJ-BM12.03")); getDeptReq.put("dr", 0); getDeptReq.put("funcTypeCode", "orgunit"); @@ -177,7 +177,7 @@ public class DeptController { continue; } - parentId = getDeptSuperior.getJSONObject("data").getString("parent"); + parentId = getDeptSuperior.getJSONObject("data").getString("parent_name"); departmentOwner = getDeptSuperior.getJSONObject("data").getString("principal_name"); @@ -185,7 +185,7 @@ public class DeptController { pid = "999999"; } else { JSONObject getPid = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "erp_id__c", Arrays.asList(parentId)), + new Filter("EQ", "name", Arrays.asList(parentId)), new Filter("EQ", "life_status", Arrays.asList("normal")) ), "DepartmentObj"); @@ -238,7 +238,7 @@ public class DeptController { //开始查询是否已经存在重名部门 JSONObject getDept = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "erp_id__c", Arrays.asList(deptId)), + new Filter("EQ", "name", Arrays.asList(deptName)), new Filter("EQ", "life_status", Arrays.asList("normal")) ), "DepartmentObj"); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQBackController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQBackController.java new file mode 100644 index 0000000..50e7772 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQBackController.java @@ -0,0 +1,264 @@ +package org.ssssssss.magicboot.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.ssssssss.magicboot.constant.URLConstant; +import org.ssssssss.magicboot.entity.Filter; +import org.ssssssss.magicboot.utils.CrmRequestUtil; +import org.ssssssss.magicboot.utils.YSSignUtils; + +import java.util.*; + +@RestController +@RequestMapping("/api/hs") +@Slf4j +public class FHSQBackController { + + private RestTemplate restTemplate = new RestTemplate(); + + public static void main(String[] args) { + new FHSQBackController().syncDelivery(); + } + + @PostMapping("/sync/back/delivery") + public void syncDelivery() { + CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); + + log.info("开始同步发货申请审批状态和仓库情况"); + + JSONObject getShipment = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("N", "shipping_status__c", Arrays.asList("OUTSTOCKED")), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "shipping_application_form__c"); + + JSONObject shipmentRes = new JSONObject(); + + try { + shipmentRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getShipment, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(shipmentRes.getString("errorDescription")) || shipmentRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("查询失败或者没有符合条件的单据"); + return; + } + + log.info("查询成功,开始处理数据"); + + for (Object shipmentObj : shipmentRes.getJSONObject("data").getJSONArray("dataList")) { + JSONObject shipmentData = JSON.parseObject(JSON.toJSONString(shipmentObj)); + + System.out.println("当前正在处理数据为:" + shipmentData); + + //开始根据ERPID查询销售发货申请的详情数据 + //String erpShipmentId = shipmentData.getString("erp_id__c") != null ? shipmentData.getString("erp_id__c") : ""; + String erpShipmentId = "2341284461238288389";//todo 测试 + + if (erpShipmentId.equals("")) { + log.info("erpId为空,直接跳过"); + continue; + } + + //获取当前状态 + String shipmentStatus = shipmentData.getString("shipping_status__c") != null ? shipmentData.getString("shipping_status__c") : ""; + + //开始封装请求数据 + //开始查询token + String erpToken = ""; + + try { + erpToken = new YSSignUtils().getYSToken(); + } catch (Exception e) { + e.printStackTrace(); + } + + //开始发起请求 + String url = "https://c1.yonyoucloud.com/iuap-api-gateway/yonbip/sd/voucherdelivery/detail?access_token=" + erpToken + "&id=" + erpShipmentId;//url + + JSONObject getShipmentRes = new JSONObject(); + + try { + getShipmentRes = restTemplate.getForObject(url, JSONObject.class); + } catch (HttpStatusCodeException e) { + //获取响应体的错误信息 + String errorBody = e.getResponseBodyAsString(); + System.out.println("调用接口失败,状态码:" + e.getStatusCode()); + System.out.println("错误响应:" + errorBody); + + //将错误响应封装为 JSONObject(可选) + getShipmentRes = JSONObject.parseObject(errorBody); + } catch (RestClientException e) { + System.out.println("调用接口失败:" + e.getMessage()); + } + + System.out.println("查询的发货申请数据为" + getShipmentRes); + + if (!"200".equals(getShipmentRes.getString("code")) || getShipmentRes.getJSONObject("data").isEmpty()) { + log.info("erp请求发货申请详情失败或者没有符合条件数据"); + return; + } + + log.info("erp请求出库单详情成功,继续向下执行"); + + //获取关键数据 + JSONObject shipmentERPData = getShipmentRes.getJSONObject("data"); + + //截取关键数据 + String erpCode = shipmentERPData.getString("code"); + String erpId = shipmentERPData.getString("id"); + String erpModifyTime = shipmentERPData.getString("modifyTime"); + + //开始查询日志中是否已经存在 + JSONObject isLogRes = new JSONObject(); + + try { + isLogRes = restTemplate.getForObject("http://localhost:18080/Log/query/log_data?table=send_log_bmxx&log_type=FHSQHX&dataId=" + erpId + "&mark=" + erpModifyTime, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!isLogRes.getJSONArray("data").isEmpty()) { + log.info("日志中已经存在当前日志了"); + continue; + } + + log.info("日志中不存在当前日志,开始执行"); + + //开始封装主表数据 + Map shipmentMain = new HashMap<>(); + //开始获取发货状态 + String shipStatus = shipmentData.getString("statusCode") != null ? shipmentData.getString("statusCode") : ""; + + if (shipmentStatus.equals(shipStatus)) { + log.info("发货单状态未改变"); + continue; + } + + shipmentMain.put("shipping_status__c", shipStatus); + + shipmentMain.put("_id", shipmentData.getString("_id")); + shipmentMain.put("dataObjectApiName", "shipping_application_detai__c"); + + //开始封装明细数据 + List shipmentDetails = new ArrayList<>(); + + for (Object shipmentDetailObj : shipmentERPData.getJSONArray("deliveryDetails")) { + JSONObject shipmentDetailData = JSON.parseObject(JSON.toJSONString(shipmentDetailObj)); + + System.out.println("当前正在处理发货申请明细的数据为:" + shipmentDetailData); + + //开始封装数据 + Map shipmentDetail = new HashMap(); + + //仓库 + String stockId = shipmentDetailData.getString("stockId") != null ? shipmentDetailData.getString("stockId") : ""; + + JSONObject getWarehouse = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(stockId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "WarehouseObj"); + + JSONObject warehouseRes = new JSONObject(); + + try { + warehouseRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getWarehouse, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(warehouseRes.getString("errorDescription")) && !warehouseRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject warehouseData = warehouseRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + String warehouseCRMId = warehouseData.getString("_id"); + shipmentDetail.put("warehouse__c", warehouseCRMId); + } + + //批次号 + String batchNo = shipmentDetailData.getString("batchNo") != null ? shipmentDetailData.getString("batchNo") : ""; + + shipmentDetail.put("batch_number__c", batchNo); + + //根据erpId查询CRM单据号 + String erpDetailId = shipmentDetailData.getString("id") != null ? shipmentDetailData.getString("id") : ""; + + JSONObject getCrmDetail = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_line_id__c", Arrays.asList(erpDetailId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "shipment_detail__c"); + + JSONObject crmDetailRes = new JSONObject(); + + try { + crmDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCrmDetail, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(crmDetailRes.getString("errorDescription")) && !crmDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject crmDetailData = crmDetailRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + String crmDetailId = crmDetailData.getString("_id"); + + shipmentDetail.put("_id", crmDetailId); + } + + shipmentDetails.add(shipmentDetail); + } + + Map details = new HashMap(); + details.put("shipping_application_detai__c", shipmentDetails); + + JSONObject backShipmentReq = crmRequestUtil.crmWithDetail(shipmentMain, details); + + System.out.println("回写发货申请请求为:" + backShipmentReq); + + //开始封装日志 + Map logMap = new HashMap<>(); + logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); + logMap.put("log_type", "FHSQHX"); + logMap.put("data_name", erpCode); + logMap.put("data_id", erpId); + logMap.put("mark", erpModifyTime); + logMap.put("send_body", JSON.toJSONString(backShipmentReq)); + logMap.put("tableName", "send_log_shipment"); + + JSONObject backShipmentRes = new JSONObject(); + + try { + backShipmentRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backShipmentReq, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + System.out.println("回写结果为:" + JSON.parseObject(JSON.toJSONString(backShipmentRes))); + + if ("success".equals(backShipmentRes.getString("errorDescription"))) { + logMap.put("log_status", "0"); + logMap.put("res_body", "同步成功"); + } else { + logMap.put("log_status", "1"); + logMap.put("res_body", "同步失败" + backShipmentRes.getString("errorMessage")); + } + + logMap.put("send_res", JSON.toJSONString(backShipmentRes)); + //logMap.put("send_memo", JSON.toJSONString(categoryData)); + + JSONObject logRes = new JSONObject(); + + try { + logRes = restTemplate.postForObject("http://localhost:18080/Log/insert/log_data", logMap, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + System.out.println("日志插入结果为:" + logRes); + } + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQController.java index 95b070e..031acfa 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FHSQController.java @@ -162,6 +162,11 @@ public class FHSQController { shipmentDetail.put("sourceautoid", salesOrderDetailId); + //todo erpId先用这个字段承接 + Map deliveryDetailDefineCharacter = new HashMap(); + deliveryDetailDefineCharacter.put("HT01", shipmentDetailData.getString("_id")); + shipmentDetail.put("deliveryDetailDefineCharacter", deliveryDetailDefineCharacter); + //操作标识 shipmentDetail.put("_status", "Insert"); @@ -210,6 +215,8 @@ public class FHSQController { backReqMap.put("_id", shipmentId); backReqMap.put("dataObjectApiName", "shipping_application_form__c"); + Map backDetailMap = new HashMap<>(); + //开始封装日志 Map logMap = new HashMap<>(); logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); @@ -222,6 +229,7 @@ public class FHSQController { logMap.put("send_res", JSON.toJSONString(deliveryERPRes)); logMap.put("tableName", "send_log_shipment"); + JSONObject backReq = new JSONObject(); if ("200".equals(deliveryERPRes.getString("code"))) { log.info("同步成功"); @@ -236,6 +244,23 @@ public class FHSQController { backReqMap.put("erp_shipment_application_c__c", erpResponse.getString("code")); backReqMap.put("sync_status__c", "option_sync_success__c"); backReqMap.put("response_status__c", "同步成功"); + + List backDetails = new ArrayList(); + //开始封装明细数据 + for (Object orderDetailObj : erpResponse.getJSONArray("deliveryDetails")) { + JSONObject orderDetail = JSON.parseObject(JSON.toJSONString(orderDetailObj)); + + Map backDetail = new HashMap(); + backDetail.put("_id", orderDetail.getJSONObject("deliveryDetailDefineCharacter").getString("HT01")); + backDetail.put("erp_line_id__c", orderDetail.getString("id")); + + backDetails.add(backDetail); + } + + backDetailMap.put("shipping_application_detai__c", backDetails); + + backReq = crmRequestUtil.crmWithDetail(backReqMap, backDetailMap); + } else { log.info("同步失败"); @@ -243,9 +268,11 @@ public class FHSQController { logMap.put("res_body", "同步失败:" + deliveryERPRes.getString("message") != null ? deliveryERPRes.getString("message") : "同步失败,未知原因"); backReqMap.put("sync_status__c", "option_sync_failed__c"); backReqMap.put("response_status__c", deliveryERPRes.getString("message") != null ? deliveryERPRes.getString("message") : "同步失败,未知原因"); - } - JSONObject backReq = crmRequestUtil.updateCRM(backReqMap); + backDetailMap.put("shipment_detail__c", Arrays.asList()); + + backReq = crmRequestUtil.createCRM(backReqMap); + } JSONObject backRes = new JSONObject(); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderBGController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderBGController.java new file mode 100644 index 0000000..4ee6fc8 --- /dev/null +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderBGController.java @@ -0,0 +1,539 @@ +package org.ssssssss.magicboot.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.ssssssss.magicboot.Enum.OrderTradeTypeEnum; +import org.ssssssss.magicboot.Enum.OrderTypeEnum; +import org.ssssssss.magicboot.Enum.SalesOrgEnum; +import org.ssssssss.magicboot.Enum.TaxRateEnum; +import org.ssssssss.magicboot.constant.URLConstant; +import org.ssssssss.magicboot.entity.Filter; +import org.ssssssss.magicboot.utils.CrmRequestUtil; +import org.ssssssss.magicboot.utils.YSSignUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; + +@RestController +@RequestMapping("/api/hs") +@Slf4j +public class SalesOrderBGController { + + private RestTemplate restTemplate = new RestTemplate(); + + public static void main(String[] args) { + new SalesOrderBGController().salesOrderBG(); + } + + /** + * 开始执行销售订单变更查询 + * + * @return void + * @Author weiloong_zhang + */ + @PostMapping("/sync/salesOrder/BG") + public void salesOrderBG() { + CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); + + log.info("开始执行销售订单变更同步"); + + //获取当前的时间 + DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + LocalDateTime now = LocalDateTime.now(); + + String nowStr = now.format(sdf); + + log.info("当前时间:{}", nowStr); + + //获取两天前的时间 + LocalDateTime twoDaysAgo = now.minusDays(1);//直接减去2天 + + String twoDaysAgoStr = twoDaysAgo.format(sdf); + + log.info("两天前的时间:{}", twoDaysAgoStr); + + Map getSalesOrder = new HashMap<>(); + getSalesOrder.put("pageIndex", 1); + getSalesOrder.put("pageSize", 10); + getSalesOrder.put("isSum", true); + getSalesOrder.put("code", "DD25082200001"); + + Map simpleVO = new HashMap<>(); + simpleVO.put("op", "gt"); + simpleVO.put("field", "modifyTime"); + simpleVO.put("value1", twoDaysAgoStr); + + getSalesOrder.put("simpleVOs", Arrays.asList(simpleVO)); + + System.out.println(JSONObject.parseObject(JSON.toJSONString(getSalesOrder))); + + //开始获取token + String erpToken = ""; + + try { + erpToken = new YSSignUtils().getYSToken(); + } catch (Exception e) { + e.printStackTrace(); + } + + //开始发起请求 + String url = "https://c1.yonyoucloud.com/iuap-api-gateway/yonbip/sd/voucherorder/list" + "?access_token=" + erpToken;//url + + JSONObject salesOrderRes = new JSONObject(); + + try { + salesOrderRes = restTemplate.postForObject(url, getSalesOrder, JSONObject.class); + } catch (HttpStatusCodeException e) { + // 获取响应体的错误信息 + String errorBody = e.getResponseBodyAsString(); + System.out.println("调用接口失败,状态码:" + e.getStatusCode()); + System.out.println("错误响应:" + errorBody); + + // 将错误响应封装为 JSONObject(可选) + salesOrderRes = JSONObject.parseObject(errorBody); + } catch (RestClientException e) { + System.out.println("调用接口失败:" + e.getMessage()); + } + + System.out.println(salesOrderRes); + + if (!"200".equals(salesOrderRes.getString("code")) || salesOrderRes.getJSONObject("data").getJSONArray("recordList").isEmpty()) { + log.info("erp请求订单失败或者没有符合条件的数据"); + return; + } + + log.info("erp请求订单成功,继续向下执行"); + + for (Object salesOrderObj : salesOrderRes.getJSONObject("data").getJSONArray("recordList")) { + JSONObject salesOrderData = JSON.parseObject(JSON.toJSONString(salesOrderObj)); + + System.out.println("当前正在处理的销售订单数据为:" + salesOrderData); + + //开始截取关键数据 + String salesOrderId = salesOrderData.getString("id"); + String salesOrderCode = salesOrderData.getString("code"); + String modifyTime = salesOrderData.getString("modifyTime"); + + JSONObject isLogRes = new JSONObject(); + + try { + isLogRes = restTemplate.getForObject("http://localhost:18080/Log/query/log_data?table=send_log_xsdd&log_type=XSDDBG&dataId=" + salesOrderId + "&mark=" + modifyTime, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!isLogRes.getJSONArray("data").isEmpty()) { + log.info("销售订单已经执行过了,将不再继续向下执行"); + continue; + } + + log.info("销售订单没有执行过,将继续执行"); + + //先查询CRM中是否存在当前销售订单 + JSONObject getOrderFromCRM = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(salesOrderId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "SalesOrderObj"); + + JSONObject orderFromCRMRes = new JSONObject(); + + try { + orderFromCRMRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getOrderFromCRM, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(orderFromCRMRes.getString("errorDescription")) || orderFromCRMRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("CRM中不存在该销售订单"); + continue; + } + + //存在销售订单 + JSONObject orderData = orderFromCRMRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + log.info("开始封装主表数据"); + + //开始封装主表数据 + Map salesOrderMain = new HashMap<>(); + salesOrderMain.put("_id", orderData.getString("_id")); + + //开始获取交易类型 + String tradeType = salesOrderData.getString("transactionTypeId_name") != null ? salesOrderData.getString("transactionTypeId_name") : ""; + String tradeTypeStr = ""; + + if (!tradeType.equals("")) { + tradeTypeStr = OrderTradeTypeEnum.getValueByName(tradeType); + } + salesOrderMain.put("order_type__c", tradeTypeStr); + + //销售组织 + String salesOrg = salesOrderData.getString("salesOrgId_name") != null ? salesOrderData.getString("salesOrgId_name") : ""; + String salesOrgStr = ""; + + if (!salesOrg.equals("")) { + salesOrgStr = SalesOrgEnum.getValueByName(salesOrg); + } + + salesOrderMain.put("field_1Vkdk__c", salesOrgStr); + + //单据日期 + String docDateStr = salesOrderData.getString("vouchdate") != null ? salesOrderData.getString("vouchdate") : ""; + + // 解析格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime localDateTime = LocalDateTime.parse(docDateStr, formatter); + + // 转换为时间戳(毫秒) + long docDataStamp = localDateTime + .atZone(ZoneId.systemDefault()) // 系统默认时区 + .toInstant() + .toEpochMilli(); + + salesOrderMain.put("order_time", docDataStamp); + + //联系人 + String contactERPId = salesOrderData.getString("agentId") != null ? salesOrderData.getString("agentId") : ""; + //String contactERPId = "2339048217807683589";//todo 测试 + + //开始查询联系人信息 + JSONObject getContact = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(contactERPId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "ContactObj"); + + JSONObject contactRes = new JSONObject(); + + try { + contactRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getContact, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(contactRes.getString("errorDescription")) && !contactRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject contactData = contactRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + salesOrderMain.put("contact_person__c", contactData.getString("_id")); + } + + //客户单位 + //获取自定义字段 + JSONObject customizeData = salesOrderData.getJSONObject("orderDefineCharacter"); + + //获取客户erp编码 + String customerERPId = customizeData.getString("SJKH01") != null ? customizeData.getString("SJKH01") : ""; + //String customerERPId = "2339048071778795532"; //todo 测试 + + JSONObject getCustomer = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "ERP_ID__c", Arrays.asList(customerERPId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "AccountObj"); + + JSONObject customerRes = new JSONObject(); + + try { + customerRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCustomer, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(customerRes.getString("errorDescription")) && !customerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject customerData = customerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + salesOrderMain.put("account_id", customerData.getString("_id")); + } + + //课题组 + String researchGroup = customizeData.getString("KTZ001") != null ? customizeData.getString("KTZ001") : ""; + //String researchGroup = "2337485545509224455"; //todo 测试 + + JSONObject getResearchGroup = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(researchGroup)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "topic_group__c"); + + JSONObject researchGroupRes = new JSONObject(); + + try { + researchGroupRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getResearchGroup, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(researchGroupRes.getString("errorDescription")) && !researchGroupRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject researchGroupData = researchGroupRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + salesOrderMain.put("research_team__c", researchGroupData.getString("_id")); + } + + //院所或者科室 + String institute = customizeData.getString("KSYS01") != null ? customizeData.getString("KSYS01") : ""; + //String institute = "2337485150355456003"; + + JSONObject getInstitute = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(institute)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "department_institute__c"); + + JSONObject instituteRes = new JSONObject(); + + try { + instituteRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getInstitute, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(instituteRes.getString("errorDescription")) && !instituteRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject instituteData = instituteRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + salesOrderMain.put("institution_or_department__c", instituteData.getString("_id")); + } + + //销售员 + String salesman = salesOrderData.getString("corpContact") != null ? salesOrderData.getString("corpContact") : ""; + + JSONObject getSalesman = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "erp_id__c", Arrays.asList(salesman)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "PersonnelObj"); + + JSONObject salesmanRes = new JSONObject(); + + try { + salesmanRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getSalesman, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(salesmanRes.getString("errorDescription")) && !salesmanRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject salesmanData = salesmanRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + String userId = salesmanData.getString("user_id") != null ? salesmanData.getString("user_id") : ""; + + salesOrderMain.put("owner", Arrays.asList(userId)); + } + + //合同编号 + salesOrderMain.put("contract_number__c", customizeData.getString("HT01") != null ? customizeData.getString("HT01") : ""); + + //付款方式 + salesOrderMain.put("field_0f31k__c", customizeData.getString("FKFS01") != null ? customizeData.getString("FKFS01") : ""); + + //核销备注 + salesOrderMain.put("reconciliation_note__c", customizeData.getString("ZDY0006") != null ? customizeData.getString("ZDY0006") : ""); + + //备注 + salesOrderMain.put("delivery_comment", customizeData.getString("memo") != null ? customizeData.getString("memo") : ""); + + //收货地址 + salesOrderMain.put("delivery_address__c", customizeData.getString("orderShippingAddress") != null ? customizeData.getString("orderShippingAddress") : ""); + + salesOrderMain.put("dataObjectApiName", "SalesOrderObj"); + + //开始查询销售订单明细 + String detailUrl = "https://c1.yonyoucloud.com/iuap-api-gateway/yonbip/sd/voucherorder/detail?access_token=" + erpToken + "&id=" + salesOrderId; + + JSONObject salesOrderDetail = new JSONObject(); + + try { + salesOrderDetail = restTemplate.getForObject(detailUrl, JSONObject.class); + } catch (HttpStatusCodeException e) { + //获取响应体的错误信息 + String errorBody = e.getResponseBodyAsString(); + System.out.println("调用接口失败,状态码:" + e.getStatusCode()); + System.out.println("错误响应:" + errorBody); + + //将错误响应封装为 JSONObject(可选) + salesOrderDetail = JSONObject.parseObject(errorBody); + } catch (RestClientException e) { + System.out.println("调用接口失败:" + e.getMessage()); + } + + System.out.println("查询的销售订单数据为" + salesOrderDetail); + + if (!"200".equals(salesOrderDetail.getString("code")) || salesOrderDetail.getJSONObject("data").getJSONArray("orderDetails").isEmpty()) { + log.info("erp请求销售订单明细失败或者没有符合条件数据"); + continue; + } + + List orderDetailList = new ArrayList(); + + for (Object orderDetailObj : salesOrderDetail.getJSONObject("data").getJSONArray("orderDetails")) { + JSONObject orderDetailData = JSON.parseObject(JSON.toJSONString(orderDetailObj)); + + System.out.println("当前正在处理数据为:" + orderDetailData); + + //开始封装明细数据 + Map orderDetailMap = new HashMap(); + //erp行Id + orderDetailMap.put("field_9b817__c", orderDetailData.getString("id")); + + //获取产品编码 + String productCode = orderDetailData.getString("productCode") != null ? orderDetailData.getString("productCode") : ""; + + //根据物料编码查询CRM产品 + JSONObject getProduct = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "name", Arrays.asList(productCode)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "ProductObj"); + + JSONObject productRes = new JSONObject(); + + try { + productRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getProduct, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(productRes.getString("errorDescription")) && !productRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject productData = productRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + + orderDetailMap.put("product_id", productData.getString("_id")); + //目录价 + orderDetailMap.put("product_price", productData.getBigDecimal("price") != null ? productData.getBigDecimal("price") : BigDecimal.ZERO); + } + + //计划发货日期 + String planShipDate = orderDetailData.getString("consignTime") != null ? orderDetailData.getString("consignTime") : ""; + + LocalDateTime planShipDateTime = LocalDateTime.parse(planShipDate, formatter); + + // 转换为时间戳(毫秒) + long planShipStamp = planShipDateTime + .atZone(ZoneId.systemDefault()) // 系统默认时区 + .toInstant() + .toEpochMilli(); + + orderDetailMap.put("planned_shipment_date__c", planShipStamp); + + //规格型号 + orderDetailMap.put("specification_model__c", orderDetailData.getString("modelDescription") != null ? orderDetailData.getString("modelDescription") : ""); + + //折扣 + JSONObject orderDetailDefineCharacter = orderDetailData.getJSONObject("orderDetailDefineCharacter"); + orderDetailMap.put("discount", orderDetailDefineCharacter.getBigDecimal("ZKL01") != null ? orderDetailDefineCharacter.getBigDecimal("ZKL01") : BigDecimal.ZERO); + + //数量 + orderDetailMap.put("quantity", orderDetailData.getBigDecimal("qty") != null ? orderDetailData.getBigDecimal("qty") : BigDecimal.ZERO); + + //含税单价 + orderDetailMap.put("sales_price", orderDetailData.getBigDecimal("oriTaxUnitPrice") != null ? orderDetailData.getBigDecimal("oriTaxUnitPrice") : BigDecimal.ZERO); + + //含税小计 + orderDetailMap.put("subtotal", orderDetailData.getBigDecimal("oriSum") != null ? orderDetailData.getBigDecimal("oriSum") : BigDecimal.ZERO); + + //税率 + BigDecimal taxRate = orderDetailData.getBigDecimal("taxRate") != null ? orderDetailData.getBigDecimal("taxRate") : BigDecimal.ZERO; + String taxRateStr = TaxRateEnum.getCode(taxRate); + + orderDetailMap.put("tax_rate__c", taxRate); + orderDetailMap.put("tax_rate_code__c", taxRateStr); + + //税额 + JSONObject orderPrice = orderDetailData.getJSONObject("orderDetailPrices"); + orderDetailMap.put("field_11b7H__c", orderPrice.getBigDecimal("oriTax") != null ? orderPrice.getBigDecimal("oriTax") : BigDecimal.ZERO); + + //库存组织 + orderDetailMap.put("inventory_organization__c", orderDetailData.getString("stockOrgId_code") != null ? orderDetailData.getString("stockOrgId_code") : ""); + + //行备注 + orderDetailMap.put("remark", orderDetailData.getString("memo") != null ? orderDetailData.getString("memo") : ""); + + //市场活动备注 + orderDetailMap.put("field_Jz17y__c", orderDetailDefineCharacter.getString("SCHDBZ") != null ? orderDetailDefineCharacter.getString("SCHDBZ") : ""); + + //无税金额 + orderDetailMap.put("field_dt212__c", orderPrice.getBigDecimal("oriMoney") != null ? orderPrice.getBigDecimal("oriMoney") : BigDecimal.ZERO); + + //含税单价 + orderDetailMap.put("sales_price", orderDetailData.getBigDecimal("oriTaxUnitPrice") != null ? orderDetailData.getBigDecimal("oriTaxUnitPrice") : BigDecimal.ZERO); + + //无税单价 + orderDetailMap.put("field_jyqC3__c", orderPrice.getBigDecimal("oriUnitPrice") != null ? orderPrice.getBigDecimal("oriUnitPrice") : BigDecimal.ZERO); + + String orderDetailId = orderDetailData.getString("id"); + + JSONObject getOrderDetail = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "field_9b817__c", Arrays.asList(orderDetailId)), + new Filter("EQ", "life_status", Arrays.asList("normal")) + ), "SalesOrderProductObj"); + + JSONObject orderDetailRes = new JSONObject(); + + try { + orderDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getOrderDetail, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if ("success".equals(orderDetailRes.getString("errorDescription")) && !orderDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + JSONObject crmDetailData = orderDetailRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); + orderDetailMap.put("_id", crmDetailData.getString("_id")); + } + + orderDetailList.add(orderDetailMap); + } + + //开始封装 + Map details = new HashMap<>(); + details.put("SalesOrderProductObj", orderDetailList); + + JSONObject updateOrder = crmRequestUtil.crmWithDetail(salesOrderMain, details); + + System.out.println("销售订单请求为:" + updateOrder); + + //开始封装日志 + Map logMap = new HashMap<>(); + logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); + logMap.put("syn_type", "1"); + logMap.put("log_type", "XSDDBG"); + logMap.put("data_name", salesOrderCode); + logMap.put("data_id", salesOrderId); + logMap.put("mark", modifyTime); + logMap.put("send_body", JSON.toJSONString(updateOrder)); + logMap.put("tableName", "send_log_xsdd"); + + JSONObject updateOrderRes = new JSONObject(); + + try { + updateOrderRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, updateOrder, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + System.out.println("创建结果为:" + JSON.parseObject(JSON.toJSONString(updateOrderRes))); + + if ("success".equals(updateOrderRes.getString("errorDescription"))) { + logMap.put("log_status", "0"); + logMap.put("res_body", "同步成功"); + } else { + logMap.put("log_status", "1"); + logMap.put("res_body", "同步失败" + updateOrderRes.getString("errorMessage")); + } + + logMap.put("send_res", JSON.toJSONString(updateOrderRes)); + logMap.put("send_memo", JSON.toJSONString(updateOrderRes)); + + JSONObject logRes = new JSONObject(); + + try { + logRes = restTemplate.postForObject("http://localhost:18080/Log/insert/log_data", logMap, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + System.out.println("日志插入结果为:" + logRes); + + } + } +} diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderController.java index f77c2c1..32a18f9 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/SalesOrderController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import org.ssssssss.magicboot.Enum.AccountOrgEnum; import org.ssssssss.magicboot.Enum.CurrencyEnum; import org.ssssssss.magicboot.Enum.OrderTypeEnum; import org.ssssssss.magicboot.constant.URLConstant; @@ -48,7 +49,7 @@ public class SalesOrderController { log.info("开始同步销售订单"); JSONObject getSalesOrder = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "name", Arrays.asList("DD25081300001")), + new Filter("EQ", "name", Arrays.asList("DD25082200001")), new Filter("EQ", "life_status", Arrays.asList("normal")) ), "SalesOrderObj"); @@ -99,7 +100,7 @@ public class SalesOrderController { salesOrderMap.put("orderPrices!currency", "2158013267526025386"); salesOrderMap.put("orderPrices!natCurrency", "2158013267526025386"); //汇率 - salesOrderMap.put("orderPrices!exchRate", "13.0"); + salesOrderMap.put("orderPrices!exchRate", "1"); //汇率类型 salesOrderMap.put("orderPrices!exchangeRateType", "i3p6cwlm"); //单价含税 @@ -116,10 +117,17 @@ public class SalesOrderController { salesOrderMap.put("transactionTypeId", tradeTypeStr); - //todo 销售组织(思科捷) - salesOrderMap.put("salesOrgId", "2163138383273525256"); + //销售组织(思科捷) + String salesOrg = salesOrderData.getString("field_1Vkdk__c__r") != null ? salesOrderData.getString("field_1Vkdk__c__r") : ""; + String salesOrgStr = ""; + + if (!salesOrg.equals("")) { + salesOrgStr = AccountOrgEnum.getValueByName(salesOrg); + } + + salesOrderMap.put("salesOrgId", salesOrgStr); //销售组织 - salesOrderMap.put("settlementOrgId", "2163138383273525256"); + salesOrderMap.put("settlementOrgId", salesOrgStr); //单据编号 salesOrderMap.put("code", salesOrderCode); @@ -145,6 +153,9 @@ public class SalesOrderController { salesOrderMap.put("invoiceAgentId", contactId); //销售部门 + String personERPIdStr = ""; + String deptId = ""; + List ownerList = salesOrderData.getJSONArray("owner"); JSONObject getPerson = crmRequestUtil.getCRMList(Arrays.asList( @@ -164,6 +175,7 @@ public class SalesOrderController { JSONObject personData = personRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); String personERPId = personData.getString("erp_id__c") != null ? personData.getString("erp_id__c") : ""; + personERPIdStr = personERPId; salesOrderMap.put("corpContact", personERPId); } @@ -187,6 +199,7 @@ public class SalesOrderController { JSONObject deptData = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); String deptERPId = deptData.getString("erp_id__c") != null ? deptData.getString("erp_id__c") : ""; + deptId = deptERPId; salesOrderMap.put("saleDepartmentId", deptERPId); } @@ -281,55 +294,53 @@ public class SalesOrderController { salesDetail.put("subQty", quantity); //计价数量 - BigDecimal priceQuantity = salesDetailData.getBigDecimal("pricing_quantity__c") != null ? salesDetailData.getBigDecimal("pricing_quantity__c") : BigDecimal.ZERO; + salesDetail.put("priceQty", quantity); - salesDetail.put("priceQty", priceQuantity); - - //含税成交价 + //含税成交价=含税单价/含税小计 BigDecimal taxInclusivePrice = salesDetailData.getBigDecimal("sales_price") != null ? salesDetailData.getBigDecimal("sales_price") : BigDecimal.ZERO; salesDetail.put("oriTaxUnitPrice", taxInclusivePrice); //todo 目录价 - //todo BigDecimal catalogPrice = salesDetailData.getBigDecimal("product_price") != null ? salesDetailData.getBigDecimal("product_price") : BigDecimal.ZERO; - //含税金额 BigDecimal hsaTaxPrice = salesDetailData.getBigDecimal("subtotal") != null ? salesDetailData.getBigDecimal("subtotal") : BigDecimal.ZERO; salesDetail.put("oriSum", hsaTaxPrice); - //todo 税率 - //todo BigDecimal taxRate = salesDetailData.getBigDecimal("tax_rate__c") != null ? salesDetailData.getBigDecimal("tax_rate__c") : BigDecimal.ZERO; + //税率 - salesDetail.put("taxId", "VATR1"); + salesDetail.put("taxId", salesDetailData.getString("tax_rate_code__c") != null ? salesDetailData.getString("tax_rate_code__c") : ""); //税额 BigDecimal taxAmount = salesDetailData.getBigDecimal("field_11b7H__c") != null ? salesDetailData.getBigDecimal("field_11b7H__c") : BigDecimal.ZERO; + //税额=税额 salesDetail.put("orderDetailPrices!oriTax", taxAmount); + //本币税额 salesDetail.put("orderDetailPrices!natTax", taxAmount); //库存组织 - String kuCunOrg = salesDetailData.getString("inventory_organization__c") != null ? salesDetailData.getString("inventory_organization__c") : ""; + salesDetail.put("stockOrgId", salesOrgStr); - salesDetail.put("stockOrgId", kuCunOrg); - -// //质保期 -// long zhiBaoQi = salesDetailData.getLong("field_jbN2r__c") != null ? salesDetailData.getLong("field_jbN2r__c") : 0; -// -// String zhiBaoQiStr = sdf.format(new Date(zhiBaoQi)); -// -// salesDetail.put("warrantyDate", zhiBaoQiStr); - - long planDate = salesDetailData.getLong("acceptance_date__c") != null ? salesDetailData.getLong("acceptance_date__c") : 0; + //计划发货日期 + long planDate = salesDetailData.getLong("planned_shipment_date__c") != null ? salesDetailData.getLong("planned_shipment_date__c") : 0; salesDetail.put("consignTime", sdf.format(new Date(planDate))); //行备注 String lineRemark = salesDetailData.getString("remark") != null ? salesDetailData.getString("remark") : ""; + salesDetail.put("memo", lineRemark); //暂时给行备注加上CRMID - salesDetail.put("memo", salesDetailData.getString("_id")); + Map orderDetailDefineCharacter = new HashMap<>(); + orderDetailDefineCharacter.put("item2852kg", salesDetailData.getString("_id")); + orderDetailDefineCharacter.put("MLJ", salesDetailData.getBigDecimal("product_price") != null ? salesDetailData.getBigDecimal("product_price") : BigDecimal.ZERO); + orderDetailDefineCharacter.put("ZKL01", salesDetailData.getBigDecimal("discount") != null ? salesDetailData.getBigDecimal("discount") : BigDecimal.ZERO); + orderDetailDefineCharacter.put("SCHDBZ", salesDetailData.getString("field_Jz17y__c") != null ? salesDetailData.getString("field_Jz17y__c") : ""); + orderDetailDefineCharacter.put("CustNB001", deptId);//内部交易部门 + orderDetailDefineCharacter.put("CustNB002", personERPIdStr);//内部交易人员 + + salesDetail.put("orderDetailDefineCharacter", orderDetailDefineCharacter); //销售单位 String salesUnit = salesDetailData.getString("sales_unit__c") != null ? salesDetailData.getString("sales_unit__c") : ""; @@ -339,31 +350,31 @@ public class SalesOrderController { salesDetail.put("iProductUnitId", salesUnit); //todo 销售费用 -// BigDecimal salesFee = salesDetailData.getBigDecimal("sales_cost__c") != null ? salesDetailData.getBigDecimal("sales_cost__c") : BigDecimal.ZERO; -// -// salesDetail.put("iSalesFee", salesFee); //无税金额 BigDecimal taxFreeAmount = salesDetailData.getBigDecimal("field_dt212__c") != null ? salesDetailData.getBigDecimal("field_dt212__c") : BigDecimal.ZERO; + //本币无税金额=不含税小计 salesDetail.put("orderDetailPrices!natMoney", salesDetailData.getBigDecimal("field_dt212__c") != null ? salesDetailData.getBigDecimal("field_dt212__c") : BigDecimal.ZERO); + //无税金额 salesDetail.put("orderDetailPrices!oriMoney", taxFreeAmount); //含税金额 BigDecimal noTaxAmount = salesDetailData.getBigDecimal("field_jyqC3__c") != null ? salesDetailData.getBigDecimal("field_jyqC3__c") : BigDecimal.ZERO; + //本币无税单价=不含税单价 salesDetail.put("orderDetailPrices!natUnitPrice", noTaxAmount); //无税成交价 salesDetail.put("orderDetailPrices!oriUnitPrice", noTaxAmount); - salesDetail.put("oriTaxUnitPrice", noTaxAmount); - salesDetail.put("orderDetailPrices!natTaxUnitPrice", noTaxAmount); + //本币含税单价 + salesDetail.put("orderDetailPrices!natTaxUnitPrice", salesDetailData.getString("sales_price") != null ? salesDetailData.getBigDecimal("sales_price") : BigDecimal.ZERO); - //含税金额 + //本币含税金额=含税小计 salesDetail.put("orderDetailPrices!natSum", salesDetailData.getBigDecimal("subtotal") != null ? salesDetailData.getBigDecimal("subtotal") : BigDecimal.ZERO); //销售组织 - salesDetail.put("settlementOrgId", "2163138383273525256"); + salesDetail.put("settlementOrgId", salesOrgStr); //todo 销售换算率 salesDetail.put("invExchRate", 1); @@ -391,6 +402,8 @@ public class SalesOrderController { Map salesDataMap = new HashMap<>(); salesDataMap.put("data", salesOrderMap); + System.out.println("开始同步销售订单:" + JSON.parseObject(JSON.toJSONString(salesOrderMap))); + //开始获取token String erpToken = ""; @@ -440,6 +453,8 @@ public class SalesOrderController { logMap.put("send_res", JSON.toJSONString(salesOrderERPRes)); logMap.put("tableName", "send_log_xsdd"); + JSONObject backReq = new JSONObject(); + if ("200".equals(salesOrderERPRes.getString("code"))) { //同步成功 log.info("销售订单同步成功"); @@ -459,7 +474,7 @@ public class SalesOrderController { JSONObject orderDetail = JSON.parseObject(JSON.toJSONString(orderDetailObj)); Map backDetail = new HashMap(); - backDetail.put("_id", orderDetail.getString("memo")); + backDetail.put("_id", orderDetail.getJSONObject("orderDetailDefineCharacter").getString("item2852kg")); backDetail.put("field_9b817__c", orderDetail.getString("id")); backDetails.add(backDetail); @@ -467,19 +482,18 @@ public class SalesOrderController { backDetailMap.put("SalesOrderProductObj", backDetails); + backReq = crmRequestUtil.crmWithDetail(backReqMap, backDetailMap); } else { logMap.put("log_status", "1"); logMap.put("res_body", "同步失败:" + salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因"); backReqMap.put("sync_status__c", "option_sync_failed__c"); backReqMap.put("response_status__c", salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因"); - backDetailMap.put("SalesOrderProductObj", Arrays.asList()); + backReq = crmRequestUtil.createCRM(backReqMap); } log.info("开始回写数据"); - JSONObject backReq = crmRequestUtil.crmWithDetail(backReqMap, backDetailMap); - JSONObject backRes = new JSONObject(); try { diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XXTHController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XXTHController.java index 79c59fd..0965a64 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XXTHController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XXTHController.java @@ -263,8 +263,12 @@ public class XXTHController { refundDetailList.add(salesReturnDetail); } + salesReturnMap.put("saleReturnDetails", refundDetailList); + Map salesDataMap = new HashMap<>(); - salesDataMap.put("data", refundDetailList); + salesDataMap.put("data", salesReturnMap); + + System.out.println(JSON.parse(JSON.toJSONString(salesDataMap))); //开始获取token String erpToken = ""; @@ -342,7 +346,7 @@ public class XXTHController { JSONObject backRes = new JSONObject(); try { - backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, backReq, JSONObject.class); + backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); }