package com.xly.service; import cn.hutool.core.util.ObjectUtil; import com.xly.agent.ChatiAgent; import com.xly.agent.DynamicTableNl2SqlAiAgent; import com.xly.agent.ErpAiAgent; import com.xly.config.OperableChatMemoryProvider; import com.xly.entity.SceneDto; import com.xly.entity.ToolMeta; import com.xly.entity.UserSceneSession; import com.xly.mapper.UserSceneSessionMapper; import com.xly.runner.AppStartupRunner; import dev.langchain4j.memory.chat.ChatMemoryProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service("userSceneSessionService") public class UserSceneSessionService { // 新增核心缓存:用户场景会话状态(记录是否选场景、当前场景、权限内场景) public static final Map USER_SCENE_SESSION_CACHE = new HashMap<>(); // 原有缓存:Agent实例、会话记忆 public static final Map ERP_AGENT_CACHE = new HashMap<>(); public static final Map CHAT_AGENT_CACHE = new HashMap<>(); public static final Map ERP_DynamicTableNl2SqlAiAgent_CACHE = new HashMap<>(); @Autowired private UserSceneSessionMapper modelMapper; public List> getModelAllByUserId(String sUserId){ return modelMapper.findUserPermissions(sUserId); } public List getModle(String sUserId, String sUserType){ List> modleList = getModelAllByUserId(sUserId); Set dataSet = new HashSet<>(); if(ObjectUtil.isNotEmpty(modleList)){ modleList.forEach(one->{ String sKeys = one.get("sKey").toString(); String[] sIds = sKeys.split("-"); for(String sId:sIds){ if(ObjectUtil.isNotEmpty(sId)){ dataSet.add(sId); } } }); } List data = new ArrayList<>(dataSet); if("sysadmin".equals(sUserType)){ return AppStartupRunner.getAllTools(); }else { return AppStartupRunner.getTools(data); } } /*** * @Author 钱豹 * @Date 14:03 2026/2/10 * @Param [] * @return void * @Description 清除所有记忆 **/ public void cleanAllSession(){ USER_SCENE_SESSION_CACHE.clear(); ERP_AGENT_CACHE.clear(); CHAT_AGENT_CACHE.clear(); ERP_DynamicTableNl2SqlAiAgent_CACHE.clear(); } public UserSceneSession getUserSceneSession(String sUserId, String sUserType,String authorization){ if (USER_SCENE_SESSION_CACHE.containsKey(sUserId)) { return USER_SCENE_SESSION_CACHE.get(sUserId); } UserSceneSession userSceneSession = new UserSceneSession(); List tools = getModle(sUserId,sUserType); List sceneDtos = getAiAgent(tools); userSceneSession.setSceneSelected(false); // 初始状态:未选择场景 userSceneSession.setAuthorization(authorization);//存入用户token userSceneSession.setUserId(sUserId);//存入用户ID userSceneSession.setAuthTool(tools);//方法 userSceneSession.setAuthScenes(sceneDtos);//场景 // 3. 缓存会话 USER_SCENE_SESSION_CACHE.put(sUserId, userSceneSession); return userSceneSession; } public List getAiAgent(List tools){ List aiAgentIds = new ArrayList<>(); tools.forEach(tool->{ aiAgentIds.add(tool.getSSceneId()); }); List agAll = AppStartupRunner.getAiAgentCache(); return agAll.stream().filter(one-> aiAgentIds.contains(one.getSId())).collect(Collectors.toList()); } }