refactor(flow): 优化流程控制异步处理和安全配置
- 将任务停止操作改为异步执行以提高性能 - 替换系统输出为日志记录以改进调试追踪 - 为安全工具类添加异常处理和匿名用户支持 - 更新安全配置允许流程执行接口匿名访问 - 为流程控制器添加匿名注解支持外部调用
This commit is contained in:
parent
0dbed4006c
commit
3868194932
@ -1,5 +1,6 @@
|
|||||||
package com.cmvr.web.controller.test;
|
package com.cmvr.web.controller.test;
|
||||||
|
|
||||||
|
import com.cmvr.common.annotation.Anonymous;
|
||||||
import com.cmvr.common.core.controller.BaseController;
|
import com.cmvr.common.core.controller.BaseController;
|
||||||
import com.cmvr.common.core.domain.AjaxResult;
|
import com.cmvr.common.core.domain.AjaxResult;
|
||||||
import com.cmvr.test.flow.context.TaskContextManager;
|
import com.cmvr.test.flow.context.TaskContextManager;
|
||||||
@ -49,6 +50,7 @@ public class TeFlowController extends BaseController {
|
|||||||
|
|
||||||
@ApiOperation("任务执行入口")
|
@ApiOperation("任务执行入口")
|
||||||
@PostMapping("/execute")
|
@PostMapping("/execute")
|
||||||
|
@Anonymous
|
||||||
public AjaxResult execute(@Valid @RequestBody TeTaskExecuteNormalVO taskExecuteNormalVO) {
|
public AjaxResult execute(@Valid @RequestBody TeTaskExecuteNormalVO taskExecuteNormalVO) {
|
||||||
return AjaxResult.success(flowTaskRuntimeService.executeTask(taskExecuteNormalVO));
|
return AjaxResult.success(flowTaskRuntimeService.executeTask(taskExecuteNormalVO));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.cmvr.llm.util;
|
|||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.cmvr.llm.service.LLMAiTtsService;
|
import com.cmvr.llm.service.LLMAiTtsService;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import okhttp3.*;
|
import okhttp3.*;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -20,6 +21,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|||||||
/**
|
/**
|
||||||
* LLM聊天服务 - 严格保持原接口参数
|
* LLM聊天服务 - 严格保持原接口参数
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class LlmChatService {
|
public class LlmChatService {
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -251,9 +253,9 @@ public class LlmChatService {
|
|||||||
processBufferIfNeed();
|
processBufferIfNeed();
|
||||||
}
|
}
|
||||||
} else if ("message_start".equals(event)) {
|
} else if ("message_start".equals(event)) {
|
||||||
System.out.println("消息开始,ID: " + finalMessageId);
|
log.info("消息开始,ID: " + finalMessageId);
|
||||||
} else if ("message_output_start".equals(event)) {
|
} else if ("message_output_start".equals(event)) {
|
||||||
System.out.println("输出开始");
|
log.info("输出开始");
|
||||||
} else if ("message_end".equals(event) || "end".equals(event)) {
|
} else if ("message_end".equals(event) || "end".equals(event)) {
|
||||||
fullContent.append(localContent);
|
fullContent.append(localContent);
|
||||||
finalMessageIdRef.set(finalMessageId);
|
finalMessageIdRef.set(finalMessageId);
|
||||||
@ -359,7 +361,7 @@ public class LlmChatService {
|
|||||||
|
|
||||||
private void yourAsyncMethod(String sentence, JSONObject ttsConfig) {
|
private void yourAsyncMethod(String sentence, JSONObject ttsConfig) {
|
||||||
try {
|
try {
|
||||||
System.out.println("正在处理句子: " + sentence);
|
log.info("正在处理句子: " + sentence);
|
||||||
llmAiTtsService.play(ttsConfig.getString("url"), sentence, ttsConfig.getString("voice"), ttsConfig.getString("speed"), ttsConfig.getString("volume"));
|
llmAiTtsService.play(ttsConfig.getString("url"), sentence, ttsConfig.getString("voice"), ttsConfig.getString("speed"), ttsConfig.getString("volume"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|||||||
@ -115,7 +115,7 @@ public class SecurityConfig
|
|||||||
// 静态资源,可匿名访问
|
// 静态资源,可匿名访问
|
||||||
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
||||||
.antMatchers("/system/file/upload","/evaluation/callback","/flow/**","/flowise/**","/kws/**","/ws/**","/api/grpc/**","/show/**",
|
.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();
|
.anyRequest().authenticated();
|
||||||
})
|
})
|
||||||
|
|||||||
@ -24,10 +24,17 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void insertFill(MetaObject metaObject) {
|
public void insertFill(MetaObject metaObject) {
|
||||||
|
// 获取用户名(异常时给默认值 anonymous)
|
||||||
|
String username;
|
||||||
|
try {
|
||||||
|
username = SecurityUtils.getUsername();
|
||||||
|
} catch (Exception e) {
|
||||||
|
username = "anonymous"; // 匿名接口默认值
|
||||||
|
}
|
||||||
// 起始版本 3.3.0(推荐使用)
|
// 起始版本 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(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(UPDATE_TIME, formatDate(metaObject.getSetterType(CREATE_TIME)), metaObject);
|
||||||
this.setFieldValByName(DELETED, "0", metaObject);
|
this.setFieldValByName(DELETED, "0", metaObject);
|
||||||
// this.setFieldValByName(STATUS, "1", metaObject);
|
// this.setFieldValByName(STATUS, "1", metaObject);
|
||||||
@ -41,7 +48,14 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updateFill(MetaObject metaObject) {
|
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);
|
this.setFieldValByName(UPDATE_TIME, formatDate(metaObject.getSetterType(CREATE_TIME)), metaObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -54,7 +54,10 @@ public class FlowControlService {
|
|||||||
if (ctx.isStopped()) {
|
if (ctx.isStopped()) {
|
||||||
throw new GlobalException("任务已终止,无需重复操作");
|
throw new GlobalException("任务已终止,无需重复操作");
|
||||||
}
|
}
|
||||||
edgeSystemService.stopAll(ctx.getTerminalId());
|
// 异步终止
|
||||||
|
executor.execute(() -> {
|
||||||
|
edgeSystemService.stopAll(ctx.getTerminalId());
|
||||||
|
});
|
||||||
|
|
||||||
// 统一记录日志 + 设置上下文状态 + 数据库状态
|
// 统一记录日志 + 设置上下文状态 + 数据库状态
|
||||||
taskInstHolder.syncStatus(instId, TaskStatusEnum.STOPPED);
|
taskInstHolder.syncStatus(instId, TaskStatusEnum.STOPPED);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user