|
...
|
...
|
@@ -2,6 +2,7 @@ package org.jeecg.modules.airag.app.mapper; |
|
|
|
|
|
|
|
import cn.hutool.core.lang.generator.SnowflakeGenerator;
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
...
|
...
|
@@ -38,22 +39,93 @@ public class QuestionEmbeddingMapper { |
|
|
|
}
|
|
|
|
|
|
|
|
// 查询所有记录
|
|
|
|
public List<QuestionEmbedding> findAll(QuestionEmbedding questionEmbedding) {
|
|
|
|
public Page<QuestionEmbedding> findAll(QuestionEmbedding questionEmbedding, int pageNo, int pageSize) {
|
|
|
|
List<QuestionEmbedding> results = new ArrayList<>();
|
|
|
|
StringBuilder sql = new StringBuilder("select * from question_embedding where 1 = 1");
|
|
|
|
StringBuilder countSql = new StringBuilder("select count(1) from question_embedding where 1 = 1");
|
|
|
|
List<Object> params = new ArrayList<>();
|
|
|
|
List<Object> countParams = new ArrayList<>();
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(questionEmbedding.getKnowledgeId())) {
|
|
|
|
sql.append(" AND metadata ->> 'knowledgeId' = ?");
|
|
|
|
countSql.append(" AND metadata ->> 'knowledgeId' = ?");
|
|
|
|
params.add(questionEmbedding.getKnowledgeId());
|
|
|
|
countParams.add(questionEmbedding.getKnowledgeId());
|
|
|
|
}
|
|
|
|
if(StringUtils.isNotBlank(questionEmbedding.getQuestion())){
|
|
|
|
sql.append(" and question like '%").append(questionEmbedding.getQuestion()).append("%'");
|
|
|
|
sql.append(" AND question ILIKE ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
countSql.append(" AND question ILIKE ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
params.add("%" + questionEmbedding.getQuestion() + "%");
|
|
|
|
countParams.add("%" + questionEmbedding.getQuestion() + "%");
|
|
|
|
}
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(questionEmbedding.getAnswer())){
|
|
|
|
sql.append(" and answer like '%").append(questionEmbedding.getAnswer()).append("%'");
|
|
|
|
sql.append(" AND answer ILIKE ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
countSql.append(" AND answer ILIKE ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
params.add("%" + questionEmbedding.getAnswer() + "%");
|
|
|
|
countParams.add("%" + questionEmbedding.getAnswer() + "%");
|
|
|
|
}
|
|
|
|
|
|
|
|
// 添加分页
|
|
|
|
sql.append(" LIMIT ? OFFSET ?");
|
|
|
|
params.add(pageSize);
|
|
|
|
params.add((pageNo - 1) * pageSize);
|
|
|
|
|
|
|
|
|
|
|
|
try(Connection conn = getConnection();
|
|
|
|
PreparedStatement stmt = conn.prepareStatement(sql.toString())){
|
|
|
|
// 设置参数值
|
|
|
|
for (int i = 0; i < params.size(); i++) {
|
|
|
|
stmt.setObject(i + 1, params.get(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
try (ResultSet rs = stmt.executeQuery()) {
|
|
|
|
while (rs.next()) {
|
|
|
|
results.add(mapRowToQuestionEmbedding(rs));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (SQLException e) {
|
|
|
|
log.error("查询所有记录失败", e);
|
|
|
|
throw new RuntimeException("查询数据时发生数据库错误", e);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 执行计数查询
|
|
|
|
long total = 0;
|
|
|
|
try(Connection conn = getConnection();
|
|
|
|
PreparedStatement stmt = conn.prepareStatement(countSql.toString())){
|
|
|
|
// 设置参数值
|
|
|
|
for (int i = 0; i < countParams.size(); i++) {
|
|
|
|
stmt.setObject(i + 1, countParams.get(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
try (ResultSet rs = stmt.executeQuery()) {
|
|
|
|
if (rs.next()) {
|
|
|
|
total = rs.getLong(1); // 直接获取count值
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (SQLException e) {
|
|
|
|
log.error("查询记录总数失败", e);
|
|
|
|
throw new RuntimeException("查询记录总数时发生数据库错误", e);
|
|
|
|
}
|
|
|
|
|
|
|
|
Page<QuestionEmbedding> page = new Page<>();
|
|
|
|
page.setRecords(results);
|
|
|
|
page.setTotal(total);
|
|
|
|
return page;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询所有记录
|
|
|
|
public List<QuestionEmbedding> findQuestion(QuestionEmbedding questionEmbedding) {
|
|
|
|
List<QuestionEmbedding> results = new ArrayList<>();
|
|
|
|
StringBuilder sql = new StringBuilder("select * from question_embedding where 1 = 1");
|
|
|
|
List<Object> params = new ArrayList<>();
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(questionEmbedding.getQuestion())){
|
|
|
|
sql.append(" AND question = ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
params.add(questionEmbedding.getQuestion());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try(Connection conn = getConnection();
|
|
|
|
PreparedStatement stmt = conn.prepareStatement(sql.toString())){
|
|
|
|
// 设置参数值
|
|
...
|
...
|
@@ -70,6 +142,8 @@ public class QuestionEmbeddingMapper { |
|
|
|
log.error("查询所有记录失败", e);
|
|
|
|
throw new RuntimeException("查询数据时发生数据库错误", e);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return results;
|
|
|
|
}
|
|
|
|
|
...
|
...
|
|