Commit ce52568b authored by alex yao's avatar alex yao

feat: database数据表查询

parent 4652b4fc
......@@ -226,9 +226,7 @@ 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()));
}
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
if (StringUtils.isNotBlank(entity.getKnowledgeSearchType())) {
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
}
......
......@@ -182,9 +182,7 @@ 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()));
}
model.setKnowledgeDatabaseIds(JsonUtils.serialize(entity.getKnowledgeDatabaseIds()));
if (StringUtils.isNotBlank(entity.getKnowledgeSearchType())) {
model.setKnowledgeSearchType(entity.getKnowledgeSearchType());
}
......
......@@ -76,11 +76,10 @@ public class DatabaseUtil {
tableInfo.setTABLE_COLUMN(resultSet.getInt("TABLE_COLUMN"));
tableInfoList.add(tableInfo);
}
System.out.println(tableInfoList);
return tableInfoList;
} catch (Exception e) {
logger.error("连接数据库失败", e);
throw new BusinessException("连接数据库失败");
return null;
}
}
......
package cn.com.poc.knowledge.cache;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.DatabaseUtil;
import cn.com.poc.common.utils.SpringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* @author alex.yao
* @date 2025/4/29
*/
public class DatabaseTableInfoCache {
private static Logger logger = LoggerFactory.getLogger(DatabaseTableInfoCache.class);
private static final String prefix = "KNOWLEDGE_DATABASE_TABLE_INFO:";
private static Long expireTime = 30 * 24 * 60 * 60L;
public static boolean updateOrSaveCache(int id, List<DatabaseUtil.TableInfo> tableInfos) {
logger.info("updateOrSaveCache id:{},tableInfos:{}", id, tableInfos);
RedisService redisService = SpringUtils.getBean(RedisService.class);
return redisService.set(prefix + id, tableInfos, expireTime);
}
public static List<DatabaseUtil.TableInfo> getCache(int id) {
RedisService redisService = SpringUtils.getBean(RedisService.class);
if (redisService.hasKey(prefix + id)) {
return (List<DatabaseUtil.TableInfo>) redisService.get(prefix + id);
}
return null;
}
}
package cn.com.poc.knowledge.dto;
import cn.com.poc.common.utils.DatabaseUtil;
import java.util.List;
public class BizKnowledgeDatabaseDto {
private static final long serialVersionUID = 1L;
......@@ -157,4 +161,19 @@ public class BizKnowledgeDatabaseDto {
public void setModifiedTime(java.util.Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
/**
* tableInfos
* 数据库表信息
*/
private List<DatabaseUtil.TableInfo> tableInfos;
public List<DatabaseUtil.TableInfo> getTableInfos() {
return tableInfos;
}
public void setTableInfos(List<DatabaseUtil.TableInfo> tableInfos) {
this.tableInfos = tableInfos;
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ 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.cache.DatabaseTableInfoCache;
import cn.com.poc.knowledge.convert.BizKnowledgeDatabaseConvert;
import cn.com.poc.knowledge.dto.BizDatabaseTableInfoDto;
import cn.com.poc.knowledge.dto.BizKnowledgeDatabaseDto;
......@@ -42,7 +43,11 @@ public class DatabaseRestImpl implements DatabaseRest {
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.getDbUsername(), dto.getDbPassword(), dto.getDbName());
List<DatabaseUtil.TableInfo> tableInfos = DatabaseUtil.getTableInfo(dto.getDbHost(), dto.getDbPort(), dto.getDbUsername(), dto.getDbPassword(), dto.getDbName());
if (!connect || tableInfos == null) {
throw new BusinessException("Database connection failed");
}
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
Long userId = userBaseEntity.getUserId();
BizKnowledgeDatabaseEntity bizKnowledgeDatabaseEntity = BizKnowledgeDatabaseConvert.dtoToEntity(dto);
......@@ -51,7 +56,7 @@ public class DatabaseRestImpl implements DatabaseRest {
if (saveEntity == null) {
throw new BusinessException("create database error");
}
DatabaseTableInfoCache.updateOrSaveCache(saveEntity.getId().intValue(), tableInfos);
return BizKnowledgeDatabaseConvert.entityToDto(saveEntity);
}
......@@ -78,7 +83,21 @@ public class DatabaseRestImpl implements DatabaseRest {
if (bizKnowledgeDatabaseEntity == null && !bizKnowledgeDatabaseEntity.getMemberId().equals(userId.intValue())) {
throw new BusinessException("no database found");
}
return BizKnowledgeDatabaseConvert.entityToDto(bizKnowledgeDatabaseEntity);
BizKnowledgeDatabaseDto bizKnowledgeDatabaseDto = BizKnowledgeDatabaseConvert.entityToDto(bizKnowledgeDatabaseEntity);
//获取表信息
List<DatabaseUtil.TableInfo> tableInfos = DatabaseTableInfoCache.getCache(id);
if (tableInfos == null) {
tableInfos = DatabaseUtil.getTableInfo(bizKnowledgeDatabaseEntity.getDbHost(),
bizKnowledgeDatabaseEntity.getDbPort(),
bizKnowledgeDatabaseEntity.getDbUsername(),
bizKnowledgeDatabaseEntity.getDbPassword(),
bizKnowledgeDatabaseEntity.getDbName());
if (tableInfos == null) {
throw new BusinessException("connection database error");
}
}
bizKnowledgeDatabaseDto.setTableInfos(tableInfos);
return bizKnowledgeDatabaseDto;
}
@Override
......@@ -92,7 +111,21 @@ public class DatabaseRestImpl implements DatabaseRest {
if (bizKnowledgeDatabaseEntity == null && !bizKnowledgeDatabaseEntity.getMemberId().equals(userId.intValue())) {
continue;
}
result.add(BizKnowledgeDatabaseConvert.entityToDto(bizKnowledgeDatabaseEntity));
BizKnowledgeDatabaseDto bizKnowledgeDatabaseDto = BizKnowledgeDatabaseConvert.entityToDto(bizKnowledgeDatabaseEntity);
//获取表信息
List<DatabaseUtil.TableInfo> tableInfos = DatabaseTableInfoCache.getCache(id);
if (tableInfos == null) {
tableInfos = DatabaseUtil.getTableInfo(bizKnowledgeDatabaseEntity.getDbHost(),
bizKnowledgeDatabaseEntity.getDbPort(),
bizKnowledgeDatabaseEntity.getDbUsername(),
bizKnowledgeDatabaseEntity.getDbPassword(),
bizKnowledgeDatabaseEntity.getDbName());
if (tableInfos == null) {
continue;
}
}
bizKnowledgeDatabaseDto.setTableInfos(tableInfos);
result.add(bizKnowledgeDatabaseDto);
}
return result;
}
......@@ -134,11 +167,25 @@ public class DatabaseRestImpl implements DatabaseRest {
public BizKnowledgeDatabaseDto update(BizKnowledgeDatabaseDto dto) {
Assert.notNull(dto, "response can not be null");
Assert.notNull(dto.getId(), "id can not be null");
boolean connect = DatabaseUtil.testConnect(dto.getDbHost(), dto.getDbPort(), dto.getDbUsername(), dto.getDbPassword(), dto.getDbName());
List<DatabaseUtil.TableInfo> tableInfos = DatabaseUtil.getTableInfo(dto.getDbHost(),
dto.getDbPort(),
dto.getDbUsername(),
dto.getDbPassword(),
dto.getDbName());
if (!connect || tableInfos == null) {
throw new BusinessException("Database connection failed");
}
BizKnowledgeDatabaseEntity bizKnowledgeDatabaseEntity = BizKnowledgeDatabaseConvert.dtoToEntity(dto);
BizKnowledgeDatabaseEntity updateEntity = bizKnowledgeDatabaseService.update(bizKnowledgeDatabaseEntity);
if (updateEntity == null) {
throw new BusinessException("update database info error");
}
DatabaseTableInfoCache.updateOrSaveCache(updateEntity.getId().intValue(), tableInfos);
return BizKnowledgeDatabaseConvert.entityToDto(updateEntity);
}
......@@ -160,6 +207,7 @@ public class DatabaseRestImpl implements DatabaseRest {
if (CollectionUtils.isEmpty(tableInfos)) {
throw new BusinessException("connection database error");
}
DatabaseTableInfoCache.updateOrSaveCache(id, tableInfos);
return tableInfos.stream().map(info -> {
BizDatabaseTableInfoDto dto = new BizDatabaseTableInfoDto();
dto.setTableName(info.getTABLE_NAME());
......
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