Quellcode durchsuchen

fix(prompt): 修复 savePrompt 更新时 version 为 null 导致 NPE,从数据库读取现有版本号

Xiaogang Liao vor 6 Tagen
Ursprung
Commit
fc568a3a1b

+ 18 - 7
cfc-backend/src/main/java/com/etotem/cfc/service/impl/SystemPromptServiceImpl.java

@@ -55,9 +55,18 @@ public class SystemPromptServiceImpl extends ServiceImpl<SystemPromptMapper, Sys
         if (prompt.getId() != null) {
             // 更新时先保存历史版本
             SystemPrompt existing = this.getById(prompt.getId());
-            if (existing != null && !existing.getContent().equals(prompt.getContent())) {
-                saveVersion(existing, prompt.getVersion(), operator, prompt.getRemark());
-                prompt.setVersion(existing.getVersion() + 1);
+            if (existing != null) {
+                // 内容有变化才记录版本
+                if (existing.getContent() == null || !existing.getContent().equals(prompt.getContent())) {
+                    int currentVersion = existing.getVersion() != null ? existing.getVersion() : 1;
+                    saveVersion(existing, currentVersion, operator, prompt.getRemark());
+                    prompt.setVersion(currentVersion + 1);
+                } else {
+                    // 内容未变,保留原版本号
+                    prompt.setVersion(existing.getVersion());
+                }
+            } else {
+                prompt.setVersion(1);
             }
             prompt.setUpdatedBy(operator);
             this.updateById(prompt);
@@ -77,9 +86,10 @@ public class SystemPromptServiceImpl extends ServiceImpl<SystemPromptMapper, Sys
         SystemPrompt prompt = this.getOne(new LambdaQueryWrapper<SystemPrompt>()
                 .eq(SystemPrompt::getPromptKey, promptKey));
         if (prompt != null && prompt.getDefaultContent() != null) {
-            saveVersion(prompt, prompt.getVersion(), "system", "重置为默认内容");
+            int currentVersion = prompt.getVersion() != null ? prompt.getVersion() : 1;
+            saveVersion(prompt, currentVersion, "system", "重置为默认内容");
             prompt.setContent(prompt.getDefaultContent());
-            prompt.setVersion(prompt.getVersion() + 1);
+            prompt.setVersion(currentVersion + 1);
             prompt.setUpdatedBy("system");
             this.updateById(prompt);
         }
@@ -133,11 +143,12 @@ public class SystemPromptServiceImpl extends ServiceImpl<SystemPromptMapper, Sys
         }
         
         // 保存当前版本(回滚前的版本)
-        saveVersion(prompt, prompt.getVersion(), operator, "回滚前备份");
+        int currentVersion = prompt.getVersion() != null ? prompt.getVersion() : 1;
+        saveVersion(prompt, currentVersion, operator, "回滚前备份");
         
         // 恢复到目标版本
         prompt.setContent(target.getContent());
-        prompt.setVersion(prompt.getVersion() + 1);
+        prompt.setVersion(currentVersion + 1);
         prompt.setUpdatedBy("rollback_" + operator);
         this.updateById(prompt);