Browse Source

fix: gmt_payment 修正 Alipay SDK UTC 偏移 + gmtCreate 显式 Asia/Shanghai + VO 补 updatedTime

alphaH 2 weeks ago
parent
commit
dfe5023e18

+ 3 - 0
java/src/main/java/com/payment/platform/module/payment/facetoface/dto/F2fTradeRecordVO.java

@@ -46,4 +46,7 @@ public class F2fTradeRecordVO {
 
     @Schema(description = "创建时间")
     private OffsetDateTime createdTime;
+
+    @Schema(description = "更新时间")
+    private OffsetDateTime updatedTime;
 }

+ 7 - 3
java/src/main/java/com/payment/platform/module/payment/facetoface/service/FacetofaceService.java

@@ -415,7 +415,7 @@ public class FacetofaceService {
         tradeRecord.setSubject(StrUtil.isNotBlank(dto.getSubject()) ? dto.getSubject() : "当面付收款");
         tradeRecord.setTradeStatus(F2fTradeStatus.WAIT_BUYER_PAY.getValue());
         tradeRecord.setEnterpriseId(dto.getEnterpriseId());
-        tradeRecord.setGmtCreate(OffsetDateTime.now());
+        tradeRecord.setGmtCreate(OffsetDateTime.now(java.time.ZoneId.of("Asia/Shanghai")));
         tradeRecord.setNextQueryTime(OffsetDateTime.now().plusMinutes(1));
         tradeRecord.setQueryCount(0);
         tradeRecord.setStatus("0");
@@ -514,7 +514,9 @@ public class FacetofaceService {
             record.setBuyerId(response.getBuyerUserId());
             record.setBuyerLogonId(response.getBuyerLogonId());
             if (response.getSendPayDate() != null) {
-                record.setGmtPayment(response.getSendPayDate().toInstant().atOffset(java.time.ZoneOffset.ofHours(8)));
+                // Alipay SDK 将北京时间字符串按 JVM 默认时区(UTC)解析,instant 偏 +8h,修正后转为 +08:00
+                record.setGmtPayment(response.getSendPayDate().toInstant()
+                        .minusSeconds(8 * 3600).atOffset(java.time.ZoneOffset.ofHours(8)));
             }
             // 终态不继续轮询
             if (alipayTradeStatus != null &&
@@ -650,7 +652,9 @@ public class FacetofaceService {
             record.setBuyerId(response.getBuyerUserId());
             record.setBuyerLogonId(response.getBuyerLogonId());
             if (response.getSendPayDate() != null) {
-                record.setGmtPayment(response.getSendPayDate().toInstant().atOffset(java.time.ZoneOffset.ofHours(8)));
+                // Alipay SDK 将北京时间字符串按 JVM 默认时区(UTC)解析,instant 偏 +8h,修正后转为 +08:00
+                record.setGmtPayment(response.getSendPayDate().toInstant()
+                        .minusSeconds(8 * 3600).atOffset(java.time.ZoneOffset.ofHours(8)));
             }
 
             // 终态停止轮询