feat: 切换管理端聊天记录至智能体会话

- 管理端固定筛选 Agent 会话并拒绝旧 Bot 历史访问

- 筛选候选及页面语义切换为智能体并补充前后端回归测试
This commit is contained in:
2026-07-21 18:55:11 +08:00
parent f658f120e6
commit 9436cc5397
8 changed files with 414 additions and 21 deletions

View File

@@ -5,9 +5,13 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigInteger;
import java.util.Date;
/**
* 管理端聊天会话筛选条件。
*/
public class ChatSessionFilterQuery extends ChatPageQuery {
private BigInteger assistantId;
private String assistantCode;
private BigInteger userId;
private String userAccount;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -15,42 +19,110 @@ public class ChatSessionFilterQuery extends ChatPageQuery {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
/**
* 获取助手 ID。
*
* @return 助手 ID
*/
public BigInteger getAssistantId() {
return assistantId;
}
/**
* 设置助手 ID。
*
* @param assistantId 助手 ID
*/
public void setAssistantId(BigInteger assistantId) {
this.assistantId = assistantId;
}
/**
* 获取助手类型编码。
*
* @return 助手类型编码
*/
public String getAssistantCode() {
return assistantCode;
}
/**
* 设置助手类型编码。
*
* @param assistantCode 助手类型编码
*/
public void setAssistantCode(String assistantCode) {
this.assistantCode = assistantCode;
}
/**
* 获取用户 ID。
*
* @return 用户 ID
*/
public BigInteger getUserId() {
return userId;
}
/**
* 设置用户 ID。
*
* @param userId 用户 ID
*/
public void setUserId(BigInteger userId) {
this.userId = userId;
}
/**
* 获取用户账号筛选值。
*
* @return 用户账号筛选值
*/
public String getUserAccount() {
return userAccount;
}
/**
* 设置用户账号筛选值。
*
* @param userAccount 用户账号筛选值
*/
public void setUserAccount(String userAccount) {
this.userAccount = userAccount;
}
/**
* 获取开始时间。
*
* @return 开始时间
*/
public Date getStartTime() {
return startTime;
}
/**
* 设置开始时间。
*
* @param startTime 开始时间
*/
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
/**
* 获取结束时间。
*
* @return 结束时间
*/
public Date getEndTime() {
return endTime;
}
/**
* 设置结束时间。
*
* @param endTime 结束时间
*/
public void setEndTime(Date endTime) {
this.endTime = endTime;
}

View File

@@ -732,6 +732,10 @@ public class ChatAnalyticalDBRepository {
if (query == null) {
return;
}
if (StringUtils.hasText(query.getAssistantCode())) {
sql.append(" AND assistant_code=?");
args.add(query.getAssistantCode().trim());
}
if (query.getAssistantId() != null) {
sql.append(" AND assistant_id=?");
args.add(query.getAssistantId());

View File

@@ -21,6 +21,8 @@ import java.math.BigInteger;
@Service
public class ChatHistoryManageServiceImpl implements ChatHistoryManageService {
private static final String ADMIN_ASSISTANT_CODE = "AGENT";
private final ChatSessionQueryService chatSessionQueryService;
private final ChatSessionCommandService chatSessionCommandService;
private final ChatHistoryQueryService chatHistoryQueryService;
@@ -46,7 +48,10 @@ public class ChatHistoryManageServiceImpl implements ChatHistoryManageService {
@Override
public ChatSessionPage queryAdminSessions(ChatSessionFilterQuery query) {
return chatAnalyticalDBRepository.pageSessions(query);
ChatSessionFilterQuery effectiveQuery = query == null ? new ChatSessionFilterQuery() : query;
// 管理端聊天历史已经切换为 Agent 专属入口,类型由服务端固定,避免客户端绕过。
effectiveQuery.setAssistantCode(ADMIN_ASSISTANT_CODE);
return chatAnalyticalDBRepository.pageSessions(effectiveQuery);
}
@Override
@@ -64,8 +69,10 @@ public class ChatHistoryManageServiceImpl implements ChatHistoryManageService {
@Override
public ChatSessionSummary getAdminSession(BigInteger sessionId) {
ChatSessionSummary summary = chatAnalyticalDBRepository.getSession(sessionId);
if (summary == null || summary.getIsDeleted() != null && summary.getIsDeleted() == 1) {
throw new BusinessException("会话不存在");
if (summary == null
|| Integer.valueOf(1).equals(summary.getIsDeleted())
|| !ADMIN_ASSISTANT_CODE.equals(summary.getAssistantCode())) {
throw new BusinessException("Agent 会话不存在");
}
return summary;
}