作者 lixiang

增加redis智能助手设置

@@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
18 import org.jeecg.common.system.base.controller.JeecgController; 18 import org.jeecg.common.system.base.controller.JeecgController;
19 import org.jeecg.modules.airag.app.entity.AiragButton; 19 import org.jeecg.modules.airag.app.entity.AiragButton;
20 import org.jeecg.modules.airag.app.service.IAiragButtonService; 20 import org.jeecg.modules.airag.app.service.IAiragButtonService;
  21 +import org.jeecg.modules.airag.app.service.RedisChatSetService;
21 import org.jeecg.modules.airag.llm.entity.AiragKnowledge; 22 import org.jeecg.modules.airag.llm.entity.AiragKnowledge;
22 import org.jeecg.modules.airag.llm.entity.AiragModel; 23 import org.jeecg.modules.airag.llm.entity.AiragModel;
23 import org.jeecg.modules.airag.llm.service.IAiragKnowledgeService; 24 import org.jeecg.modules.airag.llm.service.IAiragKnowledgeService;
@@ -52,7 +53,8 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting @@ -52,7 +53,8 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
52 53
53 @Autowired 54 @Autowired
54 private IAiragButtonService airagButtonService; 55 private IAiragButtonService airagButtonService;
55 - 56 + @Autowired
  57 + private RedisChatSetService redisChatSetService;
56 /** 58 /**
57 * 获取字段数据 59 * 获取字段数据
58 * 60 *
@@ -65,10 +67,18 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting @@ -65,10 +67,18 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
65 public Result<Map<String, Object>> getConfigData(AiragChatsetting airagChatsetting) { 67 public Result<Map<String, Object>> getConfigData(AiragChatsetting airagChatsetting) {
66 Map<String, Object> result = new HashMap<>(); 68 Map<String, Object> result = new HashMap<>();
67 69
68 - // 获取配置数据(只取第一条)  
69 - AiragChatsetting airagChatsettingConfig = airagChatsettingService.getOne(new QueryWrapper<>()); 70 + // 先从Redis获取配置数据
  71 + AiragChatsetting airagChatsettingConfig = redisChatSetService.getChatSetting();
  72 +
  73 + // 如果Redis中没有,则从数据库查询并存入Redis
70 if (airagChatsettingConfig == null) { 74 if (airagChatsettingConfig == null) {
71 - airagChatsettingConfig = new AiragChatsetting(); 75 + airagChatsettingConfig = airagChatsettingService.getOne(new QueryWrapper<>());
  76 + if (airagChatsettingConfig != null) {
  77 + // 存入Redis
  78 + redisChatSetService.saveChatSetting(airagChatsettingConfig);
  79 + } else {
  80 + airagChatsettingConfig = new AiragChatsetting();
  81 + }
72 } 82 }
73 83
74 // 处理按钮ID为数组 84 // 处理按钮ID为数组
@@ -76,7 +86,7 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting @@ -76,7 +86,7 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
76 airagChatsettingConfig.setButtonIds(Arrays.asList(airagChatsettingConfig.getButtonId().split(","))); 86 airagChatsettingConfig.setButtonIds(Arrays.asList(airagChatsettingConfig.getButtonId().split(",")));
77 } 87 }
78 88
79 - // 直接查询选项数据 89 +
80 result.put("airagChatsettingConfig", airagChatsettingConfig); 90 result.put("airagChatsettingConfig", airagChatsettingConfig);
81 result.put("embeddingOptions", getModelOptions("EMBED")); 91 result.put("embeddingOptions", getModelOptions("EMBED"));
82 result.put("llmOptions", getModelOptions("LLM")); 92 result.put("llmOptions", getModelOptions("LLM"));
@@ -148,30 +158,30 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting @@ -148,30 +158,30 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
148 * @param config 158 * @param config
149 * @return 159 * @return
150 */ 160 */
151 - @AutoLog(value = "智能助手配置-编辑")  
152 - @Operation(summary="智能助手配置-编辑")  
153 - @RequiresPermissions("airagchatsetting:airag_chatsetting:saveConfig")  
154 - @RequestMapping(value = "/saveConfig", method = {RequestMethod.PUT,RequestMethod.POST})  
155 - public Result<String> saveConfig(@RequestBody AiragChatsetting config) {  
156 - // 处理多选按钮ID  
157 - if (config.getButtonIds() != null && !config.getButtonIds().isEmpty()) {  
158 - config.setButtonId(String.join(",", config.getButtonIds()));  
159 - } else {  
160 - config.setButtonId(null);  
161 - }  
162 -  
163 - if(StringUtils.isNotBlank(config.getId())){  
164 - airagChatsettingService.updateById(config);  
165 - return Result.OK("更新成功!");  
166 - }else{  
167 - if(airagChatsettingService.list().isEmpty()){  
168 - return Result.OK("只需要一条配置信息");  
169 - }  
170 - config.setId(UUID.randomUUID().toString());  
171 - airagChatsettingService.save(config);  
172 - return Result.OK("创建成功!");  
173 - }  
174 -  
175 - } 161 + @AutoLog(value = "智能助手配置-编辑")
  162 + @Operation(summary="智能助手配置-编辑")
  163 + @RequiresPermissions("airagchatsetting:airag_chatsetting:saveConfig")
  164 + @RequestMapping(value = "/saveConfig", method = {RequestMethod.PUT,RequestMethod.POST})
  165 + public Result<String> saveConfig(@RequestBody AiragChatsetting config) {
  166 + // 处理多选按钮ID
  167 + if (config.getButtonIds() != null && !config.getButtonIds().isEmpty()) {
  168 + config.setButtonId(String.join(",", config.getButtonIds()));
  169 + } else {
  170 + config.setButtonId(null);
  171 + }
  172 +
  173 + // 数据库操作
  174 + if(StringUtils.isNotBlank(config.getId())) {
  175 + airagChatsettingService.updateById(config);
  176 + } else {
  177 + config.setId(UUID.randomUUID().toString());
  178 + airagChatsettingService.save(config);
  179 + }
  180 +
  181 + // 更新Redis缓存(无论新增还是修改都同步)
  182 + redisChatSetService.saveChatSetting(config);
  183 +
  184 + return Result.OK(StringUtils.isNotBlank(config.getId()) ? "更新成功!" : "创建成功!");
  185 + }
176 186
177 } 187 }
@@ -32,7 +32,7 @@ public class AiragLog implements Serializable { @@ -32,7 +32,7 @@ public class AiragLog implements Serializable {
32 /** 32 /**
33 * 主键 33 * 主键
34 */ 34 */
35 - @TableId(type = IdType.ASSIGN_ID) 35 + @TableId(type = IdType.AUTO)
36 @Schema(description = "主键") 36 @Schema(description = "主键")
37 private String id; 37 private String id;
38 /** 38 /**
  1 +package org.jeecg.modules.airag.app.service;
  2 +
  3 +import lombok.extern.log4j.Log4j2;
  4 +import org.jeecg.modules.airag.airagchatsetting.entity.AiragChatsetting;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.data.redis.core.RedisTemplate;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +@Service
  10 +@Log4j2
  11 +public class RedisChatSetService {
  12 + private static final String CHAT_SETTING_KEY = "airag:chat:setting";
  13 +
  14 + @Autowired
  15 + private RedisTemplate<String, Object> redisTemplate;
  16 +
  17 + // 存值
  18 + public void saveChatSetting(AiragChatsetting setting) {
  19 + redisTemplate.opsForValue().set(CHAT_SETTING_KEY, setting);
  20 + log.info("储存/更新配置成功:{}" , setting);
  21 + }
  22 +
  23 + // 取值
  24 + public AiragChatsetting getChatSetting() {
  25 + AiragChatsetting chatsetting = (AiragChatsetting) redisTemplate.opsForValue().get(CHAT_SETTING_KEY);
  26 + log.info("获取配置成功:{}" , chatsetting);
  27 + return chatsetting;
  28 + }
  29 +}
  1 +package org.jeecg.modules.airag.app.timer;
  2 +
  3 +import lombok.extern.log4j.Log4j2;
  4 +import org.jeecg.modules.airag.airagchatsetting.entity.AiragChatsetting;
  5 +import org.jeecg.modules.airag.airagchatsetting.service.IAiragChatsettingService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.data.redis.core.RedisTemplate;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import javax.annotation.PostConstruct;
  11 +
  12 +@Component
  13 +@Log4j2
  14 +public class TimeTask {
  15 + @Autowired
  16 + private IAiragChatsettingService airagChatsettingService;
  17 + @Autowired
  18 + private RedisTemplate<String, Object> redisTemplate;
  19 +
  20 + private static final String CHAT_SETTING_KEY = "airag:chat:setting";
  21 + @PostConstruct
  22 + public void chatSetting() {
  23 + AiragChatsetting chatsetting = airagChatsettingService.getOne(null);
  24 + if (chatsetting != null) {
  25 + redisTemplate.opsForValue().set(CHAT_SETTING_KEY, chatsetting);
  26 + log.info("加载智能助手配置成功: {}", chatsetting);
  27 + } else {
  28 + log.info("加载智能助手配置失败: {}", chatsetting);
  29 + }
  30 + }
  31 +}