Commit 7abe18b5 authored by alex yao's avatar alex yao

feat: Agent应用数据库配置

parent 9e71524c
......@@ -45,6 +45,7 @@ public interface AgentApplicationService {
* @param largeModel 模型
* @param agentSystem 应用角色指令
* @param knowledgeIds 知识库ID
* @param databaseIds 数据库ID
* @param communicationTurn 对话轮数
* @param topP 模型参数topP
* @param temperature 模型参数temperature
......@@ -60,7 +61,7 @@ public interface AgentApplicationService {
* @param superclassProblemConfig 知识库参数超级类问题配置
*/
AgentResultEntity callAgentApplication(String agentId, String identifier, String largeModel, String agentSystem,
Integer[] knowledgeIds, Integer communicationTurn, Float topP, Float temperature,
Integer[] knowledgeIds, Integer[] databaseIds, Integer communicationTurn, Float topP, Float temperature,
List<Message> messages, List<Tool> tools, FunctionCallResult functionCallResult, List<String> fileUrls, boolean stream, List<String> imageUrls,
Double score, Integer topK, KnowledgeSearchTypeEnum knowledgeSearchType, KnowledgeSuperclassProblemConfig superclassProblemConfig, HttpServletResponse httpServletResponse) throws Exception;
......@@ -145,6 +146,7 @@ public interface AgentApplicationService {
/**
* 编辑器编辑功能
*
* @param agentGcConfigCode
* @param articleContent
* @param editorRequired
......
......@@ -64,6 +64,10 @@ public class AgentApplicationInfoConvert {
if (StringUtils.isNotBlank(model.getKnowledgeIds())) {
entity.setKnowledgeIds(JsonUtils.deSerialize(model.getKnowledgeIds(), Integer[].class));
}
if (StringUtils.isNotBlank(model.getKnowledgeDatabaseIds())) {
entity.setKnowledgeDatabaseIds(JsonUtils.deSerialize(model.getKnowledgeDatabaseIds(), Integer[].class));
}
entity.setKnowledgeSearchType(model.getKnowledgeSearchType());
entity.setKnowledgeSimilarity(model.getKnowledgeSimilarity());
entity.setKnowledgeNResult(model.getKnowledgeNResult());
......@@ -117,6 +121,11 @@ public class AgentApplicationInfoConvert {
if (ArrayUtils.isNotEmpty(entity.getKnowledgeIds())) {
model.setKnowledgeIds(JsonUtils.serialize(entity.getKnowledgeIds()));
}
if (ArrayUtils.isNotEmpty(entity.getKnowledgeDatabaseIds())) {
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
}
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
model.setKnowledgeSimilarity(entity.getKnowledgeSimilarity());
model.setKnowledgeNResult(entity.getKnowledgeNResult());
......@@ -171,6 +180,9 @@ public class AgentApplicationInfoConvert {
knowledgeConfig.setKnowledgeResponseType(entity.getKnowledgeResponseType());
knowledgeConfig.setKnowledgeCustomResponse(entity.getKnowledgeCustomResponse());
AgentApplicationDatabaseConfig databaseConfig = new AgentApplicationDatabaseConfig();
databaseConfig.setIds(entity.getKnowledgeDatabaseIds());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel());
commModelConfig.setTopP(entity.getTopP());
......@@ -193,6 +205,7 @@ public class AgentApplicationInfoConvert {
dto.setCommModelConfig(commModelConfig);
dto.setVoiceConfig(voiceConfig);
dto.setUnitIds(entity.getUnitIds());
dto.setDatabaseConfig(databaseConfig);
dto.setCreator(entity.getCreator());
dto.setCreatedTime(entity.getCreatedTime());
dto.setModifiedTime(entity.getModifiedTime());
......@@ -235,6 +248,10 @@ public class AgentApplicationInfoConvert {
entity.setKnowledgeCustomResponse(dto.getKnowledgeConfig().getKnowledgeCustomResponse());
}
if (ObjectUtil.isNotEmpty(dto.getDatabaseConfig())) {
entity.setKnowledgeDatabaseIds(dto.getDatabaseConfig().getIds());
}
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
entity.setLargeModel(dto.getCommModelConfig().getLargeModel());
entity.setTopP(dto.getCommModelConfig().getTopP());
......@@ -290,6 +307,10 @@ public class AgentApplicationInfoConvert {
if (StringUtils.isNotBlank(infoQueryItem.getKnowledgeIds())) {
entity.setKnowledgeIds(JsonUtils.deSerialize(infoQueryItem.getKnowledgeIds(), Integer[].class));
}
if (StringUtils.isNotBlank(infoQueryItem.getKnowledgeDatabaseIds())) {
entity.setKnowledgeDatabaseIds(JsonUtils.deSerialize(infoQueryItem.getKnowledgeDatabaseIds(), Integer[].class));
}
entity.setKnowledgeSearchType(infoQueryItem.getKnowledgeSearchType());
entity.setKnowledgeSimilarity(infoQueryItem.getKnowledgeSimilarity());
entity.setKnowledgeNResult(infoQueryItem.getKnowledgeNResult());
......
......@@ -15,10 +15,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BizAgentApplicationPublishConvert {
......@@ -51,6 +48,9 @@ public class BizAgentApplicationPublishConvert {
if (StringUtils.isNotBlank(model.getKnowledgeIds())) {
entity.setKnowledgeIds(JsonUtils.deSerialize(model.getKnowledgeIds(), Integer[].class));
}
if (StringUtils.isNotBlank(model.getKnowledgeDatabaseIds())) {
entity.setKnowledgeDatabaseIds(JsonUtils.deSerialize(model.getKnowledgeDatabaseIds(), Integer[].class));
}
entity.setKnowledgeSearchType(model.getKnowledgeSearchType());
entity.setKnowledgeSimilarity(model.getKnowledgeSimilarity());
entity.setKnowledgeNResult(model.getKnowledgeNResult());
......@@ -100,6 +100,10 @@ public class BizAgentApplicationPublishConvert {
if (ArrayUtils.isNotEmpty(entity.getKnowledgeIds())) {
model.setKnowledgeIds(JsonUtils.serialize(entity.getKnowledgeIds()));
}
if (ArrayUtils.isNotEmpty(entity.getKnowledgeDatabaseIds())) {
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
}
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
model.setKnowledgeSimilarity(entity.getKnowledgeSimilarity());
model.setKnowledgeNResult(entity.getKnowledgeNResult());
......@@ -157,6 +161,9 @@ public class BizAgentApplicationPublishConvert {
knowledgeConfig.setKnowledgeResponseType(entity.getKnowledgeResponseType());
knowledgeConfig.setKnowledgeCustomResponse(entity.getKnowledgeCustomResponse());
AgentApplicationDatabaseConfig databaseConfig = new AgentApplicationDatabaseConfig();
databaseConfig.setIds(entity.getKnowledgeDatabaseIds());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel());
commModelConfig.setTopP(entity.getTopP());
......@@ -178,6 +185,7 @@ public class BizAgentApplicationPublishConvert {
dto.setKnowledgeConfig(knowledgeConfig);
dto.setCommModelConfig(commModelConfig);
dto.setVoiceConfig(voiceConfig);
dto.setDatabaseConfig(databaseConfig);
dto.setUnitIds(entity.getUnitIds());
dto.setCreator(entity.getCreator());
dto.setCreatedTime(entity.getCreatedTime());
......@@ -222,6 +230,10 @@ public class BizAgentApplicationPublishConvert {
entity.setKnowledgeCustomResponse(dto.getKnowledgeConfig().getKnowledgeCustomResponse());
}
if (ObjectUtil.isNotEmpty(dto.getDatabaseConfig())) {
entity.setKnowledgeDatabaseIds(dto.getDatabaseConfig().getIds());
}
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
entity.setLargeModel(dto.getCommModelConfig().getLargeModel());
entity.setTopP(dto.getCommModelConfig().getTopP());
......
package cn.com.poc.agent_application.domain;
/**
* @author alex.yao
* @date 2025/4/28
*/
public class AgentApplicationDatabaseConfig {
private Integer[] ids;
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
}
......@@ -16,6 +16,8 @@ public class AgentApplicationInfoDto implements java.io.Serializable {
private AgentApplicationKnowledgeConfig knowledgeConfig;
private AgentApplicationDatabaseConfig databaseConfig;
private AgentApplicationCommModelConfig commModelConfig;
private AgentApplicationVoiceConfig voiceConfig;
......@@ -60,6 +62,14 @@ public class AgentApplicationInfoDto implements java.io.Serializable {
this.voiceConfig = voiceConfig;
}
public AgentApplicationDatabaseConfig getDatabaseConfig() {
return databaseConfig;
}
public void setDatabaseConfig(AgentApplicationDatabaseConfig databaseConfig) {
this.databaseConfig = databaseConfig;
}
/**
* unit_ids
* 组件ID
......
......@@ -233,6 +233,20 @@ public class BizAgentApplicationInfoEntity {
this.knowledgeIds = knowledgeIds;
}
/**
* knowledge_database_ids
* 知识库ID
*/
private java.lang.Integer[] knowledgeDatabaseIds;
public java.lang.Integer[] getKnowledgeDatabaseIds() {
return this.knowledgeDatabaseIds;
}
public void setKnowledgeDatabaseIds(java.lang.Integer[] knowledgeDatabaseIds) {
this.knowledgeDatabaseIds = knowledgeDatabaseIds;
}
/**
* 知识库检索方式
* 1、混合检索 - MIX
......
......@@ -245,6 +245,21 @@ public class BizAgentApplicationPublishEntity {
this.knowledgeIds = knowledgeIds;
}
/**
* knowledge_database_ids
* 知识库ID
*/
private java.lang.Integer[] knowledgeDatabaseIds;
public java.lang.Integer[] getKnowledgeDatabaseIds() {
return this.knowledgeDatabaseIds;
}
public void setKnowledgeDatabaseIds(java.lang.Integer[] knowledgeDatabaseIds) {
this.knowledgeDatabaseIds = knowledgeDatabaseIds;
}
/**
* 知识库检索方式
* 1、混合检索 - MIX
......
......@@ -302,6 +302,24 @@ public class BizAgentApplicationInfoModel extends BaseModelClass implements Seri
super.addValidField("knowledgeIds");
}
/**
* knowledge_database_ids
* 知识库ID
*/
private java.lang.String knowledgeDatabaseIds;
@Column(name = "knowledge_database_ids", length = 1073741824)
public java.lang.String getKnowledgeDatabaseIds() {
return this.knowledgeDatabaseIds;
}
public void setKnowledgeDatabaseIds(java.lang.String knowledgeDatabaseIds) {
this.knowledgeDatabaseIds = knowledgeDatabaseIds;
super.addValidField("knowledgeDatabaseIds");
}
/**
* knowledge_search_type
* 知识库检索方式
......
package cn.com.poc.agent_application.model;
import java.io.Serializable;
import cn.com.yict.framemax.data.model.BaseModelClass;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Version;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.*;
import java.io.Serializable;
/**
* Model class for biz_agent_application_publish
......@@ -284,6 +275,22 @@ public class BizAgentApplicationPublishModel extends BaseModelClass implements S
super.addValidField("knowledgeIds");
}
/**
* knowledge_database_ids
* 知识库ID
*/
private java.lang.String knowledgeDatabaseIds;
@Column(name = "knowledge_database_ids", length = 1073741824)
public java.lang.String getKnowledgeDatabaseIds() {
return this.knowledgeDatabaseIds;
}
public void setKnowledgeDatabaseIds(java.lang.String knowledgeDatabaseIds) {
this.knowledgeDatabaseIds = knowledgeDatabaseIds;
super.addValidField("knowledgeDatabaseIds");
}
/**
* knowledge_search_type
* 知识库检索方式
......
......@@ -15,6 +15,7 @@ select distinct
continuous_question_system,
continuous_question_turn,
knowledge_ids,
knowledge_databse_ids,
knowledge_search_type,
knowledge_similarity,
knowledge_n_result,
......
......@@ -254,6 +254,20 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri
this.knowledgeIds = knowledgeIds;
}
/**
* knowledge_database_ids
*/
private String knowledgeDatabaseIds;
@Column(name = "knowledge_database_ids")
public String getKnowledgeDatabaseIds() {
return knowledgeDatabaseIds;
}
public void setKnowledgeDatabaseIds(String knowledgeDatabaseIds) {
this.knowledgeDatabaseIds = knowledgeDatabaseIds;
}
/**
* knowledge_search_type
* 知识库检索方式
......
......@@ -254,6 +254,9 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
superclassProblemConfig.setKnowledgeResponseType(infoEntity.getKnowledgeResponseType());
superclassProblemConfig.setKnowledgeCustomResponse(infoEntity.getKnowledgeCustomResponse());
//数据库配置
Integer[] databaseIds = infoEntity.getKnowledgeDatabaseIds();
//配置对话function
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogueId, agentId, infoEntity.getUnitIds(), infoEntity.getIsDocumentParsing());
......@@ -277,7 +280,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
reduceSn = memberEquityService.reducePoint(userBaseEntity.getUserId(), pointDeductionNum, ModifyEventEnum.use, agentUseModifyEventInfo);
//调用应用服务
agentApplicationService.callAgentApplication(agentId, dialogueId, model,
agentSystem, kdIds.toArray(new Integer[0]), communicationTurn, topP,
agentSystem, kdIds.toArray(new Integer[0]), databaseIds, communicationTurn, topP,
temperature, dto.getMessages(), tools, checkPluginUseEntity.getFunctionCallResult(), dto.getFileUrls(), true, imageUrls,
infoEntity.getKnowledgeSimilarity(), infoEntity.getKnowledgeNResult(), KnowledgeSearchTypeEnum.valueOf(infoEntity.getKnowledgeSearchType()),
superclassProblemConfig, httpServletResponse);
......
......@@ -226,6 +226,9 @@ public class BizAgentApplicationInfoServiceImpl extends BaseServiceImpl
model.setContinuousQuestionStatus(entity.getContinuousQuestionStatus());
model.setContinuousQuestionSystem(entity.getContinuousQuestionSystem());
model.setKnowledgeIds(JsonUtils.serialize(entity.getKnowledgeIds()));
if (ArrayUtils.isNotEmpty(entity.getKnowledgeDatabaseIds())){
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
}
if (StringUtils.isNotBlank(entity.getKnowledgeSearchType())) {
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
}
......
......@@ -182,6 +182,9 @@ public class BizAgentApplicationPublishServiceImpl extends BaseServiceImpl
if (ArrayUtils.isNotEmpty(entity.getKnowledgeIds())) {
model.setKnowledgeIds(JsonUtils.serialize(entity.getKnowledgeIds()));
}
if (ArrayUtils.isNotEmpty(entity.getKnowledgeDatabaseIds())){
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
}
if (StringUtils.isNotBlank(entity.getKnowledgeSearchType())) {
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
}
......
package cn.com.poc.common.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* @author alex.yao
* @date 2025/4/27
*/
public class DatabaseUtil {
private static Logger logger = LoggerFactory.getLogger(DatabaseUtil.class);
private static final int CONNECT_TIMEOUT = 5000; // 连接超时时间(毫秒)
private static final int SOCKET_TIMEOUT = 5000; // socket超时时间(毫秒)
/**
* 测试数据库连接
*
* @param host
* @param port
* @param username
* @param password
* @param database
* @return
*/
public static boolean testConnect(String host, int port, String username, String password, String database) {
String url = "jdbc:mysql://" + host + ":" + port + "/" + database
+ "?connectTimeout=" + CONNECT_TIMEOUT // 连接超时(毫秒)
+ "&socketTimeout=" + SOCKET_TIMEOUT; // socket超时(毫秒)
Connection connection = null;
try {
connection = DriverManager.getConnection(url, username, password);
return true;
} catch (Exception e) {
return false;
} finally {
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
logger.error("关闭数据库连接失败", e);
}
}
}
}
}
......@@ -143,6 +143,8 @@ public class AgentApplicationApiServiceImpl implements AgentApplicationApiServic
superclassProblemConfig.setKnowledgeResponseType(infoEntity.getKnowledgeResponseType());
superclassProblemConfig.setKnowledgeCustomResponse(infoEntity.getKnowledgeCustomResponse());
//数据库配置
Integer[] databaseIds = infoEntity.getKnowledgeDatabaseIds();
// 构造对话参数
List<Message> messages = buildMessages(conversationId, agentId, profileEntity.getMemberId(), query);
......@@ -169,7 +171,7 @@ public class AgentApplicationApiServiceImpl implements AgentApplicationApiServic
//对话
try {
AgentResultEntity agentResultEntity = agentApplicationService.callAgentApplication(agentId, conversationId, infoEntity.getLargeModel(),
infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(),
infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), databaseIds, infoEntity.getCommunicationTurn(),
infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, checkPluginUseEntity.getFunctionCallResult(), fileUrls, stream, imageUrls,
infoEntity.getKnowledgeSimilarity(), infoEntity.getKnowledgeNResult(), KnowledgeSearchTypeEnum.valueOf(infoEntity.getKnowledgeSearchType()),
superclassProblemConfig, httpServletResponse);
......
......@@ -138,6 +138,9 @@ public class AgentApplicationExposeServiceImpl implements AgentApplicationExpose
knowledgeSuperclassProblemConfig.setKnowledgeResponseType(infoEntity.getKnowledgeResponseType());
knowledgeSuperclassProblemConfig.setKnowledgeCustomResponse(infoEntity.getKnowledgeCustomResponse());
//数据库配置
Integer[] databaseIds = infoEntity.getKnowledgeDatabaseIds();
// 构造对话参数
List<Message> messages = buildMessages(dialogsId, agentId, userBaseEntity.getUserId(), input);
......@@ -186,7 +189,7 @@ public class AgentApplicationExposeServiceImpl implements AgentApplicationExpose
}
//对话
AgentResultEntity agentResultEntity = agentApplicationService.callAgentApplication(agentId, dialogsId, infoEntity.getLargeModel(),
infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(),
infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), databaseIds, infoEntity.getCommunicationTurn(),
infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, checkPluginUseEntity.getFunctionCallResult(), fileUrls, true, imageUrls,
infoEntity.getKnowledgeSimilarity(), infoEntity.getKnowledgeNResult(), KnowledgeSearchTypeEnum.valueOf(infoEntity.getKnowledgeSearchType()),
knowledgeSuperclassProblemConfig, httpServletResponse);
......
package cn.com.poc.knowledge.convert;
import cn.com.poc.knowledge.model.BizKnowledgeDatabaseModel;
import cn.com.poc.knowledge.entity.BizKnowledgeDatabaseEntity;
import cn.com.poc.knowledge.dto.BizKnowledgeDatabaseDto;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryItem;
public class BizKnowledgeDatabaseConvert {
public static BizKnowledgeDatabaseEntity modelToEntity(BizKnowledgeDatabaseModel model) {
BizKnowledgeDatabaseEntity entity = new BizKnowledgeDatabaseEntity();
entity.setId(model.getId());
entity.setMemberId(model.getMemberId());
entity.setTitle(model.getTitle());
entity.setDesc(model.getDesc());
entity.setDbType(model.getDbType());
entity.setDbHost(model.getDbHost());
entity.setDbPort(model.getDbPort());
entity.setDbName(model.getDbName());
entity.setDbUsername(model.getDbUsername());
entity.setDbPassword(model.getDbPassword());
entity.setIsDeleted(model.getIsDeleted());
entity.setCreator(model.getCreator());
entity.setCreatedTime(model.getCreatedTime());
entity.setModifier(model.getModifier());
entity.setModifiedTime(model.getModifiedTime());
entity.setSysVersion(model.getSysVersion());
return entity;
}
public static BizKnowledgeDatabaseModel entityToModel(BizKnowledgeDatabaseEntity entity) {
BizKnowledgeDatabaseModel model = new BizKnowledgeDatabaseModel();
model.setId(entity.getId());
model.setMemberId(entity.getMemberId());
model.setTitle(entity.getTitle());
model.setDesc(entity.getDesc());
model.setDbType(entity.getDbType());
model.setDbHost(entity.getDbHost());
model.setDbPort(entity.getDbPort());
model.setDbName(entity.getDbName());
model.setDbUsername(entity.getDbUsername());
model.setDbPassword(entity.getDbPassword());
model.setIsDeleted(entity.getIsDeleted());
model.setCreator(entity.getCreator());
model.setCreatedTime(entity.getCreatedTime());
model.setModifier(entity.getModifier());
model.setModifiedTime(entity.getModifiedTime());
model.setSysVersion(entity.getSysVersion());
return model;
}
public static BizKnowledgeDatabaseDto entityToDto(BizKnowledgeDatabaseEntity entity) {
BizKnowledgeDatabaseDto dto = new BizKnowledgeDatabaseDto();
dto.setId(entity.getId());
dto.setMemberId(entity.getMemberId());
dto.setTitle(entity.getTitle());
dto.setDesc(entity.getDesc());
dto.setDbType(entity.getDbType());
dto.setDbHost(entity.getDbHost());
dto.setDbPort(entity.getDbPort());
dto.setDbName(entity.getDbName());
dto.setDbUsername(entity.getDbUsername());
dto.setDbPassword(entity.getDbPassword());
return dto;
}
public static BizKnowledgeDatabaseEntity dtoToEntity(BizKnowledgeDatabaseDto dto) {
BizKnowledgeDatabaseEntity entity = new BizKnowledgeDatabaseEntity();
entity.setId(dto.getId());
entity.setMemberId(dto.getMemberId());
entity.setTitle(dto.getTitle());
entity.setDesc(dto.getDesc());
entity.setDbType(dto.getDbType());
entity.setDbHost(dto.getDbHost());
entity.setDbPort(dto.getDbPort());
entity.setDbName(dto.getDbName());
entity.setDbUsername(dto.getDbUsername());
entity.setDbPassword(dto.getDbPassword());
return entity;
}
public static BizKnowledgeDatabaseDto itemToDto(KnowledgeDatabaseQueryInfoQueryItem item) {
BizKnowledgeDatabaseDto bizKnowledgeDatabaseDto = new BizKnowledgeDatabaseDto();
bizKnowledgeDatabaseDto.setId(item.getId());
bizKnowledgeDatabaseDto.setMemberId(item.getMemberId());
bizKnowledgeDatabaseDto.setTitle(item.getTitle());
bizKnowledgeDatabaseDto.setDesc(item.getDesc());
bizKnowledgeDatabaseDto.setDbType(item.getDbType());
bizKnowledgeDatabaseDto.setDbHost(item.getDbHost());
bizKnowledgeDatabaseDto.setDbPort(item.getDbPort());
bizKnowledgeDatabaseDto.setDbName(item.getDbName());
bizKnowledgeDatabaseDto.setDbUsername(item.getDbUsername());
bizKnowledgeDatabaseDto.setDbPassword(item.getDbPassword());
return bizKnowledgeDatabaseDto;
}
}
\ No newline at end of file
package cn.com.poc.knowledge.dto;
public class BizKnowledgeDatabaseDto {
private static final long serialVersionUID = 1L;
/** id
*主键
*/
private java.lang.Long id;
public java.lang.Long getId(){
return this.id;
}
public void setId(java.lang.Long id){
this.id = id;
}
/** member_id
*用户ID
*/
private java.lang.Integer memberId;
public java.lang.Integer getMemberId(){
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
this.memberId = memberId;
}
/** title
*数据库标题名
*/
private java.lang.String title;
public java.lang.String getTitle(){
return this.title;
}
public void setTitle(java.lang.String title){
this.title = title;
}
/** desc
*描述
*/
private java.lang.String desc;
public java.lang.String getDesc(){
return this.desc;
}
public void setDesc(java.lang.String desc){
this.desc = desc;
}
/** db_type
*数据库类型 -MYSQL
*/
private java.lang.String dbType;
public java.lang.String getDbType(){
return this.dbType;
}
public void setDbType(java.lang.String dbType){
this.dbType = dbType;
}
/** db_host
*数据库HOST
*/
private java.lang.String dbHost;
public java.lang.String getDbHost(){
return this.dbHost;
}
public void setDbHost(java.lang.String dbHost){
this.dbHost = dbHost;
}
/** db_port
*数据库端口
*/
private java.lang.Integer dbPort;
public java.lang.Integer getDbPort(){
return this.dbPort;
}
public void setDbPort(java.lang.Integer dbPort){
this.dbPort = dbPort;
}
/** db_name
*数据库名
*/
private java.lang.String dbName;
public java.lang.String getDbName(){
return this.dbName;
}
public void setDbName(java.lang.String dbName){
this.dbName = dbName;
}
/** db_username
*用户名
*/
private java.lang.String dbUsername;
public java.lang.String getDbUsername(){
return this.dbUsername;
}
public void setDbUsername(java.lang.String dbUsername){
this.dbUsername = dbUsername;
}
/** db_password
*密码
*/
private java.lang.String dbPassword;
public java.lang.String getDbPassword(){
return this.dbPassword;
}
public void setDbPassword(java.lang.String dbPassword){
this.dbPassword = dbPassword;
}
}
\ No newline at end of file
package cn.com.poc.knowledge.dto;
import java.io.Serializable;
/**
* @author alex.yao
* @date 2025/4/27
*/
public class DatabaseTestContentDto implements Serializable {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
package cn.com.poc.knowledge.dto;
import java.io.Serializable;
/**
* @author alex.yao
* @date 2025/4/27
*/
public class KnowledgeDatabaseSearchDto implements Serializable {
private String search;
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
}
package cn.com.poc.knowledge.entity;
public class BizKnowledgeDatabaseEntity {
private static final long serialVersionUID = 1L;
/** id
*主键
*/
private java.lang.Long id;
public java.lang.Long getId(){
return this.id;
}
public void setId(java.lang.Long id){
this.id = id;
}
/** member_id
*用户ID
*/
private java.lang.Integer memberId;
public java.lang.Integer getMemberId(){
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
this.memberId = memberId;
}
/** title
*数据库标题名
*/
private java.lang.String title;
public java.lang.String getTitle(){
return this.title;
}
public void setTitle(java.lang.String title){
this.title = title;
}
/** desc
*描述
*/
private java.lang.String desc;
public java.lang.String getDesc(){
return this.desc;
}
public void setDesc(java.lang.String desc){
this.desc = desc;
}
/** db_type
*数据库类型 -MYSQL
*/
private java.lang.String dbType;
public java.lang.String getDbType(){
return this.dbType;
}
public void setDbType(java.lang.String dbType){
this.dbType = dbType;
}
/** db_host
*数据库HOST
*/
private java.lang.String dbHost;
public java.lang.String getDbHost(){
return this.dbHost;
}
public void setDbHost(java.lang.String dbHost){
this.dbHost = dbHost;
}
/** db_port
*数据库端口
*/
private java.lang.Integer dbPort;
public java.lang.Integer getDbPort(){
return this.dbPort;
}
public void setDbPort(java.lang.Integer dbPort){
this.dbPort = dbPort;
}
/** db_name
*数据库名
*/
private java.lang.String dbName;
public java.lang.String getDbName(){
return this.dbName;
}
public void setDbName(java.lang.String dbName){
this.dbName = dbName;
}
/** db_username
*用户名
*/
private java.lang.String dbUsername;
public java.lang.String getDbUsername(){
return this.dbUsername;
}
public void setDbUsername(java.lang.String dbUsername){
this.dbUsername = dbUsername;
}
/** db_password
*密码
*/
private java.lang.String dbPassword;
public java.lang.String getDbPassword(){
return this.dbPassword;
}
public void setDbPassword(java.lang.String dbPassword){
this.dbPassword = dbPassword;
}
/** is_deleted
*是否删除 Y-是 N-否
*/
private java.lang.String isDeleted;
public java.lang.String getIsDeleted(){
return this.isDeleted;
}
public void setIsDeleted(java.lang.String isDeleted){
this.isDeleted = isDeleted;
}
/** CREATOR
*创建人
*/
private java.lang.String creator;
public java.lang.String getCreator(){
return this.creator;
}
public void setCreator(java.lang.String creator){
this.creator = creator;
}
/** CREATED_TIME
*创建时间
*/
private java.util.Date createdTime;
public java.util.Date getCreatedTime(){
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
this.createdTime = createdTime;
}
/** MODIFIER
*修改人
*/
private java.lang.String modifier;
public java.lang.String getModifier(){
return this.modifier;
}
public void setModifier(java.lang.String modifier){
this.modifier = modifier;
}
/** MODIFIED_TIME
*修改时间
*/
private java.util.Date modifiedTime;
public java.util.Date getModifiedTime(){
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
this.modifiedTime = modifiedTime;
}
/** SYS_VERSION
*乐观锁,版本号
*/
private java.lang.Integer sysVersion;
public java.lang.Integer getSysVersion(){
return this.sysVersion;
}
public void setSysVersion(java.lang.Integer sysVersion){
this.sysVersion = sysVersion;
}
}
\ No newline at end of file
package cn.com.poc.knowledge.model;
import java.io.Serializable;
import cn.com.yict.framemax.data.model.BaseModelClass;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Version;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
/**
* Model class for biz_knowledge_database
* 知识库-关系型数据库配置
*/
@Entity
@Table(name = "biz_knowledge_database")
@DynamicInsert
@DynamicUpdate
public class BizKnowledgeDatabaseModel extends BaseModelClass implements Serializable {
private static final long serialVersionUID = 1L;
/** id
*主键
*/
private java.lang.Long id;
@Column(name = "id",length = 19)
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public java.lang.Long getId(){
return this.id;
}
public void setId(java.lang.Long id){
this.id = id;
super.addValidField("id");
}
/** member_id
*用户ID
*/
private java.lang.Integer memberId;
@Column(name = "member_id",length = 10)
public java.lang.Integer getMemberId(){
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
this.memberId = memberId;
super.addValidField("memberId");
}
/** title
*数据库标题名
*/
private java.lang.String title;
@Column(name = "title",length = 50)
public java.lang.String getTitle(){
return this.title;
}
public void setTitle(java.lang.String title){
this.title = title;
super.addValidField("title");
}
/** desc
*描述
*/
private java.lang.String desc;
@Column(name = "desc",length = 2147483647)
public java.lang.String getDesc(){
return this.desc;
}
public void setDesc(java.lang.String desc){
this.desc = desc;
super.addValidField("desc");
}
/** db_type
*数据库类型 -MYSQL
*/
private java.lang.String dbType;
@Column(name = "db_type",length = 15)
public java.lang.String getDbType(){
return this.dbType;
}
public void setDbType(java.lang.String dbType){
this.dbType = dbType;
super.addValidField("dbType");
}
/** db_host
*数据库HOST
*/
private java.lang.String dbHost;
@Column(name = "db_host",length = 150)
public java.lang.String getDbHost(){
return this.dbHost;
}
public void setDbHost(java.lang.String dbHost){
this.dbHost = dbHost;
super.addValidField("dbHost");
}
/** db_port
*数据库端口
*/
private java.lang.Integer dbPort;
@Column(name = "db_port",length = 10)
public java.lang.Integer getDbPort(){
return this.dbPort;
}
public void setDbPort(java.lang.Integer dbPort){
this.dbPort = dbPort;
super.addValidField("dbPort");
}
/** db_name
*数据库名
*/
private java.lang.String dbName;
@Column(name = "db_name",length = 100)
public java.lang.String getDbName(){
return this.dbName;
}
public void setDbName(java.lang.String dbName){
this.dbName = dbName;
super.addValidField("dbName");
}
/** db_username
*用户名
*/
private java.lang.String dbUsername;
@Column(name = "db_username",length = 100)
public java.lang.String getDbUsername(){
return this.dbUsername;
}
public void setDbUsername(java.lang.String dbUsername){
this.dbUsername = dbUsername;
super.addValidField("dbUsername");
}
/** db_password
*密码
*/
private java.lang.String dbPassword;
@Column(name = "db_password",length = 150)
public java.lang.String getDbPassword(){
return this.dbPassword;
}
public void setDbPassword(java.lang.String dbPassword){
this.dbPassword = dbPassword;
super.addValidField("dbPassword");
}
/** is_deleted
*是否删除 Y-是 N-否
*/
private java.lang.String isDeleted;
@Column(name = "is_deleted",length = 50)
public java.lang.String getIsDeleted(){
return this.isDeleted;
}
public void setIsDeleted(java.lang.String isDeleted){
this.isDeleted = isDeleted;
super.addValidField("isDeleted");
}
/** CREATOR
*创建人
*/
private java.lang.String creator;
@Column(name = "CREATOR",length = 50)
public java.lang.String getCreator(){
return this.creator;
}
public void setCreator(java.lang.String creator){
this.creator = creator;
super.addValidField("creator");
}
/** CREATED_TIME
*创建时间
*/
private java.util.Date createdTime;
@Column(name = "CREATED_TIME",length = 19)
public java.util.Date getCreatedTime(){
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
this.createdTime = createdTime;
super.addValidField("createdTime");
}
/** MODIFIER
*修改人
*/
private java.lang.String modifier;
@Column(name = "MODIFIER",length = 50)
public java.lang.String getModifier(){
return this.modifier;
}
public void setModifier(java.lang.String modifier){
this.modifier = modifier;
super.addValidField("modifier");
}
/** MODIFIED_TIME
*修改时间
*/
private java.util.Date modifiedTime;
@Column(name = "MODIFIED_TIME",length = 19)
public java.util.Date getModifiedTime(){
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
this.modifiedTime = modifiedTime;
super.addValidField("modifiedTime");
}
/** SYS_VERSION
*乐观锁,版本号
*/
private java.lang.Integer sysVersion;
@Column(name = "SYS_VERSION",length = 10)
@Version
public java.lang.Integer getSysVersion(){
return this.sysVersion;
}
public void setSysVersion(java.lang.Integer sysVersion){
this.sysVersion = sysVersion;
super.addValidField("sysVersion");
}
}
\ No newline at end of file
SELECT id, member_id, title, `desc`, db_type, db_host, db_port, db_name, db_username, db_password, is_deleted, CREATOR, CREATED_TIME, MODIFIER, MODIFIED_TIME, SYS_VERSION FROM biz_knowledge_database
where is_deleted = 'N'
<<and member_id = :memberId>>
<<and title = :search>>
order by id desc
\ No newline at end of file
package cn.com.poc.knowledge.query;
import java.io.Serializable;
/**
* Query Condition class for KnowledgeDatabaseQueryInfoQuery
*/
public class KnowledgeDatabaseQueryInfoQueryCondition implements Serializable{
private static final long serialVersionUID = 1L;
private java.lang.Integer memberId;
public java.lang.Integer getMemberId(){
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
this.memberId = memberId;
}
private java.lang.String search;
public java.lang.String getSearch(){
return this.search;
}
public void setSearch(java.lang.String search){
this.search = search;
}
}
\ No newline at end of file
package cn.com.poc.knowledge.query;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import cn.com.yict.framemax.data.model.BaseItemClass;
/**
* Query Item class for KnowledgeDatabaseQueryInfoQuery
*/
@Entity
public class KnowledgeDatabaseQueryInfoQueryItem extends BaseItemClass implements Serializable{
private static final long serialVersionUID = 1L;
/** id
*id
*/
private java.lang.Long id;
@Column(name = "id")
public java.lang.Long getId(){
return this.id;
}
public void setId(java.lang.Long id){
this.id = id;
}
/** member_id
*member_id
*/
private java.lang.Integer memberId;
@Column(name = "member_id")
public java.lang.Integer getMemberId(){
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
this.memberId = memberId;
}
/** title
*title
*/
private java.lang.String title;
@Column(name = "title")
public java.lang.String getTitle(){
return this.title;
}
public void setTitle(java.lang.String title){
this.title = title;
}
/** desc
*desc
*/
private java.lang.String desc;
@Column(name = "desc")
public java.lang.String getDesc(){
return this.desc;
}
public void setDesc(java.lang.String desc){
this.desc = desc;
}
/** db_type
*db_type
*/
private java.lang.String dbType;
@Column(name = "db_type")
public java.lang.String getDbType(){
return this.dbType;
}
public void setDbType(java.lang.String dbType){
this.dbType = dbType;
}
/** db_host
*db_host
*/
private java.lang.String dbHost;
@Column(name = "db_host")
public java.lang.String getDbHost(){
return this.dbHost;
}
public void setDbHost(java.lang.String dbHost){
this.dbHost = dbHost;
}
/** db_port
*db_port
*/
private java.lang.Integer dbPort;
@Column(name = "db_port")
public java.lang.Integer getDbPort(){
return this.dbPort;
}
public void setDbPort(java.lang.Integer dbPort){
this.dbPort = dbPort;
}
/** db_name
*db_name
*/
private java.lang.String dbName;
@Column(name = "db_name")
public java.lang.String getDbName(){
return this.dbName;
}
public void setDbName(java.lang.String dbName){
this.dbName = dbName;
}
/** db_username
*db_username
*/
private java.lang.String dbUsername;
@Column(name = "db_username")
public java.lang.String getDbUsername(){
return this.dbUsername;
}
public void setDbUsername(java.lang.String dbUsername){
this.dbUsername = dbUsername;
}
/** db_password
*db_password
*/
private java.lang.String dbPassword;
@Column(name = "db_password")
public java.lang.String getDbPassword(){
return this.dbPassword;
}
public void setDbPassword(java.lang.String dbPassword){
this.dbPassword = dbPassword;
}
/** is_deleted
*is_deleted
*/
private java.lang.String isDeleted;
@Column(name = "is_deleted")
public java.lang.String getIsDeleted(){
return this.isDeleted;
}
public void setIsDeleted(java.lang.String isDeleted){
this.isDeleted = isDeleted;
}
/** CREATOR
*CREATOR
*/
private java.lang.String creator;
@Column(name = "CREATOR")
public java.lang.String getCreator(){
return this.creator;
}
public void setCreator(java.lang.String creator){
this.creator = creator;
}
/** CREATED_TIME
*CREATED_TIME
*/
private java.util.Date createdTime;
@Column(name = "CREATED_TIME")
public java.util.Date getCreatedTime(){
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
this.createdTime = createdTime;
}
/** MODIFIER
*MODIFIER
*/
private java.lang.String modifier;
@Column(name = "MODIFIER")
public java.lang.String getModifier(){
return this.modifier;
}
public void setModifier(java.lang.String modifier){
this.modifier = modifier;
}
/** MODIFIED_TIME
*MODIFIED_TIME
*/
private java.util.Date modifiedTime;
@Column(name = "MODIFIED_TIME")
public java.util.Date getModifiedTime(){
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
this.modifiedTime = modifiedTime;
}
/** SYS_VERSION
*SYS_VERSION
*/
private java.lang.Integer sysVersion;
@Column(name = "SYS_VERSION")
public java.lang.Integer getSysVersion(){
return this.sysVersion;
}
public void setSysVersion(java.lang.Integer sysVersion){
this.sysVersion = sysVersion;
}
}
\ No newline at end of file
package cn.com.poc.knowledge.repository;
import cn.com.yict.framemax.data.repository.Repository;
import cn.com.poc.knowledge.model.BizKnowledgeDatabaseModel;
public interface BizKnowledgeDatabaseRepository extends Repository<BizKnowledgeDatabaseModel,java.lang.Long> {
}
\ No newline at end of file
package cn.com.poc.knowledge.rest;
import cn.com.poc.knowledge.dto.BizKnowledgeDatabaseDto;
import cn.com.poc.knowledge.dto.DatabaseTestContentDto;
import cn.com.poc.knowledge.dto.KnowledgeDatabaseSearchDto;
import cn.com.poc.knowledge.entity.BizKnowledgeDatabaseEntity;
import cn.com.yict.framemax.core.rest.BaseRest;
import cn.com.yict.framemax.data.model.PagingInfo;
import cn.com.yict.framemax.web.permission.Access;
import cn.com.yict.framemax.web.permission.Permission;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Permission(Access.Safety)
public interface DatabaseRest extends BaseRest {
/**
* 创建数据库连接信息
*
* @param dto
* @return
*/
BizKnowledgeDatabaseDto create(@RequestBody BizKnowledgeDatabaseDto dto);
/**
* 测试数据库连接
*
* @param dto
* @return
*/
DatabaseTestContentDto testConnection(@RequestBody BizKnowledgeDatabaseDto dto);
/**
* 获取数据库连接信息
*
* @param id
* @return
*/
BizKnowledgeDatabaseDto get(@RequestParam Integer id);
/**
* 获取数据库连接信息列表
*
* @param knowledgeDatabaseSearchDto
* @param pagingInfo
* @return
*/
List<BizKnowledgeDatabaseDto> getList(@RequestBody KnowledgeDatabaseSearchDto knowledgeDatabaseSearchDto, PagingInfo pagingInfo);
/**
* 删除数据库连接信息
*
* @param id 数据库信息ID
* @return 是否删除成功
*/
boolean delete(@RequestParam Integer id);
/**
* 更新数据库连接信息
*
* @param dto
* @return 更新后的数据库连接信息
*/
BizKnowledgeDatabaseDto update(@RequestBody BizKnowledgeDatabaseDto dto);
}
\ No newline at end of file
package cn.com.poc.knowledge.rest.impl;
import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.DatabaseUtil;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.knowledge.convert.BizKnowledgeDatabaseConvert;
import cn.com.poc.knowledge.dto.BizKnowledgeDatabaseDto;
import cn.com.poc.knowledge.dto.DatabaseTestContentDto;
import cn.com.poc.knowledge.dto.KnowledgeDatabaseSearchDto;
import cn.com.poc.knowledge.entity.BizKnowledgeDatabaseEntity;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryCondition;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryItem;
import cn.com.poc.knowledge.rest.DatabaseRest;
import cn.com.poc.knowledge.service.BizKnowledgeDatabaseService;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class DatabaseRestImpl implements DatabaseRest {
@Resource
private BizKnowledgeDatabaseService bizKnowledgeDatabaseService;
@Override
public BizKnowledgeDatabaseDto create(BizKnowledgeDatabaseDto dto) {
Assert.notNull(dto, "response can not be null");
Assert.notBlank(dto.getTitle(), "title can not be blank");
Assert.notBlank(dto.getDbHost(), "Database Host must not be blank");
Assert.notBlank(dto.getDbType(), "Database Type must not be blank");
Assert.notNull(dto.getDbPort(), "Database Port must not be blank");
Assert.notBlank(dto.getDbName(), "Database Name must not be blank");
Assert.notBlank(dto.getDbUsername(), "Database Username must not be blank");
Assert.notBlank(dto.getDbPassword(), "Database Password must not be blank");
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
Long userId = userBaseEntity.getUserId();
BizKnowledgeDatabaseEntity bizKnowledgeDatabaseEntity = BizKnowledgeDatabaseConvert.dtoToEntity(dto);
bizKnowledgeDatabaseEntity.setMemberId(userId.intValue());
BizKnowledgeDatabaseEntity saveEntity = bizKnowledgeDatabaseService.save(bizKnowledgeDatabaseEntity);
if (saveEntity == null) {
throw new BusinessException("create database error");
}
return BizKnowledgeDatabaseConvert.entityToDto(saveEntity);
}
@Override
public DatabaseTestContentDto testConnection(BizKnowledgeDatabaseDto dto) {
Assert.notBlank(dto.getDbHost(), "Database Host must not be blank");
Assert.notNull(dto.getDbPort(), "Database Port must not be blank");
Assert.notBlank(dto.getDbName(), "Database Name must not be blank");
Assert.notBlank(dto.getDbUsername(), "Database Username must not be blank");
Assert.notBlank(dto.getDbPassword(), "Database Password must not be blank");
boolean connect = DatabaseUtil.testConnect(dto.getDbHost(), dto.getDbPort(), dto.getDbName(), dto.getDbUsername(), dto.getDbPassword());
DatabaseTestContentDto result = new DatabaseTestContentDto();
result.setStatus(connect ? "success" : "fail");
return result;
}
@Override
public BizKnowledgeDatabaseDto get(Integer id) {
Assert.notNull(id, "id can not be null");
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
Long userId = userBaseEntity.getUserId();
BizKnowledgeDatabaseEntity bizKnowledgeDatabaseEntity = bizKnowledgeDatabaseService.get(id.longValue());
if (bizKnowledgeDatabaseEntity == null && !bizKnowledgeDatabaseEntity.getMemberId().equals(userId.intValue())) {
throw new BusinessException("no database found");
}
return BizKnowledgeDatabaseConvert.entityToDto(bizKnowledgeDatabaseEntity);
}
@Override
public List<BizKnowledgeDatabaseDto> getList(KnowledgeDatabaseSearchDto knowledgeDatabaseSearchDto, PagingInfo pagingInfo) {
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
Long userId = userBaseEntity.getUserId();
KnowledgeDatabaseQueryInfoQueryCondition condition = new KnowledgeDatabaseQueryInfoQueryCondition();
condition.setMemberId(userId.intValue());
if (StringUtils.isNotBlank(knowledgeDatabaseSearchDto.getSearch())) {
condition.setSearch(knowledgeDatabaseSearchDto.getSearch());
}
List<KnowledgeDatabaseQueryInfoQueryItem> items = bizKnowledgeDatabaseService.queryKnowledgeDatabaseQueryInfo(condition, pagingInfo);
List<BizKnowledgeDatabaseDto> result = new ArrayList<>();
if (CollectionUtils.isNotEmpty(items)) {
result = items.stream().map(BizKnowledgeDatabaseConvert::itemToDto).collect(Collectors.toList());
}
return result;
}
@Override
public boolean delete(Integer id) {
Assert.notNull(id, "id can not be null");
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
Long userId = userBaseEntity.getUserId();
BizKnowledgeDatabaseEntity entity = bizKnowledgeDatabaseService.get(id.longValue());
if (entity == null) {
return false;
}
if (!entity.getMemberId().equals(userId.intValue())) {
throw new BusinessException("no permission");
}
bizKnowledgeDatabaseService.deletedById(id.longValue());
return true;
}
@Override
public BizKnowledgeDatabaseDto update(BizKnowledgeDatabaseDto dto) {
Assert.notNull(dto, "response can not be null");
Assert.notNull(dto.getId(), "id can not be null");
BizKnowledgeDatabaseEntity bizKnowledgeDatabaseEntity = BizKnowledgeDatabaseConvert.dtoToEntity(dto);
BizKnowledgeDatabaseEntity updateEntity = bizKnowledgeDatabaseService.update(bizKnowledgeDatabaseEntity);
if (updateEntity == null) {
throw new BusinessException("update database info error");
}
return BizKnowledgeDatabaseConvert.entityToDto(updateEntity);
}
}
\ No newline at end of file
package cn.com.poc.knowledge.service;
import cn.com.poc.knowledge.entity.BizKnowledgeDatabaseEntity;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryCondition;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryItem;
import cn.com.yict.framemax.core.service.BaseService;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.List;
public interface BizKnowledgeDatabaseService extends BaseService {
BizKnowledgeDatabaseEntity get(java.lang.Long id);
List<BizKnowledgeDatabaseEntity> findByExample(BizKnowledgeDatabaseEntity example, PagingInfo pagingInfo) throws Exception;
BizKnowledgeDatabaseEntity save(BizKnowledgeDatabaseEntity entity);
BizKnowledgeDatabaseEntity update(BizKnowledgeDatabaseEntity entity);
void deletedById(java.lang.Long id);
List<KnowledgeDatabaseQueryInfoQueryItem> queryKnowledgeDatabaseQueryInfo(KnowledgeDatabaseQueryInfoQueryCondition condition, PagingInfo pagingInfo);
Integer[] checkIsExist(Integer[] ids, Integer memberId);
}
\ No newline at end of file
package cn.com.poc.knowledge.service.impl;
import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.knowledge.convert.BizKnowledgeDatabaseConvert;
import cn.com.poc.knowledge.entity.BizKnowledgeDatabaseEntity;
import cn.com.poc.knowledge.model.BizKnowledgeDatabaseModel;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryCondition;
import cn.com.poc.knowledge.query.KnowledgeDatabaseQueryInfoQueryItem;
import cn.com.poc.knowledge.repository.BizKnowledgeDatabaseRepository;
import cn.com.poc.knowledge.service.BizKnowledgeDatabaseService;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class BizKnowledgeDatabaseServiceImpl extends BaseServiceImpl
implements BizKnowledgeDatabaseService {
@Resource
private BizKnowledgeDatabaseRepository repository;
public BizKnowledgeDatabaseEntity get(java.lang.Long id) {
Assert.notNull(id);
BizKnowledgeDatabaseModel model = this.repository.get(id);
if (model == null) {
return null;
}
if (CommonConstant.IsDeleted.Y.equals(model.getIsDeleted())) {
return null;
}
return BizKnowledgeDatabaseConvert.modelToEntity(model);
}
public List<BizKnowledgeDatabaseEntity> findByExample(BizKnowledgeDatabaseEntity example, PagingInfo pagingInfo) throws Exception {
List<BizKnowledgeDatabaseEntity> result = new ArrayList<BizKnowledgeDatabaseEntity>();
BizKnowledgeDatabaseModel model = new BizKnowledgeDatabaseModel();
if (example != null) {
model = BizKnowledgeDatabaseConvert.entityToModel(example);
}
model.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizKnowledgeDatabaseModel> models = this.repository.findByExample(model, pagingInfo);
if (CollectionUtils.isNotEmpty(models)) {
result = models.stream().map(BizKnowledgeDatabaseConvert::modelToEntity).collect(Collectors.toList());
}
return result;
}
public BizKnowledgeDatabaseEntity save(BizKnowledgeDatabaseEntity entity) {
Assert.notNull(entity);
entity.setId(null);
entity.setIsDeleted(CommonConstant.IsDeleted.N);
BizKnowledgeDatabaseModel model = BizKnowledgeDatabaseConvert.entityToModel(entity);
BizKnowledgeDatabaseModel saveModel = this.repository.save(model);
return BizKnowledgeDatabaseConvert.modelToEntity(saveModel);
}
public BizKnowledgeDatabaseEntity update(BizKnowledgeDatabaseEntity entity) {
Assert.notNull(entity);
Assert.notNull(entity.getId(), "update pk can not be null");
BizKnowledgeDatabaseModel model = this.repository.get(entity.getId());
if (entity.getMemberId() != null) {
model.setMemberId(entity.getMemberId());
}
if (entity.getTitle() != null) {
model.setTitle(entity.getTitle());
}
if (entity.getDesc() != null) {
model.setDesc(entity.getDesc());
}
if (entity.getDbType() != null) {
model.setDbType(entity.getDbType());
}
if (entity.getDbHost() != null) {
model.setDbHost(entity.getDbHost());
}
if (entity.getDbPort() != null) {
model.setDbPort(entity.getDbPort());
}
if (entity.getDbName() != null) {
model.setDbName(entity.getDbName());
}
if (entity.getDbUsername() != null) {
model.setDbUsername(entity.getDbUsername());
}
if (entity.getDbPassword() != null) {
model.setDbPassword(entity.getDbPassword());
}
if (entity.getIsDeleted() != null) {
model.setIsDeleted(entity.getIsDeleted());
}
if (entity.getCreator() != null) {
model.setCreator(entity.getCreator());
}
if (entity.getCreatedTime() != null) {
model.setCreatedTime(entity.getCreatedTime());
}
if (entity.getModifier() != null) {
model.setModifier(entity.getModifier());
}
if (entity.getModifiedTime() != null) {
model.setModifiedTime(entity.getModifiedTime());
}
if (entity.getSysVersion() != null) {
model.setSysVersion(entity.getSysVersion());
}
BizKnowledgeDatabaseModel saveModel = this.repository.save(model);
return BizKnowledgeDatabaseConvert.modelToEntity(saveModel);
}
public void deletedById(java.lang.Long id) {
Assert.notNull(id);
BizKnowledgeDatabaseModel model = this.repository.get(id);
if (model != null) {
if (CommonConstant.IsDeleted.N.equals(model.getIsDeleted())) {
model.setIsDeleted(CommonConstant.IsDeleted.Y);
this.repository.save(model);
}
}
}
@Override
public List<KnowledgeDatabaseQueryInfoQueryItem> queryKnowledgeDatabaseQueryInfo(KnowledgeDatabaseQueryInfoQueryCondition condition, PagingInfo pagingInfo) {
return this.sqlDao.query(condition, KnowledgeDatabaseQueryInfoQueryItem.class, pagingInfo);
}
@Override
public Integer[] checkIsExist(Integer[] ids, Integer memberId) {
List<Integer> result = new ArrayList<>();
for (Integer id : ids) {
BizKnowledgeDatabaseModel bizKnowledgeDatabaseModel = this.repository.get(id.longValue());
if (bizKnowledgeDatabaseModel == null
|| CommonConstant.IsDeleted.Y.equals(bizKnowledgeDatabaseModel.getIsDeleted())
|| !bizKnowledgeDatabaseModel.getMemberId().equals(memberId)) {
continue;
}
result.add(id);
}
return result.toArray(new Integer[0]);
}
}
\ No newline at end of file
package cn.com.poc.thirdparty.resource.demand.ai.aggregate;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
......@@ -32,4 +34,10 @@ public interface AIDialogueService {
* 判断是否需要Function Call
*/
FunctionCallResult functionCall(FunctionCallResponse response);
/**
* 调用DB_CHAIN 接口
*/
DBChainResult dbChain(DBChainResponse response);
}
......@@ -2,6 +2,8 @@ package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResponse;
......@@ -87,6 +89,18 @@ public class AIDialogueServiceImpl implements AIDialogueService {
return dgToolsAbstractHttpClient.doRequest(url, response, headers);
}
@Override
public DBChainResult dbChain(DBChainResponse response) {
String url = DgtoolsApiRoute.DgtoolsAI.DATABASE_CHAIN;
response.setApiKey(API_KEY);
List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiRoute.AI_HEADER);
add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}};
return dgToolsAbstractHttpClient.doRequest(url, response, headers);
}
private BufferedReader largeModelStream(LargeModelDemandResponse request) throws IOException {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault();
......
package cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain;
import cn.com.poc.thirdparty.resource.demand.dgTools.request.AbstractRequest;
import java.io.Serializable;
import java.util.List;
/**
* @author alex.yao
* @date 2025/4/27
*/
public class DBChainResponse extends AbstractRequest<DBChainResult> implements Serializable {
private String question;
private String prompt;
private List<String> tableFilters;
private String mysqlUser;
private String mysqlPassword;
private String mysqlHost;
private Integer mysqlPort;
private String mysqlDatabase;
private String apiKey;
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public String getPrompt() {
return prompt;
}
public void setPrompt(String prompt) {
this.prompt = prompt;
}
public List<String> getTableFilters() {
return tableFilters;
}
public void setTableFilters(List<String> tableFilters) {
this.tableFilters = tableFilters;
}
public String getMysqlUser() {
return mysqlUser;
}
public void setMysqlUser(String mysqlUser) {
this.mysqlUser = mysqlUser;
}
public String getMysqlPassword() {
return mysqlPassword;
}
public void setMysqlPassword(String mysqlPassword) {
this.mysqlPassword = mysqlPassword;
}
public String getMysqlHost() {
return mysqlHost;
}
public void setMysqlHost(String mysqlHost) {
this.mysqlHost = mysqlHost;
}
public Integer getMysqlPort() {
return mysqlPort;
}
public void setMysqlPort(Integer mysqlPort) {
this.mysqlPort = mysqlPort;
}
public String getMysqlDatabase() {
return mysqlDatabase;
}
public void setMysqlDatabase(String mysqlDatabase) {
this.mysqlDatabase = mysqlDatabase;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
@Override
public String getMethod() throws Exception {
return null;
}
@Override
public String toString() {
return "DBChainResponse{" +
"question='" + question + '\'' +
", prompt='" + prompt + '\'' +
", tableFilters=" + tableFilters +
", mysqlUser='" + mysqlUser + '\'' +
", mysqlPassword='" + mysqlPassword + '\'' +
", mysqlHost='" + mysqlHost + '\'' +
", mysqlPort=" + mysqlPort +
", mysqlDatabase='" + mysqlDatabase + '\'' +
", apiKey='" + apiKey + '\'' +
'}';
}
}
package cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain;
import cn.com.poc.thirdparty.resource.demand.dgTools.result.AbstractResult;
import java.io.Serializable;
/**
* @author alex.yao
* @date 2025/4/24
*/
public class DBChainResult extends AbstractResult implements Serializable {
private String sql;
private String sqlResult;
private String result;
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
public String getSqlResult() {
return sqlResult;
}
public void setSqlResult(String sqlResult) {
this.sqlResult = sqlResult;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel;
import cn.com.poc.agent_application.entity.KnowledgeContentResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ToolFunction;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Usage;
import cn.com.poc.thirdparty.resource.demand.dgTools.result.AbstractResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ToolFunction;
import java.io.Serializable;
import java.util.List;
......@@ -18,12 +19,22 @@ public class LargeModelDemandResult extends AbstractResult implements Serializab
private ToolFunction function;
private List<DBChainResult> dbChainResult;
private List<KnowledgeContentResult> knowledgeContentResult;
private String finish_reason;
private Usage usage;
public List<DBChainResult> getDbChainResult() {
return dbChainResult;
}
public void setDbChainResult(List<DBChainResult> dbChainResult) {
this.dbChainResult = dbChainResult;
}
public List<KnowledgeContentResult> getKnowledgeContentResult() {
return knowledgeContentResult;
}
......
......@@ -286,6 +286,11 @@ public interface DgtoolsApiRoute {
* Function Call 判断,判断是否需要Function Call
*/
String FUNCTION_CALL = "largeModelRest/functionCall.json";
/**
* DB_CHAIN 调用
*/
String DATABASE_CHAIN = "largeModelRest/dbChain.json";
}
interface ClickHouse {
......
package cn.com.poc.thirdparty.service;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
/**
* @author alex.yao
* @date 2025/4/27
*/
public interface ChainService {
DBChainResult dbChain(DBChainResponse response);
}
package cn.com.poc.thirdparty.service.impl;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dbchain.DBChainResult;
import cn.com.poc.thirdparty.service.ChainService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author alex.yao
* @date 2025/4/27
*/
@Service
public class ChainServiceImpl implements ChainService {
private Logger logger = LoggerFactory.getLogger(ChainServiceImpl.class);
@Resource
private AIDialogueService aiDialogueService;
@Override
public DBChainResult dbChain(DBChainResponse response) {
logger.info("dbChain response : {}", response);
return aiDialogueService.dbChain(response);
}
}
package cn.com.poc.utils;
import cn.com.poc.common.utils.DatabaseUtil;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
/**
* @author alex.yao
* @date 2025/4/27
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class DatabaseUtilTest {
@Test
public void test_connection() {
String host = "192.168.21.31";
int port = 3306;
String username = "poc_root";
String password = "8dlb58a2836dc...";
String database = "gsst_poc_sit";
System.out.println(DatabaseUtil.testConnect(host, port, username, password, database));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment