Browse Source

调整兔灵erp物流同步回调接口

cgp 1 week ago
parent
commit
2a0228d29b
1 changed files with 36 additions and 4 deletions
  1. 36 4
      fs-service/src/main/java/com/fs/erp/utils/TlOrderConverter.java

+ 36 - 4
fs-service/src/main/java/com/fs/erp/utils/TlOrderConverter.java

@@ -4,6 +4,10 @@ import com.fs.erp.dto.*;
 import com.fs.erp.dto.tl.*;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -18,7 +22,7 @@ public class TlOrderConverter {
         // 基础字段
         item.setShopId(safeLongToInt(shopOrder.getShopId()));
         item.setSoId(shopOrder.getSoId());
-        item.setOrderDate(shopOrder.getOrderDate());
+        item.setOrderDate(convertLocalToUtcIso(shopOrder.getOrderDate()));
         item.setShopStatus(shopOrder.getShopStatus());
         item.setShopBuyerId(shopOrder.getShopBuyerId());
 
@@ -58,7 +62,7 @@ public class TlOrderConverter {
         item.setPay(toTlPayDetail(shopOrder.getPay()));
 
         // 必填字段:发货日期(用订单日期代替,建议业务层传入正确值)
-        item.setSendDate(shopOrder.getOrderDate());
+        item.setSendDate(convertLocalToUtcIso(shopOrder.getOrderDate()));
 
         // 其他(无对应字段)
 //        item.setNode(null);
@@ -94,7 +98,7 @@ public class TlOrderConverter {
         detail.setName(dto.getName());
         detail.setOuterOiId(dto.getOuterOiId());
         detail.setBatchId(dto.getBatchId());
-        detail.setProducedDate(dto.getProducedDate());
+        detail.setProducedDate(convertLocalToUtcIso(dto.getProducedDate()));
 
         return detail;
     }
@@ -105,7 +109,7 @@ public class TlOrderConverter {
 
         TlPayDetail pay = new TlPayDetail();
         pay.setOuterPayId(dto.getOuterPayId());
-        pay.setPayDate(dto.getPayDate());
+        pay.setPayDate(convertLocalToUtcIso(dto.getPayDate()));
         pay.setPayment(dto.getPayment());
         pay.setSellerAccount(dto.getSellerAccount());
         pay.setBuyerAccount(dto.getBuyerAccount());
@@ -141,4 +145,32 @@ public class TlOrderConverter {
         return value.intValue();
     }
 
+    /**
+     * 将 "yyyy-MM-dd HH:mm:ss" 格式的本地时间(视为 Asia/Shanghai 时区)
+     * 转换为 ISO 8601 UTC 时间字符串(格式:yyyy-MM-dd'T'HH:mm:ss'Z')
+     *
+     * @param localDateTimeStr 例如 "2025-11-11 10:39:03"
+     * @return UTC 时间字符串,例如 "2025-11-11T02:39:03Z"
+     */
+    private static String convertLocalToUtcIso(String localDateTimeStr) {
+        if (localDateTimeStr == null || localDateTimeStr.trim().isEmpty()) {
+            return null;
+        }
+
+        // 定义输入格式
+        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        // 解析为 LocalDateTime(无时区)
+        LocalDateTime localDateTime = LocalDateTime.parse(localDateTimeStr, inputFormatter);
+
+        // 假设该时间是北京时间(UTC+8)
+        ZonedDateTime beijingTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
+
+        // 转换为 UTC 时间
+        ZonedDateTime utcTime = beijingTime.withZoneSameInstant(ZoneId.of("UTC"));
+
+        // 格式化为 ISO 8601 字符串,并替换 +00:00 为 Z
+        return utcTime.format(DateTimeFormatter.ISO_INSTANT);
+    }
+
 }