浩赛集成程序更新内容和优化内容

This commit is contained in:
itzhang 2025-08-26 15:19:33 +08:00
parent a4fd46aa17
commit 891476e60d
10 changed files with 1032 additions and 46 deletions

View File

@ -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<String, String> 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);
}
}

View File

@ -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<String, String> 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);
}
}

View File

@ -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;
}
}

View File

@ -18,6 +18,7 @@ import org.ssssssss.magicboot.utils.CrmRequestUtil;
import org.ssssssss.magicboot.utils.YSSignUtils; import org.ssssssss.magicboot.utils.YSSignUtils;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 客户 * 客户
@ -518,8 +519,28 @@ public class CustomerController {
nameMap.put("simplifiedName", customerData.getString("name")); nameMap.put("simplifiedName", customerData.getString("name"));
contactMap.put("name", nameMap); 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<String> 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<>(); Map shortnameMap = new HashMap<>();
shortnameMap.put("simplifiedName", customerData.getString("name")); shortnameMap.put("simplifiedName", shortName);
contactMap.put("shortname", shortnameMap); contactMap.put("shortname", shortnameMap);
//上级客户 //上级客户
contactMap.put("parentCustomerCode", customerData.getString("parent_customer_code__c") != null ? customerData.getString("parent_customer_code__c") : ""); contactMap.put("parentCustomerCode", customerData.getString("parent_customer_code__c") != null ? customerData.getString("parent_customer_code__c") : "");

View File

@ -53,7 +53,7 @@ public class DeptController {
getDeptReq.put("pageIndex", 1); getDeptReq.put("pageIndex", 1);
getDeptReq.put("externalOrg", 0); getDeptReq.put("externalOrg", 0);
getDeptReq.put("sourceType", 1); 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("dr", 0);
getDeptReq.put("funcTypeCode", "orgunit"); getDeptReq.put("funcTypeCode", "orgunit");
@ -177,7 +177,7 @@ public class DeptController {
continue; continue;
} }
parentId = getDeptSuperior.getJSONObject("data").getString("parent"); parentId = getDeptSuperior.getJSONObject("data").getString("parent_name");
departmentOwner = getDeptSuperior.getJSONObject("data").getString("principal_name"); departmentOwner = getDeptSuperior.getJSONObject("data").getString("principal_name");
@ -185,7 +185,7 @@ public class DeptController {
pid = "999999"; pid = "999999";
} else { } else {
JSONObject getPid = crmRequestUtil.getCRMList(Arrays.asList( 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")) new Filter("EQ", "life_status", Arrays.asList("normal"))
), "DepartmentObj"); ), "DepartmentObj");
@ -238,7 +238,7 @@ public class DeptController {
//开始查询是否已经存在重名部门 //开始查询是否已经存在重名部门
JSONObject getDept = crmRequestUtil.getCRMList(Arrays.asList( 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")) new Filter("EQ", "life_status", Arrays.asList("normal"))
), "DepartmentObj"); ), "DepartmentObj");

View File

@ -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);
}
}
}

View File

@ -162,6 +162,11 @@ public class FHSQController {
shipmentDetail.put("sourceautoid", salesOrderDetailId); shipmentDetail.put("sourceautoid", salesOrderDetailId);
//todo erpId先用这个字段承接
Map deliveryDetailDefineCharacter = new HashMap();
deliveryDetailDefineCharacter.put("HT01", shipmentDetailData.getString("_id"));
shipmentDetail.put("deliveryDetailDefineCharacter", deliveryDetailDefineCharacter);
//操作标识 //操作标识
shipmentDetail.put("_status", "Insert"); shipmentDetail.put("_status", "Insert");
@ -210,6 +215,8 @@ public class FHSQController {
backReqMap.put("_id", shipmentId); backReqMap.put("_id", shipmentId);
backReqMap.put("dataObjectApiName", "shipping_application_form__c"); backReqMap.put("dataObjectApiName", "shipping_application_form__c");
Map backDetailMap = new HashMap<>();
//开始封装日志 //开始封装日志
Map logMap = new HashMap<>(); Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
@ -222,6 +229,7 @@ public class FHSQController {
logMap.put("send_res", JSON.toJSONString(deliveryERPRes)); logMap.put("send_res", JSON.toJSONString(deliveryERPRes));
logMap.put("tableName", "send_log_shipment"); logMap.put("tableName", "send_log_shipment");
JSONObject backReq = new JSONObject();
if ("200".equals(deliveryERPRes.getString("code"))) { if ("200".equals(deliveryERPRes.getString("code"))) {
log.info("同步成功"); log.info("同步成功");
@ -236,6 +244,23 @@ public class FHSQController {
backReqMap.put("erp_shipment_application_c__c", erpResponse.getString("code")); backReqMap.put("erp_shipment_application_c__c", erpResponse.getString("code"));
backReqMap.put("sync_status__c", "option_sync_success__c"); backReqMap.put("sync_status__c", "option_sync_success__c");
backReqMap.put("response_status__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 { } else {
log.info("同步失败"); log.info("同步失败");
@ -243,9 +268,11 @@ public class FHSQController {
logMap.put("res_body", "同步失败:" + deliveryERPRes.getString("message") != null ? deliveryERPRes.getString("message") : "同步失败,未知原因"); logMap.put("res_body", "同步失败:" + deliveryERPRes.getString("message") != null ? deliveryERPRes.getString("message") : "同步失败,未知原因");
backReqMap.put("sync_status__c", "option_sync_failed__c"); backReqMap.put("sync_status__c", "option_sync_failed__c");
backReqMap.put("response_status__c", deliveryERPRes.getString("message") != null ? deliveryERPRes.getString("message") : "同步失败,未知原因"); 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(); JSONObject backRes = new JSONObject();

View File

@ -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);
}
}
}

View File

@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.ssssssss.magicboot.Enum.AccountOrgEnum;
import org.ssssssss.magicboot.Enum.CurrencyEnum; import org.ssssssss.magicboot.Enum.CurrencyEnum;
import org.ssssssss.magicboot.Enum.OrderTypeEnum; import org.ssssssss.magicboot.Enum.OrderTypeEnum;
import org.ssssssss.magicboot.constant.URLConstant; import org.ssssssss.magicboot.constant.URLConstant;
@ -48,7 +49,7 @@ public class SalesOrderController {
log.info("开始同步销售订单"); log.info("开始同步销售订单");
JSONObject getSalesOrder = crmRequestUtil.getCRMList(Arrays.asList( 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")) new Filter("EQ", "life_status", Arrays.asList("normal"))
), "SalesOrderObj"); ), "SalesOrderObj");
@ -99,7 +100,7 @@ public class SalesOrderController {
salesOrderMap.put("orderPrices!currency", "2158013267526025386"); salesOrderMap.put("orderPrices!currency", "2158013267526025386");
salesOrderMap.put("orderPrices!natCurrency", "2158013267526025386"); salesOrderMap.put("orderPrices!natCurrency", "2158013267526025386");
//汇率 //汇率
salesOrderMap.put("orderPrices!exchRate", "13.0"); salesOrderMap.put("orderPrices!exchRate", "1");
//汇率类型 //汇率类型
salesOrderMap.put("orderPrices!exchangeRateType", "i3p6cwlm"); salesOrderMap.put("orderPrices!exchangeRateType", "i3p6cwlm");
//单价含税 //单价含税
@ -116,10 +117,17 @@ public class SalesOrderController {
salesOrderMap.put("transactionTypeId", tradeTypeStr); 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); salesOrderMap.put("code", salesOrderCode);
@ -145,6 +153,9 @@ public class SalesOrderController {
salesOrderMap.put("invoiceAgentId", contactId); salesOrderMap.put("invoiceAgentId", contactId);
//销售部门 //销售部门
String personERPIdStr = "";
String deptId = "";
List ownerList = salesOrderData.getJSONArray("owner"); List ownerList = salesOrderData.getJSONArray("owner");
JSONObject getPerson = crmRequestUtil.getCRMList(Arrays.asList( JSONObject getPerson = crmRequestUtil.getCRMList(Arrays.asList(
@ -164,6 +175,7 @@ public class SalesOrderController {
JSONObject personData = personRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); JSONObject personData = personRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
String personERPId = personData.getString("erp_id__c") != null ? personData.getString("erp_id__c") : ""; String personERPId = personData.getString("erp_id__c") != null ? personData.getString("erp_id__c") : "";
personERPIdStr = personERPId;
salesOrderMap.put("corpContact", personERPId); salesOrderMap.put("corpContact", personERPId);
} }
@ -187,6 +199,7 @@ public class SalesOrderController {
JSONObject deptData = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); JSONObject deptData = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
String deptERPId = deptData.getString("erp_id__c") != null ? deptData.getString("erp_id__c") : ""; String deptERPId = deptData.getString("erp_id__c") != null ? deptData.getString("erp_id__c") : "";
deptId = deptERPId;
salesOrderMap.put("saleDepartmentId", deptERPId); salesOrderMap.put("saleDepartmentId", deptERPId);
} }
@ -281,55 +294,53 @@ public class SalesOrderController {
salesDetail.put("subQty", quantity); 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; BigDecimal taxInclusivePrice = salesDetailData.getBigDecimal("sales_price") != null ? salesDetailData.getBigDecimal("sales_price") : BigDecimal.ZERO;
salesDetail.put("oriTaxUnitPrice", taxInclusivePrice); salesDetail.put("oriTaxUnitPrice", taxInclusivePrice);
//todo 目录价 //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; BigDecimal hsaTaxPrice = salesDetailData.getBigDecimal("subtotal") != null ? salesDetailData.getBigDecimal("subtotal") : BigDecimal.ZERO;
salesDetail.put("oriSum", hsaTaxPrice); 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; BigDecimal taxAmount = salesDetailData.getBigDecimal("field_11b7H__c") != null ? salesDetailData.getBigDecimal("field_11b7H__c") : BigDecimal.ZERO;
//税额=税额
salesDetail.put("orderDetailPrices!oriTax", taxAmount); salesDetail.put("orderDetailPrices!oriTax", taxAmount);
//本币税额
salesDetail.put("orderDetailPrices!natTax", 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 planDate = salesDetailData.getLong("planned_shipment_date__c") != null ? salesDetailData.getLong("planned_shipment_date__c") : 0;
// //质保期
// 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;
salesDetail.put("consignTime", sdf.format(new Date(planDate))); salesDetail.put("consignTime", sdf.format(new Date(planDate)));
//行备注 //行备注
String lineRemark = salesDetailData.getString("remark") != null ? salesDetailData.getString("remark") : ""; String lineRemark = salesDetailData.getString("remark") != null ? salesDetailData.getString("remark") : "";
salesDetail.put("memo", lineRemark);
//暂时给行备注加上CRMID //暂时给行备注加上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") : ""; String salesUnit = salesDetailData.getString("sales_unit__c") != null ? salesDetailData.getString("sales_unit__c") : "";
@ -339,31 +350,31 @@ public class SalesOrderController {
salesDetail.put("iProductUnitId", salesUnit); salesDetail.put("iProductUnitId", salesUnit);
//todo 销售费用 //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; 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!natMoney", salesDetailData.getBigDecimal("field_dt212__c") != null ? salesDetailData.getBigDecimal("field_dt212__c") : BigDecimal.ZERO);
//无税金额
salesDetail.put("orderDetailPrices!oriMoney", taxFreeAmount); salesDetail.put("orderDetailPrices!oriMoney", taxFreeAmount);
//含税金额 //含税金额
BigDecimal noTaxAmount = salesDetailData.getBigDecimal("field_jyqC3__c") != null ? salesDetailData.getBigDecimal("field_jyqC3__c") : BigDecimal.ZERO; BigDecimal noTaxAmount = salesDetailData.getBigDecimal("field_jyqC3__c") != null ? salesDetailData.getBigDecimal("field_jyqC3__c") : BigDecimal.ZERO;
//本币无税单价=不含税单价
salesDetail.put("orderDetailPrices!natUnitPrice", noTaxAmount); salesDetail.put("orderDetailPrices!natUnitPrice", noTaxAmount);
//无税成交价 //无税成交价
salesDetail.put("orderDetailPrices!oriUnitPrice", 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("orderDetailPrices!natSum", salesDetailData.getBigDecimal("subtotal") != null ? salesDetailData.getBigDecimal("subtotal") : BigDecimal.ZERO);
//销售组织 //销售组织
salesDetail.put("settlementOrgId", "2163138383273525256"); salesDetail.put("settlementOrgId", salesOrgStr);
//todo 销售换算率 //todo 销售换算率
salesDetail.put("invExchRate", 1); salesDetail.put("invExchRate", 1);
@ -391,6 +402,8 @@ public class SalesOrderController {
Map salesDataMap = new HashMap<>(); Map salesDataMap = new HashMap<>();
salesDataMap.put("data", salesOrderMap); salesDataMap.put("data", salesOrderMap);
System.out.println("开始同步销售订单:" + JSON.parseObject(JSON.toJSONString(salesOrderMap)));
//开始获取token //开始获取token
String erpToken = ""; String erpToken = "";
@ -440,6 +453,8 @@ public class SalesOrderController {
logMap.put("send_res", JSON.toJSONString(salesOrderERPRes)); logMap.put("send_res", JSON.toJSONString(salesOrderERPRes));
logMap.put("tableName", "send_log_xsdd"); logMap.put("tableName", "send_log_xsdd");
JSONObject backReq = new JSONObject();
if ("200".equals(salesOrderERPRes.getString("code"))) { if ("200".equals(salesOrderERPRes.getString("code"))) {
//同步成功 //同步成功
log.info("销售订单同步成功"); log.info("销售订单同步成功");
@ -459,7 +474,7 @@ public class SalesOrderController {
JSONObject orderDetail = JSON.parseObject(JSON.toJSONString(orderDetailObj)); JSONObject orderDetail = JSON.parseObject(JSON.toJSONString(orderDetailObj));
Map backDetail = new HashMap(); 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")); backDetail.put("field_9b817__c", orderDetail.getString("id"));
backDetails.add(backDetail); backDetails.add(backDetail);
@ -467,19 +482,18 @@ public class SalesOrderController {
backDetailMap.put("SalesOrderProductObj", backDetails); backDetailMap.put("SalesOrderProductObj", backDetails);
backReq = crmRequestUtil.crmWithDetail(backReqMap, backDetailMap);
} else { } else {
logMap.put("log_status", "1"); logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因"); logMap.put("res_body", "同步失败:" + salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因");
backReqMap.put("sync_status__c", "option_sync_failed__c"); backReqMap.put("sync_status__c", "option_sync_failed__c");
backReqMap.put("response_status__c", salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因"); backReqMap.put("response_status__c", salesOrderERPRes.getString("message") != null ? salesOrderERPRes.getString("message") : "同步失败,未知原因");
backDetailMap.put("SalesOrderProductObj", Arrays.asList()); backReq = crmRequestUtil.createCRM(backReqMap);
} }
log.info("开始回写数据"); log.info("开始回写数据");
JSONObject backReq = crmRequestUtil.crmWithDetail(backReqMap, backDetailMap);
JSONObject backRes = new JSONObject(); JSONObject backRes = new JSONObject();
try { try {

View File

@ -263,8 +263,12 @@ public class XXTHController {
refundDetailList.add(salesReturnDetail); refundDetailList.add(salesReturnDetail);
} }
salesReturnMap.put("saleReturnDetails", refundDetailList);
Map salesDataMap = new HashMap<>(); Map salesDataMap = new HashMap<>();
salesDataMap.put("data", refundDetailList); salesDataMap.put("data", salesReturnMap);
System.out.println(JSON.parse(JSON.toJSONString(salesDataMap)));
//开始获取token //开始获取token
String erpToken = ""; String erpToken = "";
@ -342,7 +346,7 @@ public class XXTHController {
JSONObject backRes = new JSONObject(); JSONObject backRes = new JSONObject();
try { try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, backReq, JSONObject.class); backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class);
} catch (RestClientException e) { } catch (RestClientException e) {
e.printStackTrace(); e.printStackTrace();
} }