From 32c64a742d2b86001cbc3da544e4e80fa5c0ef6a Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 31 Oct 2023 13:55:04 +0800 Subject: [PATCH] =?UTF-8?q?=20rasa=20=E8=8D=89=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/RasaModelInfoMapper.java | 11 +++ .../com/supervision/model/RasaModelInfo.java | 83 +++++++++++++++++++ .../supervision/service/RasaModeService.java | 9 ++ .../service/impl/RasaModeServiceImpl.java | 21 +++++ .../resources/mapper/RasaModelInfoMapper.xml | 26 ++++++ virtual-patient-rasa/pom.xml | 6 ++ .../rasa/VirtualPatientRasaApplication.java | 4 +- .../rasa/controller/RasaCmdController.java | 23 +++++ .../rasa/pojo/vo/RasaArgument.java | 1 + .../rasa/service/RasaCmdService.java | 2 + .../rasa/service/impl/RasaCmdServiceImpl.java | 37 ++++++++- .../com/superversion/rasa/util/PortUtil.java | 40 +++++++++ .../service/impl/RasaServiceImpl.java | 8 +- 13 files changed, 265 insertions(+), 6 deletions(-) create mode 100644 virtual-patient-model/src/main/java/com/supervision/mapper/RasaModelInfoMapper.java create mode 100644 virtual-patient-model/src/main/java/com/supervision/model/RasaModelInfo.java create mode 100644 virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java create mode 100644 virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java create mode 100644 virtual-patient-model/src/main/resources/mapper/RasaModelInfoMapper.xml create mode 100644 virtual-patient-rasa/src/main/java/com/superversion/rasa/util/PortUtil.java diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/RasaModelInfoMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/RasaModelInfoMapper.java new file mode 100644 index 00000000..db895241 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/RasaModelInfoMapper.java @@ -0,0 +1,11 @@ +package com.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.supervision.model.Process; +import com.supervision.model.RasaModelInfo; + +/** + * + */ +public interface RasaModelInfoMapper extends BaseMapper { +} diff --git a/virtual-patient-model/src/main/java/com/supervision/model/RasaModelInfo.java b/virtual-patient-model/src/main/java/com/supervision/model/RasaModelInfo.java new file mode 100644 index 00000000..65915521 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/model/RasaModelInfo.java @@ -0,0 +1,83 @@ +package com.supervision.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 诊断进程表 + * @TableName vp_rasa_model_info + */ +@TableName(value ="vp_rasa_model_info") +@Data +@ApiModel +public class RasaModelInfo implements Serializable { + + /** + * 主键 + */ + @TableId + private String id; + + /** + * 模型ID 与vp_disease的主键进行关联 + */ + @ApiModelProperty("模型ID") + private String modelId; + + /** + * 中文注释 + */ + @ApiModelProperty("中文注释") + private String description; + + /** + * 模型对应的端口号 + */ + @ApiModelProperty("模型对应的端口号") + private Integer port; + + + /** + * 训练状态 0:训练失败 1:训练成功 + */ + @ApiModelProperty("训练状态") + private Integer tranStatus; + + /** + * 启动状态 -1:未启动 0:启动失败 1:启动成功 + */ + @ApiModelProperty("启动状态") + private Integer serverStatus; + + + /** + * 创建人ID + */ + private String createUserId; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人 + */ + private String updateUserId; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + +} diff --git a/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java b/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java new file mode 100644 index 00000000..71dda8a2 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/service/RasaModeService.java @@ -0,0 +1,9 @@ +package com.supervision.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.model.RasaModelInfo; + +public interface RasaModeService extends IService { + + RasaModelInfo queryByModelId(String modelId); +} diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java new file mode 100644 index 00000000..20d2e70a --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/RasaModeServiceImpl.java @@ -0,0 +1,21 @@ +package com.supervision.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.mapper.RasaModelInfoMapper; +import com.supervision.model.RasaModelInfo; +import com.supervision.service.RasaModeService; +import org.springframework.stereotype.Service; + +@Service +public class RasaModeServiceImpl extends ServiceImpl implements RasaModeService { + + @Override + public RasaModelInfo queryByModelId(String modelId){ + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(RasaModelInfo::getModelId, modelId).last("LIMIT 1"); + + return getOne(queryWrapper); + } +} diff --git a/virtual-patient-model/src/main/resources/mapper/RasaModelInfoMapper.xml b/virtual-patient-model/src/main/resources/mapper/RasaModelInfoMapper.xml new file mode 100644 index 00000000..056f2076 --- /dev/null +++ b/virtual-patient-model/src/main/resources/mapper/RasaModelInfoMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + id,model_id,description, + port,tran_status,server_status,create_user_id,create_time, + update_user_id,update_time + + + diff --git a/virtual-patient-rasa/pom.xml b/virtual-patient-rasa/pom.xml index d6761126..11ef8453 100644 --- a/virtual-patient-rasa/pom.xml +++ b/virtual-patient-rasa/pom.xml @@ -27,6 +27,12 @@ ${project.version} + + com.supervision + virtual-patient-model + ${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 f1ec60d4..2b22484c 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,13 +1,15 @@ package com.superversion.rasa; import com.supervision.config.WebConfig; +import org.mybatis.spring.annotation.MapperScan; 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})) +@MapperScan(basePackages = {"com.supervision.**.mapper"}) +@ComponentScan(basePackages = {"com.superversion"},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/controller/RasaCmdController.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/controller/RasaCmdController.java index 475e7653..a7938af0 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 @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.io.*; +import java.net.ServerSocket; import java.util.concurrent.*; @Api(tags = "rasa文件保存") @@ -26,6 +27,14 @@ public class RasaCmdController { @PostMapping("/trainExec") public String trainExec(@RequestBody RasaArgument argument) throws IOException, ExecutionException, InterruptedException, TimeoutException { + if (StrUtil.isEmpty(argument.getFixedModelName())){ + throw new BusinessException("fixedModelName参数不能为空!"); + } + + if (StrUtil.isEmpty(argument.getModelId())){ + throw new BusinessException("modelId参数不能为空! "); + } + return rasaCmdService.trainExec(argument); } @@ -34,6 +43,12 @@ public class RasaCmdController { @PostMapping("/runExec") public String runExec(@RequestBody RasaArgument argument) throws ExecutionException, InterruptedException, TimeoutException { + if (StrUtil.isEmpty(argument.getFixedModelName())){ + throw new BusinessException("fixedModelName参数不能为空!"); + } + if (StrUtil.isEmpty(argument.getModelId())){ + throw new BusinessException("modelId参数不能为空! "); + } String outString = rasaCmdService.runExec(argument); if (StrUtil.isEmptyIfStr(outString) || !outString.contains("Rasa server is up and running")){ throw new BusinessException("任务执行异常。详细日志:"+outString); @@ -42,5 +57,13 @@ public class RasaCmdController { } + @ApiOperation("执行启动shell命令") + @PostMapping("/test") + public String test(@RequestBody RasaArgument argument) throws ExecutionException, InterruptedException, TimeoutException { + + rasaCmdService.test(); + return "outString"; + + } } diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/vo/RasaArgument.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/vo/RasaArgument.java index 8d719cc0..cbbbf7b4 100644 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/vo/RasaArgument.java +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/pojo/vo/RasaArgument.java @@ -13,5 +13,6 @@ public class RasaArgument { private String enableApi;//enable-api private String endpoints; private String port; + private String modelId; } diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaCmdService.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaCmdService.java index 470e975a..4b0473af 100644 --- a/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaCmdService.java +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/service/RasaCmdService.java @@ -11,4 +11,6 @@ public interface RasaCmdService { String trainExec(RasaArgument argument) throws IOException, ExecutionException, InterruptedException, TimeoutException; String runExec( RasaArgument argument) throws ExecutionException, InterruptedException, TimeoutException; + + void test(); } 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 78df0ad4..1c4281c3 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 @@ -1,12 +1,20 @@ package com.superversion.rasa.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import com.superversion.rasa.config.ThreadPoolExecutorConfig; import com.superversion.rasa.pojo.vo.RasaArgument; import com.superversion.rasa.service.RasaCmdService; +import com.supervision.model.RasaModelInfo; +import com.supervision.model.User; +import com.supervision.service.RasaModeService; +import com.supervision.service.UserService; +import com.supervision.service.impl.UserServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.omg.CORBA.TRANSACTION_MODE; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -47,6 +55,8 @@ public class RasaCmdServiceImpl implements RasaCmdService { @Value("${rasa.shell.work:/home/rasa_manage/}") private String shellWork; + private final UserService userService; + @Override public String trainExec(RasaArgument argument) throws ExecutionException, InterruptedException, TimeoutException { @@ -55,9 +65,27 @@ public class RasaCmdServiceImpl implements RasaCmdService { cmds.add(argument.getFixedModelName()); log.info("trainExec cmd : {}",StrUtil.join(" ",cmds)); - return String.join("\r\n",execCmd(cmds,s->false,90)); + + List outMessage = execCmd(cmds, s -> false, 300); + + + boolean isSuccess = trainIsSuccess(outMessage); + return String.join("\r\n",outMessage); } + private boolean trainIsSuccess(List messageList){ + + if (CollectionUtil.isEmpty(messageList)){ + return false; + } + String keyWord = "Your Rasa model is trained and saved at"; + if (StrUtil.isEmpty(keyWord)){ + return false; + } + return messageList.stream().anyMatch(s->StrUtil.isNotEmpty(s) && s.contains(keyWord)); + } + + @Override @@ -71,6 +99,13 @@ public class RasaCmdServiceImpl implements RasaCmdService { return String.join("\r\n",execCmd(cmds,s-> StrUtil.isNotBlank(s)&& s.contains("Rasa server is up and running"),90)); } + @Override + public void test() { + List list = userService.list(); + //RasaModelInfo rasaModelInfo = rasaModeService.queryByModelId("1"); + + System.out.println(list); + } private List execCmd(List cmds, Predicate endPredicate, long timeOut) throws InterruptedException, ExecutionException, TimeoutException { diff --git a/virtual-patient-rasa/src/main/java/com/superversion/rasa/util/PortUtil.java b/virtual-patient-rasa/src/main/java/com/superversion/rasa/util/PortUtil.java new file mode 100644 index 00000000..fd68f91f --- /dev/null +++ b/virtual-patient-rasa/src/main/java/com/superversion/rasa/util/PortUtil.java @@ -0,0 +1,40 @@ +package com.superversion.rasa.util; + +import jdk.nashorn.internal.runtime.regexp.JoniRegExp; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.net.Socket; +import java.util.TreeMap; +import java.util.function.Predicate; + +@Slf4j +public class PortUtil { + + + public static boolean portIsActive(int port){ + try { + Socket socket = new Socket("localhost", port); + socket.close(); + return true; + } catch (IOException e) { + log.info("portIsActive: port:{} connect error",port); + } + return false; + } + + + public static int findUnusedPort(int minPort,int maxPort){ + + if (maxPort < minPort){ + return -1; + } + + for (int port = minPort; port < maxPort; port++) { + if (!portIsActive(port)){ + return port; + } + } + return -1; + } +} diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/RasaServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/RasaServiceImpl.java index d0cc6522..e1595fe5 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/RasaServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/RasaServiceImpl.java @@ -7,10 +7,10 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.supervision.exception.BusinessException; import com.supervision.model.*; -import com.supervision.rasa.dto.train.DomainYmlTemplate; -import com.supervision.rasa.dto.train.QuestionAnswerDTO; -import com.supervision.rasa.dto.train.NluYmlTemplate; -import com.supervision.rasa.dto.train.RuleYmlTemplate; +import com.supervision.pojo.rasa.train.DomainYmlTemplate; +import com.supervision.pojo.rasa.train.NluYmlTemplate; +import com.supervision.pojo.rasa.train.QuestionAnswerDTO; +import com.supervision.pojo.rasa.train.RuleYmlTemplate; import com.supervision.service.*; import freemarker.template.Configuration; import freemarker.template.Template;