fuyuchuan 1 dzień temu
rodzic
commit
9d4f949f00

+ 5 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/client/CloudPlatformClient.java

@@ -25,6 +25,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.HttpServerErrorException;
+import org.springframework.web.client.HttpStatusCodeException;
 import org.springframework.web.client.ResourceAccessException;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
@@ -155,6 +156,10 @@ public class CloudPlatformClient {
             ResponseEntity<String> response = restTemplate.exchange(
                     url, HttpMethod.POST, new HttpEntity<>(requestBody, headers), String.class);
             return parsePollResponse(response.getBody());
+        } catch (HttpStatusCodeException ex) {
+            log.warn("[pollCloud] HTTP {} tenantId={}, body={}",
+                    ex.getStatusCode(), tenantId, ex.getResponseBodyAsString());
+            return parsePollResponse(ex.getResponseBodyAsString());
         } catch (Exception e) {
             log.error("[pollCloud] 轮询云端失败 tenantId={}, tableName={}", tenantId, tableName, e);
             return CloudPollResult.builder().requestFailed(true).errorMessage(e.getMessage()).build();

+ 3 - 2
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/CloudSyncPublishServiceImpl.java

@@ -2,7 +2,6 @@ package com.usky.issue.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.issue.domain.IssueSyncDownQueue;
 import com.usky.issue.domain.SysUser;
@@ -12,6 +11,7 @@ import com.usky.issue.service.CloudSyncPublishService;
 import com.usky.issue.service.enums.SyncTypeEnum;
 import com.usky.issue.service.support.CloudEntitySupport;
 import com.usky.issue.service.sync.SyncPayloadSupport;
+import com.usky.issue.service.util.SyncJsonMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -32,7 +32,7 @@ import java.util.List;
 @Service
 public class CloudSyncPublishServiceImpl implements CloudSyncPublishService {
 
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final com.fasterxml.jackson.databind.ObjectMapper OBJECT_MAPPER = SyncJsonMapper.INSTANCE;
 
     @Autowired
     private IssueSyncDownQueueMapper downQueueMapper;
@@ -84,6 +84,7 @@ public class CloudSyncPublishServiceImpl implements CloudSyncPublishService {
             log.info("用户已从 sys_user 入下发队列 userId={}, tenantId={}, operation={}",
                     user.getUserId(), user.getTenantId(), op);
         } catch (Exception e) {
+            log.error("用户入下发队列失败 userId={}, tenantId={}", user.getUserId(), user.getTenantId(), e);
             throw new BusinessException("用户入下发队列失败: " + e.getMessage());
         }
     }

+ 2 - 2
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/CloudSyncReceiveServiceImpl.java

@@ -3,7 +3,7 @@ package com.usky.issue.service.impl;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.usky.issue.service.util.SyncJsonMapper;
 import com.usky.issue.domain.IssueSyncData;
 import com.usky.issue.domain.IssueSyncDownQueue;
 import com.usky.issue.mapper.IssueSyncDataMapper;
@@ -38,7 +38,7 @@ import java.util.Map;
 public class CloudSyncReceiveServiceImpl implements CloudSyncReceiveService {
 
     private static final int POLL_BATCH_SIZE = 100;
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final com.fasterxml.jackson.databind.ObjectMapper OBJECT_MAPPER = SyncJsonMapper.INSTANCE;
 
     @Autowired
     private IssueSyncDataMapper syncDataMapper;

+ 2 - 2
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/LocalPullServiceImpl.java

@@ -2,7 +2,7 @@ package com.usky.issue.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.usky.issue.service.util.SyncJsonMapper;
 import com.usky.issue.domain.IssueCloudConfig;
 import com.usky.issue.domain.IssueSyncCursor;
 import com.usky.issue.domain.IssueSyncData;
@@ -40,7 +40,7 @@ import java.util.stream.Collectors;
 @Service
 public class LocalPullServiceImpl implements LocalPullService {
 
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final com.fasterxml.jackson.databind.ObjectMapper OBJECT_MAPPER = SyncJsonMapper.INSTANCE;
 
     @Autowired
     private IssueSyncDataMapper syncDataMapper;

+ 2 - 1
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/sync/SyncPayloadSupport.java

@@ -3,6 +3,7 @@ package com.usky.issue.service.sync;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usky.issue.domain.IssueSyncData;
 import com.usky.issue.service.enums.SyncTypeEnum;
+import com.usky.issue.service.util.SyncJsonMapper;
 import org.springframework.util.StringUtils;
 
 /**
@@ -13,7 +14,7 @@ import org.springframework.util.StringUtils;
  */
 public final class SyncPayloadSupport {
 
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final ObjectMapper OBJECT_MAPPER = SyncJsonMapper.INSTANCE;
 
     private SyncPayloadSupport() {
     }

+ 2 - 2
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/sync/impl/UserSyncDataApplier.java

@@ -2,8 +2,8 @@ package com.usky.issue.service.sync.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usky.common.core.exception.BusinessException;
+import com.usky.issue.service.util.SyncJsonMapper;
 import com.usky.issue.domain.SysUser;
 import com.usky.issue.mapper.SysUserMapper;
 import com.usky.issue.service.enums.SyncTypeEnum;
@@ -22,7 +22,7 @@ import org.springframework.stereotype.Component;
 @Component
 public class UserSyncDataApplier implements SyncDataApplier {
 
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final com.fasterxml.jackson.databind.ObjectMapper OBJECT_MAPPER = SyncJsonMapper.INSTANCE;
 
     @Autowired
     private SysUserMapper sysUserMapper;

+ 26 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/util/SyncJsonMapper.java

@@ -0,0 +1,26 @@
+package com.usky.issue.service.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+/**
+ * 同步模块 JSON 序列化(支持 LocalDateTime 等 Java 8 时间类型)
+ *
+ * @author fyc
+ * @date 2026-06-29
+ */
+public final class SyncJsonMapper {
+
+    public static final ObjectMapper INSTANCE = create();
+
+    private SyncJsonMapper() {
+    }
+
+    private static ObjectMapper create() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new JavaTimeModule());
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        return mapper;
+    }
+}