优化用户会话sessionId
This commit is contained in:
parent
a3ced7b444
commit
8adf745796
|
|
@ -1,10 +1,14 @@
|
|||
package cn.qihangerp.erp.serviceImpl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import cn.qihangerp.service.IAiConversationHistoryService;
|
||||
|
||||
/**
|
||||
* 会话管理服务,用于管理用户的会话ID
|
||||
*/
|
||||
|
|
@ -13,6 +17,9 @@ public class SessionManager {
|
|||
private static final Map<Long, String> userIdSessionMap = new ConcurrentHashMap<>();
|
||||
private static final Map<String, Long> sessionUserIdMap = new ConcurrentHashMap<>();
|
||||
|
||||
@Autowired
|
||||
private IAiConversationHistoryService aiConversationHistoryService;
|
||||
|
||||
/**
|
||||
* 获取或创建用户的会话ID
|
||||
* @param userId 用户ID
|
||||
|
|
@ -22,11 +29,28 @@ public class SessionManager {
|
|||
if (userId == 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);
|
||||
return sessionId;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -37,10 +37,14 @@
|
|||
</select>
|
||||
|
||||
<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
|
||||
where user_id = #{userId}
|
||||
order by create_time desc
|
||||
group by session_id
|
||||
) as temp
|
||||
order by max_create_time desc
|
||||
</select>
|
||||
|
||||
<delete id="deleteBySessionId" parameterType="String">
|
||||
|
|
|
|||
Loading…
Reference in New Issue