浏览代码

dev subtask & question

allen 2 年之前
父节点
当前提交
9a76e3c6a2

+ 10 - 1
kgraph-graph/src/main/java/com/kgraph/graph/neo4j/controller/KgController.java

@@ -7,6 +7,8 @@ import com.kgraph.graph.neo4j.VO.GraphVO;
 import com.kgraph.graph.neo4j.domain.Neo4jRelation;
 import com.kgraph.graph.neo4j.seavice.IKgService;
 import com.kgraph.graph.neo4j.uitils.Neo4j2VOUtils;
+import com.kgraph.graph.suport.domain.QuestionRecord;
+import com.kgraph.graph.suport.service.IQuestionRecordService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -21,6 +23,8 @@ public class KgController extends BaseController {
 
     @Autowired
     IKgService kgService;
+    @Autowired
+    IQuestionRecordService questionRecordService;
 
     @PostMapping("/create")
     public AjaxResult create(@RequestBody List<KgDTO> kgDTOList) {
@@ -92,6 +96,11 @@ public class KgController extends BaseController {
 
     @GetMapping("/question")
     public AjaxResult question(@RequestParam("text") String question) {
-        return AjaxResult.success("success", kgService.question(question));
+        String result = kgService.question(question);
+        QuestionRecord questionRecord = new QuestionRecord();
+        questionRecord.setQuestion(question);
+        questionRecord.setResult(result);
+        questionRecordService.insertQuestionRecord(questionRecord);
+        return AjaxResult.success("success", result);
     }
 }

+ 7 - 4
kgraph-graph/src/main/java/com/kgraph/graph/neo4j/domain/Neo4jEntity.java

@@ -1,10 +1,9 @@
 package com.kgraph.graph.neo4j.domain;
 
 import lombok.Data;
-import org.neo4j.ogm.annotation.GeneratedValue;
-import org.neo4j.ogm.annotation.Id;
-import org.neo4j.ogm.annotation.NodeEntity;
-import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.*;
+
+import java.util.List;
 
 @NodeEntity("Entity")
 @Data
@@ -12,8 +11,12 @@ public class Neo4jEntity {
     @Id
     @GeneratedValue
     private Long id;
+    @Property("code")
+    private String code;
     @Property("name")
     private String name;
+    @Labels()
+    private List<String> labels;
     @Property("content")
     private String content;
     @Property("attachmentUrl")

+ 100 - 0
kgraph-graph/src/main/java/com/kgraph/graph/suport/controller/QuestionRecordController.java

@@ -0,0 +1,100 @@
+package com.kgraph.graph.suport.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.kgraph.common.annotation.Log;;
+import com.kgraph.common.core.controller.BaseController;;
+import com.kgraph.common.core.domain.AjaxResult;;
+import com.kgraph.common.enums.BusinessType;;
+import com.kgraph.graph.suport.domain.QuestionRecord;
+import com.kgraph.graph.suport.service.IQuestionRecordService;
+import com.kgraph.common.utils.poi.ExcelUtil;;
+import com.kgraph.common.core.page.TableDataInfo;;
+
+/**
+ * 问答查询记录Controller
+ * 
+ * @author Allen
+ * @date 2023-05-24
+ */
+@RestController
+@RequestMapping("/suport/question")
+public class QuestionRecordController extends BaseController
+{
+    @Autowired
+    private IQuestionRecordService questionRecordService;
+
+    /**
+     * 查询问答查询记录列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(QuestionRecord questionRecord)
+    {
+        startPage();
+        List<QuestionRecord> list = questionRecordService.selectQuestionRecordList(questionRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出问答查询记录列表
+     */
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, QuestionRecord questionRecord)
+    {
+        List<QuestionRecord> list = questionRecordService.selectQuestionRecordList(questionRecord);
+        ExcelUtil<QuestionRecord> util = new ExcelUtil<QuestionRecord>(QuestionRecord.class);
+        util.exportExcel(response, list, "问答查询记录数据");
+    }
+
+    /**
+     * 获取问答查询记录详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(questionRecordService.selectQuestionRecordById(id));
+    }
+
+    /**
+     * 新增问答查询记录
+     */
+    @PostMapping
+    public AjaxResult add(@RequestBody QuestionRecord questionRecord)
+    {
+        return toAjax(questionRecordService.insertQuestionRecord(questionRecord));
+    }
+
+    /**
+     * 修改问答查询记录
+     */
+    @PutMapping
+    public AjaxResult edit(@RequestBody QuestionRecord questionRecord)
+    {
+        return toAjax(questionRecordService.updateQuestionRecord(questionRecord));
+    }
+
+    /**
+     * 删除问答查询记录
+     */
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(questionRecordService.deleteQuestionRecordByIds(ids));
+    }
+
+    @GetMapping("/getTop10")
+    public AjaxResult getTop10(){
+
+        return success(questionRecordService.getTop10());
+    }
+}

+ 69 - 0
kgraph-graph/src/main/java/com/kgraph/graph/suport/domain/QuestionRecord.java

@@ -0,0 +1,69 @@
+package com.kgraph.graph.suport.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.kgraph.common.annotation.Excel;
+import com.kgraph.common.core.domain.BaseEntity;;
+
+/**
+ * 问答查询记录对象 t_question_record
+ * 
+ * @author Allen
+ * @date 2023-05-24
+ */
+public class QuestionRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 序号 */
+    private Long id;
+
+    /** 问题 */
+    @Excel(name = "问题")
+    private String question;
+
+    /** 结果 */
+    @Excel(name = "结果")
+    private String result;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setQuestion(String question) 
+    {
+        this.question = question;
+    }
+
+    public String getQuestion() 
+    {
+        return question;
+    }
+    public void setResult(String result) 
+    {
+        this.result = result;
+    }
+
+    public String getResult() 
+    {
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("question", getQuestion())
+            .append("result", getResult())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 63 - 0
kgraph-graph/src/main/java/com/kgraph/graph/suport/mapper/QuestionRecordMapper.java

@@ -0,0 +1,63 @@
+package com.kgraph.graph.suport.mapper;
+
+import java.util.List;
+import com.kgraph.graph.suport.domain.QuestionRecord;
+
+/**
+ * 问答查询记录Mapper接口
+ * 
+ * @author Allen
+ * @date 2023-05-24
+ */
+public interface QuestionRecordMapper 
+{
+    /**
+     * 查询问答查询记录
+     * 
+     * @param id 问答查询记录主键
+     * @return 问答查询记录
+     */
+    public QuestionRecord selectQuestionRecordById(Long id);
+
+    /**
+     * 查询问答查询记录列表
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 问答查询记录集合
+     */
+    public List<QuestionRecord> selectQuestionRecordList(QuestionRecord questionRecord);
+
+    /**
+     * 新增问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    public int insertQuestionRecord(QuestionRecord questionRecord);
+
+    /**
+     * 修改问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    public int updateQuestionRecord(QuestionRecord questionRecord);
+
+    /**
+     * 删除问答查询记录
+     * 
+     * @param id 问答查询记录主键
+     * @return 结果
+     */
+    public int deleteQuestionRecordById(Long id);
+
+    /**
+     * 批量删除问答查询记录
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteQuestionRecordByIds(Long[] ids);
+
+    List<QuestionRecord> getTop10();
+}

+ 63 - 0
kgraph-graph/src/main/java/com/kgraph/graph/suport/service/IQuestionRecordService.java

@@ -0,0 +1,63 @@
+package com.kgraph.graph.suport.service;
+
+import java.util.List;
+import com.kgraph.graph.suport.domain.QuestionRecord;
+
+/**
+ * 问答查询记录Service接口
+ * 
+ * @author Allen
+ * @date 2023-05-24
+ */
+public interface IQuestionRecordService 
+{
+    /**
+     * 查询问答查询记录
+     * 
+     * @param id 问答查询记录主键
+     * @return 问答查询记录
+     */
+    public QuestionRecord selectQuestionRecordById(Long id);
+
+    /**
+     * 查询问答查询记录列表
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 问答查询记录集合
+     */
+    public List<QuestionRecord> selectQuestionRecordList(QuestionRecord questionRecord);
+
+    /**
+     * 新增问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    public int insertQuestionRecord(QuestionRecord questionRecord);
+
+    /**
+     * 修改问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    public int updateQuestionRecord(QuestionRecord questionRecord);
+
+    /**
+     * 批量删除问答查询记录
+     * 
+     * @param ids 需要删除的问答查询记录主键集合
+     * @return 结果
+     */
+    public int deleteQuestionRecordByIds(Long[] ids);
+
+    /**
+     * 删除问答查询记录信息
+     * 
+     * @param id 问答查询记录主键
+     * @return 结果
+     */
+    public int deleteQuestionRecordById(Long id);
+
+    List<QuestionRecord> getTop10();
+}

+ 37 - 16
kgraph-graph/src/main/java/com/kgraph/graph/suport/service/impl/ExtractKnowledgeSubTaskServiceImpl.java

@@ -13,7 +13,6 @@ import com.kgraph.graph.neo4j.seavice.IKgService;
 import com.kgraph.graph.suport.domain.ExtractKnowledgeSubTask;
 import com.kgraph.graph.suport.domain.ExtractKnowledgeTask;
 import com.kgraph.graph.suport.domain.ExtractResult;
-import com.kgraph.graph.suport.domain.TripletInfo;
 import com.kgraph.graph.suport.mapper.ExtractKnowledgeSubTaskMapper;
 import com.kgraph.graph.suport.service.IExtractKnowledgeSubTaskService;
 import com.kgraph.graph.suport.service.IExtractResultService;
@@ -29,7 +28,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -147,10 +145,35 @@ public class ExtractKnowledgeSubTaskServiceImpl implements IExtractKnowledgeSubT
             extractKnowledgeSubTaskList.add(extractKnowledgeSubTask);
         }
 
-        processSubTask(extractKnowledgeSubTaskList);
+        processSubTasks(extractKnowledgeSubTaskList);
     }
 
-    private void processSubTask(List<ExtractKnowledgeSubTask> extractKnowledgeSubTaskList) {
+    private void processSubTasks(List<ExtractKnowledgeSubTask> extractKnowledgeSubTaskList) {
+        extractKnowledgeSubTaskList.forEach(extractKnowledgeSubTask -> {
+            switch (extractKnowledgeSubTask.getType()){
+                case "1":
+                    processExtractSubTask(extractKnowledgeSubTask);
+                    break;
+                case "2":
+                    buildEntityByClassSubTask(extractKnowledgeSubTask);
+                    break;
+                case "3":
+                    buildFlowSubTask(extractKnowledgeSubTask);
+                    break;
+                default:
+            }
+        });
+    }
+
+    private void buildFlowSubTask(ExtractKnowledgeSubTask extractKnowledgeSubTask) {
+        // do noting
+    }
+
+    private void buildEntityByClassSubTask(ExtractKnowledgeSubTask extractKnowledgeSubTask) {
+        // do noting
+    }
+
+    private void processExtractSubTask(ExtractKnowledgeSubTask extractKnowledgeSubTask) {
         HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
         httpRequestFactory.setConnectionRequestTimeout(3000);
         httpRequestFactory.setConnectTimeout(3000);
@@ -163,18 +186,16 @@ public class ExtractKnowledgeSubTaskServiceImpl implements IExtractKnowledgeSubT
         }
         try {
             String finalUrl = url;
-            extractKnowledgeSubTaskList.forEach(extractKnowledgeSubTask -> {
-                DocInfo docInfo = extractKnowledgeSubTaskMapper.getDocInfoBySubtask(extractKnowledgeSubTask.getId());
-                docInfo.setDocAddress("http://localhost:11082/upload/uploadManage/download?filePath=" + docInfo.getDocAddress());
-                BaseResponse response = restTemplate.postForObject(finalUrl, docInfo, BaseResponse.class);
-                if (response == null) {
-                    logger.error("response is null, url:{}, docInfo:{}", finalUrl, docInfo);
-                } else if (response.getCode() != 200) {
-                    logger.error("request is error! errorMsg: {}, url:{}, docInfo:{}", response.getMsg(), finalUrl, docInfo);
-                } else {
-                    logger.info("算法推送成功,url:{}, docInfo:{}", finalUrl, docInfo);
-                }
-            });
+            DocInfo docInfo = extractKnowledgeSubTaskMapper.getDocInfoBySubtask(extractKnowledgeSubTask.getId());
+            docInfo.setDocAddress("http://localhost:11082/upload/uploadManage/download?filePath=" + docInfo.getDocAddress());
+            BaseResponse response = restTemplate.postForObject(finalUrl, docInfo, BaseResponse.class);
+            if (response == null) {
+                logger.error("response is null, url:{}, docInfo:{}", finalUrl, docInfo);
+            } else if (response.getCode() != 200) {
+                logger.error("request is error! errorMsg: {}, url:{}, docInfo:{}", response.getMsg(), finalUrl, docInfo);
+            } else {
+                logger.info("算法推送成功,url:{}, docInfo:{}", finalUrl, docInfo);
+            }
         } catch (Exception e) {
             logger.error("算法请求报错", e);
             throw new RuntimeException("系统错误(10001),联系管理员");

+ 101 - 0
kgraph-graph/src/main/java/com/kgraph/graph/suport/service/impl/QuestionRecordServiceImpl.java

@@ -0,0 +1,101 @@
+package com.kgraph.graph.suport.service.impl;
+
+import java.util.List;
+import com.kgraph.common.utils.DateUtils;;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.kgraph.graph.suport.mapper.QuestionRecordMapper;
+import com.kgraph.graph.suport.domain.QuestionRecord;
+import com.kgraph.graph.suport.service.IQuestionRecordService;
+
+/**
+ * 问答查询记录Service业务层处理
+ * 
+ * @author Allen
+ * @date 2023-05-24
+ */
+@Service
+public class QuestionRecordServiceImpl implements IQuestionRecordService 
+{
+    @Autowired
+    private QuestionRecordMapper questionRecordMapper;
+
+    /**
+     * 查询问答查询记录
+     * 
+     * @param id 问答查询记录主键
+     * @return 问答查询记录
+     */
+    @Override
+    public QuestionRecord selectQuestionRecordById(Long id)
+    {
+        return questionRecordMapper.selectQuestionRecordById(id);
+    }
+
+    /**
+     * 查询问答查询记录列表
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 问答查询记录
+     */
+    @Override
+    public List<QuestionRecord> selectQuestionRecordList(QuestionRecord questionRecord)
+    {
+        return questionRecordMapper.selectQuestionRecordList(questionRecord);
+    }
+
+    /**
+     * 新增问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    @Override
+    public int insertQuestionRecord(QuestionRecord questionRecord)
+    {
+        questionRecord.setCreateTime(DateUtils.getNowDate());
+        return questionRecordMapper.insertQuestionRecord(questionRecord);
+    }
+
+    /**
+     * 修改问答查询记录
+     * 
+     * @param questionRecord 问答查询记录
+     * @return 结果
+     */
+    @Override
+    public int updateQuestionRecord(QuestionRecord questionRecord)
+    {
+        questionRecord.setUpdateTime(DateUtils.getNowDate());
+        return questionRecordMapper.updateQuestionRecord(questionRecord);
+    }
+
+    /**
+     * 批量删除问答查询记录
+     * 
+     * @param ids 需要删除的问答查询记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteQuestionRecordByIds(Long[] ids)
+    {
+        return questionRecordMapper.deleteQuestionRecordByIds(ids);
+    }
+
+    /**
+     * 删除问答查询记录信息
+     * 
+     * @param id 问答查询记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteQuestionRecordById(Long id)
+    {
+        return questionRecordMapper.deleteQuestionRecordById(id);
+    }
+
+    @Override
+    public List<QuestionRecord> getTop10() {
+        return questionRecordMapper.getTop10();
+    }
+}

+ 92 - 0
kgraph-graph/src/main/resources/mapper/suport/QuestionRecordMapper.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kgraph.graph.suport.mapper.QuestionRecordMapper">
+    
+    <resultMap type="QuestionRecord" id="QuestionRecordResult">
+        <result property="id"    column="id"    />
+        <result property="question"    column="question"    />
+        <result property="result"    column="result"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectQuestionRecordVo">
+        select id, question, result, create_by, create_time, update_by, update_time from t_question_record
+    </sql>
+
+    <select id="selectQuestionRecordList" parameterType="QuestionRecord" resultMap="QuestionRecordResult">
+        <include refid="selectQuestionRecordVo"/>
+        <where>  
+            <if test="question != null  and question != ''"> and question = #{question}</if>
+            <if test="result != null  and result != ''"> and result = #{result}</if>
+        </where>
+    </select>
+    
+    <select id="selectQuestionRecordById" parameterType="Long" resultMap="QuestionRecordResult">
+        <include refid="selectQuestionRecordVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertQuestionRecord" parameterType="QuestionRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into t_question_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="question != null">question,</if>
+            <if test="result != null">result,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="question != null">#{question},</if>
+            <if test="result != null">#{result},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateQuestionRecord" parameterType="QuestionRecord">
+        update t_question_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="question != null">question = #{question},</if>
+            <if test="result != null">result = #{result},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteQuestionRecordById" parameterType="Long">
+        delete from t_question_record where id = #{id}
+    </delete>
+
+    <delete id="deleteQuestionRecordByIds" parameterType="String">
+        delete from t_question_record where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="getTop10" resultType="Map">
+        SELECT
+            qr.question,
+            count(*) AS cnt
+        FROM
+            t_question_record qr
+--        WHERE
+--            qr.create_time >= NOW() - INTERVAL 24 HOUR
+        GROUP BY
+            qr.question
+        ORDER BY
+            cnt DESC
+        LIMIT 10;
+    </select>
+</mapper>

+ 77 - 0
sql/update20230524.sql

@@ -0,0 +1,77 @@
+DROP TABLE
+IF
+	EXISTS entity_class;
+CREATE TABLE entity_class (
+	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '实体类ID',
+	`name` VARCHAR ( 255 ) NULL COMMENT '实体类名称',
+	`desc` VARCHAR ( 1023 ) NULL COMMENT '实体类描述',
+	back_ground_color VARCHAR ( 15 ) NULL COMMENT '实体类背景颜色',
+	create_by VARCHAR ( 64 ) NULL COMMENT '创建者',
+	create_time datetime NULL COMMENT '创建时间',
+	update_by VARCHAR ( 64 ) NULL COMMENT '更新者',
+	update_time datetime NULL COMMENT '更新时间',
+PRIMARY KEY ( id )
+) ENGINE = INNODB auto_increment = 1 COMMENT = '实体类';
+
+DROP TABLE
+IF
+	EXISTS entity_class_relation;
+CREATE TABLE entity_class_relation (
+	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '实体类关系ID',
+	`name` VARCHAR ( 255 ) NULL COMMENT '实体类关系名称',
+	`desc` VARCHAR ( 1023 ) NULL COMMENT '实体类关系描述',
+	back_ground_color VARCHAR ( 15 ) NULL COMMENT '实体类关系背景颜色',
+	start_id BIGINT ( 20 ) COMMENT '起点实体类id',
+	end_id BIGINT ( 20 ) COMMENT '起点实体类id',
+	create_by VARCHAR ( 64 ) NULL COMMENT '创建者',
+	create_time datetime NULL COMMENT '创建时间',
+	update_by VARCHAR ( 64 ) NULL COMMENT '更新者',
+	update_time datetime NULL COMMENT '更新时间',
+PRIMARY KEY ( id )
+) ENGINE = INNODB auto_increment = 1 COMMENT = '实体类关系';
+
+DROP TABLE
+IF
+	EXISTS t_build_entity_relation;
+CREATE TABLE t_build_entity_relation (
+	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '序号',
+	sub_task_id BIGINT ( 20 ) COMMENT '子任务id',
+	sub_entity_class_id BIGINT ( 20 ) COMMENT '主体实体类id',
+	obj_entity_class_id BIGINT ( 20 ) COMMENT '客体实体类id',
+	entity_class_rel_id BIGINT ( 20 ) COMMENT '实体类关系id',
+	sub_entity VARCHAR ( 511 ) COMMENT '主体',
+	obj_entity VARCHAR ( 511 ) COMMENT '客体',
+	create_by VARCHAR ( 64 ) DEFAULT '' COMMENT '创建者',
+	create_time datetime COMMENT '创建时间',
+	update_by VARCHAR ( 64 ) DEFAULT '' COMMENT '更新者',
+	update_time datetime COMMENT '更新时间',
+PRIMARY KEY ( id )
+) ENGINE = INNODB auto_increment = 1 COMMENT = '实体构建表';
+
+DROP TABLE
+IF
+	EXISTS t_build_flow;
+CREATE TABLE t_build_flow (
+	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '序号',
+	flow_encode VARCHAR ( 1023 ) DEFAULT '' COMMENT '流程数据',
+	flow_tree_json TINYTEXT COMMENT '流程树json',
+	create_by VARCHAR ( 64 ) DEFAULT '' COMMENT '创建者',
+	create_time datetime COMMENT '创建时间',
+	update_by VARCHAR ( 64 ) DEFAULT '' COMMENT '更新者',
+	update_time datetime COMMENT '更新时间',
+PRIMARY KEY ( id )
+) ENGINE = INNODB COMMENT = '构建流程';
+
+DROP TABLE
+IF
+	EXISTS t_question_record;
+CREATE TABLE t_question_record (
+	id BIGINT ( 20 ) NOT NULL auto_increment COMMENT '序号',
+	question VARCHAR ( 255 ) DEFAULT '' COMMENT '问题',
+	result VARCHAR ( 511 ) DEFAULT '' COMMENT '结果',
+	create_by VARCHAR ( 64 ) DEFAULT '' COMMENT '创建者',
+	create_time datetime COMMENT '创建时间',
+	update_by VARCHAR ( 64 ) DEFAULT '' COMMENT '更新者',
+	update_time datetime COMMENT '更新时间',
+PRIMARY KEY ( id )
+) ENGINE = INNODB COMMENT = '问答查询记录';