优化用户会话sessionId
This commit is contained in:
parent
a3ced7b444
commit
8adf745796
|
|
@ -1,10 +1,14 @@
|
||||||
package cn.qihangerp.erp.serviceImpl;
|
package cn.qihangerp.erp.serviceImpl;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import cn.qihangerp.service.IAiConversationHistoryService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会话管理服务,用于管理用户的会话ID
|
* 会话管理服务,用于管理用户的会话ID
|
||||||
*/
|
*/
|
||||||
|
|
@ -13,6 +17,9 @@ public class SessionManager {
|
||||||
private static final Map<Long, String> userIdSessionMap = new ConcurrentHashMap<>();
|
private static final Map<Long, String> userIdSessionMap = new ConcurrentHashMap<>();
|
||||||
private static final Map<String, Long> sessionUserIdMap = new ConcurrentHashMap<>();
|
private static final Map<String, Long> sessionUserIdMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAiConversationHistoryService aiConversationHistoryService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取或创建用户的会话ID
|
* 获取或创建用户的会话ID
|
||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
|
|
@ -22,11 +29,28 @@ public class SessionManager {
|
||||||
if (userId == null) {
|
if (userId == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return userIdSessionMap.computeIfAbsent(userId, k -> {
|
|
||||||
String sessionId = UUID.randomUUID().toString();
|
// 先从内存缓存中获取
|
||||||
|
String sessionId = userIdSessionMap.get(userId);
|
||||||
|
if (sessionId != null) {
|
||||||
|
return sessionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内存缓存中没有,从数据库中查找
|
||||||
|
List<String> sessionIds = aiConversationHistoryService.getSessionIdsByUserId(userId);
|
||||||
|
if (sessionIds != null && !sessionIds.isEmpty()) {
|
||||||
|
// 使用第一个会话ID
|
||||||
|
sessionId = sessionIds.get(0);
|
||||||
|
userIdSessionMap.put(userId, sessionId);
|
||||||
|
sessionUserIdMap.put(sessionId, userId);
|
||||||
|
return sessionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数据库中也没有,创建新的会话ID
|
||||||
|
sessionId = UUID.randomUUID().toString();
|
||||||
|
userIdSessionMap.put(userId, sessionId);
|
||||||
sessionUserIdMap.put(sessionId, userId);
|
sessionUserIdMap.put(sessionId, userId);
|
||||||
return sessionId;
|
return sessionId;
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,14 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectSessionIdsByUserId" parameterType="Long" resultType="String">
|
<select id="selectSessionIdsByUserId" parameterType="Long" resultType="String">
|
||||||
select distinct session_id
|
select session_id
|
||||||
|
from (
|
||||||
|
select session_id, max(create_time) as max_create_time
|
||||||
from ai_conversation_history
|
from ai_conversation_history
|
||||||
where user_id = #{userId}
|
where user_id = #{userId}
|
||||||
order by create_time desc
|
group by session_id
|
||||||
|
) as temp
|
||||||
|
order by max_create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<delete id="deleteBySessionId" parameterType="String">
|
<delete id="deleteBySessionId" parameterType="String">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue