Explorar o código

feature 知识库相关代码提交

xiahan hai 1 ano
pai
achega
473d5fab61
Modificáronse 16 ficheiros con 561 adicións e 180 borrados
  1. 35 0
      cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/dao/KbKnowledgebaseSearchKeywordsDao.java
  2. 14 0
      cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/service/KnowledgeBaseService.java
  3. 114 0
      cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/service/impl/KnowledgeBaseServiceImpl.java
  4. 0 54
      cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/utils/CommonUtils.java
  5. 0 124
      cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/utils/DateUtils.java
  6. 149 0
      cx-knowledge-base/cx-knowledge-base-common/src/main/resources/mybatis/KbKnowledgebaseSearchKeywordsDao.xml
  7. 28 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbKnowledgebaseSearchKeywordsDo.java
  8. 6 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbSubsystemConfigDo.java
  9. 3 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbSubsystemDetailDo.java
  10. 16 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBDictDataVo.java
  11. 56 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBResultVo.java
  12. 37 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBSearchVo.java
  13. 24 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KnowledgeBaseSearchVo.java
  14. 41 0
      cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KnowledgeBaseVo.java
  15. 36 0
      cx-knowledge-base/cx-knowledge-base-server/src/main/java/com/rongwei/bsserver/sys/controller/KnowledgeBaseController.java
  16. 2 2
      cx-knowledge-base/cx-knowledge-base-server/src/main/resources/bootstrap-dev.yml

+ 35 - 0
cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/dao/KbKnowledgebaseSearchKeywordsDao.java

@@ -0,0 +1,35 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.vo.KBDictDataVo;
+import com.rongwei.bsentity.vo.KBResultVo;
+import com.rongwei.bsentity.vo.KBSearchVo;
+import com.rongwei.bsentity.vo.KnowledgeBaseVo;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * KbKnowledgebaseSearchKeywordsDao class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@Mapper
+public interface KbKnowledgebaseSearchKeywordsDao {
+    @Insert("INSERT INTO kb_knowledgebase_search_keywords (ID, CONTENT,COUNT) VALUES (UUID(), #{searchCount},1)\n" +
+            "ON DUPLICATE KEY UPDATE COUNT = COUNT+1 ")
+    void  insertOrUpdateSearchCount(@Param("searchCount") String searchCount);
+
+    List<KnowledgeBaseVo> getSearchBasicInfo(@Param("systemId")String systemId);
+
+    List<KBDictDataVo> getSelectInfo(@Param("datas") List<KnowledgeBaseVo> knowledgeBaseVos);
+
+    List<KBResultVo> getKbData(@Param("searchVos")List<KBSearchVo> searchVos, @Param("systemId")String systemId,
+                               @Param("orderRules") String orderRules,@Param("pageNum") int pageNum,
+                               @Param("pageSize") int pageSize,@Param("searchContent") String searchContent
+    );
+    Integer getKbDataLength(@Param("searchVos")List<KBSearchVo> searchVos, @Param("systemId")String systemId,
+                            @Param("searchContent") String searchContent);
+}
+

+ 14 - 0
cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/service/KnowledgeBaseService.java

@@ -0,0 +1,14 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.vo.KnowledgeBaseSearchVo;
+import com.rongwei.rwcommon.base.R;
+
+/**
+ * KnowledgeBaseService class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+public interface KnowledgeBaseService {
+    R search(KnowledgeBaseSearchVo knowledgeBaseSearchVo);
+}

+ 114 - 0
cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/service/impl/KnowledgeBaseServiceImpl.java

@@ -0,0 +1,114 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.rongwei.bscommon.sys.dao.KbKnowledgebaseSearchKeywordsDao;
+import com.rongwei.bscommon.sys.service.KnowledgeBaseService;
+import com.rongwei.bsentity.vo.*;
+import com.rongwei.rwcommon.base.R;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * KnowledgeBaseServiceImpl class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@Service
+public class KnowledgeBaseServiceImpl implements KnowledgeBaseService {
+    @Autowired
+    private KbKnowledgebaseSearchKeywordsDao kbKnowledgebaseSearchKeywordsDao;
+    /**
+     * 下拉选的类型
+     */
+    public static final String SELECT = "select";
+    public static final String DICT = "dict";
+    public static final String SQL = "sql";
+    public static final String STR = "%s-;-%s";
+    public static final String KB_MODEL_ID = "4149efeef04c4e08972dd5516a2dc16f";
+    public static final String EYE_CATCHING = "<span style='color: red;'>%s</span>";
+
+    @Async("customThreadPool")
+    public void updateKeyWords(String searchContent) {
+        // 是否为空的搜索内容
+        boolean emptySearchContent = StringUtils.isBlank(searchContent);
+        if (!emptySearchContent) {
+            // 增加关键词搜索次数
+            kbKnowledgebaseSearchKeywordsDao.insertOrUpdateSearchCount(searchContent);
+        }
+    }
+
+    @Override
+    public R search(KnowledgeBaseSearchVo knowledgeBaseSearchVo) {
+        if (knowledgeBaseSearchVo == null) {
+            return R.ok();
+        }
+        // 搜索内容
+        String searchContent = knowledgeBaseSearchVo.getSearchContent();
+        updateKeyWords(searchContent);
+        String systemId = knowledgeBaseSearchVo.getSystemId();
+
+        List<KnowledgeBaseVo> searchBasicInfo = kbKnowledgebaseSearchKeywordsDao.getSearchBasicInfo(systemId);
+        // 知识库只需要根据
+        if (!KB_MODEL_ID.equals(systemId)) {
+            // 找到所有的数据字典
+            List<KnowledgeBaseVo> dictSqlList = searchBasicInfo.stream().filter(info -> SELECT.equals(info.getControlType()) && (DICT.equals(info.getEnumType()) || SQL.equals(info.getEnumType()))).collect(Collectors.toList());
+            // 使用数据字典替换掉searchBasicInfo 的searchValue
+            List<KBDictDataVo> selectInfo = kbKnowledgebaseSearchKeywordsDao.getSelectInfo(dictSqlList);
+            // 设置下拉选的搜索条件
+            searchBasicInfo.forEach(info -> {
+                if (SELECT.equals(info.getControlType()) && (DICT.equals(info.getEnumType()) || SQL.equals(info.getEnumType()))) {
+                    String searchValue = selectInfo.stream().filter(data -> (data.getDictKey().equals(String.format(STR, info.getTableName(), info.getColumnName()))) && data.getLabel().contains(searchContent)).map(KBDictDataVo::getValue).collect(Collectors.joining(","));
+                    info.setSearchValue(StringUtils.isBlank(searchValue) ? "" : searchValue);
+                } else {
+                    info.setSearchValue(searchContent);
+                }
+            });
+        }
+        List<KBSearchVo> kbSearchVos = new ArrayList<>();
+        // 组织查询结果
+        searchBasicInfo.stream().collect(Collectors.groupingBy(KnowledgeBaseVo::getPagePartId, Collectors.toList())).forEach((k, v) -> {
+            KBSearchVo vo = new KBSearchVo();
+            KnowledgeBaseVo knowledgeBaseVo = v.get(0);
+            vo.setPagePartId(knowledgeBaseVo.getPagePartId());
+            vo.setMenuId(knowledgeBaseVo.getMenuId());
+            vo.setMenuName(knowledgeBaseVo.getMenuName());
+            vo.setMenuPid(knowledgeBaseVo.getMenuPid());
+            vo.setTableName(knowledgeBaseVo.getTableName());
+            vo.setTableSql(knowledgeBaseVo.getTablesql());
+            vo.setColumnInfoList(v.stream().filter(info -> StringUtils.isNotBlank(info.getSearchValue())).map(data -> {
+                KBSearchVo.ColumnInfo columnInfo = new KBSearchVo.ColumnInfo();
+                columnInfo.setColumnName(data.getColumnName());
+                columnInfo.setColumnDesc(data.getColumnDesc());
+                columnInfo.setColumnType(data.getColumnType());
+                columnInfo.setSearchValue(data.getSearchValue());
+                return columnInfo;
+            }).collect(Collectors.toList()));
+            if (!vo.getColumnInfoList().isEmpty()) {
+                kbSearchVos.add(vo);
+            }
+        });
+
+        int limitPage = knowledgeBaseSearchVo.getPageNum() == 0 ? 0 : (knowledgeBaseSearchVo.getPageNum() - 1) * knowledgeBaseSearchVo.getPageSize();
+        List<KBResultVo> kbData = kbKnowledgebaseSearchKeywordsDao.getKbData(kbSearchVos, systemId,
+                knowledgeBaseSearchVo.getOrderRules(), limitPage, knowledgeBaseSearchVo.getPageSize(),searchContent);
+        int length = kbKnowledgebaseSearchKeywordsDao.getKbDataLength(kbSearchVos, systemId,searchContent);
+        String format = String.format("<span style='color: red;'>%s</span>", searchContent);
+        for (int i = 0; i < kbData.size(); i++) {
+            KBResultVo kbResultVo = kbData.get(i);
+            kbResultVo.setSearchContentList(kbResultVo.getSearchContentList().stream()
+                    .map(info-> info.replaceAll(searchContent,format))
+                    .collect(Collectors.toList()));
+        }
+        return R.ok(new HashMap<String,Object>(){{
+            put("data",kbData);
+            put("total",length);
+        }});
+    }
+}

+ 0 - 54
cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/utils/CommonUtils.java

@@ -1,54 +0,0 @@
-package com.rongwei.bscommon.sys.utils;
-
-import com.rongwei.commonservice.serial.service.SysSerialNumberService;
-import com.rongwei.commonservice.service.RedisService;
-import com.rongwei.rwadmincommon.system.vo.SysUserVo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
-
-
-@Component
-public class CommonUtils {
-
-    @Autowired
-    private RedisService autoRedisService;
-    @Autowired
-    private SysSerialNumberService autoSysSerialNumberService;
-
-    private static RedisService redisService;
-    private static SysSerialNumberService sysSerialNumberService;
-
-    @PostConstruct
-    public void init() {
-        redisService = autoRedisService;
-        sysSerialNumberService = autoSysSerialNumberService;
-    }
-
-
-    /**
-     * 获取当前的登陆人信息
-     *
-     * @return
-     */
-    public static SysUserVo getCurrentUser() {
-        // 获取当前登录人信息
-        SysUserVo currUser = null;
-        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        if (attributes != null) {
-            HttpServletRequest request = attributes.getRequest();
-            if (request != null) {
-                String token = request.getHeader("token");
-                if (com.rongwei.rwcommon.utils.StringUtils.isNotEmpty(token)) {
-                    currUser = redisService.getLoginUser(token);
-                }
-            }
-        }
-        return currUser;
-    }
-
-}

+ 0 - 124
cx-knowledge-base/cx-knowledge-base-common/src/main/java/com/rongwei/bscommon/sys/utils/DateUtils.java

@@ -1,124 +0,0 @@
-package com.rongwei.bscommon.sys.utils;
-
-import com.rongwei.commonservice.serial.service.SysSerialNumberService;
-import com.rongwei.commonservice.service.RedisService;
-import com.rongwei.rwadmincommon.system.vo.SysUserVo;
-import org.apache.commons.lang.StringUtils;
-import org.apache.poi.xssf.usermodel.XSSFCell;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Utils class
- * 工具类
- *
- * @author XH
- * @date 2021/05/27
- */
-@Component
-public class DateUtils {
-
-    @Autowired
-    private RedisService autoRedisService;
-    @Autowired
-    private SysSerialNumberService autoSysSerialNumberService;
-
-    private static RedisService redisService;
-    private static SysSerialNumberService sysSerialNumberService;
-
-
-    /**
-     * 时间格式
-     */
-    public static class DatePattern {
-        public static final String DATE_PATTERN_YMD_HOUR = "yyyy/MM/dd HH";
-    }
-
-    private static final Logger log = LoggerFactory.getLogger(DateUtils.class.getName());
-    private static final Pattern STR_IS_DATE_LAYOUT_PATTERN = Pattern.compile("^(?:(?!0000)[0-9]{4}([-/.年]?)(?:(?:0?[1-9]|1[0-2])([-/.月]?)(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])([-/.月]?)(?:29|30)([日]?)|(?:0?[13578]|1[02])([-/.月]?)31)([日]?)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.月]?)0?2([-/.月]?)29([日]?))$");
-    /**
-     * excel 导入时间格式类型
-     */
-    private static final List<String> IMPORT_EXCEL_DATE_FORMAT_TYPE = new ArrayList<String>() {{
-        add(DatePattern.DATE_PATTERN_YMD_HOUR);
-    }};
-
-    /**
-     * 获取当前的登陆人信息
-     *
-     * @return
-     */
-    public static SysUserVo getCurrentUser() {
-        // 获取当前登录人信息
-        SysUserVo currUser = null;
-        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        if (attributes != null) {
-            HttpServletRequest request = attributes.getRequest();
-            if (request != null) {
-                String token = request.getHeader("token");
-                if (com.rongwei.rwcommon.utils.StringUtils.isNotEmpty(token)) {
-                    currUser = redisService.getLoginUser(token);
-                }
-            }
-        }
-        return currUser;
-    }
-
-
-    /**
-     * 校验字符串是否为 日期格式
-     *
-     * @param str
-     * @return
-     */
-    public static boolean strIsDateLayout(String str) {
-        if (StringUtils.isBlank(str)) {
-            return false;
-        }
-        Matcher matcher = STR_IS_DATE_LAYOUT_PATTERN.matcher(str);
-        if (matcher.matches()) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public static Date importExcelFormatExcel(XSSFCell objValue) {
-        if (objValue == null) {
-            return null;
-        }
-        if (StringUtils.isBlank(objValue.toString())) {
-            return null;
-        }
-        try {
-            return objValue.getDateCellValue();
-        } catch (Exception e) {
-            log.debug("当前单元格不是时间格式");
-        }
-        AtomicReference<Date> date = new AtomicReference<>();
-        IMPORT_EXCEL_DATE_FORMAT_TYPE.forEach(format -> {
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format, Locale.ENGLISH);
-            try {
-                date.set(simpleDateFormat.parse(objValue.toString()));
-            } catch (ParseException e) {
-                log.error("excel解析时 时间格式化出现异常!时间格式:{},日期:{}", format, objValue);
-            }
-        });
-        return date.get();
-    }
-}

+ 149 - 0
cx-knowledge-base/cx-knowledge-base-common/src/main/resources/mybatis/KbKnowledgebaseSearchKeywordsDao.xml

@@ -0,0 +1,149 @@
+<?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.rongwei.bscommon.sys.dao.KbKnowledgebaseSearchKeywordsDao">
+    <select id="getSearchBasicInfo" resultType="com.rongwei.bsentity.vo.KnowledgeBaseVo">
+        SELECT
+        ksc.FROMID as pagePartId,
+        ksc.MENUID as menuId,
+        ksc.MENU as menuName,
+        ksc.PID as menuPid,
+        ksd.TABLENAME as tableName,
+        ksd.TABLECOLUMNNANE as columnName,
+        ksd.TABLECOLUMNTYPE as columnType,
+        ksd.LABEL as columnDesc,
+        ksd.CONTROLTYPE as controlType,
+        ksd.ENUMTYPE as enumType,
+        ksd.DATAORIGIN as enumContent,
+        ksc.TABLESQL as tablesql
+        FROM
+        kb_subsystem_config ksc
+        LEFT JOIN kb_subsystem_detail ksd on ksc.id= ksd.MASTERID
+        <where>
+            ksc.DELETED='0'
+            and ksd.DELETED='0'
+            <if test="systemId != 'all'">
+                and ksc.PID= #{systemId}
+            </if>
+        </where>
+    </select>
+    <select id="getSelectInfo" resultType="com.rongwei.bsentity.vo.KBDictDataVo">
+        <foreach collection="datas" separator="union all" item="data" >
+            <if test="data.enumType=='dict'">
+                select name as label ,value as value,concat(#{data.tableName},"-;-",#{data.columnName}) as dictKey from sys_dict where DELETED='0' AND DICTTYPE=#{data.enumContent}
+            </if>
+            <if test="data.enumType=='sql'">
+                select label,value,concat(#{data.tableName},"-;-",#{data.columnName}) as dictKey from (${data.enumContent}) a
+            </if>
+        </foreach>
+    </select>
+    <sql id="kbSQL">
+        SELECT
+            kkl.ID AS dataId,
+            sm.ID AS menuId,
+            sm.NAME AS menuName,
+            sm.PID AS systemId,
+            '07f7a17323be40bb96c292b80631a5a2' AS pagePartId,
+            kkl.CREATEDATE AS createDate,
+            '' AS systemName,
+            CONCAT( "存放目录: ", kkl.REMARK,  "-@-", "标题: ", kkl.TITLE, "-@-", "创建人: ", kkl.CREATEUSERNAME,"-@-","附件: ", kkl.ANNEX ) AS searchResult
+        FROM
+            kb_knowledge_ledger kkl
+                INNER JOIN sys_module sm ON sm.ID = 'b03686d4b8b54b96a6d310be8bd925a4'
+        WHERE
+            kkl.DELETED = '0'
+        <bind name="pattern" value="'%' + searchContent + '%'"/>
+        and kkl.TITLE like #{pattern}
+    </sql>
+    <select id="getKbData" resultType="com.rongwei.bsentity.vo.KBResultVo">
+        select * from (
+        <choose>
+            <when test="systemId=='4149efeef04c4e08972dd5516a2dc16f'">
+                <include refid="kbSQL"></include>
+            </when>
+            <otherwise>
+                <foreach collection="searchVos" item="searchVo" separator="union all">
+                    select
+                    ID as dataId,
+                    #{searchVo.menuId} AS menuId,
+                    #{searchVo.menuName} AS menuName,
+                    #{searchVo.menuPid} AS systemId,
+                    #{searchVo.pagePartId} as pagePartId,
+                    a.CREATEDATE as createDate,
+                    '' AS systemName,
+                    <foreach collection="searchVo.columnInfoList" item="columnInfo" separator=', "-@-",' open="CONCAT("
+                             close=")">
+                        #{columnInfo.columnDesc},": ",a.${columnInfo.columnName}
+                    </foreach>
+                    as searchResult
+                    from (${searchVo.tableSql}) a
+                    <where>
+                        AND DELETED ='0'
+                        AND
+                        <foreach collection="searchVo.columnInfoList" item="columnInfo" separator=' or ' open="("
+                                 close=")">
+                            <bind name="pattern" value="'%' + columnInfo.searchValue + '%'"/>
+                            <choose>
+                                <when test="columnInfo.columnType=='DATETIME'">
+                                    CAST(a.${columnInfo.columnName}  AS CHAR) LIKE #{pattern}
+                                </when>
+                                <otherwise>
+                                    a.${columnInfo.columnName} LIKE #{pattern}
+                                </otherwise>
+                            </choose>
+
+                        </foreach>
+                    </where>
+                </foreach>
+                union all
+                <include refid="kbSQL"></include>
+            </otherwise>
+        </choose>
+                )b where b.searchResult is not null order by b.createDate ${orderRules} limit #{pageNum},#{pageSize}
+    </select>
+    <select id="getKbDataLength" resultType="java.lang.Integer">
+        select COUNT(*) from (
+        <choose>
+            <when test="systemId=='4149efeef04c4e08972dd5516a2dc16f'">
+                <include refid="kbSQL"></include>
+            </when>
+            <otherwise>
+                <foreach collection="searchVos" item="searchVo" separator="union all">
+                    select
+                    ID as dataId,
+                    #{searchVo.menuId} AS menuId,
+                    #{searchVo.menuName} AS menuName,
+                    #{searchVo.menuPid} AS systemId,
+                    #{searchVo.pagePartId} as pagePartId,
+                    a.CREATEDATE as createDate,
+                    '' AS systemName,
+                    <foreach collection="searchVo.columnInfoList" item="columnInfo" separator=', "-@-",' open="CONCAT("
+                             close=")">
+                        #{columnInfo.columnDesc},": ",a.${columnInfo.columnName}
+                    </foreach>
+                    as searchResult
+                    from (${searchVo.tableSql}) a
+                    <where>
+                        AND DELETED ='0'
+                        AND
+                        <foreach collection="searchVo.columnInfoList" item="columnInfo" separator=' or ' open="("
+                                 close=")">
+                            <bind name="pattern" value="'%' + columnInfo.searchValue + '%'"/>
+                            <choose>
+                                <when test="columnInfo.columnType=='DATETIME'">
+                                    CAST(a.${columnInfo.columnName}  AS CHAR) LIKE #{pattern}
+                                </when>
+                                <otherwise>
+                                    a.${columnInfo.columnName} LIKE #{pattern}
+                                </otherwise>
+                            </choose>
+
+                        </foreach>
+                    </where>
+                </foreach>
+                union all
+                <include refid="kbSQL"></include>
+            </otherwise>
+        </choose>
+        )b where b.searchResult is not null
+    </select>
+</mapper>

+ 28 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbKnowledgebaseSearchKeywordsDo.java

@@ -0,0 +1,28 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * KbKnowledgebaseSearchKeywordsDo class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@Data
+@TableName(value = "kb_knowledgebase_search_keywords")
+public class KbKnowledgebaseSearchKeywordsDo extends BaseDo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String id;
+
+    private String tenantid;
+
+    private String roption;
+
+    private String content;
+
+    private String count;
+}

+ 6 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbSubsystemConfigDo.java

@@ -123,4 +123,10 @@ public class KbSubsystemConfigDo {
 	 */
 	private String menuid;
 
+	private String pid;
+
+	private String fromid;
+
+	private String tablesql;
+
 }

+ 3 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/domain/KbSubsystemDetailDo.java

@@ -165,4 +165,7 @@ public class KbSubsystemDetailDo {
 	 */
 	private String menuid;
 
+	private String pid;
+
+	private String fromid;
 }

+ 16 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBDictDataVo.java

@@ -0,0 +1,16 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * KBDictDataVo class
+ *
+ * @author XH
+ * @date 2024/01/12
+ */
+@Data
+public class KBDictDataVo {
+    private String dictKey;
+    private String label;
+    private String value;
+}

+ 56 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBResultVo.java

@@ -0,0 +1,56 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * KBResultVo class
+ *
+ * @author XH
+ * @date 2024/01/12
+ */
+@Data
+public class KBResultVo {
+    // 业务数据ID
+    private String dataId;
+    // 菜单ID
+    private String menuId;
+    // 菜单名称
+    private String menuName;
+    // 子系统id
+    private String systemId;
+    // 子系统名称
+    private String systemName;
+    // 搜索出的内容
+    private String searchResult="";
+    // 菜单的数据配置ID
+    private String pagePartId;
+
+    private String createDate;
+    /**
+     * 标题
+     */
+    private List<String> searchTitleList = new ArrayList<>();
+    /**
+     * 内容
+     */
+    private List<String> searchContentList =  new ArrayList<>();
+
+    public void setSearchResult(String searchResult) {
+        this.searchResult =searchResult;
+        if(StringUtils.isBlank(searchResult)){
+            return;
+        }
+        this.searchTitleList = Arrays.stream(searchResult.split("-@-")).filter(info->info.contains("-;-"))
+                .flatMap(info-> Stream.of(info.split("\\^_\\^")))
+                .map(info->info.split("-;-")[0]).collect(Collectors.toList());
+        this.searchContentList = Arrays.stream(searchResult.split("-@-")).filter(info->!info.contains("-;-")).collect(Collectors.toList());
+    }
+}

+ 37 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KBSearchVo.java

@@ -0,0 +1,37 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * KBSearchVo class
+ *
+ * @author XH
+ * @date 2024/01/12
+ */
+@Data
+public class KBSearchVo {
+    // 表单 列表 id
+    private String pagePartId;
+    // 菜单ID
+    private String menuId;
+    // 菜单名称
+    private String menuName;
+    // 子系统ID
+    private String menuPid;
+    // 表名
+    private String tableName;
+
+    private String tableSql;
+
+    private List<ColumnInfo> columnInfoList;
+
+    @Data
+    public static class ColumnInfo{
+        private String columnName;
+        private String columnDesc;
+        private String columnType;
+        private String searchValue;
+    }
+}

+ 24 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KnowledgeBaseSearchVo.java

@@ -0,0 +1,24 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * KnowledgeBaseSearchVo class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@Data
+public class KnowledgeBaseSearchVo {
+    // 搜索 系统ID 全部 问题跟踪与解决 安全生产平台 设备管理平台 知识库
+    private String systemId = "all";
+
+    private String searchContent;
+
+    private int pageNum = 1;
+
+    private int pageSize = 10;
+
+    private String orderRules= "desc";
+
+}

+ 41 - 0
cx-knowledge-base/cx-knowledge-base-entity/src/main/java/com/rongwei/bsentity/vo/KnowledgeBaseVo.java

@@ -0,0 +1,41 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * KnowledgeBaseVo class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@Data
+public class KnowledgeBaseVo {
+    // 表单 列表 id
+    private String pagePartId;
+    // 菜单ID
+    private String menuId;
+    // 菜单名称
+    private String menuName;
+    // 子系统ID
+    private String menuPid;
+    // 表名
+    private String tableName;
+    // 字段名
+    private String columnName;
+    // 字段描述
+    private String columnDesc;
+    // VARCHAR INT DATETIME
+    private String columnType;
+
+    // 字段类型  text  select
+    private String controlType;
+
+    // 下拉选所属的类型  数据字典 自定义sql
+    private String enumType;
+    // 具体的数据字典类型或 sql
+    private String enumContent;
+    // 查询结果
+    private String searchValue;
+    // 列表查询条件
+    private String tablesql;
+}

+ 36 - 0
cx-knowledge-base/cx-knowledge-base-server/src/main/java/com/rongwei/bsserver/sys/controller/KnowledgeBaseController.java

@@ -0,0 +1,36 @@
+package com.rongwei.bsserver.sys.controller;
+
+import com.rongwei.bscommon.sys.service.KbKnowledgeLedgerService;
+import com.rongwei.bscommon.sys.service.KnowledgeBaseService;
+import com.rongwei.bscommon.sys.service.impl.KnowledgeBaseServiceImpl;
+import com.rongwei.bscommon.sys.utils.ExceptionUtils;
+import com.rongwei.bsentity.vo.KnowledgeBaseSearchVo;
+import com.rongwei.rwcommon.base.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * KnowledgebaseController class
+ *
+ * @author XH
+ * @date 2024/01/11
+ */
+@RestController()
+@RequestMapping("/kb")
+public class KnowledgeBaseController {
+
+    @Autowired
+    private KnowledgeBaseService knowledgeBaseService;
+
+    /**
+     * 定时任务,每天凌晨执行一次,检查知识库台账中,文档状态(FILESTATUS)为:生效,并且失效时间(FAILTUREDATE)在今天之前 的文档,将状态改为:过期
+     * @return
+     */
+    @PostMapping("/search")
+    public R search(@RequestBody KnowledgeBaseSearchVo knowledgeBaseSearchVo){
+        return knowledgeBaseService.search(knowledgeBaseSearchVo);
+    }
+}

+ 2 - 2
cx-knowledge-base/cx-knowledge-base-server/src/main/resources/bootstrap-dev.yml

@@ -3,11 +3,11 @@ spring:
     nacos:
       config:
         file-extension: yaml
-        server-addr: 127.0.0.1:8848
+        server-addr: 192.168.0.205:8848
         namespace: cd047569-9470-4dfb-8663-b113d01cd30f
         ext-config[0]:
           data-id: common-config.yaml
       discovery:
-        server-addr: 127.0.0.1:8848
+        server-addr: 192.168.0.205:8848
         namespace: cd047569-9470-4dfb-8663-b113d01cd30f