refactor(flow): 优化流程控制异步处理和安全配置

- 将任务停止操作改为异步执行以提高性能
- 替换系统输出为日志记录以改进调试追踪
- 为安全工具类添加异常处理和匿名用户支持
- 更新安全配置允许流程执行接口匿名访问
- 为流程控制器添加匿名注解支持外部调用
This commit is contained in:
lixiaolong 2026-05-11 11:47:46 +08:00
parent 0dbed4006c
commit 3868194932
5 changed files with 29 additions and 8 deletions

View File

@ -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));
}

View File

@ -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);

View File

@ -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();
})

View File

@ -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);
}

View File

@ -54,7 +54,10 @@ public class FlowControlService {
if (ctx.isStopped()) {
throw new GlobalException("任务已终止,无需重复操作");
}
// 异步终止
executor.execute(() -> {
edgeSystemService.stopAll(ctx.getTerminalId());
});
// 统一记录日志 + 设置上下文状态 + 数据库状态
taskInstHolder.syncStatus(instId, TaskStatusEnum.STOPPED);