|
@@ -0,0 +1,258 @@
|
|
|
+package com.pavis.backend.slim.project.system.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.pavis.backend.slim.common.utils.SecurityUtils;
|
|
|
+import com.pavis.backend.slim.project.system.domain.GenerateGraph;
|
|
|
+import com.pavis.backend.slim.project.system.domain.annotation.GenerateGraphResult;
|
|
|
+import com.pavis.backend.slim.project.system.mapper.GenerateGraphMapper;
|
|
|
+import com.pavis.backend.slim.project.system.service.GenerateGraphService;
|
|
|
+import com.pavis.backend.slim.project.system.service.SysKgService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @version: java version 1.8
|
|
|
+ * @Author: Guan H.J.
|
|
|
+ * @description: GenerateGraphServiceImpl
|
|
|
+ * @date: 2023-11-06 13:58
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class GenerateGraphServiceImpl extends ServiceImpl<GenerateGraphMapper, GenerateGraph> implements GenerateGraphService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysKgService sysKgService;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void generateKgGraphResult(GenerateGraphResult genGraphResult) {
|
|
|
+ if (null != genGraphResult && null != genGraphResult.getTaskId()) {
|
|
|
+ // 先检索数据库中是否已存在该任务,未存在则新增;已存在则更新。
|
|
|
+ List<GenerateGraph> generateGraphs = baseMapper.selectList(new QueryWrapper<GenerateGraph>().lambda().eq(GenerateGraph::getTaskId, genGraphResult.getTaskId()));
|
|
|
+ if (!CollectionUtils.isEmpty(generateGraphs)) {
|
|
|
+ // 更新状态。
|
|
|
+ for (GenerateGraph graph : generateGraphs) {
|
|
|
+ // 更新解析状态:0 未解析 2 解析中 -1 解析失败 1 解析成功。
|
|
|
+ if ("解析".equals(genGraphResult.getTaskName())){
|
|
|
+ graph = toUpParse(graph, genGraphResult);
|
|
|
+ }else if ("训练".equals(genGraphResult.getTaskName())){
|
|
|
+ graph = toUpTrain(graph, genGraphResult);
|
|
|
+ }else if ("抽取".equals(genGraphResult.getTaskName())){
|
|
|
+ graph = toUpExtract(graph, genGraphResult);
|
|
|
+ }
|
|
|
+ int upRes = baseMapper.updateById(graph);
|
|
|
+ log.info("算法生成知识图谱-:{},更新结果:{}", genGraphResult.getTaskName(), upRes);
|
|
|
+ // 更新图谱的状态:图模型状态 0 无图模型 1 有图模型;是否标注状态 0 未标注 1 已标注;生成图谱的状态 0 未生成 1 已生成。
|
|
|
+ if (graph.getParseTaskStatus() == -1) {
|
|
|
+ sysKgService.updateGrapgStatus(graph.getKgId(), null,null, graph.getParseTaskStatus(), "解析失败");
|
|
|
+ } else if (graph.getTrainTaskStatus() == -1) {
|
|
|
+ sysKgService.updateGrapgStatus(graph.getKgId(), null,null, graph.getTrainTaskStatus(), "训练失败");
|
|
|
+ } else if (graph.getExtractTaskStatus() == -1) {
|
|
|
+ sysKgService.updateGrapgStatus(graph.getKgId(), null,null, graph.getExtractTaskStatus(), "抽取失败");
|
|
|
+ } else if (graph.getExtractTaskStatus() == 1) {
|
|
|
+ sysKgService.updateGrapgStatus(graph.getKgId(), null,null, graph.getExtractTaskStatus(), "抽取成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean createGenerateKgGraphResult(String taskId, String kgId, Boolean isGenerate) {
|
|
|
+ // isGenerate: 为true表示调用通用图谱,无训练,所以训练状态为完成1。
|
|
|
+ GenerateGraph generateGraph = GenerateGraph.builder().taskId(taskId).kgId(kgId).taskType(String.valueOf(isGenerate)).parseTaskName("解析").parseTaskStatus(2)
|
|
|
+ .trainTaskName("训练").trainTaskStatus(isGenerate == true ? 1 : 2).extractTaskName("抽取").extractTaskStatus(2).build();
|
|
|
+ generateGraph.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ generateGraph.setCreateTime(DateUtil.date());
|
|
|
+ generateGraph.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ generateGraph.setUpdateTime(DateUtil.date());
|
|
|
+ int insert = baseMapper.insert(generateGraph);
|
|
|
+ log.info("算法新增生成图谱记录:{}", insert);
|
|
|
+ return insert > 0 ? true : false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理解析状态。
|
|
|
+ *
|
|
|
+ * @param graph
|
|
|
+ * @param genGraphResult
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public GenerateGraph toUpParse(GenerateGraph graph, GenerateGraphResult genGraphResult) {
|
|
|
+ if ("解析".equals(genGraphResult.getTaskName())) {
|
|
|
+ if (genGraphResult.getTaskStatus() == true) {
|
|
|
+ // 解析成功,设置状态后,继续更新train状态。
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ // 更新训练状态;0 未训练 2 训练中 -1 训练失败 1 训练成功。
|
|
|
+ if ("训练".equals(genGraphResult.getTaskName())) {
|
|
|
+ if (genGraphResult.getTaskStatus() == true) {
|
|
|
+ // 训练成功,设置状态后,继续更新extract状态。
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ if ("抽取".equals(genGraphResult.getTaskName())) {
|
|
|
+ // 抽取成功,设置状态并更新。
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(1);
|
|
|
+ graph.setExtractTaskReason("抽取成功");
|
|
|
+ } else {
|
|
|
+ log.info("抽取失败,更新状态和原因,同时抽取状态失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("抽取失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("训练失败,更新状态和原因,同时抽取状态失败,原因默认:因第二步骤抽取失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(-1);
|
|
|
+ graph.setTrainTaskReason(genGraphResult.getMsg());
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("因第二步骤训练失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 解析失败,更新状态和原因,同时训练和抽取状态也均失败,原因默认:因第一步骤解析失败。
|
|
|
+ log.info("解析失败,更新状态和原因,同时训练和抽取状态也均失败,原因默认:因第一步骤解析失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(-1);
|
|
|
+ graph.setParseTaskReason(genGraphResult.getMsg());
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(-1);
|
|
|
+ graph.setTrainTaskReason("因第一步骤解析失败");
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("因第一步骤解析失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("true".equals(graph.getTaskType())){
|
|
|
+ // 通用图谱训练状态永远为成功。
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ }
|
|
|
+ return graph;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理训练状态。
|
|
|
+ *
|
|
|
+ * @param graph
|
|
|
+ * @param genGraphResult
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public GenerateGraph toUpTrain(GenerateGraph graph, GenerateGraphResult genGraphResult) {
|
|
|
+
|
|
|
+ // 更新训练状态;0 未训练 2 训练中 -1 训练失败 1 训练成功。
|
|
|
+ if ("训练".equals(genGraphResult.getTaskName())) {
|
|
|
+ if (genGraphResult.getTaskStatus() == true) {
|
|
|
+ // 训练成功,设置状态后,继续更新extract状态。
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ if ("抽取".equals(genGraphResult.getTaskName())) {
|
|
|
+ // 抽取成功,设置状态并更新。
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(1);
|
|
|
+ graph.setExtractTaskReason("抽取成功");
|
|
|
+ } else {
|
|
|
+ log.info("抽取失败,更新状态和原因,同时抽取状态失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("抽取失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("训练失败,更新状态和原因,同时抽取状态失败,原因默认:因第二步骤抽取失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(-1);
|
|
|
+ graph.setTrainTaskReason(genGraphResult.getMsg());
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("因第二步骤训练失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("true".equals(graph.getTaskType())){
|
|
|
+ // 通用图谱训练状态永远为成功。
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ }
|
|
|
+ return graph;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理抽取状态。
|
|
|
+ *
|
|
|
+ * @param graph
|
|
|
+ * @param genGraphResult
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public GenerateGraph toUpExtract(GenerateGraph graph, GenerateGraphResult genGraphResult) {
|
|
|
+ // 更新训练状态;0 未训练 2 训练中 -1 训练失败 1 训练成功。
|
|
|
+ if ("抽取".equals(genGraphResult.getTaskName())) {
|
|
|
+ if (genGraphResult.getTaskStatus() == true) {
|
|
|
+ // 训练成功,设置状态后,继续更新extract状态。
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ // 抽取成功,设置状态并更新。
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(1);
|
|
|
+ graph.setExtractTaskReason("抽取成功");
|
|
|
+ } else {
|
|
|
+ log.info("抽取失败,更新状态和原因,同时抽取状态失败。");
|
|
|
+ graph.setParseTaskName("解析");
|
|
|
+ graph.setParseTaskStatus(1);
|
|
|
+ graph.setParseTaskReason("解析成功");
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ graph.setExtractTaskName("抽取");
|
|
|
+ graph.setExtractTaskStatus(-1);
|
|
|
+ graph.setExtractTaskReason("抽取失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("true".equals(graph.getTaskType())){
|
|
|
+ // 通用图谱训练状态永远为成功。
|
|
|
+ graph.setTrainTaskName("训练");
|
|
|
+ graph.setTrainTaskStatus(1);
|
|
|
+ graph.setTrainTaskReason("训练成功");
|
|
|
+ }
|
|
|
+ return graph;
|
|
|
+ }
|
|
|
+}
|