From 42cd5f8513fe55e3a461ab77be46cf83df1b6560 Mon Sep 17 00:00:00 2001 From: van Date: Wed, 1 Apr 2026 15:25:20 +0800 Subject: [PATCH] 1 --- src/main/java/cn/van/business/util/JDUtil.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index aafdf2e..0816747 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -15,6 +15,7 @@ import cn.van.business.util.ds.GPTClientUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.jd.open.api.sdk.DefaultJdClient; import com.jd.open.api.sdk.JdClient; @@ -89,6 +90,8 @@ public class JDUtil { private static final String ACCESS_TOKEN = ""; private static final Logger logger = LoggerFactory.getLogger(JDUtil.class); private static final String INTERACTION_STATE_PREFIX = "interaction_state:"; + /** 与 ruoyi Jarvis 企微多轮会话共用 Redis 时的键前缀;非微信 wxid 流程,不得按 UserInteractionState 解析 */ + private static final String WECOM_SESSION_REDIS_PREFIX = INTERACTION_STATE_PREFIX + "wecom:"; private static final String PRODUCT_TYPE_MAP_PREFIX = "product_type_map"; private static final String PRODUCT_TYPE_MAP_PREFIX_TB = "product_type_map_tb"; private static HashMap productTypeMap = new HashMap<>(); @@ -164,8 +167,9 @@ public class JDUtil { private final OrderUtil orderUtil; private final DeepSeekClientUtil deepSeekClientUtil; private final GPTClientUtil gptClientUtil; - // 添加ObjectMapper来序列化和反序列化UserInteractionState - private final ObjectMapper objectMapper = new ObjectMapper(); + // 添加ObjectMapper来序列化和反序列化UserInteractionState(忽略其它系统写入的扩展字段) + private final ObjectMapper objectMapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); private final ConcurrentHashMap userInteractionStates = new ConcurrentHashMap<>(); private HashMap cacheMap = new HashMap<>(); @@ -855,6 +859,9 @@ public class JDUtil { public void cleanUpTimeoutStates() { LocalDateTime now = LocalDateTime.now(); redisTemplate.keys(INTERACTION_STATE_PREFIX + "*").forEach(key -> { + if (key == null || key.startsWith(WECOM_SESSION_REDIS_PREFIX)) { + return; + } String stateJson = redisTemplate.opsForValue().get(key); try { UserInteractionState state = objectMapper.readValue(stateJson, UserInteractionState.class);