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 new file mode 100644 index 00000000..9358b16a --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/config/ResponseConfig.java @@ -0,0 +1,102 @@ +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<Object> { + + + @Override + public boolean supports(@Nullable MethodParameter methodParameter, + @Nullable Class<? extends HttpMessageConverter<?>> aClass) { + assert methodParameter != null; + return !methodParameter.getDeclaringClass().getName().contains("swagger"); + } + + @Override + public Object beforeBodyWrite(Object o, @Nullable MethodParameter methodParameter, @Nullable MediaType mediaType, + @Nullable Class<? extends HttpMessageConverter<?>> 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 34eeaf94..275ef2c8 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,5 +1,7 @@ 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 io.swagger.annotations.Api; @@ -32,7 +34,11 @@ public class RasaCmdController { @PostMapping("/runExec") public String runExec(@RequestBody RasaArgument argument) throws ExecutionException, InterruptedException, TimeoutException { - return rasaCmdService.runExec(argument); + String outString = rasaCmdService.runExec(argument); + if (StrUtil.isEmptyIfStr(outString) || !outString.contains("Rasa server is up and running")){ + throw new BusinessException("任务执行异常。详细日志:"+outString); + } + return outString; } 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 new file mode 100644 index 00000000..74fab7d9 --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/domian/GlobalResult.java @@ -0,0 +1,49 @@ +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<T> { + + private int code = 200; + + private String msg = "success"; + + @ApiModelProperty + private T data; + + + public static <T> GlobalResult<T> ok() { + return ok(null); + } + + public static <T> GlobalResult<T> ok(T data) { + GlobalResult<T> globalResult = new GlobalResult<>(); + globalResult.setData(data); + return globalResult; + } + + public static <T> GlobalResult<T> ok(T data, String message) { + GlobalResult<T> globalResult = new GlobalResult<>(); + globalResult.setMsg(message); + globalResult.setData(data); + return globalResult; + } + + public static <T> GlobalResult<T> error(String msg) { + return error(HttpStatus.INTERNAL_SERVER_ERROR.value(), null, msg); + } + + + public static <T> GlobalResult<T> error(int code, T data, String msg) { + GlobalResult<T> 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 new file mode 100644 index 00000000..78b52081 --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/exception/BusinessException.java @@ -0,0 +1,76 @@ +/* + * 文 件 名: 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/service/impl/RasaCmdServiceImpl.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/impl/RasaCmdServiceImpl.java index a1830732..dd4a845c 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 @@ -55,7 +55,6 @@ public class RasaCmdServiceImpl implements RasaCmdService { cmds.add(argument.getFixedModelName()); log.info("trainExec cmd : {}",StrUtil.join(" ",cmds)); - System.out.println("trainExec cmd sout:"+StrUtil.join(" ",cmds)); return String.join("\r\n",execCmd(cmds,s->false,90)); } @@ -69,7 +68,6 @@ public class RasaCmdServiceImpl implements RasaCmdService { List<String> cmds = ListUtil.toList(shellEnv, runShell,mPath,endpoints,argument.getPort()); log.info("runExec cmd : {}",StrUtil.join(" ",cmds)); - System.out.println("runExec cmd sout:"+StrUtil.join(" ",cmds)); return String.join("\r\n",execCmd(cmds,s-> StrUtil.isNotBlank(s)&& s.contains("Rasa server is up and running"),90)); } @@ -88,13 +86,13 @@ public class RasaCmdServiceImpl implements RasaCmdService { BufferedReader bufferedReader = new BufferedReader(reader); List<String> outString = new ArrayList<>(); String resultLines = bufferedReader.readLine(); - while(resultLines != null) { + while( resultLines != null) { resultLines = bufferedReader.readLine(); // 读取下一行 log.info("resultLines:{}",resultLines); + outString.add(resultLines); if (endPredicate.test(resultLines)){ break; } - outString.add(resultLines); } bufferedReader.close(); return outString; diff --git a/virtual-patient-rasa/src/main/resources/application.yml b/virtual-patient-rasa/src/main/resources/application.yml index c86024bf..fd682266 100644 --- a/virtual-patient-rasa/src/main/resources/application.yml +++ b/virtual-patient-rasa/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8081 + port: 8082 servlet: context-path: /