From 386819493229d3d8f45555d6e42535fa463ebaad Mon Sep 17 00:00:00 2001 From: lixiaolong <702156524@qq.com> Date: Mon, 11 May 2026 11:47:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor(flow):=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=8E=A7=E5=88=B6=E5=BC=82=E6=AD=A5=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=92=8C=E5=AE=89=E5=85=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将任务停止操作改为异步执行以提高性能 - 替换系统输出为日志记录以改进调试追踪 - 为安全工具类添加异常处理和匿名用户支持 - 更新安全配置允许流程执行接口匿名访问 - 为流程控制器添加匿名注解支持外部调用 --- .../web/controller/test/TeFlowController.java | 2 ++ .../com/cmvr/llm/util/LlmChatService.java | 8 +++++--- .../cmvr/framework/config/SecurityConfig.java | 2 +- .../mybatisPlus/MyMetaObjectHandler.java | 20 ++++++++++++++++--- .../test/flow/control/FlowControlService.java | 5 ++++- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java index 16af03a..1b1fd0f 100644 --- a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java +++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java @@ -1,5 +1,6 @@ package com.cmvr.web.controller.test; +import com.cmvr.common.annotation.Anonymous; import com.cmvr.common.core.controller.BaseController; import com.cmvr.common.core.domain.AjaxResult; import com.cmvr.test.flow.context.TaskContextManager; @@ -49,6 +50,7 @@ public class TeFlowController extends BaseController { @ApiOperation("任务执行入口") @PostMapping("/execute") + @Anonymous public AjaxResult execute(@Valid @RequestBody TeTaskExecuteNormalVO taskExecuteNormalVO) { return AjaxResult.success(flowTaskRuntimeService.executeTask(taskExecuteNormalVO)); } diff --git a/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/util/LlmChatService.java b/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/util/LlmChatService.java index fa79a79..8bc7a93 100644 --- a/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/util/LlmChatService.java +++ b/cmvr-iot-api/cmvr-iot-llm/src/main/java/com/cmvr/llm/util/LlmChatService.java @@ -3,6 +3,7 @@ package com.cmvr.llm.util; import com.alibaba.fastjson2.JSONObject; import com.cmvr.llm.service.LLMAiTtsService; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,6 +21,7 @@ import java.util.concurrent.atomic.AtomicReference; /** * LLM聊天服务 - 严格保持原接口参数 */ +@Slf4j @Service public class LlmChatService { @Autowired @@ -251,9 +253,9 @@ public class LlmChatService { processBufferIfNeed(); } } else if ("message_start".equals(event)) { - System.out.println("消息开始,ID: " + finalMessageId); + log.info("消息开始,ID: " + finalMessageId); } else if ("message_output_start".equals(event)) { - System.out.println("输出开始"); + log.info("输出开始"); } else if ("message_end".equals(event) || "end".equals(event)) { fullContent.append(localContent); finalMessageIdRef.set(finalMessageId); @@ -359,7 +361,7 @@ public class LlmChatService { private void yourAsyncMethod(String sentence, JSONObject ttsConfig) { try { - System.out.println("正在处理句子: " + sentence); + log.info("正在处理句子: " + sentence); llmAiTtsService.play(ttsConfig.getString("url"), sentence, ttsConfig.getString("voice"), ttsConfig.getString("speed"), ttsConfig.getString("volume")); } catch (Exception e) { throw new RuntimeException(e); diff --git a/cmvr-iot-framework/src/main/java/com/cmvr/framework/config/SecurityConfig.java b/cmvr-iot-framework/src/main/java/com/cmvr/framework/config/SecurityConfig.java index 3419b27..95db287 100644 --- a/cmvr-iot-framework/src/main/java/com/cmvr/framework/config/SecurityConfig.java +++ b/cmvr-iot-framework/src/main/java/com/cmvr/framework/config/SecurityConfig.java @@ -115,7 +115,7 @@ public class SecurityConfig // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/system/file/upload","/evaluation/callback","/flow/**","/flowise/**","/kws/**","/ws/**","/api/grpc/**","/show/**", - "/node-red/**","/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/ti/**").permitAll() + "/node-red/**","/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/ti/**", "/flow/execute").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }) diff --git a/cmvr-iot-framework/src/main/java/com/cmvr/framework/mybatisPlus/MyMetaObjectHandler.java b/cmvr-iot-framework/src/main/java/com/cmvr/framework/mybatisPlus/MyMetaObjectHandler.java index d53d4e0..836ffea 100644 --- a/cmvr-iot-framework/src/main/java/com/cmvr/framework/mybatisPlus/MyMetaObjectHandler.java +++ b/cmvr-iot-framework/src/main/java/com/cmvr/framework/mybatisPlus/MyMetaObjectHandler.java @@ -24,10 +24,17 @@ public class MyMetaObjectHandler implements MetaObjectHandler { */ @Override public void insertFill(MetaObject metaObject) { + // 获取用户名(异常时给默认值 anonymous) + String username; + try { + username = SecurityUtils.getUsername(); + } catch (Exception e) { + username = "anonymous"; // 匿名接口默认值 + } // 起始版本 3.3.0(推荐使用) - this.setFieldValByName(CREATE_BY, SecurityUtils.getUsername(), metaObject); + this.setFieldValByName(CREATE_BY, username, metaObject); this.setFieldValByName(CREATE_TIME, formatDate(metaObject.getSetterType(CREATE_TIME)), metaObject); - this.setFieldValByName(UPDATE_BY, SecurityUtils.getUsername(), metaObject); + this.setFieldValByName(UPDATE_BY, username, metaObject); this.setFieldValByName(UPDATE_TIME, formatDate(metaObject.getSetterType(CREATE_TIME)), metaObject); this.setFieldValByName(DELETED, "0", metaObject); // this.setFieldValByName(STATUS, "1", metaObject); @@ -41,7 +48,14 @@ public class MyMetaObjectHandler implements MetaObjectHandler { */ @Override public void updateFill(MetaObject metaObject) { - this.setFieldValByName(UPDATE_BY, SecurityUtils.getUsername(), metaObject); + // 获取用户名(异常时给默认值 anonymous) + String username; + try { + username = SecurityUtils.getUsername(); + } catch (Exception e) { + username = "anonymous"; // 匿名接口默认值 + } + this.setFieldValByName(UPDATE_BY, username, metaObject); this.setFieldValByName(UPDATE_TIME, formatDate(metaObject.getSetterType(CREATE_TIME)), metaObject); } diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/control/FlowControlService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/control/FlowControlService.java index 5e35a9c..7ab789e 100644 --- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/control/FlowControlService.java +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/control/FlowControlService.java @@ -54,7 +54,10 @@ public class FlowControlService { if (ctx.isStopped()) { throw new GlobalException("任务已终止,无需重复操作"); } - edgeSystemService.stopAll(ctx.getTerminalId()); + // 异步终止 + executor.execute(() -> { + edgeSystemService.stopAll(ctx.getTerminalId()); + }); // 统一记录日志 + 设置上下文状态 + 数据库状态 taskInstHolder.syncStatus(instId, TaskStatusEnum.STOPPED);