This commit is contained in:
van
2026-04-01 15:25:20 +08:00
parent 2722551225
commit 42cd5f8513

View File

@@ -15,6 +15,7 @@ import cn.van.business.util.ds.GPTClientUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.jd.open.api.sdk.DefaultJdClient; import com.jd.open.api.sdk.DefaultJdClient;
import com.jd.open.api.sdk.JdClient; import com.jd.open.api.sdk.JdClient;
@@ -89,6 +90,8 @@ public class JDUtil {
private static final String ACCESS_TOKEN = ""; private static final String ACCESS_TOKEN = "";
private static final Logger logger = LoggerFactory.getLogger(JDUtil.class); private static final Logger logger = LoggerFactory.getLogger(JDUtil.class);
private static final String INTERACTION_STATE_PREFIX = "interaction_state:"; 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 = "product_type_map";
private static final String PRODUCT_TYPE_MAP_PREFIX_TB = "product_type_map_tb"; private static final String PRODUCT_TYPE_MAP_PREFIX_TB = "product_type_map_tb";
private static HashMap<String, String> productTypeMap = new HashMap<>(); private static HashMap<String, String> productTypeMap = new HashMap<>();
@@ -164,8 +167,9 @@ public class JDUtil {
private final OrderUtil orderUtil; private final OrderUtil orderUtil;
private final DeepSeekClientUtil deepSeekClientUtil; private final DeepSeekClientUtil deepSeekClientUtil;
private final GPTClientUtil gptClientUtil; private final GPTClientUtil gptClientUtil;
// 添加ObjectMapper来序列化和反序列化UserInteractionState // 添加ObjectMapper来序列化和反序列化UserInteractionState(忽略其它系统写入的扩展字段)
private final ObjectMapper objectMapper = new ObjectMapper(); private final ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
private final ConcurrentHashMap<String, UserInteractionState> userInteractionStates = new ConcurrentHashMap<>(); private final ConcurrentHashMap<String, UserInteractionState> userInteractionStates = new ConcurrentHashMap<>();
private HashMap<String, String> cacheMap = new HashMap<>(); private HashMap<String, String> cacheMap = new HashMap<>();
@@ -855,6 +859,9 @@ public class JDUtil {
public void cleanUpTimeoutStates() { public void cleanUpTimeoutStates() {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
redisTemplate.keys(INTERACTION_STATE_PREFIX + "*").forEach(key -> { redisTemplate.keys(INTERACTION_STATE_PREFIX + "*").forEach(key -> {
if (key == null || key.startsWith(WECOM_SESSION_REDIS_PREFIX)) {
return;
}
String stateJson = redisTemplate.opsForValue().get(key); String stateJson = redisTemplate.opsForValue().get(key);
try { try {
UserInteractionState state = objectMapper.readValue(stateJson, UserInteractionState.class); UserInteractionState state = objectMapper.readValue(stateJson, UserInteractionState.class);