first commit

This commit is contained in:
dev
2026-02-22 12:12:02 +08:00
commit b236048a24
1467 changed files with 160403 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-knowledge</artifactId>
<description>
knowledge知识库模块
</description>
<dependencies>
<!-- HTTP 客户端 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<!-- 通用工具-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId>
</dependency>
<!-- OSS功能模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-oss</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<!-- excel-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-excel</artifactId>
</dependency>
<!-- SMS功能模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sms</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<!-- Apache POI for document processing -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
</dependency>
<!-- iText for PDF processing -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,35 @@
package org.dromara.knowledge.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "rag")
public class RagConfigProperties {
private boolean enabled = true;
private String defaultEmbeddingModel = "text-embedding";
private String defaultVectorBackend = "db";
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getDefaultEmbeddingModel() {
return defaultEmbeddingModel;
}
public void setDefaultEmbeddingModel(String defaultEmbeddingModel) {
this.defaultEmbeddingModel = defaultEmbeddingModel;
}
public String getDefaultVectorBackend() {
return defaultVectorBackend;
}
public void setDefaultVectorBackend(String defaultVectorBackend) {
this.defaultVectorBackend = defaultVectorBackend;
}
}
@@ -0,0 +1,10 @@
package org.dromara.knowledge.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(RagConfigProperties.class)
public class RagConfiguration {
}
@@ -0,0 +1,118 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeAttachBo;
import org.dromara.knowledge.domain.vo.KnowledgeAttachVo;
import org.dromara.knowledge.service.KnowledgeAttachService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库附件控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/attach")
public class KnowledgeAttachController extends BaseController {
private final KnowledgeAttachService knowledgeAttachService;
/**
* 查询知识库附件列表
*/
@SaCheckPermission("knowledge:attach:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeAttachVo> list(KnowledgeAttachBo bo, PageQuery pageQuery) {
return knowledgeAttachService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库附件列表
*/
@SaCheckPermission("knowledge:attach:export")
@Log(title = "知识库附件", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeAttachBo bo, HttpServletResponse response) {
List<KnowledgeAttachVo> list = knowledgeAttachService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库附件数据", KnowledgeAttachVo.class, response);
}
/**
* 获取知识库附件详细信息
*
* @param attachId 附件ID
*/
@SaCheckPermission("knowledge:attach:query")
@GetMapping("/{attachId}")
public R<KnowledgeAttachVo> getInfo(@PathVariable Long attachId) {
return R.ok(knowledgeAttachService.queryById(attachId));
}
/**
* 新增知识库附件
*/
@SaCheckPermission("knowledge:attach:add")
@Log(title = "知识库附件", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeAttachBo bo) {
return toAjax(knowledgeAttachService.insertByBo(bo));
}
/**
* 修改知识库附件
*/
@SaCheckPermission("knowledge:attach:edit")
@Log(title = "知识库附件", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeAttachBo bo) {
return toAjax(knowledgeAttachService.updateByBo(bo));
}
/**
* 删除知识库附件
*
* @param attachIds 附件ID串
*/
@SaCheckPermission("knowledge:attach:remove")
@Log(title = "知识库附件", businessType = BusinessType.DELETE)
@DeleteMapping("/{attachIds}")
public R<Void> remove(@PathVariable Long[] attachIds) {
return toAjax(knowledgeAttachService.deleteWithValidByIds(List.of(attachIds), true));
}
/**
* 根据知识库ID查询附件列表
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:attach:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<List<KnowledgeAttachVo>> getByKnowledgeId(@PathVariable String knowledgeId) {
return R.ok(knowledgeAttachService.queryListByKnowledgeId(knowledgeId));
}
/**
* 根据文档ID查询附件信息
*
* @param documentId 文档ID
*/
@SaCheckPermission("knowledge:attach:query")
@GetMapping("/document/{documentId}")
public R<KnowledgeAttachVo> getByDocumentId(@PathVariable String documentId) {
return R.ok(knowledgeAttachService.queryByDocId(documentId));
}
}
@@ -0,0 +1,129 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeFragmentBo;
import org.dromara.knowledge.domain.vo.KnowledgeFragmentVo;
import org.dromara.knowledge.service.KnowledgeFragmentService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库片段控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/fragment")
public class KnowledgeFragmentController extends BaseController {
private final KnowledgeFragmentService knowledgeFragmentService;
/**
* 查询知识库片段列表
*/
@SaCheckPermission("knowledge:fragment:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeFragmentVo> list(KnowledgeFragmentBo bo, PageQuery pageQuery) {
return knowledgeFragmentService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库片段列表
*/
@SaCheckPermission("knowledge:fragment:export")
@Log(title = "知识库片段", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeFragmentBo bo, HttpServletResponse response) {
List<KnowledgeFragmentVo> list = knowledgeFragmentService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库片段数据", KnowledgeFragmentVo.class, response);
}
/**
* 获取知识库片段详细信息
*
* @param fragmentId 片段ID
*/
@SaCheckPermission("knowledge:fragment:query")
@GetMapping("/{fragmentId}")
public R<KnowledgeFragmentVo> getInfo(@PathVariable Long fragmentId) {
return R.ok(knowledgeFragmentService.queryById(fragmentId));
}
/**
* 新增知识库片段
*/
@SaCheckPermission("knowledge:fragment:add")
@Log(title = "知识库片段", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeFragmentBo bo) {
return toAjax(knowledgeFragmentService.insertByBo(bo));
}
/**
* 修改知识库片段
*/
@SaCheckPermission("knowledge:fragment:edit")
@Log(title = "知识库片段", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeFragmentBo bo) {
return toAjax(knowledgeFragmentService.updateByBo(bo));
}
/**
* 删除知识库片段
*
* @param fragmentIds 片段ID串
*/
@SaCheckPermission("knowledge:fragment:remove")
@Log(title = "知识库片段", businessType = BusinessType.DELETE)
@DeleteMapping("/{fragmentIds}")
public R<Void> remove(@PathVariable Long[] fragmentIds) {
return toAjax(knowledgeFragmentService.deleteWithValidByIds(List.of(fragmentIds), true));
}
/**
* 根据知识库ID查询片段列表
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:fragment:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<List<KnowledgeFragmentVo>> getByKnowledgeId(@PathVariable Long knowledgeId) {
return R.ok(knowledgeFragmentService.queryListByKnowledgeId(knowledgeId));
}
/**
* 根据文档ID查询片段列表
*
* @param documentId 文档ID
*/
@SaCheckPermission("knowledge:fragment:query")
@GetMapping("/document/{documentId}")
public R<List<KnowledgeFragmentVo>> getByDocumentId(@PathVariable String documentId) {
return R.ok(knowledgeFragmentService.queryListByDocId(documentId));
}
/**
* 根据片段ID查询片段信息
*
* @param fragmentId 片段ID
*/
@SaCheckPermission("knowledge:fragment:query")
@GetMapping("/fragment/{fragmentId}")
public R<KnowledgeFragmentVo> getByFragmentId(@PathVariable String fragmentId) {
return R.ok(knowledgeFragmentService.queryByFid(fragmentId));
}
}
@@ -0,0 +1,165 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeHitLogBo;
import org.dromara.knowledge.domain.vo.KnowledgeHitLogVo;
import org.dromara.knowledge.service.KnowledgeHitLogService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库命中日志控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/hitlog")
public class KnowledgeHitLogController extends BaseController {
private final KnowledgeHitLogService knowledgeHitLogService;
/**
* 查询知识库命中日志列表
*/
@SaCheckPermission("knowledge:hitlog:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeHitLogVo> list(KnowledgeHitLogBo bo, PageQuery pageQuery) {
return knowledgeHitLogService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库命中日志列表
*/
@SaCheckPermission("knowledge:hitlog:export")
@Log(title = "知识库命中日志", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeHitLogBo bo, HttpServletResponse response) {
List<KnowledgeHitLogVo> list = knowledgeHitLogService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库命中日志", KnowledgeHitLogVo.class, response);
}
/**
* 获取知识库命中日志详细信息
*
* @param logId 日志ID
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/{logId}")
public R<KnowledgeHitLogVo> getInfo(@PathVariable Long logId) {
return R.ok(knowledgeHitLogService.queryById(logId));
}
/**
* 新增知识库命中日志
*/
@SaCheckPermission("knowledge:hitlog:add")
@Log(title = "知识库命中日志", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeHitLogBo bo) {
return toAjax(knowledgeHitLogService.insertByBo(bo));
}
/**
* 修改知识库命中日志
*/
@SaCheckPermission("knowledge:hitlog:edit")
@Log(title = "知识库命中日志", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeHitLogBo bo) {
return toAjax(knowledgeHitLogService.updateByBo(bo));
}
/**
* 删除知识库命中日志
*
* @param logIds 日志ID数组
*/
@SaCheckPermission("knowledge:hitlog:remove")
@Log(title = "知识库命中日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{logIds}")
public R<Void> remove(@PathVariable Long[] logIds) {
return toAjax(knowledgeHitLogService.deleteWithValidByIds(List.of(logIds), true));
}
/**
* 根据知识库ID查询命中日志列表
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<List<KnowledgeHitLogVo>> getByKnowledgeId(@PathVariable String knowledgeId) {
return R.ok(knowledgeHitLogService.queryByKnowledgeId(knowledgeId));
}
/**
* 根据会话ID查询命中日志列表
*
* @param sessionId 会话ID
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/session/{sessionId}")
public R<List<KnowledgeHitLogVo>> getBySessionId(@PathVariable String sessionId) {
return R.ok(knowledgeHitLogService.queryBySessionId(sessionId));
}
/**
* 根据片段ID查询命中日志列表
*
* @param fragmentId 片段ID
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/fragment/{fragmentId}")
public R<List<KnowledgeHitLogVo>> getByFragmentId(@PathVariable String fragmentId) {
return R.ok(knowledgeHitLogService.queryByFragmentId(fragmentId));
}
/**
* 根据查询文本查询命中日志列表
*
* @param queryText 查询文本
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/query/{queryText}")
public R<List<KnowledgeHitLogVo>> getByQueryText(@PathVariable String queryText) {
return R.ok(knowledgeHitLogService.queryByQueryText(queryText));
}
/**
* 获取热门查询列表
*
* @param knowledgeId 知识库ID
* @param limit 限制数量
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/popular")
public R<java.util.List<java.util.Map<String, Object>>> getPopularQueries(
@RequestParam(required = false) String knowledgeId,
@RequestParam(defaultValue = "10") Integer limit) {
return R.ok(knowledgeHitLogService.getPopularQueries(knowledgeId, limit));
}
/**
* 获取平均响应时间
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:hitlog:query")
@GetMapping("/avg-response-time")
public R<Double> getAverageResponseTime(@RequestParam(required = false) String knowledgeId) {
return R.ok(knowledgeHitLogService.getAverageResponseTime(knowledgeId));
}
}
@@ -0,0 +1,175 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeInfoBo;
import org.dromara.knowledge.domain.vo.KnowledgeInfoVo;
import org.dromara.knowledge.domain.vo.KnowledgeSearchResultVo;
import org.dromara.knowledge.domain.vo.KnowledgeStatusVo;
import org.dromara.knowledge.service.KnowledgeInfoService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 知识库信息控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/info")
public class KnowledgeInfoController extends BaseController {
private final KnowledgeInfoService knowledgeInfoService;
/**
* 查询知识库信息列表
*/
@SaCheckPermission("knowledge:info:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) {
return knowledgeInfoService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库信息列表
*/
@SaCheckPermission("knowledge:info:export")
@Log(title = "知识库信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeInfoBo bo, HttpServletResponse response) {
List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库信息数据", KnowledgeInfoVo.class, response);
}
/**
* 获取知识库信息详细信息
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:info:query")
@GetMapping("/{knowledgeId}")
public R<KnowledgeInfoVo> getInfo(@PathVariable Long knowledgeId) {
return R.ok(knowledgeInfoService.queryById(knowledgeId));
}
/**
* 新增知识库信息
*/
@SaCheckPermission("knowledge:info:add")
@Log(title = "知识库信息", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeInfoBo bo) {
return toAjax(knowledgeInfoService.insertByBo(bo));
}
/**
* 修改知识库信息
*/
@SaCheckPermission("knowledge:info:edit")
@Log(title = "知识库信息", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeInfoBo bo) {
return toAjax(knowledgeInfoService.updateByBo(bo));
}
/**
* 删除知识库信息
*
* @param knowledgeIds 知识库ID串
*/
@SaCheckPermission("knowledge:info:remove")
@Log(title = "知识库信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{knowledgeIds}")
public R<Void> remove(@PathVariable Long[] knowledgeIds) {
return toAjax(knowledgeInfoService.deleteWithValidByIds(List.of(knowledgeIds), true));
}
/**
* 根据用户ID查询知识库信息列表
*
* @param userId 用户ID
*/
@SaCheckPermission("knowledge:info:query")
@GetMapping("/user/{userId}")
public R<List<KnowledgeInfoVo>> getByUserId(@PathVariable Long userId) {
return R.ok(knowledgeInfoService.queryListByUserId(userId));
}
/**
* 根据知识库ID查询知识库信息
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:info:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<KnowledgeInfoVo> getByKnowledgeId(@PathVariable Long knowledgeId) {
return R.ok(knowledgeInfoService.queryByKnowledgeId(knowledgeId));
}
/**
* 上传文档到知识库
*
* @param knowledgeId 知识库ID
* @param file 上传的文件
*/
@SaCheckPermission("knowledge:info:upload")
@Log(title = "知识库文档上传", businessType = BusinessType.INSERT)
@PostMapping("/{knowledgeId}/upload")
public R<String> uploadDocument(@PathVariable String knowledgeId,
@RequestParam("file") MultipartFile file) {
return R.ok(knowledgeInfoService.uploadDocument(knowledgeId, file));
}
/**
* 批量上传文档到知识库
*
* @param knowledgeId 知识库ID
* @param files 上传的文件列表
*/
@SaCheckPermission("knowledge:info:upload")
@Log(title = "知识库批量文档上传", businessType = BusinessType.INSERT)
@PostMapping("/{knowledgeId}/batch-upload")
public R<List<String>> batchUploadDocuments(@PathVariable String knowledgeId,
@RequestParam("files") MultipartFile[] files) {
return R.ok(knowledgeInfoService.batchUploadDocuments(knowledgeId, files));
}
/**
* 检索知识库
*
* @param knowledgeId 知识库ID
* @param query 查询文本
* @param limit 返回结果数量限制
*/
@SaCheckPermission("knowledge:info:search")
@PostMapping("/{knowledgeId}/search")
public R<List<KnowledgeSearchResultVo>> searchKnowledge(@PathVariable String knowledgeId,
@RequestParam String query,
@RequestParam(defaultValue = "10") Integer limit) {
return R.ok(knowledgeInfoService.searchKnowledge(knowledgeId, query, limit));
}
/**
* 获取知识库处理状态
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:info:query")
@GetMapping("/{knowledgeId}/status")
public R<KnowledgeStatusVo> getKnowledgeStatus(@PathVariable String knowledgeId) {
return R.ok(knowledgeInfoService.getKnowledgeStatus(knowledgeId));
}
}
@@ -0,0 +1,129 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeJobBo;
import org.dromara.knowledge.domain.vo.KnowledgeJobVo;
import org.dromara.knowledge.service.KnowledgeJobService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库任务控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/job")
public class KnowledgeJobController extends BaseController {
private final KnowledgeJobService knowledgeJobService;
/**
* 查询知识库任务列表
*/
@SaCheckPermission("knowledge:job:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeJobVo> list(KnowledgeJobBo bo, PageQuery pageQuery) {
return knowledgeJobService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库任务列表
*/
@SaCheckPermission("knowledge:job:export")
@Log(title = "知识库任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeJobBo bo, HttpServletResponse response) {
List<KnowledgeJobVo> list = knowledgeJobService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库任务", KnowledgeJobVo.class, response);
}
/**
* 获取知识库任务详细信息
*
* @param jobId 任务ID
*/
@SaCheckPermission("knowledge:job:query")
@GetMapping("/{jobId}")
public R<KnowledgeJobVo> getInfo(@PathVariable Long jobId) {
return R.ok(knowledgeJobService.queryById(jobId));
}
/**
* 新增知识库任务
*/
@SaCheckPermission("knowledge:job:add")
@Log(title = "知识库任务", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeJobBo bo) {
return toAjax(knowledgeJobService.insertByBo(bo));
}
/**
* 修改知识库任务
*/
@SaCheckPermission("knowledge:job:edit")
@Log(title = "知识库任务", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeJobBo bo) {
return toAjax(knowledgeJobService.updateByBo(bo));
}
/**
* 删除知识库任务
*
* @param jobIds 任务ID数组
*/
@SaCheckPermission("knowledge:job:remove")
@Log(title = "知识库任务", businessType = BusinessType.DELETE)
@DeleteMapping("/{jobIds}")
public R<Void> remove(@PathVariable Long[] jobIds) {
return toAjax(knowledgeJobService.deleteWithValidByIds(List.of(jobIds), true));
}
/**
* 根据知识库ID查询任务列表
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:job:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<List<KnowledgeJobVo>> getByKnowledgeId(@PathVariable String knowledgeId) {
return R.ok(knowledgeJobService.queryByKnowledgeId(knowledgeId));
}
/**
* 根据任务状态查询任务列表
*
* @param status 任务状态
*/
@SaCheckPermission("knowledge:job:query")
@GetMapping("/status/{status}")
public R<List<KnowledgeJobVo>> getByStatus(@PathVariable Integer status) {
return R.ok(knowledgeJobService.queryByStatus(status));
}
/**
* 根据任务类型查询任务列表
*
* @param jobType 任务类型
*/
@SaCheckPermission("knowledge:job:query")
@GetMapping("/type/{jobType}")
public R<List<KnowledgeJobVo>> getByJobType(@PathVariable String jobType) {
return R.ok(knowledgeJobService.queryByJobType(jobType));
}
}
@@ -0,0 +1,118 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgePromptTemplateBo;
import org.dromara.knowledge.domain.vo.KnowledgePromptTemplateVo;
import org.dromara.knowledge.service.KnowledgePromptTemplateService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库提示模板控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/prompt")
public class KnowledgePromptTemplateController extends BaseController {
private final KnowledgePromptTemplateService knowledgePromptTemplateService;
/**
* 查询知识库提示模板列表
*/
@SaCheckPermission("knowledge:prompt:list")
@GetMapping("/list")
public TableDataInfo<KnowledgePromptTemplateVo> list(KnowledgePromptTemplateBo bo, PageQuery pageQuery) {
return knowledgePromptTemplateService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库提示模板列表
*/
@SaCheckPermission("knowledge:prompt:export")
@Log(title = "知识库提示模板", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgePromptTemplateBo bo, HttpServletResponse response) {
List<KnowledgePromptTemplateVo> list = knowledgePromptTemplateService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库提示模板数据", KnowledgePromptTemplateVo.class, response);
}
/**
* 获取知识库提示模板详细信息
*
* @param templateId 模板ID
*/
@SaCheckPermission("knowledge:prompt:query")
@GetMapping("/{templateId}")
public R<KnowledgePromptTemplateVo> getInfo(@PathVariable Long templateId) {
return R.ok(knowledgePromptTemplateService.queryById(templateId));
}
/**
* 新增知识库提示模板
*/
@SaCheckPermission("knowledge:prompt:add")
@Log(title = "知识库提示模板", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgePromptTemplateBo bo) {
return toAjax(knowledgePromptTemplateService.insertByBo(bo));
}
/**
* 修改知识库提示模板
*/
@SaCheckPermission("knowledge:prompt:edit")
@Log(title = "知识库提示模板", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgePromptTemplateBo bo) {
return toAjax(knowledgePromptTemplateService.updateByBo(bo));
}
/**
* 删除知识库提示模板
*
* @param templateIds 模板ID串
*/
@SaCheckPermission("knowledge:prompt:remove")
@Log(title = "知识库提示模板", businessType = BusinessType.DELETE)
@DeleteMapping("/{templateIds}")
public R<Void> remove(@PathVariable Long[] templateIds) {
return toAjax(knowledgePromptTemplateService.deleteWithValidByIds(List.of(templateIds), true));
}
/**
* 根据分类查询提示模板列表
*
* @param category 分类
*/
@SaCheckPermission("knowledge:prompt:query")
@GetMapping("/category/{category}")
public R<List<KnowledgePromptTemplateVo>> getByCategory(@PathVariable String category) {
return R.ok(knowledgePromptTemplateService.queryListByCategory(category));
}
/**
* 根据模板名称查询提示模板
*
* @param templateName 模板名称
*/
@SaCheckPermission("knowledge:prompt:query")
@GetMapping("/name/{templateName}")
public R<KnowledgePromptTemplateVo> getByTemplateName(@PathVariable String templateName) {
return R.ok(knowledgePromptTemplateService.queryByTemplateName(templateName));
}
}
@@ -0,0 +1,140 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaVo;
import org.dromara.knowledge.service.KnowledgeSchemaService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库模式控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/schema")
public class KnowledgeSchemaController extends BaseController {
private final KnowledgeSchemaService knowledgeSchemaService;
/**
* 查询知识库模式列表
*/
@SaCheckPermission("knowledge:schema:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeSchemaVo> list(KnowledgeSchemaBo bo, PageQuery pageQuery) {
return knowledgeSchemaService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库模式列表
*/
@SaCheckPermission("knowledge:schema:export")
@Log(title = "知识库模式", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeSchemaBo bo, HttpServletResponse response) {
List<KnowledgeSchemaVo> list = knowledgeSchemaService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库模式数据", KnowledgeSchemaVo.class, response);
}
/**
* 获取知识库模式详细信息
*
* @param schemaId 模式ID
*/
@SaCheckPermission("knowledge:schema:query")
@GetMapping("/{schemaId}")
public R<KnowledgeSchemaVo> getInfo(@PathVariable Long schemaId) {
return R.ok(knowledgeSchemaService.queryById(schemaId));
}
/**
* 新增知识库模式
*/
@SaCheckPermission("knowledge:schema:add")
@Log(title = "知识库模式", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeSchemaBo bo) {
return toAjax(knowledgeSchemaService.insertByBo(bo));
}
/**
* 修改知识库模式
*/
@SaCheckPermission("knowledge:schema:edit")
@Log(title = "知识库模式", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeSchemaBo bo) {
return toAjax(knowledgeSchemaService.updateByBo(bo));
}
/**
* 删除知识库模式
*
* @param schemaIds 模式ID串
*/
@SaCheckPermission("knowledge:schema:remove")
@Log(title = "知识库模式", businessType = BusinessType.DELETE)
@DeleteMapping("/{schemaIds}")
public R<Void> remove(@PathVariable Long[] schemaIds) {
return toAjax(knowledgeSchemaService.deleteWithValidByIds(List.of(schemaIds), true));
}
/**
* 根据ID查询模式信息
*
* @param id ID
*/
@SaCheckPermission("knowledge:schema:query")
@GetMapping("/id/{id}")
public R<KnowledgeSchemaVo> getById(@PathVariable Long id) {
return R.ok(knowledgeSchemaService.queryById(id));
}
/**
* 根据模式组ID查询模式列表
*
* @param schemaGroupId 模式组ID
*/
@SaCheckPermission("knowledge:schema:query")
@GetMapping("/group/{schemaGroupId}")
public R<List<KnowledgeSchemaVo>> getBySchemaGroupId(@PathVariable Long schemaGroupId) {
return R.ok(knowledgeSchemaService.queryListBySchemaGroupId(schemaGroupId));
}
/**
* 根据编码查询模式信息
*
* @param code 编码
*/
@SaCheckPermission("knowledge:schema:query")
@GetMapping("/code/{code}")
public R<KnowledgeSchemaVo> getByCode(@PathVariable String code) {
return R.ok(knowledgeSchemaService.queryByCode(code));
}
/**
* 根据表名查询模式信息
*
* @param tableName 表名
*/
@SaCheckPermission("knowledge:schema:query")
@GetMapping("/table/{tableName}")
public R<KnowledgeSchemaVo> getByTableName(@PathVariable String tableName) {
return R.ok(knowledgeSchemaService.queryByTableName(tableName));
}
}
@@ -0,0 +1,141 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaFieldBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaFieldVo;
import org.dromara.knowledge.service.KnowledgeSchemaFieldService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库模式字段控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/schema/field")
public class KnowledgeSchemaFieldController extends BaseController {
private final KnowledgeSchemaFieldService knowledgeSchemaFieldService;
/**
* 查询知识库模式字段列表
*/
@SaCheckPermission("knowledge:schema:field:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeSchemaFieldVo> list(KnowledgeSchemaFieldBo bo, PageQuery pageQuery) {
return knowledgeSchemaFieldService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库模式字段列表
*/
@SaCheckPermission("knowledge:schema:field:export")
@Log(title = "知识库模式字段", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeSchemaFieldBo bo, HttpServletResponse response) {
List<KnowledgeSchemaFieldVo> list = knowledgeSchemaFieldService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库模式字段数据", KnowledgeSchemaFieldVo.class, response);
}
/**
* 获取知识库模式字段详细信息
*
* @param fieldId 字段ID
*/
@SaCheckPermission("knowledge:schema:field:query")
@GetMapping("/{fieldId}")
public R<KnowledgeSchemaFieldVo> getInfo(@PathVariable Long fieldId) {
return R.ok(knowledgeSchemaFieldService.queryById(fieldId));
}
/**
* 新增知识库模式字段
*/
@SaCheckPermission("knowledge:schema:field:add")
@Log(title = "知识库模式字段", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeSchemaFieldBo bo) {
return toAjax(knowledgeSchemaFieldService.insertByBo(bo));
}
/**
* 修改知识库模式字段
*/
@SaCheckPermission("knowledge:schema:field:edit")
@Log(title = "知识库模式字段", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeSchemaFieldBo bo) {
return toAjax(knowledgeSchemaFieldService.updateByBo(bo));
}
/**
* 删除知识库模式字段
*
* @param fieldIds 字段ID串
*/
@SaCheckPermission("knowledge:schema:field:remove")
@Log(title = "知识库模式字段", businessType = BusinessType.DELETE)
@DeleteMapping("/{fieldIds}")
public R<Void> remove(@PathVariable Long[] fieldIds) {
return toAjax(knowledgeSchemaFieldService.deleteWithValidByIds(List.of(fieldIds), true));
}
/**
* 根据ID查询字段信息
*
* @param id ID
*/
@SaCheckPermission("knowledge:schema:field:query")
@GetMapping("/id/{id}")
public R<KnowledgeSchemaFieldVo> getById(@PathVariable Long id) {
return R.ok(knowledgeSchemaFieldService.queryById(id));
}
/**
* 根据模式ID查询字段列表
*
* @param schemaId 模式ID
*/
@SaCheckPermission("knowledge:schema:field:query")
@GetMapping("/schema/{schemaId}")
public R<List<KnowledgeSchemaFieldVo>> getBySchemaId(@PathVariable Long schemaId) {
return R.ok(knowledgeSchemaFieldService.queryListBySchemaId(schemaId));
}
/**
* 根据编码查询字段信息
*
* @param code 编码
*/
@SaCheckPermission("knowledge:schema:field:query")
@GetMapping("/code/{code}")
public R<KnowledgeSchemaFieldVo> getByCode(@PathVariable String code) {
return R.ok(knowledgeSchemaFieldService.queryByCode(code));
}
/**
* 根据模式ID和编码查询字段信息
*
* @param schemaId 模式ID
* @param code 编码
*/
@SaCheckPermission("knowledge:schema:field:query")
@GetMapping("/schema/{schemaId}/code/{code}")
public R<KnowledgeSchemaFieldVo> getBySchemaIdAndCode(@PathVariable Long schemaId, @PathVariable String code) {
return R.ok(knowledgeSchemaFieldService.queryBySchemaIdAndCode(schemaId, code));
}
}
@@ -0,0 +1,129 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaGroupBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaGroupVo;
import org.dromara.knowledge.service.KnowledgeSchemaGroupService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库模式组控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/schema/group")
public class KnowledgeSchemaGroupController extends BaseController {
private final KnowledgeSchemaGroupService knowledgeSchemaGroupService;
/**
* 查询知识库模式组列表
*/
@SaCheckPermission("knowledge:schema:group:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeSchemaGroupVo> list(KnowledgeSchemaGroupBo bo, PageQuery pageQuery) {
return knowledgeSchemaGroupService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库模式组列表
*/
@SaCheckPermission("knowledge:schema:group:export")
@Log(title = "知识库模式组", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeSchemaGroupBo bo, HttpServletResponse response) {
List<KnowledgeSchemaGroupVo> list = knowledgeSchemaGroupService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库模式组数据", KnowledgeSchemaGroupVo.class, response);
}
/**
* 获取知识库模式组详细信息
*
* @param groupId 模式组ID
*/
@SaCheckPermission("knowledge:schema:group:query")
@GetMapping("/{groupId}")
public R<KnowledgeSchemaGroupVo> getInfo(@PathVariable Long groupId) {
return R.ok(knowledgeSchemaGroupService.queryById(groupId));
}
/**
* 新增知识库模式组
*/
@SaCheckPermission("knowledge:schema:group:add")
@Log(title = "知识库模式组", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeSchemaGroupBo bo) {
return toAjax(knowledgeSchemaGroupService.insertByBo(bo));
}
/**
* 修改知识库模式组
*/
@SaCheckPermission("knowledge:schema:group:edit")
@Log(title = "知识库模式组", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeSchemaGroupBo bo) {
return toAjax(knowledgeSchemaGroupService.updateByBo(bo));
}
/**
* 删除知识库模式组
*
* @param groupIds 模式组ID串
*/
@SaCheckPermission("knowledge:schema:group:remove")
@Log(title = "知识库模式组", businessType = BusinessType.DELETE)
@DeleteMapping("/{groupIds}")
public R<Void> remove(@PathVariable Long[] groupIds) {
return toAjax(knowledgeSchemaGroupService.deleteWithValidByIds(List.of(groupIds), true));
}
/**
* 根据ID查询模式组信息
*
* @param id ID
*/
@SaCheckPermission("knowledge:schema:group:query")
@GetMapping("/id/{id}")
public R<KnowledgeSchemaGroupVo> getById(@PathVariable Long id) {
return R.ok(knowledgeSchemaGroupService.queryById(id));
}
/**
* 根据编码查询模式组信息
*
* @param code 编码
*/
@SaCheckPermission("knowledge:schema:group:query")
@GetMapping("/code/{code}")
public R<KnowledgeSchemaGroupVo> getByCode(@PathVariable String code) {
return R.ok(knowledgeSchemaGroupService.queryByCode(code));
}
/**
* 根据名称查询模式组信息
*
* @param name 名称
*/
@SaCheckPermission("knowledge:schema:group:query")
@GetMapping("/name/{name}")
public R<KnowledgeSchemaGroupVo> getByName(@PathVariable String name) {
return R.ok(knowledgeSchemaGroupService.queryByName(name));
}
}
@@ -0,0 +1,180 @@
package org.dromara.knowledge.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.knowledge.domain.bo.KnowledgeVectorBo;
import org.dromara.knowledge.domain.vo.KnowledgeVectorVo;
import org.dromara.knowledge.service.KnowledgeVectorService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 知识库向量控制器
*
* @author pengles
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/knowledge/vector")
public class KnowledgeVectorController extends BaseController {
private final KnowledgeVectorService knowledgeVectorService;
private final org.dromara.knowledge.vectorstore.VectorStoreManager vectorStoreManager;
@PostMapping("/generate")
@Log(title = "向量生成", businessType = BusinessType.OTHER)
public R<List<String>> generate(@RequestParam String knowledgeId,
@RequestParam String docId,
@RequestBody List<org.dromara.knowledge.domain.vo.KnowledgeFragmentVo> fragments,
@RequestParam(defaultValue = "bge-large-zh") String model) {
java.util.Map<String, String> map = new java.util.HashMap<>();
for (var f : fragments) {
map.put(f.getFid(), f.getContent());
}
List<String> ids = knowledgeVectorService.batchGenerateVectors(knowledgeId, docId, map, model);
return R.ok(ids);
}
@PostMapping("/search")
@Log(title = "向量检索", businessType = BusinessType.OTHER)
public R<List<org.dromara.knowledge.domain.vo.KnowledgeSearchResultVo>> search(@RequestParam String knowledgeId,
@RequestParam String query,
@RequestParam(defaultValue = "bge-large-zh") String model,
@RequestParam(defaultValue = "5") Integer topK,
@RequestParam(defaultValue = "0.5") Double threshold,
@RequestParam(defaultValue = "false") boolean distinctByDoc) {
var res = knowledgeVectorService.vectorSimilaritySearch(knowledgeId, query, model, topK, threshold);
if (distinctByDoc) {
java.util.Set<String> seen = new java.util.HashSet<>();
res = res.stream().filter(r -> {
if (seen.contains(r.getDocId())) return false;
seen.add(r.getDocId());
return true;
}).toList();
}
return R.ok(res);
}
@GetMapping("/stats/{knowledgeId}")
@Log(title = "向量统计", businessType = BusinessType.OTHER)
public R<java.util.Map<String, Object>> stats(@PathVariable String knowledgeId) {
return R.ok(knowledgeVectorService.getVectorStatistics(knowledgeId));
}
@PostMapping("/rebuild/{knowledgeId}")
@Log(title = "重建向量索引", businessType = BusinessType.OTHER)
public R<Void> rebuild(@PathVariable String knowledgeId) {
vectorStoreManager.current().rebuildIndex(knowledgeId);
return R.ok();
}
@PostMapping("/vectorize-doc")
@Log(title = "文档批量向量化", businessType = BusinessType.OTHER)
public R<java.util.List<String>> vectorizeDoc(@RequestParam String knowledgeId,
@RequestParam String docId,
@RequestParam(defaultValue = "bge-large-zh") String model) {
java.util.List<org.dromara.knowledge.domain.vo.KnowledgeFragmentVo> fragments =
org.dromara.common.core.utils.SpringUtils.getBean(org.dromara.knowledge.service.KnowledgeFragmentService.class)
.queryListByDocId(docId);
java.util.Map<String, String> map = new java.util.HashMap<>();
for (var f : fragments) map.put(f.getFid(), f.getContent());
java.util.List<String> ids = knowledgeVectorService.batchGenerateVectors(knowledgeId, docId, map, model);
return R.ok(ids);
}
/**
* 查询知识库向量列表
*/
@SaCheckPermission("knowledge:vector:list")
@GetMapping("/list")
public TableDataInfo<KnowledgeVectorVo> list(KnowledgeVectorBo bo, PageQuery pageQuery) {
return knowledgeVectorService.queryPageList(bo, pageQuery);
}
/**
* 导出知识库向量列表
*/
@SaCheckPermission("knowledge:vector:export")
@Log(title = "知识库向量", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(KnowledgeVectorBo bo, HttpServletResponse response) {
List<KnowledgeVectorVo> list = knowledgeVectorService.queryList(bo);
ExcelUtil.exportExcel(list, "知识库向量", KnowledgeVectorVo.class, response);
}
/**
* 获取知识库向量详细信息
*
* @param vectorId 向量ID
*/
@SaCheckPermission("knowledge:vector:query")
@GetMapping("/{vectorId}")
public R<KnowledgeVectorVo> getInfo(@PathVariable Long vectorId) {
return R.ok(knowledgeVectorService.queryById(vectorId));
}
/**
* 新增知识库向量
*/
@SaCheckPermission("knowledge:vector:add")
@Log(title = "知识库向量", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody KnowledgeVectorBo bo) {
return toAjax(knowledgeVectorService.insertByBo(bo));
}
/**
* 修改知识库向量
*/
@SaCheckPermission("knowledge:vector:edit")
@Log(title = "知识库向量", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody KnowledgeVectorBo bo) {
return toAjax(knowledgeVectorService.updateByBo(bo));
}
/**
* 删除知识库向量
*
* @param vectorIds 向量ID数组
*/
@SaCheckPermission("knowledge:vector:remove")
@Log(title = "知识库向量", businessType = BusinessType.DELETE)
@DeleteMapping("/{vectorIds}")
public R<Void> remove(@PathVariable Long[] vectorIds) {
return toAjax(knowledgeVectorService.deleteWithValidByIds(List.of(vectorIds), true));
}
/**
* 根据片段ID查询向量列表
*
* @param fragmentId 片段ID
*/
@SaCheckPermission("knowledge:vector:query")
@GetMapping("/fragment/{fragmentId}")
public R<List<KnowledgeVectorVo>> getByFragmentId(@PathVariable String fragmentId) {
return R.ok(knowledgeVectorService.queryByFragmentId(fragmentId));
}
/**
* 根据知识库ID查询向量列表
*
* @param knowledgeId 知识库ID
*/
@SaCheckPermission("knowledge:vector:query")
@GetMapping("/knowledge/{knowledgeId}")
public R<List<KnowledgeVectorVo>> getByKnowledgeId(@PathVariable String knowledgeId) {
return R.ok(knowledgeVectorService.queryByKnowledgeId(knowledgeId));
}
}
@@ -0,0 +1,44 @@
package org.dromara.knowledge.data;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.StringJoiner;
/**
* CSV 文档解析器
* 将 CSV 文件转换为文本格式,保留表格结构信息
* 使用制表符分隔,便于后续处理
*
* @author pengles
*/
@Component
public class CsvDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
try {
String csv = new String(bytes, StandardCharsets.UTF_8);
// CSV 文件通常使用逗号分隔,但可能包含引号和换行符
// 简单处理:将逗号替换为制表符,使其更易读
// 注意:这种方法适用于简单的 CSV,复杂 CSV(包含引号内的逗号)需要专门的 CSV 解析库
String[] lines = csv.split("\\r?\\n");
StringJoiner result = new StringJoiner("\n");
for (String line : lines) {
if (line.trim().isEmpty()) {
continue;
}
// 简单替换:将逗号替换为制表符
// 更复杂的 CSV 解析可以使用 Apache Commons CSV 等库
String processedLine = line.replace(",", "\t");
result.add(processedLine);
}
return result.toString();
} catch (Exception e) {
throw new ServiceException("CSV解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,10 @@
package org.dromara.knowledge.data;
public interface DataPipeline {
String ingest(String sourceUri);
String transform(String raw);
String store(String transformed);
}
@@ -0,0 +1,6 @@
package org.dromara.knowledge.data;
public interface DocumentParser {
String parse(byte[] bytes, String filename);
}
@@ -0,0 +1,152 @@
package org.dromara.knowledge.data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 文档解析器工厂
* 统一管理所有文档解析器,根据文件扩展名选择合适的解析器
*
* @author pengles
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class DocumentParserFactory {
private final List<DocumentParser> parsers;
private final Map<String, DocumentParser> parserMap = new HashMap<>();
/**
* 初始化解析器映射
* 通过构造函数注入所有 DocumentParser 实现,并建立文件扩展名到解析器的映射
*/
private void initParserMap() {
if (!parserMap.isEmpty()) {
return;
}
// PDF 解析器
parserMap.put("pdf", findParserByClass(PdfDocumentParser.class));
// Word 解析器
parserMap.put("doc", findParserByClass(WordDocumentParser.class));
parserMap.put("docx", findParserByClass(WordDocumentParser.class));
// Excel 解析器
parserMap.put("xls", findParserByClass(ExcelDocumentParser.class));
parserMap.put("xlsx", findParserByClass(ExcelDocumentParser.class));
// Markdown 解析器
parserMap.put("md", findParserByClass(MarkdownDocumentParser.class));
// HTML 解析器
parserMap.put("html", findParserByClass(HtmlDocumentParser.class));
parserMap.put("htm", findParserByClass(HtmlDocumentParser.class));
// CSV 解析器
parserMap.put("csv", findParserByClass(CsvDocumentParser.class));
// 文本解析器(作为默认)
parserMap.put("txt", findParserByClass(TextDocumentParser.class));
parserMap.put("json", findParserByClass(TextDocumentParser.class));
parserMap.put("xml", findParserByClass(TextDocumentParser.class));
log.info("文档解析器工厂初始化完成,已注册 {} 种文件类型", parserMap.size());
}
/**
* 根据类类型查找解析器
*/
private DocumentParser findParserByClass(Class<? extends DocumentParser> clazz) {
return parsers.stream()
.filter(parser -> clazz.isInstance(parser))
.findFirst()
.orElseGet(() -> {
try {
DocumentParser instance = clazz.getDeclaredConstructor().newInstance();
log.warn("解析器 {} 未注册为 Spring Bean,使用默认实例", clazz.getSimpleName());
return instance;
} catch (Exception e) {
throw new ServiceException("无法创建解析器实例: " + clazz.getName() + ": " + e.getMessage());
}
});
}
/**
* 根据文件扩展名获取解析器
*
* @param extension 文件扩展名(不包含点号)
* @return 文档解析器
*/
public DocumentParser getParser(String extension) {
initParserMap();
String ext = extension != null ? extension.toLowerCase() : "";
DocumentParser parser = parserMap.get(ext);
if (parser == null) {
// 如果没有找到对应的解析器,使用文本解析器作为默认
parser = parserMap.get("txt");
log.warn("未找到文件扩展名 {} 的解析器,使用默认文本解析器", extension);
}
return parser;
}
/**
* 根据文件名获取解析器
*
* @param filename 文件名
* @return 文档解析器
*/
public DocumentParser getParserByFilename(String filename) {
String extension = extractExtension(filename);
return getParser(extension);
}
/**
* 解析文档
*
* @param bytes 文件字节数组
* @param filename 文件名
* @return 解析后的文本内容
*/
public String parse(byte[] bytes, String filename) {
DocumentParser parser = getParserByFilename(filename);
return parser.parse(bytes, filename);
}
/**
* 检查是否支持该文件类型
*
* @param extension 文件扩展名
* @return 是否支持
*/
public boolean isSupported(String extension) {
initParserMap();
String ext = extension != null ? extension.toLowerCase() : "";
return parserMap.containsKey(ext);
}
/**
* 获取支持的文件扩展名列表
*
* @return 支持的文件扩展名列表
*/
public List<String> getSupportedExtensions() {
initParserMap();
return parserMap.keySet().stream().sorted().toList();
}
/**
* 从文件名中提取扩展名
*/
private String extractExtension(String filename) {
if (filename == null || filename.isEmpty()) {
return "";
}
int lastDotIndex = filename.lastIndexOf('.');
if (lastDotIndex > 0 && lastDotIndex < filename.length() - 1) {
return filename.substring(lastDotIndex + 1);
}
return "";
}
}
@@ -0,0 +1,57 @@
package org.dromara.knowledge.data;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.util.StringJoiner;
/**
* Excel 文档解析器(支持 .xls 和 .xlsx 格式)
*
* @author pengles
*/
@Component
public class ExcelDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
String ext = filename != null && filename.contains(".") ? filename.substring(filename.lastIndexOf('.') + 1).toLowerCase() : "xlsx";
try (ByteArrayInputStream is = new ByteArrayInputStream(bytes)) {
StringJoiner joiner = new StringJoiner("\n");
if ("xls".equals(ext)) {
HSSFWorkbook wb = new HSSFWorkbook(is);
for (Sheet sheet : wb) {
for (Row row : sheet) {
StringJoiner rowJoin = new StringJoiner("\t");
for (Cell cell : row) {
rowJoin.add(cell.toString());
}
joiner.add(rowJoin.toString());
}
}
wb.close();
} else {
XSSFWorkbook wb = new XSSFWorkbook(is);
for (Sheet sheet : wb) {
for (Row row : sheet) {
StringJoiner rowJoin = new StringJoiner("\t");
for (Cell cell : row) {
rowJoin.add(cell.toString());
}
joiner.add(rowJoin.toString());
}
}
wb.close();
}
return joiner.toString();
} catch (Exception e) {
throw new ServiceException("Excel解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,53 @@
package org.dromara.knowledge.data;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.regex.Pattern;
/**
* HTML 文档解析器
* 提取 HTML 中的纯文本内容,移除标签和脚本
*
* @author pengles
*/
@Component
public class HtmlDocumentParser implements DocumentParser {
// 匹配 HTML 标签的正则表达式
private static final Pattern HTML_TAG_PATTERN = Pattern.compile("<[^>]+>");
// 匹配脚本和样式标签及其内容
private static final Pattern SCRIPT_STYLE_PATTERN = Pattern.compile(
"(?i)<(script|style)[^>]*>.*?</\\1>", Pattern.DOTALL);
// 匹配 HTML 实体
private static final Pattern HTML_ENTITY_PATTERN = Pattern.compile("&[a-zA-Z]+;|&#\\d+;");
@Override
public String parse(byte[] bytes, String filename) {
try {
String html = new String(bytes, StandardCharsets.UTF_8);
// 移除脚本和样式标签及其内容
html = SCRIPT_STYLE_PATTERN.matcher(html).replaceAll("");
// 移除 HTML 标签
html = HTML_TAG_PATTERN.matcher(html).replaceAll(" ");
// 简单处理 HTML 实体(可以扩展更完整的实体映射)
html = html.replace("&nbsp;", " ")
.replace("&lt;", "<")
.replace("&gt;", ">")
.replace("&amp;", "&")
.replace("&quot;", "\"")
.replace("&#39;", "'");
// 清理多余的空白字符
html = html.replaceAll("\\s+", " ").trim();
return html;
} catch (Exception e) {
throw new ServiceException("HTML解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,24 @@
package org.dromara.knowledge.data;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
/**
* Markdown 文档解析器
* 直接返回 Markdown 文本内容,保留格式供后续处理
*
* @author pengles
*/
@Component
public class MarkdownDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
try {
return new String(bytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new ServiceException("Markdown解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,37 @@
package org.dromara.knowledge.data;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.kernel.pdf.canvas.parser.listener.LocationTextExtractionStrategy;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
/**
* PDF 文档解析器
*
* @author pengles
*/
@Component
public class PdfDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
try (ByteArrayInputStream is = new ByteArrayInputStream(bytes)) {
PdfReader reader = new PdfReader(is);
PdfDocument pdf = new PdfDocument(reader);
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= pdf.getNumberOfPages(); i++) {
String text = PdfTextExtractor.getTextFromPage(pdf.getPage(i), new LocationTextExtractionStrategy());
if (text != null && !text.isEmpty()) {
sb.append(text).append("\n");
}
}
pdf.close();
return sb.toString();
} catch (Exception e) {
throw new ServiceException("PDF解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,32 @@
package org.dromara.knowledge.data;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* 纯文本文档解析器
* 支持 TXT、JSON、XML 等纯文本格式
*
* @author pengles
*/
@Component
public class TextDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
try {
// 尝试使用 UTF-8 编码,如果失败则使用系统默认编码
String text;
try {
text = new String(bytes, StandardCharsets.UTF_8);
} catch (Exception e) {
text = new String(bytes, Charset.defaultCharset());
}
return text;
} catch (Exception e) {
throw new ServiceException("文本解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,35 @@
package org.dromara.knowledge.data;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
/**
* Word 文档解析器(支持 .doc 和 .docx 格式)
*
* @author pengles
*/
@Component
public class WordDocumentParser implements DocumentParser {
@Override
public String parse(byte[] bytes, String filename) {
String ext = filename != null && filename.contains(".") ? filename.substring(filename.lastIndexOf('.') + 1).toLowerCase() : "docx";
try (ByteArrayInputStream is = new ByteArrayInputStream(bytes)) {
if ("doc".equals(ext)) {
WordExtractor extractor = new WordExtractor(is);
return extractor.getText();
} else {
XWPFDocument docx = new XWPFDocument(is);
XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
return extractor.getText();
}
} catch (Exception e) {
throw new org.dromara.common.core.exception.ServiceException("Word解析失败: " + e.getMessage());
}
}
}
@@ -0,0 +1,106 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库附件表 knowledge_attach
*
* @author pengles
*/
@Data
@TableName("knowledge_attach")
public class KnowledgeAttach implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 文档ID
*/
private String docId;
/**
* 文档名称
*/
private String docName;
/**
* 文档类型
*/
private String docType;
/**
* 对象存储ID
*/
private Integer ossId;
/**
* 拆解图片状态:10未开始,20进行中,30已完成
*/
private Integer picStatus;
/**
* 分析图片状态:10未开始,20进行中,30已完成
*/
private Integer picAnysStatus;
/**
* 写入向量数据库状态:10未开始,20进行中,30已完成
*/
private Integer vectorStatus;
/**
* 文档内容
*/
private String content;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,86 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库片段表 knowledge_fragment
*
* @author pengles
*/
@Data
@TableName("knowledge_fragment")
public class KnowledgeFragment implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 文档ID
*/
private String docId;
/**
* 知识片段ID
*/
private String fid;
/**
* 片段索引下标
*/
private Integer idx;
/**
* 文档内容
*/
private String content;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,96 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.io.Serializable;
/**
* 知识库命中日志对象 knowledge_hit_log
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("knowledge_hit_log")
public class KnowledgeHitLog extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 会话ID
*/
private String sessionId;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 文档ID
*/
private String docId;
/**
* 知识片段ID
*/
private String fragmentId;
/**
* 查询文本
*/
private String queryText;
/**
* 查询向量
*/
private String queryVector;
/**
* 相似度分数
*/
private Double similarityScore;
/**
* 排名
*/
private Integer ranking;
/**
* 模型名称
*/
private String modelName;
/**
* 搜索参数
*/
private String searchParams;
/**
* 响应时间(毫秒)
*/
private Long responseTime;
/**
* 命中次数
*/
private Integer hitCount;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,126 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库信息表 knowledge_info
*
* @author pengles
*/
@Data
@TableName("knowledge_info")
public class KnowledgeInfo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 知识库名称
*/
private String knowledgeName;
/**
* 是否公开知识库:0否,1是
*/
private Integer share;
/**
* 描述
*/
private String description;
/**
* 知识分隔符
*/
private String knowledgeSeparator;
/**
* 提问分隔符
*/
private String questionSeparator;
/**
* 重叠字符数
*/
private Integer overlapChar;
/**
* 知识库中检索的条数
*/
private Integer retrieveLimit;
/**
* 文本块大小
*/
private Integer textBlockSize;
/**
* 向量库
*/
private String vectorModelName;
/**
* 向量模型
*/
private String embeddingModelName;
/**
* 系统提示词
*/
private String systemPrompt;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,147 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 知识库任务对象 knowledge_job
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("knowledge_job")
public class KnowledgeJob extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 任务ID
*/
private String jobId;
/**
* 任务类型
*/
private String jobType;
/**
* 任务子类型
*/
private String jobSubType;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 文档ID
*/
private String docId;
/**
* 用户ID
*/
private Long userId;
/**
* 任务状态
*/
private Integer status;
/**
* 任务进度
*/
private Integer progress;
/**
* 总项目数
*/
private Integer totalItems;
/**
* 已处理项目数
*/
private Integer processedItems;
/**
* 成功项目数
*/
private Integer successItems;
/**
* 失败项目数
*/
private Integer failedItems;
/**
* 任务优先级
*/
private Integer priority;
/**
* 重试次数
*/
private Integer retryCount;
/**
* 最大重试次数
*/
private Integer maxRetryCount;
/**
* 任务开始时间
*/
private Date startTime;
/**
* 任务结束时间
*/
private Date endTime;
/**
* 任务超时时间(秒)
*/
private Integer timeout;
/**
* 错误信息
*/
private String errorInfo;
/**
* 任务结果数据
*/
private String resultData;
/**
* 通知配置
*/
private String notificationConfig;
/**
* 通知状态
*/
private Integer notificationStatus;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,76 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库提示模板表 knowledge_prompt_template
*
* @author pengles
*/
@Data
@TableName("knowledge_prompt_template")
public class KnowledgePromptTemplate implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 提示词模板名称
*/
private String templateName;
/**
* 提示词模板内容
*/
private String templateContent;
/**
* 提示词分类:knowledge知识库类型,chat对话类型,draw绘画类型
*/
private String category;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,86 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色表 knowledge_role
*
* @author pengles
*/
@Data
@TableName("knowledge_role")
public class KnowledgeRole implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 角色名称
*/
private String roleName;
/**
* 角色编码
*/
private String roleCode;
/**
* 角色描述
*/
private String roleDesc;
/**
* 角色状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,86 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色分组表 knowledge_role_group
*
* @author pengles
*/
@Data
@TableName("knowledge_role_group")
public class KnowledgeRoleGroup implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 分组名称
*/
private String groupName;
/**
* 分组编码
*/
private String groupCode;
/**
* 分组描述
*/
private String groupDesc;
/**
* 分组状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,86 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色关系表 knowledge_role_relation
*
* @author pengles
*/
@Data
@TableName("knowledge_role_relation")
public class KnowledgeRoleRelation implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 角色ID
*/
private Long roleId;
/**
* 分组ID
*/
private Long groupId;
/**
* 关系类型:1角色属于分组,2分组包含角色
*/
private Integer relationType;
/**
* 关系状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,81 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型表 knowledge_schema
*
* @author pengles
*/
@Data
@TableName("knowledge_schema")
public class KnowledgeSchema implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 分组ID
*/
private Long schemaGroupId;
/**
* 模型名称
*/
private String name;
/**
* 模型编码
*/
private String code;
/**
* 表名
*/
private String tableName;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,161 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型字段表 knowledge_schema_field
*
* @author pengles
*/
@Data
@TableName("knowledge_schema_field")
public class KnowledgeSchemaField implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 模型ID
*/
private Long schemaId;
/**
* 模型名称
*/
private String schemaName;
/**
* 字段名称
*/
private String name;
/**
* 字段编码
*/
private String code;
/**
* 字段类型
*/
private String type;
/**
* 字段注释
*/
private String comment;
/**
* 是否主键:0否,1是
*/
private Integer isPk;
/**
* 是否必填:0否,1是
*/
private Integer isRequired;
/**
* 是否唯一:0否,1是
*/
private Integer isUnique;
/**
* 默认值
*/
private String defaultValue;
/**
* 字段长度
*/
private Integer length;
/**
* 小数位数
*/
private Integer scale;
/**
* 是否列表显示:0否,1是
*/
private Integer isList;
/**
* 是否查询字段:0否,1是
*/
private Integer isQuery;
/**
* 是否插入字段:0否,1是
*/
private Integer isInsert;
/**
* 是否编辑字段:0否,1是
*/
private Integer isEdit;
/**
* 查询方式(EQ,NE,GT,LT,LIKE,BETWEEN)
*/
private String queryType;
/**
* 显示类型(input,textarea,select,checkbox,radio,datetime,image,upload,editor)
*/
private String htmlType;
/**
* 字典类型
*/
private String dictType;
/**
* 排序
*/
private Integer sort;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,76 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型分组表 knowledge_schema_group
*
* @author pengles
*/
@Data
@TableName("knowledge_schema_group")
public class KnowledgeSchemaGroup implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 分组名称
*/
private String name;
/**
* 分组编码
*/
private String code;
/**
* 图标
*/
private String icon;
/**
* 备注
*/
private String remark;
/**
* 删除标志:0存在,1删除
*/
@TableLogic
private Integer delFlag;
/**
* 创建者
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新者
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
@@ -0,0 +1,76 @@
package org.dromara.knowledge.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.io.Serializable;
/**
* 知识片段向量对象 knowledge_vector
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("knowledge_vector")
public class KnowledgeVector extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 知识库ID
*/
private String knowledgeId;
/**
* 文档ID
*/
private String docId;
/**
* 知识片段ID
*/
private String fragmentId;
/**
* 向量ID
*/
private String vectorId;
/**
* 向量数据
*/
private String vectorData;
/**
* 向量维度
*/
private Integer dimension;
/**
* 模型名称
*/
private String modelName;
/**
* 状态(0正常 1停用)
*/
private Integer status;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,82 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeAttach;
/**
* 知识库附件业务对象 knowledge_attach
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeAttach.class, reverseConvertGenerate = false)
public class KnowledgeAttachBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 知识库ID
*/
@NotBlank(message = "知识库ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String knowledgeId;
/**
* 文档ID
*/
@NotBlank(message = "文档ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String docId;
/**
* 文档名称
*/
@NotBlank(message = "文档名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String docName;
/**
* 文档类型
*/
private String docType;
/**
* OSS文件ID
*/
private Integer ossId;
/**
* 图片状态
*/
private Integer picStatus;
/**
* 图片分析状态
*/
private Integer picAnysStatus;
/**
* 向量化状态
*/
private Integer vectorStatus;
/**
* 文档内容
*/
private String content;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,63 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeFragment;
/**
* 知识库片段业务对象 knowledge_fragment
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeFragment.class, reverseConvertGenerate = false)
public class KnowledgeFragmentBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 知识库ID
*/
@NotBlank(message = "知识库ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String knowledgeId;
/**
* 文档ID
*/
@NotBlank(message = "文档ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String docId;
/**
* 知识片段ID
*/
@NotBlank(message = "知识片段ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String fid;
/**
* 片段索引下标
*/
private Integer idx;
/**
* 片段内容
*/
@NotBlank(message = "片段内容不能为空", groups = {AddGroup.class, EditGroup.class})
private String content;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,110 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeHitLog;
/**
* 知识库命中日志业务对象 knowledge_hit_log
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeHitLog.class, reverseConvertGenerate = false)
public class KnowledgeHitLogBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 会话ID
*/
@NotBlank(message = "会话ID不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 64, message = "会话ID长度不能超过64个字符")
private String sessionId;
/**
* 知识库ID
*/
@NotBlank(message = "知识库ID不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 64, message = "知识库ID长度不能超过64个字符")
private String knowledgeId;
/**
* 文档ID
*/
@Size(max = 64, message = "文档ID长度不能超过64个字符")
private String docId;
/**
* 知识片段ID
*/
@Size(max = 64, message = "知识片段ID长度不能超过64个字符")
private String fragmentId;
/**
* 查询文本
*/
@NotBlank(message = "查询文本不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 2000, message = "查询文本长度不能超过2000个字符")
private String queryText;
/**
* 查询向量
*/
@Size(max = 65535, message = "查询向量长度不能超过65535个字符")
private String queryVector;
/**
* 相似度分数
*/
@DecimalMin(value = "0.0", message = "相似度分数不能小于0")
@DecimalMax(value = "1.0", message = "相似度分数不能大于1")
private Double similarityScore;
/**
* 排名
*/
@Min(value = 1, message = "排名必须大于0")
private Integer ranking;
/**
* 模型名称
*/
@Size(max = 100, message = "模型名称长度不能超过100个字符")
private String modelName;
/**
* 搜索参数
*/
@Size(max = 1000, message = "搜索参数长度不能超过1000个字符")
private String searchParams;
/**
* 响应时间(毫秒)
*/
@Min(value = 0, message = "响应时间不能小于0")
private Long responseTime;
/**
* 命中次数
*/
@Min(value = 0, message = "命中次数不能小于0")
private Integer hitCount;
/**
* 备注
*/
@Size(max = 500, message = "备注长度不能超过500个字符")
private String remark;
}
@@ -0,0 +1,101 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeInfo;
/**
* 知识库信息业务对象 knowledge_info
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeInfo.class, reverseConvertGenerate = false)
public class KnowledgeInfoBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 知识库ID
*/
@NotBlank(message = "知识库ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String knowledgeId;
/**
* 知识库名称
*/
@NotBlank(message = "知识库名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String knowledgeName;
/**
* 是否公开知识库:0否,1是
*/
private Integer share;
/**
* 描述
*/
private String description;
/**
* 知识分隔符
*/
private String knowledgeSeparator;
/**
* 问题分隔符
*/
private String questionSeparator;
/**
* 重叠字符数
*/
private Integer overlapChar;
/**
* 检索限制
*/
private Integer retrieveLimit;
/**
* 文本块大小
*/
private Integer textBlockSize;
/**
* 向量模型名称
*/
private String vectorModelName;
/**
* 嵌入模型名称
*/
private String embeddingModelName;
/**
* 系统提示词
*/
private String systemPrompt;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,167 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeJob;
import java.util.Date;
/**
* 知识库任务业务对象 knowledge_job
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeJob.class, reverseConvertGenerate = false)
public class KnowledgeJobBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 任务ID
*/
@NotBlank(message = "任务ID不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 64, message = "任务ID长度不能超过64个字符")
private String jobId;
/**
* 任务类型
*/
@NotBlank(message = "任务类型不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 50, message = "任务类型长度不能超过50个字符")
private String jobType;
/**
* 任务子类型
*/
@Size(max = 50, message = "任务子类型长度不能超过50个字符")
private String jobSubType;
/**
* 知识库ID
*/
@Size(max = 64, message = "知识库ID长度不能超过64个字符")
private String knowledgeId;
/**
* 文档ID
*/
@Size(max = 64, message = "文档ID长度不能超过64个字符")
private String docId;
/**
* 用户ID
*/
private Long userId;
/**
* 任务状态
*/
private Integer status;
/**
* 任务进度
*/
@Min(value = 0, message = "任务进度不能小于0")
@Max(value = 100, message = "任务进度不能大于100")
private Integer progress;
/**
* 总项目数
*/
@Min(value = 0, message = "总项目数不能小于0")
private Integer totalItems;
/**
* 已处理项目数
*/
@Min(value = 0, message = "已处理项目数不能小于0")
private Integer processedItems;
/**
* 成功项目数
*/
@Min(value = 0, message = "成功项目数不能小于0")
private Integer successItems;
/**
* 失败项目数
*/
@Min(value = 0, message = "失败项目数不能小于0")
private Integer failedItems;
/**
* 任务优先级
*/
@Min(value = 1, message = "任务优先级不能小于1")
@Max(value = 10, message = "任务优先级不能大于10")
private Integer priority;
/**
* 重试次数
*/
@Min(value = 0, message = "重试次数不能小于0")
private Integer retryCount;
/**
* 最大重试次数
*/
@Min(value = 0, message = "最大重试次数不能小于0")
private Integer maxRetryCount;
/**
* 任务开始时间
*/
private Date startTime;
/**
* 任务结束时间
*/
private Date endTime;
/**
* 任务超时时间(秒)
*/
@Min(value = 1, message = "任务超时时间必须大于0")
private Integer timeout;
/**
* 错误信息
*/
@Size(max = 2000, message = "错误信息长度不能超过2000个字符")
private String errorInfo;
/**
* 任务结果数据
*/
@Size(max = 65535, message = "任务结果数据长度不能超过65535个字符")
private String resultData;
/**
* 通知配置
*/
@Size(max = 1000, message = "通知配置长度不能超过1000个字符")
private String notificationConfig;
/**
* 通知状态
*/
private Integer notificationStatus;
/**
* 备注
*/
@Size(max = 500, message = "备注长度不能超过500个字符")
private String remark;
}
@@ -0,0 +1,51 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgePromptTemplate;
/**
* 知识库提示模板业务对象 knowledge_prompt_template
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgePromptTemplate.class, reverseConvertGenerate = false)
public class KnowledgePromptTemplateBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long id;
/**
* 提示词模板名称
*/
@NotBlank(message = "提示词模板名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String templateName;
/**
* 提示词模板内容
*/
@NotBlank(message = "提示词模板内容不能为空", groups = {AddGroup.class, EditGroup.class})
private String templateContent;
/**
* 提示词分类:knowledge知识库类型,chat对话类型,draw绘画类型
*/
private String category;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,61 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeRole;
/**
* 知识库角色业务对象 knowledge_role
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeRole.class, reverseConvertGenerate = false)
public class KnowledgeRoleBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 角色名称
*/
@NotBlank(message = "角色名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String roleName;
/**
* 角色编码
*/
@NotBlank(message = "角色编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String roleCode;
/**
* 角色描述
*/
private String roleDesc;
/**
* 角色状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,61 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeRoleGroup;
/**
* 知识库角色分组业务对象 knowledge_role_group
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeRoleGroup.class, reverseConvertGenerate = false)
public class KnowledgeRoleGroupBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 分组名称
*/
@NotBlank(message = "分组名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String groupName;
/**
* 分组编码
*/
@NotBlank(message = "分组编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String groupCode;
/**
* 分组描述
*/
private String groupDesc;
/**
* 分组状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,60 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeRoleRelation;
/**
* 知识库角色关系业务对象 knowledge_role_relation
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeRoleRelation.class, reverseConvertGenerate = false)
public class KnowledgeRoleRelationBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 角色ID
*/
@NotNull(message = "角色ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long roleId;
/**
* 分组ID
*/
@NotNull(message = "分组ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long groupId;
/**
* 关系类型:1角色属于分组,2分组包含角色
*/
private Integer relationType;
/**
* 关系状态:0禁用,1启用
*/
private Integer status;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,57 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeSchema;
/**
* 知识库数据模型业务对象 knowledge_schema
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeSchema.class, reverseConvertGenerate = false)
public class KnowledgeSchemaBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long id;
/**
* 分组ID
*/
private Long schemaGroupId;
/**
* 模型名称
*/
@NotBlank(message = "模型名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
/**
* 模型编码
*/
@NotBlank(message = "模型编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String code;
/**
* 表名
*/
@NotBlank(message = "表名不能为空", groups = {AddGroup.class, EditGroup.class})
private String tableName;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,138 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeSchemaField;
/**
* 知识库数据模型字段业务对象 knowledge_schema_field
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeSchemaField.class, reverseConvertGenerate = false)
public class KnowledgeSchemaFieldBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long id;
/**
* 模型ID
*/
@NotNull(message = "模型ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long schemaId;
/**
* 模型名称
*/
private String schemaName;
/**
* 字段名称
*/
@NotBlank(message = "字段名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
/**
* 字段编码
*/
@NotBlank(message = "字段编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String code;
/**
* 字段类型
*/
@NotBlank(message = "字段类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String type;
/**
* 字段注释
*/
private String comment;
/**
* 是否主键:0否,1是
*/
private Integer isPk;
/**
* 是否必填:0否,1是
*/
private Integer isRequired;
/**
* 是否唯一:0否,1是
*/
private Integer isUnique;
/**
* 默认值
*/
private String defaultValue;
/**
* 字段长度
*/
private Integer length;
/**
* 小数位数
*/
private Integer scale;
/**
* 是否列表:0否,1是
*/
private Integer isList;
/**
* 是否查询:0否,1是
*/
private Integer isQuery;
/**
* 是否插入:0否,1是
*/
private Integer isInsert;
/**
* 是否编辑:0否,1是
*/
private Integer isEdit;
/**
* 查询类型
*/
private String queryType;
/**
* HTML类型
*/
private String htmlType;
/**
* 字典类型
*/
private String dictType;
/**
* 排序
*/
private Integer sort;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,51 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeSchemaGroup;
/**
* 知识库数据模型分组业务对象 knowledge_schema_group
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeSchemaGroup.class, reverseConvertGenerate = false)
public class KnowledgeSchemaGroupBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long id;
/**
* 分组名称
*/
@NotBlank(message = "分组名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
/**
* 分组编码
*/
@NotBlank(message = "分组编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String code;
/**
* 图标
*/
private String icon;
/**
* 备注
*/
private String remark;
}
@@ -0,0 +1,86 @@
package org.dromara.knowledge.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.knowledge.domain.KnowledgeVector;
/**
* 知识片段向量业务对象 knowledge_vector
*
* @author pengles
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = KnowledgeVector.class, reverseConvertGenerate = false)
public class KnowledgeVectorBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 知识库ID
*/
@NotBlank(message = "知识库ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String knowledgeId;
/**
* 文档ID
*/
@NotBlank(message = "文档ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String docId;
/**
* 知识片段ID
*/
@NotBlank(message = "知识片段ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String fragmentId;
/**
* 向量ID
*/
@NotBlank(message = "向量ID不能为空", groups = {AddGroup.class, EditGroup.class})
private String vectorId;
/**
* 向量数据
*/
@Size(max = 65535, message = "向量数据长度不能超过65535个字符")
private String vectorData;
/**
* 向量维度
*/
@NotNull(message = "向量维度不能为空", groups = {AddGroup.class, EditGroup.class})
@Min(value = 1, message = "向量维度必须大于0")
private Integer dimension;
/**
* 模型名称
*/
@NotBlank(message = "模型名称不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(max = 100, message = "模型名称长度不能超过100个字符")
private String modelName;
/**
* 状态(0正常 1停用)
*/
private Integer status;
/**
* 备注
*/
@Size(max = 500, message = "备注长度不能超过500个字符")
private String remark;
}
@@ -0,0 +1,107 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeAttach;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库附件视图对象 knowledge_attach
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeAttach.class)
public class KnowledgeAttachVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 文档名称
*/
@ExcelProperty(value = "文档名称")
private String docName;
/**
* 文档类型
*/
@ExcelProperty(value = "文档类型")
private String docType;
/**
* OSS对象存储主键
*/
@ExcelProperty(value = "OSS对象存储主键")
private Integer ossId;
/**
* 图片识别状态
*/
@ExcelProperty(value = "图片识别状态")
private Integer picStatus;
/**
* 图片分析状态
*/
@ExcelProperty(value = "图片分析状态")
private Integer picAnysStatus;
/**
* 向量化状态
*/
@ExcelProperty(value = "向量化状态")
private Integer vectorStatus;
/**
* 文档内容
*/
@ExcelProperty(value = "文档内容")
private String content;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
/**
* 获取向量化状态
*/
public Integer getVectorStatus() {
return vectorStatus;
}
}
@@ -0,0 +1,80 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeFragment;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库片段视图对象 knowledge_fragment
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeFragment.class)
public class KnowledgeFragmentVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 知识片段ID
*/
@ExcelProperty(value = "知识片段ID")
private String fid;
/**
* 片段索引下标
*/
@ExcelProperty(value = "片段索引下标")
private Integer idx;
/**
* 片段内容
*/
@ExcelProperty(value = "片段内容")
private String content;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,110 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeHitLog;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 知识库命中日志视图对象 knowledge_hit_log
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeHitLog.class)
public class KnowledgeHitLogVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 会话ID
*/
@ExcelProperty(value = "会话ID")
private String sessionId;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 知识片段ID
*/
@ExcelProperty(value = "知识片段ID")
private String fragmentId;
/**
* 查询文本
*/
@ExcelProperty(value = "查询文本")
private String queryText;
/**
* 相似度分数
*/
@ExcelProperty(value = "相似度分数")
private Double similarityScore;
/**
* 排名
*/
@ExcelProperty(value = "排名")
private Integer ranking;
/**
* 模型名称
*/
@ExcelProperty(value = "模型名称")
private String modelName;
/**
* 搜索参数
*/
@ExcelProperty(value = "搜索参数")
private String searchParams;
/**
* 响应时间(毫秒)
*/
@ExcelProperty(value = "响应时间")
private Long responseTime;
/**
* 命中次数
*/
@ExcelProperty(value = "命中次数")
private Integer hitCount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
}
@@ -0,0 +1,128 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeInfo;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库信息视图对象 knowledge_info
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeInfo.class)
public class KnowledgeInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 用户ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 知识库名称
*/
@ExcelProperty(value = "知识库名称")
private String knowledgeName;
/**
* 是否公开知识库:0否,1是
*/
@ExcelProperty(value = "是否公开知识库")
private Integer share;
/**
* 知识库描述
*/
@ExcelProperty(value = "知识库描述")
private String description;
/**
* 知识库分隔符
*/
@ExcelProperty(value = "知识库分隔符")
private String knowledgeSeparator;
/**
* 问题分隔符
*/
@ExcelProperty(value = "问题分隔符")
private String questionSeparator;
/**
* 重叠字符数
*/
@ExcelProperty(value = "重叠字符数")
private Integer overlapChar;
/**
* 检索限制
*/
@ExcelProperty(value = "检索限制")
private Integer retrieveLimit;
/**
* 文本块大小
*/
@ExcelProperty(value = "文本块大小")
private Integer textBlockSize;
/**
* 向量模型名称
*/
@ExcelProperty(value = "向量模型名称")
private String vectorModelName;
/**
* 嵌入模型名称
*/
@ExcelProperty(value = "嵌入模型名称")
private String embeddingModelName;
/**
* 系统提示词
*/
@ExcelProperty(value = "系统提示词")
private String systemPrompt;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,170 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeJob;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 知识库任务视图对象 knowledge_job
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeJob.class)
public class KnowledgeJobVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 任务ID
*/
@ExcelProperty(value = "任务ID")
private String jobId;
/**
* 任务类型
*/
@ExcelProperty(value = "任务类型")
private String jobType;
/**
* 任务子类型
*/
@ExcelProperty(value = "任务子类型")
private String jobSubType;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 用户ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
* 任务状态
*/
@ExcelProperty(value = "任务状态")
private Integer status;
/**
* 任务进度
*/
@ExcelProperty(value = "任务进度")
private Integer progress;
/**
* 总项目数
*/
@ExcelProperty(value = "总项目数")
private Integer totalItems;
/**
* 已处理项目数
*/
@ExcelProperty(value = "已处理项目数")
private Integer processedItems;
/**
* 成功项目数
*/
@ExcelProperty(value = "成功项目数")
private Integer successItems;
/**
* 失败项目数
*/
@ExcelProperty(value = "失败项目数")
private Integer failedItems;
/**
* 任务优先级
*/
@ExcelProperty(value = "任务优先级")
private Integer priority;
/**
* 重试次数
*/
@ExcelProperty(value = "重试次数")
private Integer retryCount;
/**
* 最大重试次数
*/
@ExcelProperty(value = "最大重试次数")
private Integer maxRetryCount;
/**
* 任务开始时间
*/
@ExcelProperty(value = "任务开始时间")
private Date startTime;
/**
* 任务结束时间
*/
@ExcelProperty(value = "任务结束时间")
private Date endTime;
/**
* 任务超时时间(秒)
*/
@ExcelProperty(value = "任务超时时间")
private Integer timeout;
/**
* 错误信息
*/
@ExcelProperty(value = "错误信息")
private String errorInfo;
/**
* 通知配置
*/
@ExcelProperty(value = "通知配置")
private String notificationConfig;
/**
* 通知状态
*/
@ExcelProperty(value = "通知状态")
private Integer notificationStatus;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
}
@@ -0,0 +1,68 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgePromptTemplate;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库提示模板视图对象 knowledge_prompt_template
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgePromptTemplate.class)
public class KnowledgePromptTemplateVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* 提示词模板名称
*/
@ExcelProperty(value = "提示词模板名称")
private String templateName;
/**
* 提示词模板内容
*/
@ExcelProperty(value = "提示词模板内容")
private String templateContent;
/**
* 提示词分类:knowledge知识库类型,chat对话类型,draw绘画类型
*/
@ExcelProperty(value = "提示词分类")
private String category;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,77 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.knowledge.domain.KnowledgeRoleGroup;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色分组视图对象 knowledge_role_group
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeRoleGroup.class)
public class KnowledgeRoleGroupVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 分组名称
*/
@ExcelProperty(value = "分组名称")
private String groupName;
/**
* 分组编码
*/
@ExcelProperty(value = "分组编码")
private String groupCode;
/**
* 分组描述
*/
@ExcelProperty(value = "分组描述")
private String groupDesc;
/**
* 分组状态:0禁用,1启用
*/
@ExcelProperty(value = "分组状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private Integer status;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Integer sort;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
}
@@ -0,0 +1,77 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.knowledge.domain.KnowledgeRoleRelation;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色关系视图对象 knowledge_role_relation
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeRoleRelation.class)
public class KnowledgeRoleRelationVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 角色ID
*/
@ExcelProperty(value = "角色ID")
private Long roleId;
/**
* 分组ID
*/
@ExcelProperty(value = "分组ID")
private Long groupId;
/**
* 关系类型:1角色属于分组,2分组包含角色
*/
@ExcelProperty(value = "关系类型")
private Integer relationType;
/**
* 关系状态:0禁用,1启用
*/
@ExcelProperty(value = "关系状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private Integer status;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Integer sort;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
}
@@ -0,0 +1,77 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.knowledge.domain.KnowledgeRole;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库角色视图对象 knowledge_role
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeRole.class)
public class KnowledgeRoleVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 角色名称
*/
@ExcelProperty(value = "角色名称")
private String roleName;
/**
* 角色编码
*/
@ExcelProperty(value = "角色编码")
private String roleCode;
/**
* 角色描述
*/
@ExcelProperty(value = "角色描述")
private String roleDesc;
/**
* 角色状态:0禁用,1启用
*/
@ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private Integer status;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Integer sort;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
}
@@ -0,0 +1,170 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeSchemaField;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型字段视图对象 knowledge_schema_field
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeSchemaField.class)
public class KnowledgeSchemaFieldVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* 模型ID
*/
@ExcelProperty(value = "模型ID")
private Long schemaId;
/**
* 模型名称
*/
@ExcelProperty(value = "模型名称")
private String schemaName;
/**
* 字段名称
*/
@ExcelProperty(value = "字段名称")
private String name;
/**
* 字段编码
*/
@ExcelProperty(value = "字段编码")
private String code;
/**
* 字段类型
*/
@ExcelProperty(value = "字段类型")
private String type;
/**
* 字段注释
*/
@ExcelProperty(value = "字段注释")
private String comment;
/**
* 是否主键
*/
@ExcelProperty(value = "是否主键")
private Integer isPk;
/**
* 是否必填
*/
@ExcelProperty(value = "是否必填")
private Integer isRequired;
/**
* 是否唯一
*/
@ExcelProperty(value = "是否唯一")
private Integer isUnique;
/**
* 默认值
*/
@ExcelProperty(value = "默认值")
private String defaultValue;
/**
* 字段长度
*/
@ExcelProperty(value = "字段长度")
private Integer length;
/**
* 小数位数
*/
@ExcelProperty(value = "小数位数")
private Integer scale;
/**
* 是否列表显示
*/
@ExcelProperty(value = "是否列表显示")
private Integer isList;
/**
* 是否查询字段
*/
@ExcelProperty(value = "是否查询字段")
private Integer isQuery;
/**
* 是否插入字段
*/
@ExcelProperty(value = "是否插入字段")
private Integer isInsert;
/**
* 是否编辑字段
*/
@ExcelProperty(value = "是否编辑字段")
private Integer isEdit;
/**
* 查询方式
*/
@ExcelProperty(value = "查询方式")
private String queryType;
/**
* 显示类型
*/
@ExcelProperty(value = "显示类型")
private String htmlType;
/**
* 字典类型
*/
@ExcelProperty(value = "字典类型")
private String dictType;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Integer sort;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,68 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeSchemaGroup;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型分组视图对象 knowledge_schema_group
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeSchemaGroup.class)
public class KnowledgeSchemaGroupVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* 分组名称
*/
@ExcelProperty(value = "分组名称")
private String name;
/**
* 分组编码
*/
@ExcelProperty(value = "分组编码")
private String code;
/**
* 图标
*/
@ExcelProperty(value = "图标")
private String icon;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,74 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.knowledge.domain.KnowledgeSchema;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库数据模型视图对象 knowledge_schema
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeSchema.class)
public class KnowledgeSchemaVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* 分组ID
*/
@ExcelProperty(value = "分组ID")
private Long schemaGroupId;
/**
* 模型名称
*/
@ExcelProperty(value = "模型名称")
private String name;
/**
* 模型编码
*/
@ExcelProperty(value = "模型编码")
private String code;
/**
* 表名
*/
@ExcelProperty(value = "表名")
private String tableName;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,73 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库检索结果视图对象 knowledge_search_result
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
public class KnowledgeSearchResultVo implements Serializable {
/**
* 知识片段ID
*/
@ExcelProperty(value = "知识片段ID")
private String fragmentId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 文档名称
*/
@ExcelProperty(value = "文档名称")
private String docName;
/**
* 知识片段内容
*/
@ExcelProperty(value = "内容")
private String content;
/**
* 相似度分数
*/
@ExcelProperty(value = "相似度分数")
private Double similarityScore;
/**
* 排名位置
*/
@ExcelProperty(value = "排名")
private Integer ranking;
/**
* 片段索引
*/
@ExcelProperty(value = "片段索引")
private Integer fragmentIndex;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
@@ -0,0 +1,107 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 知识库状态视图对象 knowledge_status
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
public class KnowledgeStatusVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 知识库名称
*/
@ExcelProperty(value = "知识库名称")
private String knowledgeName;
/**
* 文档总数
*/
@ExcelProperty(value = "文档总数")
private Integer totalDocuments;
/**
* 已处理文档数
*/
@ExcelProperty(value = "已处理文档数")
private Integer processedDocuments;
/**
* 知识片段总数
*/
@ExcelProperty(value = "知识片段总数")
private Integer totalFragments;
/**
* 已向量化片段数
*/
@ExcelProperty(value = "已向量化片段数")
private Integer vectorizedFragments;
/**
* 处理进度百分比
*/
@ExcelProperty(value = "处理进度")
private Double progressPercentage;
/**
* 当前处理状态
*/
@ExcelProperty(value = "处理状态")
private String processingStatus;
/**
* 正在进行的任务数
*/
@ExcelProperty(value = "进行中任务数")
private Integer runningJobs;
/**
* 等待中的任务数
*/
@ExcelProperty(value = "等待中任务数")
private Integer pendingJobs;
/**
* 失败的任务数
*/
@ExcelProperty(value = "失败任务数")
private Integer failedJobs;
/**
* 最后更新时间
*/
@ExcelProperty(value = "最后更新时间")
private LocalDateTime lastUpdateTime;
/**
* 错误信息
*/
@ExcelProperty(value = "错误信息")
private String errorMessage;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
@@ -0,0 +1,94 @@
package org.dromara.knowledge.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.knowledge.domain.KnowledgeVector;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 知识片段向量视图对象 knowledge_vector
*
* @author pengles
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = KnowledgeVector.class)
public class KnowledgeVectorVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 知识库ID
*/
@ExcelProperty(value = "知识库ID")
private String knowledgeId;
/**
* 文档ID
*/
@ExcelProperty(value = "文档ID")
private String docId;
/**
* 知识片段ID
*/
@ExcelProperty(value = "知识片段ID")
private String fragmentId;
/**
* 向量ID
*/
@ExcelProperty(value = "向量ID")
private String vectorId;
/**
* 向量数据
*/
@ExcelProperty(value = "向量数据")
private String vectorData;
/**
* 向量维度
*/
@ExcelProperty(value = "向量维度")
private Integer dimension;
/**
* 模型名称
*/
@ExcelProperty(value = "模型名称")
private String modelName;
/**
* 状态(0正常 1停用)
*/
@ExcelProperty(value = "状态", converter = org.dromara.common.excel.convert.ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_normal_disable")
private Integer status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
}
@@ -0,0 +1,13 @@
package org.dromara.knowledge.embedding;
/**
* 嵌入引擎接口(已弃用,请使用 EmbeddingService
*
* @deprecated 请使用 {@link EmbeddingService} 接口
* @author pengles
*/
@Deprecated
public interface EmbeddingEngine extends EmbeddingService {
// 此接口已弃用,所有实现应该使用 EmbeddingService 接口
}
@@ -0,0 +1,5 @@
package org.dromara.knowledge.embedding;
public interface EmbeddingService {
double[] embed(String text, String modelName);
}
@@ -0,0 +1,73 @@
package org.dromara.knowledge.embedding;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Objects;
@Component
public class HttpEmbeddingService implements EmbeddingService {
@Value("${ruoyi.ai.embedding.base-url:}")
private String baseUrl;
@Value("${ruoyi.ai.embedding.default-model:bge-large-zh}")
private String defaultModel;
private final OkHttpClient client = new OkHttpClient();
private static final int CACHE_MAX = 1024;
private final java.util.Map<String, double[]> cache = new java.util.LinkedHashMap<>(CACHE_MAX, 0.75f, true) {
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<String, double[]> eldest) {
return size() > CACHE_MAX;
}
};
@Override
public double[] embed(String text, String modelName) {
String model = modelName != null && !modelName.isBlank() ? modelName : defaultModel;
if (baseUrl == null || baseUrl.isBlank()) {
return mock(text, model);
}
try {
String key = model + "|" + Integer.toHexString(text.hashCode());
double[] cached = cache.get(key);
if (cached != null) return cached;
String payload = "{\"model\":\"" + model + "\",\"input\":\"" + text.replace("\"", "\\\"") + "\"}";
Request req = new Request.Builder()
.url(baseUrl + "/embeddings")
.post(RequestBody.create(MediaType.parse("application/json"), payload))
.build();
try (Response resp = client.newCall(req).execute()) {
String body = Objects.requireNonNull(resp.body()).string();
String arr = body.replaceAll("[^\\d\\.,-]", "");
String[] parts = arr.split(",");
double[] v = new double[parts.length];
for (int i = 0; i < parts.length; i++) {
v[i] = Double.parseDouble(parts[i]);
}
cache.put(key, v);
return v;
}
} catch (Exception e) {
return mock(text, model);
}
}
private double[] mock(String text, String model) {
int dim = switch (model) {
case "bge-large-zh" -> 1024;
case "bge-base-zh" -> 768;
default -> 768;
};
double[] v = new double[dim];
java.util.Random r = new java.util.Random(text.hashCode());
for (int i = 0; i < dim; i++) v[i] = r.nextGaussian();
double norm = 0;
for (double x : v) norm += x * x;
norm = Math.sqrt(norm);
for (int i = 0; i < v.length; i++) v[i] /= norm;
return v;
}
}
@@ -0,0 +1,97 @@
package org.dromara.knowledge.generation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* 默认响应生成器实现
* 基于检索到的上下文和查询生成响应
*
* @author pengles
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class DefaultGenerator implements Generator {
@Override
public String generate(String query, String context, Map<String, Object> options) {
if (query == null || query.trim().isEmpty()) {
throw new ServiceException("查询内容不能为空");
}
// 构建提示词
String prompt = buildPrompt(query, context, options);
// 这里可以根据 options 中的配置选择不同的生成策略
// 例如:调用 LLM API、使用模板生成等
// 当前实现为简单拼接,实际应用中应该调用 LLM 服务
log.debug("生成响应,查询: {}, 上下文长度: {}", query, context != null ? context.length() : 0);
// 简单的模板生成(实际应该调用 LLM)
return generateSimpleResponse(query, context);
}
/**
* 构建提示词
*/
private String buildPrompt(String query, String context, Map<String, Object> options) {
StringBuilder promptBuilder = new StringBuilder();
// 系统提示
String systemPrompt = getOption(options, "systemPrompt",
"你是一个知识库助手,基于提供的上下文回答问题。如果上下文中没有相关信息,请说明。");
promptBuilder.append(systemPrompt).append("\n\n");
// 上下文
if (context != null && !context.trim().isEmpty()) {
promptBuilder.append("上下文:\n").append(context).append("\n\n");
}
// 查询
promptBuilder.append("问题:").append(query).append("\n\n");
promptBuilder.append("回答:");
return promptBuilder.toString();
}
/**
* 简单响应生成(占位实现)
* 实际应用中应该调用 LLM API
*/
private String generateSimpleResponse(String query, String context) {
if (context == null || context.trim().isEmpty()) {
return "抱歉,我无法在知识库中找到相关信息来回答您的问题。";
}
// 简单的摘要生成(实际应该使用 LLM)
// 这里只是占位实现,实际应该调用 LLM 服务
return String.format("基于提供的上下文,相关内容如下:\n\n%s\n\n这是对您问题 '%s' 的回答。",
context.substring(0, Math.min(context.length(), 500)), query);
}
/**
* 从选项 Map 中获取值
*/
@SuppressWarnings("unchecked")
private <T> T getOption(Map<String, Object> options, String key, T defaultValue) {
if (options == null) {
return defaultValue;
}
Object value = options.get(key);
return value != null ? (T) value : defaultValue;
}
/**
* 生成响应(带默认选项)
*/
public String generate(String query, String context) {
return generate(query, context, new HashMap<>());
}
}
@@ -0,0 +1,8 @@
package org.dromara.knowledge.generation;
import java.util.Map;
public interface Generator {
String generate(String query, String context, Map<String, Object> options);
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeAttach;
import org.dromara.knowledge.domain.vo.KnowledgeAttachVo;
/**
* 知识库附件Mapper接口
*
* @author pengles
*/
public interface KnowledgeAttachMapper extends BaseMapperPlus<KnowledgeAttach, KnowledgeAttachVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeFragment;
import org.dromara.knowledge.domain.vo.KnowledgeFragmentVo;
/**
* 知识库片段Mapper接口
*
* @author pengles
*/
public interface KnowledgeFragmentMapper extends BaseMapperPlus<KnowledgeFragment, KnowledgeFragmentVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeHitLog;
import org.dromara.knowledge.domain.vo.KnowledgeHitLogVo;
/**
* 知识库命中日志Mapper接口
*
* @author pengles
*/
public interface KnowledgeHitLogMapper extends BaseMapperPlus<KnowledgeHitLog, KnowledgeHitLogVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeInfo;
import org.dromara.knowledge.domain.vo.KnowledgeInfoVo;
/**
* 知识库信息Mapper接口
*
* @author pengles
*/
public interface KnowledgeInfoMapper extends BaseMapperPlus<KnowledgeInfo, KnowledgeInfoVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeJob;
import org.dromara.knowledge.domain.vo.KnowledgeJobVo;
/**
* 知识库任务Mapper接口
*
* @author pengles
*/
public interface KnowledgeJobMapper extends BaseMapperPlus<KnowledgeJob, KnowledgeJobVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgePromptTemplate;
import org.dromara.knowledge.domain.vo.KnowledgePromptTemplateVo;
/**
* 知识库提示模板Mapper接口
*
* @author pengles
*/
public interface KnowledgePromptTemplateMapper extends BaseMapperPlus<KnowledgePromptTemplate, KnowledgePromptTemplateVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeRoleGroup;
import org.dromara.knowledge.domain.vo.KnowledgeRoleGroupVo;
/**
* 知识库角色分组Mapper接口
*
* @author pengles
*/
public interface KnowledgeRoleGroupMapper extends BaseMapperPlus<KnowledgeRoleGroup, KnowledgeRoleGroupVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeRole;
import org.dromara.knowledge.domain.vo.KnowledgeRoleVo;
/**
* 知识库角色Mapper接口
*
* @author pengles
*/
public interface KnowledgeRoleMapper extends BaseMapperPlus<KnowledgeRole, KnowledgeRoleVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeRoleRelation;
import org.dromara.knowledge.domain.vo.KnowledgeRoleRelationVo;
/**
* 知识库角色关系Mapper接口
*
* @author pengles
*/
public interface KnowledgeRoleRelationMapper extends BaseMapperPlus<KnowledgeRoleRelation, KnowledgeRoleRelationVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeSchemaField;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaFieldVo;
/**
* 知识库数据模型字段Mapper接口
*
* @author pengles
*/
public interface KnowledgeSchemaFieldMapper extends BaseMapperPlus<KnowledgeSchemaField, KnowledgeSchemaFieldVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeSchemaGroup;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaGroupVo;
/**
* 知识库数据模型分组Mapper接口
*
* @author pengles
*/
public interface KnowledgeSchemaGroupMapper extends BaseMapperPlus<KnowledgeSchemaGroup, KnowledgeSchemaGroupVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeSchema;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaVo;
/**
* 知识库数据模型Mapper接口
*
* @author pengles
*/
public interface KnowledgeSchemaMapper extends BaseMapperPlus<KnowledgeSchema, KnowledgeSchemaVo> {
}
@@ -0,0 +1,14 @@
package org.dromara.knowledge.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.knowledge.domain.KnowledgeVector;
import org.dromara.knowledge.domain.vo.KnowledgeVectorVo;
/**
* 知识片段向量Mapper接口
*
* @author pengles
*/
public interface KnowledgeVectorMapper extends BaseMapperPlus<KnowledgeVector, KnowledgeVectorVo> {
}
@@ -0,0 +1,19 @@
package org.dromara.knowledge.retrieval;
import lombok.RequiredArgsConstructor;
import org.dromara.knowledge.service.KnowledgeDocumentService;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class DefaultIndexUpdater implements IndexUpdater {
private final KnowledgeDocumentService knowledgeDocumentService;
@Override
public String updateFragments(String knowledgeId, String docId) {
// 触发分片重建,依赖 KnowledgeDocumentService 的分片逻辑
// 返回任务ID用于追踪
return knowledgeDocumentService.processDocumentContent(knowledgeId, docId, "", null);
}
}
@@ -0,0 +1,20 @@
package org.dromara.knowledge.retrieval;
import lombok.RequiredArgsConstructor;
import org.dromara.knowledge.domain.vo.KnowledgeSearchResultVo;
import org.dromara.knowledge.service.KnowledgeVectorService;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@RequiredArgsConstructor
public class DefaultRetriever implements Retriever {
private final KnowledgeVectorService knowledgeVectorService;
@Override
public List<KnowledgeSearchResultVo> search(String knowledgeId, String query, String model, int topK, double threshold) {
return knowledgeVectorService.vectorSimilaritySearch(knowledgeId, query, model, topK, threshold);
}
}
@@ -0,0 +1,6 @@
package org.dromara.knowledge.retrieval;
public interface IndexUpdater {
String updateFragments(String knowledgeId, String docId);
}
@@ -0,0 +1,10 @@
package org.dromara.knowledge.retrieval;
import org.dromara.knowledge.domain.vo.KnowledgeSearchResultVo;
import java.util.List;
public interface Retriever {
List<KnowledgeSearchResultVo> search(String knowledgeId, String query, String model, int topK, double threshold);
}
@@ -0,0 +1,59 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeAttach;
import org.dromara.knowledge.domain.bo.KnowledgeAttachBo;
import org.dromara.knowledge.domain.vo.KnowledgeAttachVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库附件Service接口
*
* @author pengles
*/
public interface KnowledgeAttachService extends IService<KnowledgeAttach> {
/**
* 查询知识库附件
*/
KnowledgeAttachVo queryById(Long id);
/**
* 查询知识库附件列表
*/
TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery);
/**
* 查询知识库附件列表
*/
List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo);
/**
* 新增知识库附件
*/
Boolean insertByBo(KnowledgeAttachBo bo);
/**
* 修改知识库附件
*/
Boolean updateByBo(KnowledgeAttachBo bo);
/**
* 校验并批量删除知识库附件
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据知识库ID查询附件列表
*/
List<KnowledgeAttachVo> queryListByKnowledgeId(String knowledgeId);
/**
* 根据文档ID查询附件信息
*/
KnowledgeAttachVo queryByDocId(String docId);
}
@@ -0,0 +1,97 @@
package org.dromara.knowledge.service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 知识库文档处理Service接口
*
* @author pengles
*/
public interface KnowledgeDocumentService {
/**
* 处理上传的文档
*
* @param knowledgeId 知识库ID
* @param file 上传的文件
* @return 文档ID
*/
String processUploadedDocument(String knowledgeId, MultipartFile file);
/**
* 将文档内容分割成知识片段
*
* @param knowledgeId 知识库ID
* @param docId 文档ID
* @param content 文档内容
* @param chunkSize 分片大小
* @param overlapSize 重叠大小
* @return 知识片段ID列表
*/
List<String> splitDocumentIntoFragments(String knowledgeId, String docId, String content,
Integer chunkSize, Integer overlapSize);
/**
* 提取文档文本内容
*
* @param file 文件
* @return 文本内容
*/
String extractTextContent(MultipartFile file);
/**
* 清理和预处理文本内容
*
* @param content 原始内容
* @return 清理后的内容
*/
String cleanTextContent(String content);
/**
* 验证文件类型是否支持
*
* @param file 文件
* @return 是否支持
*/
boolean isSupportedFileType(MultipartFile file);
/**
* 获取支持的文件类型列表
*
* @return 支持的文件类型列表
*/
List<String> getSupportedFileTypes();
/**
* 获取知识库处理状态
*
* @param knowledgeId 知识库ID
* @param knowledgeInfo 知识库信息
* @return 知识库状态信息
*/
org.dromara.knowledge.domain.vo.KnowledgeStatusVo getKnowledgeProcessingStatus(Long knowledgeId, org.dromara.knowledge.domain.vo.KnowledgeInfoVo knowledgeInfo);
/**
* 处理文档内容并生成知识片段
*
* @param knowledgeId 知识库ID
* @param docId 文档ID
* @param content 文档内容
* @param knowledgeInfo 知识库信息
* @return 处理任务ID
*/
String processDocumentContent(String knowledgeId, String docId, String content, org.dromara.knowledge.domain.KnowledgeInfo knowledgeInfo);
/**
* 对知识片段进行向量化
*
* @param knowledgeId 知识库ID
* @param fragmentId 知识片段ID
* @param knowledgeInfo 知识库信息
* @return 向量化任务ID
*/
String vectorizeKnowledgeFragment(String knowledgeId, String fragmentId, org.dromara.knowledge.domain.KnowledgeInfo knowledgeInfo);
}
@@ -0,0 +1,64 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeFragment;
import org.dromara.knowledge.domain.bo.KnowledgeFragmentBo;
import org.dromara.knowledge.domain.vo.KnowledgeFragmentVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库片段Service接口
*
* @author pengles
*/
public interface KnowledgeFragmentService extends IService<KnowledgeFragment> {
/**
* 查询知识库片段
*/
KnowledgeFragmentVo queryById(Long id);
/**
* 查询知识库片段列表
*/
TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery);
/**
* 查询知识库片段列表
*/
List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo);
/**
* 新增知识库片段
*/
Boolean insertByBo(KnowledgeFragmentBo bo);
/**
* 修改知识库片段
*/
Boolean updateByBo(KnowledgeFragmentBo bo);
/**
* 校验并批量删除知识库片段
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据知识库ID查询片段列表
*/
List<KnowledgeFragmentVo> queryListByKnowledgeId(Long knowledgeId);
/**
* 根据文档ID查询片段列表
*/
List<KnowledgeFragmentVo> queryListByDocId(String docId);
/**
* 根据片段ID查询片段信息
*/
KnowledgeFragmentVo queryByFid(String fid);
}
@@ -0,0 +1,126 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeHitLog;
import org.dromara.knowledge.domain.bo.KnowledgeHitLogBo;
import org.dromara.knowledge.domain.vo.KnowledgeHitLogVo;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 知识库命中日志Service接口
*
* @author pengles
*/
public interface KnowledgeHitLogService extends IService<KnowledgeHitLog> {
/**
* 查询知识库命中日志
*/
KnowledgeHitLogVo queryById(Long id);
/**
* 查询知识库命中日志列表
*/
TableDataInfo<KnowledgeHitLogVo> queryPageList(KnowledgeHitLogBo bo, PageQuery pageQuery);
/**
* 查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryList(KnowledgeHitLogBo bo);
/**
* 新增知识库命中日志
*/
Boolean insertByBo(KnowledgeHitLogBo bo);
/**
* 修改知识库命中日志
*/
Boolean updateByBo(KnowledgeHitLogBo bo);
/**
* 校验并批量删除知识库命中日志信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据会话ID查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryBySessionId(String sessionId);
/**
* 根据知识库ID查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByKnowledgeId(String knowledgeId);
/**
* 根据文档ID查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByDocId(String docId);
/**
* 根据知识片段ID查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByFragmentId(String fragmentId);
/**
* 根据模型名称查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByModelName(String modelName);
/**
* 根据相似度分数范围查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryBySimilarityRange(Double minScore, Double maxScore);
/**
* 根据查询文本查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByQueryText(String queryText);
/**
* 统计知识库命中次数
*/
Long countHitsByKnowledgeId(String knowledgeId);
/**
* 统计文档命中次数
*/
Long countHitsByDocId(String docId);
/**
* 统计知识片段命中次数
*/
Long countHitsByFragmentId(String fragmentId);
/**
* 获取热门查询列表
*/
List<Map<String, Object>> getPopularQueries(String knowledgeId, Integer limit);
/**
* 获取平均响应时间
*/
Double getAverageResponseTime(String knowledgeId);
/**
* 根据排名查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByRanking(Integer ranking);
/**
* 根据响应时间范围查询知识库命中日志列表
*/
List<KnowledgeHitLogVo> queryByResponseTimeRange(Long minTime, Long maxTime);
/**
* 批量插入知识库命中日志
*/
Boolean batchInsert(List<KnowledgeHitLogBo> boList);
}
@@ -0,0 +1,117 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeInfo;
import org.dromara.knowledge.domain.bo.KnowledgeInfoBo;
import org.dromara.knowledge.domain.vo.KnowledgeInfoVo;
import org.dromara.knowledge.domain.vo.KnowledgeSearchResultVo;
import org.dromara.knowledge.domain.vo.KnowledgeStatusVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
/**
* 知识库信息Service接口
*
* @author pengles
*/
public interface KnowledgeInfoService extends IService<KnowledgeInfo> {
/**
* 查询知识库信息
*/
KnowledgeInfoVo queryById(Long id);
/**
* 查询知识库信息列表
*/
TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery);
/**
* 查询知识库信息列表
*/
List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo);
/**
* 新增知识库信息
*/
Boolean insertByBo(KnowledgeInfoBo bo);
/**
* 修改知识库信息
*/
Boolean updateByBo(KnowledgeInfoBo bo);
/**
* 校验并批量删除知识库信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据用户ID查询知识库列表
*/
List<KnowledgeInfoVo> queryListByUserId(Long userId);
/**
* 根据知识库ID查询知识库信息
*/
KnowledgeInfoVo queryByKnowledgeId(Long knowledgeId);
/**
* 上传文档到知识库
*
* @param knowledgeId 知识库ID
* @param file 上传的文件
* @return 文档ID
*/
String uploadDocument(String knowledgeId, MultipartFile file);
/**
* 批量上传文档到知识库
*
* @param knowledgeId 知识库ID
* @param files 上传的文件列表
* @return 文档ID列表
*/
List<String> batchUploadDocuments(String knowledgeId, MultipartFile[] files);
/**
* 检索知识库
*
* @param knowledgeId 知识库ID
* @param query 查询文本
* @param limit 返回结果数量限制
* @return 检索结果列表
*/
List<KnowledgeSearchResultVo> searchKnowledge(String knowledgeId, String query, Integer limit);
/**
* 获取知识库处理状态
*
* @param knowledgeId 知识库ID
* @return 知识库状态信息
*/
KnowledgeStatusVo getKnowledgeStatus(String knowledgeId);
/**
* 处理文档并生成知识片段
*
* @param knowledgeId 知识库ID
* @param docId 文档ID
* @param content 文档内容
* @return 处理任务ID
*/
String processDocument(String knowledgeId, String docId, String content);
/**
* 对知识片段进行向量化
*
* @param knowledgeId 知识库ID
* @param fragmentId 知识片段ID
* @return 向量化任务ID
*/
String vectorizeFragment(String knowledgeId, String fragmentId);
}
@@ -0,0 +1,125 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeJob;
import org.dromara.knowledge.domain.bo.KnowledgeJobBo;
import org.dromara.knowledge.domain.vo.KnowledgeJobVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库任务Service接口
*
* @author pengles
*/
public interface KnowledgeJobService extends IService<KnowledgeJob> {
/**
* 查询知识库任务
*/
KnowledgeJobVo queryById(Long id);
/**
* 查询知识库任务列表
*/
TableDataInfo<KnowledgeJobVo> queryPageList(KnowledgeJobBo bo, PageQuery pageQuery);
/**
* 查询知识库任务列表
*/
List<KnowledgeJobVo> queryList(KnowledgeJobBo bo);
/**
* 新增知识库任务
*/
Boolean insertByBo(KnowledgeJobBo bo);
/**
* 修改知识库任务
*/
Boolean updateByBo(KnowledgeJobBo bo);
/**
* 校验并批量删除知识库任务信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据任务ID查询知识库任务
*/
KnowledgeJobVo queryByJobId(String jobId);
/**
* 根据知识库ID查询知识库任务列表
*/
List<KnowledgeJobVo> queryByKnowledgeId(String knowledgeId);
/**
* 根据文档ID查询知识库任务列表
*/
List<KnowledgeJobVo> queryByDocId(String docId);
/**
* 根据用户ID查询知识库任务列表
*/
List<KnowledgeJobVo> queryByUserId(Long userId);
/**
* 根据任务类型查询知识库任务列表
*/
List<KnowledgeJobVo> queryByJobType(String jobType);
/**
* 根据任务状态查询知识库任务列表
*/
List<KnowledgeJobVo> queryByStatus(Integer status);
/**
* 查询正在运行的任务列表
*/
List<KnowledgeJobVo> queryRunningJobs();
/**
* 查询待处理的任务列表
*/
List<KnowledgeJobVo> queryPendingJobs();
/**
* 查询失败的任务列表
*/
List<KnowledgeJobVo> queryFailedJobs();
/**
* 更新任务进度
*/
Boolean updateProgress(Long id, Integer progress);
/**
* 更新任务状态
*/
Boolean updateStatus(Long id, Integer status);
/**
* 增加重试次数
*/
Boolean incrementRetryCount(Long id);
/**
* 更新任务项目计数
*/
Boolean updateItemCounts(Long id, Integer totalItems, Integer processedItems, Integer successItems, Integer failedItems);
/**
* 根据优先级查询任务列表
*/
List<KnowledgeJobVo> queryByPriority(Integer priority);
/**
* 查询超时的任务列表
*/
List<KnowledgeJobVo> queryTimeoutJobs();
}
@@ -0,0 +1,59 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgePromptTemplate;
import org.dromara.knowledge.domain.bo.KnowledgePromptTemplateBo;
import org.dromara.knowledge.domain.vo.KnowledgePromptTemplateVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库提示模板Service接口
*
* @author pengles
*/
public interface KnowledgePromptTemplateService extends IService<KnowledgePromptTemplate> {
/**
* 查询知识库提示模板
*/
KnowledgePromptTemplateVo queryById(Long id);
/**
* 查询知识库提示模板列表
*/
TableDataInfo<KnowledgePromptTemplateVo> queryPageList(KnowledgePromptTemplateBo bo, PageQuery pageQuery);
/**
* 查询知识库提示模板列表
*/
List<KnowledgePromptTemplateVo> queryList(KnowledgePromptTemplateBo bo);
/**
* 新增知识库提示模板
*/
Boolean insertByBo(KnowledgePromptTemplateBo bo);
/**
* 修改知识库提示模板
*/
Boolean updateByBo(KnowledgePromptTemplateBo bo);
/**
* 校验并批量删除知识库提示模板
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据分类查询模板列表
*/
List<KnowledgePromptTemplateVo> queryListByCategory(String category);
/**
* 根据模板名称查询模板信息
*/
KnowledgePromptTemplateVo queryByTemplateName(String templateName);
}
@@ -0,0 +1,60 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeRoleGroup;
import org.dromara.knowledge.domain.bo.KnowledgeRoleGroupBo;
import org.dromara.knowledge.domain.vo.KnowledgeRoleGroupVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库角色分组Service接口
*
* @author pengles
*/
public interface KnowledgeRoleGroupService extends IService<KnowledgeRoleGroup> {
/**
* 查询知识库角色分组
*/
KnowledgeRoleGroupVo queryById(Long id);
/**
* 查询知识库角色分组列表
*/
TableDataInfo<KnowledgeRoleGroupVo> queryPageList(KnowledgeRoleGroupBo bo, PageQuery pageQuery);
/**
* 查询知识库角色分组列表
*/
List<KnowledgeRoleGroupVo> queryList(KnowledgeRoleGroupBo bo);
/**
* 新增知识库角色分组
*/
Boolean insertByBo(KnowledgeRoleGroupBo bo);
/**
* 修改知识库角色分组
*/
Boolean updateByBo(KnowledgeRoleGroupBo bo);
/**
* 校验并批量删除知识库角色分组
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据分组编码查询分组信息
*/
KnowledgeRoleGroupVo queryByGroupCode(String groupCode);
/**
* 查询启用状态的分组列表
*/
List<KnowledgeRoleGroupVo> queryEnabledList();
}
@@ -0,0 +1,65 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeRoleRelation;
import org.dromara.knowledge.domain.bo.KnowledgeRoleRelationBo;
import org.dromara.knowledge.domain.vo.KnowledgeRoleRelationVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库角色关系Service接口
*
* @author pengles
*/
public interface KnowledgeRoleRelationService extends IService<KnowledgeRoleRelation> {
/**
* 查询知识库角色关系
*/
KnowledgeRoleRelationVo queryById(Long id);
/**
* 查询知识库角色关系列表
*/
TableDataInfo<KnowledgeRoleRelationVo> queryPageList(KnowledgeRoleRelationBo bo, PageQuery pageQuery);
/**
* 查询知识库角色关系列表
*/
List<KnowledgeRoleRelationVo> queryList(KnowledgeRoleRelationBo bo);
/**
* 新增知识库角色关系
*/
Boolean insertByBo(KnowledgeRoleRelationBo bo);
/**
* 修改知识库角色关系
*/
Boolean updateByBo(KnowledgeRoleRelationBo bo);
/**
* 校验并批量删除知识库角色关系
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据角色ID查询关系列表
*/
List<KnowledgeRoleRelationVo> queryByRoleId(Long roleId);
/**
* 根据分组ID查询关系列表
*/
List<KnowledgeRoleRelationVo> queryByGroupId(Long groupId);
/**
* 根据角色ID和分组ID查询关系
*/
KnowledgeRoleRelationVo queryByRoleIdAndGroupId(Long roleId, Long groupId);
}
@@ -0,0 +1,60 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeRole;
import org.dromara.knowledge.domain.bo.KnowledgeRoleBo;
import org.dromara.knowledge.domain.vo.KnowledgeRoleVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库角色Service接口
*
* @author pengles
*/
public interface KnowledgeRoleService extends IService<KnowledgeRole> {
/**
* 查询知识库角色
*/
KnowledgeRoleVo queryById(Long id);
/**
* 查询知识库角色列表
*/
TableDataInfo<KnowledgeRoleVo> queryPageList(KnowledgeRoleBo bo, PageQuery pageQuery);
/**
* 查询知识库角色列表
*/
List<KnowledgeRoleVo> queryList(KnowledgeRoleBo bo);
/**
* 新增知识库角色
*/
Boolean insertByBo(KnowledgeRoleBo bo);
/**
* 修改知识库角色
*/
Boolean updateByBo(KnowledgeRoleBo bo);
/**
* 校验并批量删除知识库角色
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据角色编码查询角色信息
*/
KnowledgeRoleVo queryByRoleCode(String roleCode);
/**
* 查询启用状态的角色列表
*/
List<KnowledgeRoleVo> queryEnabledList();
}
@@ -0,0 +1,64 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeSchemaField;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaFieldBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaFieldVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库数据模型字段Service接口
*
* @author pengles
*/
public interface KnowledgeSchemaFieldService extends IService<KnowledgeSchemaField> {
/**
* 查询知识库模式字段
*/
KnowledgeSchemaFieldVo queryById(Long id);
/**
* 查询知识库模式字段列表
*/
TableDataInfo<KnowledgeSchemaFieldVo> queryPageList(KnowledgeSchemaFieldBo bo, PageQuery pageQuery);
/**
* 查询知识库模式字段列表
*/
List<KnowledgeSchemaFieldVo> queryList(KnowledgeSchemaFieldBo bo);
/**
* 新增知识库模式字段
*/
Boolean insertByBo(KnowledgeSchemaFieldBo bo);
/**
* 修改知识库模式字段
*/
Boolean updateByBo(KnowledgeSchemaFieldBo bo);
/**
* 校验并批量删除知识库模式字段
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据模式ID查询字段列表
*/
List<KnowledgeSchemaFieldVo> queryListBySchemaId(Long schemaId);
/**
* 根据编码查询字段信息
*/
KnowledgeSchemaFieldVo queryByCode(String code);
/**
* 根据模式ID和字段编码查询字段信息
*/
KnowledgeSchemaFieldVo queryBySchemaIdAndCode(Long schemaId, String code);
}
@@ -0,0 +1,59 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeSchemaGroup;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaGroupBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaGroupVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库数据模型分组Service接口
*
* @author pengles
*/
public interface KnowledgeSchemaGroupService extends IService<KnowledgeSchemaGroup> {
/**
* 查询知识库模式组
*/
KnowledgeSchemaGroupVo queryById(Long id);
/**
* 查询知识库模式组列表
*/
TableDataInfo<KnowledgeSchemaGroupVo> queryPageList(KnowledgeSchemaGroupBo bo, PageQuery pageQuery);
/**
* 查询知识库模式组列表
*/
List<KnowledgeSchemaGroupVo> queryList(KnowledgeSchemaGroupBo bo);
/**
* 新增知识库模式组
*/
Boolean insertByBo(KnowledgeSchemaGroupBo bo);
/**
* 修改知识库模式组
*/
Boolean updateByBo(KnowledgeSchemaGroupBo bo);
/**
* 校验并批量删除知识库模式组
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据编码查询模式组信息
*/
KnowledgeSchemaGroupVo queryByCode(String code);
/**
* 根据名称查询模式组信息
*/
KnowledgeSchemaGroupVo queryByName(String name);
}
@@ -0,0 +1,64 @@
package org.dromara.knowledge.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.knowledge.domain.KnowledgeSchema;
import org.dromara.knowledge.domain.bo.KnowledgeSchemaBo;
import org.dromara.knowledge.domain.vo.KnowledgeSchemaVo;
import java.util.Collection;
import java.util.List;
/**
* 知识库数据模型Service接口
*
* @author pengles
*/
public interface KnowledgeSchemaService extends IService<KnowledgeSchema> {
/**
* 查询知识库模式
*/
KnowledgeSchemaVo queryById(Long id);
/**
* 查询知识库模式列表
*/
TableDataInfo<KnowledgeSchemaVo> queryPageList(KnowledgeSchemaBo bo, PageQuery pageQuery);
/**
* 查询知识库模式列表
*/
List<KnowledgeSchemaVo> queryList(KnowledgeSchemaBo bo);
/**
* 新增知识库模式
*/
Boolean insertByBo(KnowledgeSchemaBo bo);
/**
* 修改知识库模式
*/
Boolean updateByBo(KnowledgeSchemaBo bo);
/**
* 校验并批量删除知识库模式
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据模式组ID查询模式列表
*/
List<KnowledgeSchemaVo> queryListBySchemaGroupId(Long schemaGroupId);
/**
* 根据编码查询模式信息
*/
KnowledgeSchemaVo queryByCode(String code);
/**
* 根据表名查询模式信息
*/
KnowledgeSchemaVo queryByTableName(String tableName);
}

Some files were not shown because too many files have changed in this diff Show More