|
|
@@ -1,6 +1,10 @@
|
|
|
package com.fs.his.controller;
|
|
|
|
|
|
import com.baidu.dev2.thirdparty.commons.codec.digest.DigestUtils;
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.fs.erp.dto.OrderItemDTO;
|
|
|
+import com.fs.erp.dto.PaymentDTO;
|
|
|
+import com.fs.erp.dto.ShopOrderDTO;
|
|
|
import com.fs.erp.dto.tl.*;
|
|
|
import com.fs.erp.service.TlErpOrderService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -8,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.Instant;
|
|
|
import java.util.Collections;
|
|
|
|
|
|
@@ -71,7 +76,7 @@ public class JstOrderSyncController {
|
|
|
|
|
|
// 模拟订单同步到兔灵erp接口
|
|
|
@PostMapping("/create")
|
|
|
- public Object syncOrderToJst() {
|
|
|
+ public Object syncOrderToJst() throws JsonProcessingException {
|
|
|
TlCreateOrderRequest request=fillRequest();
|
|
|
log.info("同步订单请求,corp_id={}, so_id={}",
|
|
|
request.getCorpId(),
|
|
|
@@ -83,74 +88,89 @@ public class JstOrderSyncController {
|
|
|
/**
|
|
|
* 辅助方法 填充入参对象JstCreateOrderRequest
|
|
|
* */
|
|
|
+
|
|
|
private TlCreateOrderRequest fillRequest() {
|
|
|
- // 1. 创建主请求对象
|
|
|
TlCreateOrderRequest request = new TlCreateOrderRequest();
|
|
|
-// request.setCorpId("OGc3zcgK6H334BiPn8JNkVvh");
|
|
|
- //正式环境企业id
|
|
|
- request.setCorpId("LwMAMdlBIH7agxn2t9N4Zv40");
|
|
|
+ request.setCorpId("LwMAMdlBIH7agxn2t9N4Zv40"); // 正式环境企业ID
|
|
|
|
|
|
- // 2. 创建商品明细(items)
|
|
|
- TlOrderItemDetail item = new TlOrderItemDetail();
|
|
|
- item.setSkuId("SKU123");
|
|
|
- item.setShopSkuId("SHOP_SKU_001");
|
|
|
- item.setAmount(10000); // 实付金额(分)
|
|
|
- item.setPrice(10000); // 单价(分)
|
|
|
- item.setBasePrice(12000); // 原价(分)
|
|
|
- item.setQty(1);
|
|
|
- item.setName("测试商品");
|
|
|
- item.setOuterOiId("OI_20251110_001");
|
|
|
- // produced_date 也要带时间(测试类是 "2025-11-05T00:00:00Z")
|
|
|
- item.setProducedDate("2025-11-10T00:00:00Z");
|
|
|
|
|
|
- // 3. 创建订单主体
|
|
|
- TlOrderItem order = new TlOrderItem();
|
|
|
- //order.setShopId(18150182);
|
|
|
- order.setShopId(19415819);
|
|
|
- order.setSoId("SO_20251105_001");
|
|
|
- // 使用 ISO 8601 格式:yyyy-MM-dd'T'HH:mm:ss'Z'
|
|
|
+ ShopOrderDTO order = buildOrderItem();
|
|
|
+ request.setData(Collections.singletonList(order));
|
|
|
+
|
|
|
+ TlOptions options = buildOptions();
|
|
|
+ request.setOptions(options);
|
|
|
+
|
|
|
+ return request;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建订单主体
|
|
|
+ private ShopOrderDTO buildOrderItem() {
|
|
|
+ ShopOrderDTO order = new ShopOrderDTO();
|
|
|
+ //order.setShopId(18150182);//测试店铺
|
|
|
+ order.setShopId(19415819L);
|
|
|
+ order.setSoId("SO_20251110_001");
|
|
|
order.setOrderDate("2025-11-10T10:30:00Z");
|
|
|
- order.setShopStatus("paid"); // 必须是字符串,如 "paid"
|
|
|
+ order.setShopStatus("paid");
|
|
|
order.setShopBuyerId("buyer_123");
|
|
|
|
|
|
- order.setReceiverAddress("广东省深圳市南山区___科技园A座101");
|
|
|
+ order.setReceiverState("广东省");
|
|
|
+ order.setReceiverCity("深圳市");
|
|
|
+ order.setReceiverDistrict("南山区");
|
|
|
+ order.setReceiverAddress("科技园A座101");
|
|
|
order.setReceiverName("张三");
|
|
|
- order.setReceiverMobile("13800138000");
|
|
|
+ //order.setReceiverMobile("13800138000");
|
|
|
|
|
|
- order.setPayAmount(10000); // 应付金额(分)
|
|
|
- order.setFreight(0); // 运费(分)
|
|
|
+ order.setPayAmount(10000.0);
|
|
|
+ order.setFreight(0.0);
|
|
|
|
|
|
order.setRemark("卖家备注");
|
|
|
order.setBuyerMessage("请发顺丰");
|
|
|
order.setLabels("测试,同步");
|
|
|
|
|
|
- order.setCreatorName("李四");
|
|
|
- order.setShopModified("2025-11-05T10:30:00Z");
|
|
|
- order.setSendDate("2025-11-05T10:30:00Z");
|
|
|
+ //order.setCreatorName("李四");
|
|
|
+ order.setShopModified("2025-11-10T10:30:00Z");
|
|
|
+ //order.setSendDate("2025-11-10T10:30:00Z");
|
|
|
+ order.setLId("cs12345678912");
|
|
|
+ order.setIsCod(false);
|
|
|
|
|
|
- // 关键:is_cod 不能为 null!聚水潭不接受 null 字段
|
|
|
- order.setIsCod(false); // 显式设置为 false,避免 null
|
|
|
+ // 设置商品明细和支付信息
|
|
|
+ order.setItems(Collections.singletonList(buildOrderItemDetail()));
|
|
|
+ order.setPay(buildPayDetail());
|
|
|
|
|
|
- // l_id 为空字符串(签名时会被过滤,但保留字段)
|
|
|
- order.setLId("");
|
|
|
+ return order;
|
|
|
+ }
|
|
|
|
|
|
- // 设置商品明细
|
|
|
- order.setItems(Collections.singletonList(item));
|
|
|
+ // 构建商品明细
|
|
|
+ private OrderItemDTO buildOrderItemDetail() {
|
|
|
+ OrderItemDTO item = new OrderItemDTO();
|
|
|
+ item.setSkuId("SKU123");
|
|
|
+ item.setShopSkuId("SHOP_SKU_001");
|
|
|
+ item.setAmount(BigDecimal.valueOf(10000)); // 实付金额(分)
|
|
|
+ item.setPrice(BigDecimal.valueOf(10000)); // 单价(分)
|
|
|
+ item.setBasePrice(12000.0); // 原价(分)
|
|
|
+ item.setQty(1);
|
|
|
+ item.setName("测试商品");
|
|
|
+ item.setOuterOiId("OI_20251110_001");
|
|
|
+ item.setProducedDate("2025-11-10T00:00:00Z");
|
|
|
+ return item;
|
|
|
+ }
|
|
|
|
|
|
- // 设置支付明细(必须设置,不能为 null)
|
|
|
- TlPayDetail pay = new TlPayDetail();
|
|
|
+ // 构建支付明细
|
|
|
+ private PaymentDTO buildPayDetail() {
|
|
|
+ PaymentDTO pay = new PaymentDTO();
|
|
|
+ pay.setOuterPayId("PAY_20251110_001"); // 必填
|
|
|
+ pay.setPayDate("2025-11-10T10:30:00Z"); // 必填,RFC3339
|
|
|
pay.setPayment("online");
|
|
|
- pay.setAmount(10000);
|
|
|
- order.setPay(pay);
|
|
|
-
|
|
|
- // 4. 设置 data 列表(仅支持1条)
|
|
|
- request.setData(Collections.singletonList(order));
|
|
|
+ pay.setSellerAccount("alipay@company.com"); // 必填
|
|
|
+ pay.setBuyerAccount("buyer@example.com"); // 必填
|
|
|
+ pay.setAmount(10000.0);
|
|
|
+ return pay;
|
|
|
+ }
|
|
|
|
|
|
- // 5. 设置 options
|
|
|
+ // 构建选项
|
|
|
+ private TlOptions buildOptions() {
|
|
|
TlOptions options = new TlOptions();
|
|
|
options.setJstServerId(1);
|
|
|
- request.setOptions(options);
|
|
|
-
|
|
|
- return request;
|
|
|
+ return options;
|
|
|
}
|
|
|
}
|