From 7245b593b2e8d4e89d8b672aa5a9fcdff341aecb Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 31 Oct 2023 10:52:43 +0800 Subject: [PATCH] =?UTF-8?q?=20rasa=20=E4=BC=98=E5=8C=96=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E5=92=8C=E5=90=AF=E5=8A=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- virtual-patient-rasa/pom.xml | 8 +- .../rasa/VirtualPatientRasaApplication.java | 4 + .../rasa/config/ResponseConfig.java | 102 ------------------ .../rasa/controller/RasaCmdController.java | 2 +- .../rasa/controller/RasaTalkController.java | 30 ++++++ .../rasa/domian/GlobalResult.java | 49 --------- .../rasa/exception/BusinessException.java | 76 ------------- .../rasa/pojo/dto/RasaReqDTO.java | 13 +++ .../rasa/pojo/dto/RasaResDTO.java | 11 ++ .../rasa/service/RasaTalkService.java | 9 ++ .../rasa/service/impl/RasaCmdServiceImpl.java | 10 +- .../service/impl/RasaTalkServiceImpl.java | 32 ++++++ .../src/main/resources/application.yml | 57 +++++++++- 13 files changed, 167 insertions(+), 236 deletions(-) delete mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/config/ResponseConfig.java create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaTalkController.java delete mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/domian/GlobalResult.java delete mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/exception/BusinessException.java create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaReqDTO.java create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaResDTO.java create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaTalkService.java create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaTalkServiceImpl.java diff --git a/virtual-patient-rasa/pom.xml b/virtual-patient-rasa/pom.xml index f4f7e0bf..d6761126 100644 --- a/virtual-patient-rasa/pom.xml +++ b/virtual-patient-rasa/pom.xml @@ -11,7 +11,6 @@ com.superversion virtual-patient-rasa - 0.0.1-SNAPSHOT virtual-patient-rasa virtual-patient-rasa jar @@ -21,6 +20,13 @@ + + + com.supervision + virtual-patient-common + ${project.version} + + org.springframework.boot spring-boot-starter-web diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/VirtualPatientRasaApplication.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/VirtualPatientRasaApplication.java index ea482fe2..f1ec60d4 100644 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/VirtualPatientRasaApplication.java +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/VirtualPatientRasaApplication.java @@ -1,9 +1,13 @@ package com.superversion.rasa; +import com.supervision.config.WebConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.FilterType; @SpringBootApplication +@ComponentScan(basePackages = {"com.superversion.rasa"},excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {WebConfig.class})) public class VirtualPatientRasaApplication { public static void main(String[] args) { diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/config/ResponseConfig.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/config/ResponseConfig.java deleted file mode 100644 index 9358b16a..00000000 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/config/ResponseConfig.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.superversion.rasa.config; - -import cn.hutool.json.JSONUtil; -import com.superversion.rasa.domian.GlobalResult; -import com.superversion.rasa.exception.BusinessException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.core.MethodParameter; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.server.ServerHttpRequest; -import org.springframework.http.server.ServerHttpResponse; -import org.springframework.lang.Nullable; -import org.springframework.validation.BindException; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; - -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 统一返回 - * - * @author wb - * @date 2022/3/10 13:24 - */ -@Slf4j -@RestControllerAdvice(annotations = RestController.class, basePackages = {"com.**.controller"}) -public class ResponseConfig implements ResponseBodyAdvice { - - - @Override - public boolean supports(@Nullable MethodParameter methodParameter, - @Nullable Class> aClass) { - assert methodParameter != null; - return !methodParameter.getDeclaringClass().getName().contains("swagger"); - } - - @Override - public Object beforeBodyWrite(Object o, @Nullable MethodParameter methodParameter, @Nullable MediaType mediaType, - @Nullable Class> aClass, @Nullable ServerHttpRequest serverHttpRequest, - @Nullable ServerHttpResponse serverHttpResponse) { - - - if (Objects.isNull(o)) { - return JSONUtil.toJsonStr(GlobalResult.ok(null, "success")); - } - if (o instanceof GlobalResult) { - return o; - } - // 对于String类型的返回值需要进行特殊处理 - if (o instanceof String) { - return JSONUtil.toJsonStr(GlobalResult.ok(o, "success")); - } - return GlobalResult.ok(o, "success"); - } - - /** - * 业务异常处理 - * - * @param exception 业务异常 - * @return 通用返回值 - */ - @ExceptionHandler(BusinessException.class) - public GlobalResult businessExceptionResponse(BusinessException exception) { - log.error(exception.getMessage(), exception); - return GlobalResult.error(HttpStatus.INTERNAL_SERVER_ERROR.value(), exception.getMessage(), "业务异常"); - } - - - /** - * 参数验证异常处理 - * - * @param exception 参数验证异常 - * @return 通用返回值 - */ - @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class}) - public GlobalResult validationExceptionResponse(MethodArgumentNotValidException exception) { - log.error(exception.getMessage(), exception); - // 格式化错误信息 - String errorMsg = exception.getBindingResult().getFieldErrors().stream() - .map(e -> e.getField() + ":" + e.getDefaultMessage()).collect(Collectors.joining("、")); - return GlobalResult.error(HttpStatus.INTERNAL_SERVER_ERROR.value(), "参数验证异常", errorMsg); - } - - - /** - * 未知异常处理 - * - * @param exception 未知异常 - * @return 通用返回值 - */ - @ExceptionHandler(Exception.class) - public GlobalResult validationExceptionResponse(Exception exception) { - log.error(exception.getMessage(), exception); - return GlobalResult.error(HttpStatus.INTERNAL_SERVER_ERROR.value(), "未知错误", exception.getMessage()); - } - -} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaCmdController.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaCmdController.java index 275ef2c8..475e7653 100644 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaCmdController.java +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaCmdController.java @@ -1,9 +1,9 @@ package com.superversion.rasa.controller; import cn.hutool.core.util.StrUtil; -import com.superversion.rasa.exception.BusinessException; import com.superversion.rasa.pojo.vo.RasaArgument; import com.superversion.rasa.service.RasaCmdService; +import com.supervision.exception.BusinessException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaTalkController.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaTalkController.java new file mode 100644 index 00000000..a24e4ec0 --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaTalkController.java @@ -0,0 +1,30 @@ +package com.superversion.rasa.controller; + +import com.superversion.rasa.service.RasaTalkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api(tags = "rasa文件保存") +@RestController +@RequestMapping("rasaFile") +@RequiredArgsConstructor +public class RasaTalkController { + + @Autowired + private RasaTalkService rasaTalkService; + + @ApiOperation("rasa对话") + @GetMapping("talkRasa") + public List talkRasa(String question, String sessionId){ + + return null; + } + +} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/domian/GlobalResult.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/domian/GlobalResult.java deleted file mode 100644 index 74fab7d9..00000000 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/domian/GlobalResult.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.superversion.rasa.domian; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.http.HttpStatus; - -@Data -@ApiModel -public class GlobalResult { - - private int code = 200; - - private String msg = "success"; - - @ApiModelProperty - private T data; - - - public static GlobalResult ok() { - return ok(null); - } - - public static GlobalResult ok(T data) { - GlobalResult globalResult = new GlobalResult<>(); - globalResult.setData(data); - return globalResult; - } - - public static GlobalResult ok(T data, String message) { - GlobalResult globalResult = new GlobalResult<>(); - globalResult.setMsg(message); - globalResult.setData(data); - return globalResult; - } - - public static GlobalResult error(String msg) { - return error(HttpStatus.INTERNAL_SERVER_ERROR.value(), null, msg); - } - - - public static GlobalResult error(int code, T data, String msg) { - GlobalResult globalResult = new GlobalResult<>(); - globalResult.setCode(code); - globalResult.setData(data); - globalResult.setMsg(msg); - return globalResult; - } -} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/exception/BusinessException.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/exception/BusinessException.java deleted file mode 100644 index 78b52081..00000000 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/exception/BusinessException.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 文 件 名: CustomException - * 版 权: - * 描 述: <描述> - * 修 改 人: RedName - * 修改时间: 2022/8/5 - * 跟踪单号: <跟踪单号> - * 修改单号: <修改单号> - * 修改内容: <修改内容> - */ -package com.superversion.rasa.exception; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; - -/** - * <功能详细描述> - * 自定义异常 - * - * @author ljt - * @version [版本号, 2022/8/5] - * @see [相关类/方法] - * @since [产品/模块版本] - */ -@Slf4j -public class BusinessException extends RuntimeException { - /** - * 异常编码 - */ - private final Integer code; - - /** - * 异常信息 - */ - private final String message; - - public BusinessException(Throwable cause) { - super(cause); - this.code = HttpStatus.INTERNAL_SERVER_ERROR.value(); - this.message = null; - - } - - public BusinessException(Throwable cause, String message) { - super(cause); - this.code = HttpStatus.INTERNAL_SERVER_ERROR.value(); - this.message = message; - - } - - public BusinessException(String message) { - this.code = HttpStatus.INTERNAL_SERVER_ERROR.value(); - this.message = message; - } - - public BusinessException(String message, Integer code) { - this.message = message; - this.code = code; - } - - public BusinessException(String message, Throwable e) { - super(message, e); - log.error(message, e); - this.code = HttpStatus.INTERNAL_SERVER_ERROR.value(); - this.message = message; - } - - @Override - public String getMessage() { - return message; - } - - public Integer getCode() { - return code; - } -} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaReqDTO.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaReqDTO.java new file mode 100644 index 00000000..230e90cc --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaReqDTO.java @@ -0,0 +1,13 @@ +package com.superversion.rasa.pojo.dto; + +import lombok.Data; + +@Data +public class RasaReqDTO { + + private String sender; + + private String message; + + +} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaResDTO.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaResDTO.java new file mode 100644 index 00000000..1bd8b98f --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/dto/RasaResDTO.java @@ -0,0 +1,11 @@ +package com.superversion.rasa.pojo.dto; + +import lombok.Data; + +@Data +public class RasaResDTO { + + private String recipient_id; + + private String text; +} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaTalkService.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaTalkService.java new file mode 100644 index 00000000..05a5ee0b --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaTalkService.java @@ -0,0 +1,9 @@ +package com.superversion.rasa.service; + +import java.util.List; + +public interface RasaTalkService { + + + List talkRasa(String question, String sessionId) ; +} diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaCmdServiceImpl.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaCmdServiceImpl.java index dd4a845c..78df0ad4 100644 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaCmdServiceImpl.java +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaCmdServiceImpl.java @@ -75,19 +75,19 @@ public class RasaCmdServiceImpl implements RasaCmdService { private List execCmd(List cmds, Predicate endPredicate, long timeOut) throws InterruptedException, ExecutionException, TimeoutException { ProcessBuilder processBuilder = new ProcessBuilder(cmds); - processBuilder.directory(new File(shellWork)); // 设置工作目录 - processBuilder.redirectErrorStream(true); // 合并标准输出和错误输出 + processBuilder.directory(new File(shellWork)); + processBuilder.redirectErrorStream(true); ThreadPoolExecutor instance = ThreadPoolExecutorConfig.getInstance(); Future> future = instance.submit(() -> { - Process process = processBuilder.start(); // 启动进程 - InputStream inputStream = process.getInputStream(); // 获取进程的输出流 + Process process = processBuilder.start(); + InputStream inputStream = process.getInputStream(); Reader reader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader bufferedReader = new BufferedReader(reader); List outString = new ArrayList<>(); String resultLines = bufferedReader.readLine(); while( resultLines != null) { - resultLines = bufferedReader.readLine(); // 读取下一行 + resultLines = bufferedReader.readLine(); log.info("resultLines:{}",resultLines); outString.add(resultLines); if (endPredicate.test(resultLines)){ diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaTalkServiceImpl.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaTalkServiceImpl.java new file mode 100644 index 00000000..a0aca9f9 --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaTalkServiceImpl.java @@ -0,0 +1,32 @@ +package com.superversion.rasa.service.impl; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.superversion.rasa.pojo.dto.RasaReqDTO; +import com.superversion.rasa.pojo.dto.RasaResDTO; +import com.superversion.rasa.service.RasaTalkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; +@Service +@Slf4j +@RequiredArgsConstructor +public class RasaTalkServiceImpl implements RasaTalkService { + + @Value("${rasa.url}") + private String rasaUrl; + @Override + public List talkRasa(String question, String sessionId) { + + RasaReqDTO rasaReqDTO = new RasaReqDTO(); + rasaReqDTO.setSender(sessionId); + rasaReqDTO.setMessage(question); + String post = HttpUtil.post(rasaUrl, JSONUtil.toJsonStr(rasaReqDTO)); + List list = JSONUtil.toList(post, RasaResDTO.class); + return list.stream().map(RasaResDTO::getText).collect(Collectors.toList()); + } +} diff --git a/virtual-patient-rasa/src/main/resources/application.yml b/virtual-patient-rasa/src/main/resources/application.yml index fd682266..dcbc4595 100644 --- a/virtual-patient-rasa/src/main/resources/application.yml +++ b/virtual-patient-rasa/src/main/resources/application.yml @@ -1,7 +1,15 @@ server: - port: 8082 + port: 8890 servlet: context-path: / + undertow: + # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的 + max-http-post-size: -1 + # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理 + # 每块buffer的空间大小,越小的空间被利用越充分 + buffer-size: 512 + # 是否分配的直接内存 + direct-buffers: true rasa: data-path: /rasa/v3_jiazhuangxian/ # 文件解压后存放位置 @@ -9,4 +17,49 @@ rasa: endpoints: /rasa/endpoints.yml # 启动的配置项,应该是写在配置文件里面 config: /rasa/config-local.yml # 启动rasa需要的配置文件,在配置文件中配置 train-shell: /home/rasa_manage/train.sh - run-shell: /home/rasa_manage/run.sh \ No newline at end of file + run-shell: /home/rasa_manage/run.sh + url: 192.168.10.137:5005/webhooks/rest/webhook +spring: + profiles: + active: dev + application: + name: virtual-patient + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + + ##数据源配置 + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.10.138:3306/virtual_patient?useUnicode=true&characterEncoding=utf-8&useSSL=true&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8 + username: root + password: '123456' + initial-size: 5 # 初始化大小 + min-idle: 10 # 最小连接数 + max-active: 20 # 最大连接数 + max-wait: 60000 # 获取连接时的最大等待时间 + min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒 + time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒 + filters: stat,wall # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计 + validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效 + test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能 + test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能 + test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能 + stat-view-servlet: + enabled: false # 是否开启 StatViewServlet + filter: + stat: + enabled: true # 是否开启 FilterStat,默认true + log-slow-sql: true # 是否开启 慢SQL 记录,默认false + slow-sql-millis: 5000 # 慢 SQL 的标准,默认 3000,单位:毫秒 + merge-sql: false # 合并多个连接池的监控数据,默认false + + + +mybatis-plus: + mapper-locations: classpath*:mapper/**/*.xml + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file