添加对话消息记录

This commit is contained in:
zk
2026-04-24 18:22:37 +08:00
parent e0c7c3dc54
commit 25824bac5a
6 changed files with 167 additions and 3 deletions
@@ -1,13 +1,18 @@
package org.jiayunet.controller;
import org.jiayunet.pojo.dto.jobAgent.ChatMessageDto;
import org.jiayunet.pojo.dto.jobAgent.JobAgentConfigDto;
import org.jiayunet.pojo.param.jobAgent.ChatMessageParam;
import org.jiayunet.pojo.param.jobAgent.JobAgentConfigParam;
import org.jiayunet.service.JobAgentConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 求职助手配置接口
* 求职助手接口
*
* @author zk
*/
@@ -33,4 +38,20 @@ public class JobAgentConfigController {
public void saveConfig(@RequestBody JobAgentConfigParam param) {
configService.saveConfig(param);
}
/**
* 添加对话消息
*/
@PostMapping("/chat/message")
public void addMessage(@Validated @RequestBody ChatMessageParam param) {
configService.addMessage(param);
}
/**
* 查询对话消息(最近N条,按时间正序)
*/
@GetMapping("/chat/messages")
public List<ChatMessageDto> listMessages(@RequestParam(defaultValue = "50") Integer limit) {
return configService.listMessages(limit);
}
}
@@ -0,0 +1,28 @@
package org.jiayunet.pojo.dto.jobAgent;
import lombok.Data;
import java.time.Instant;
/**
* 对话消息出参
*
* @author zk
*/
@Data
public class ChatMessageDto {
private Long id;
/** 消息类型:user / assistant / recommend / apply_progress */
private String type;
/** 文本内容 */
private String content;
/** 附加数据JSON */
private String extra;
/** 创建时间 */
private Instant createTime;
}
@@ -0,0 +1,24 @@
package org.jiayunet.pojo.param.jobAgent;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 对话消息添加入参
*
* @author zk
*/
@Data
public class ChatMessageParam {
/** 消息类型:user / assistant / recommend / apply_progress */
@NotBlank(message = "消息类型不能为空")
private String type;
/** 文本内容 */
private String content;
/** 附加数据JSON */
private String extra;
}
@@ -1,21 +1,28 @@
package org.jiayunet.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jiayunet.mapper.JobAgentConfigMapper;
import org.jiayunet.mapper.JobAgentChatMessageMapper;
import org.jiayunet.pojo.dto.jobAgent.JobAgentConfigDto;
import org.jiayunet.pojo.dto.jobAgent.ChatMessageDto;
import org.jiayunet.pojo.param.jobAgent.JobAgentConfigParam;
import org.jiayunet.pojo.param.jobAgent.ChatMessageParam;
import org.jiayunet.pojo.po.JobAgentConfig;
import org.jiayunet.pojo.po.JobAgentChatMessage;
import org.jiayunet.tool.UserSecurityTool;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.List;
import java.util.stream.Collectors;
/**
* 求职助手配置服务
* <p>主要功能:求职助手配置的查询和保存</p>
* <p>使用表:bg_job_agent_config(查询/新增/更新)</p>
* <p>主要功能:求职助手配置的查询和保存、对话消息的添加和查询</p>
* <p>使用表:bg_job_agent_config(查询/新增/更新)、bg_job_agent_chat_message(添加/查询)</p>
*
* @author zk
*/
@@ -25,6 +32,9 @@ public class JobAgentConfigService {
@Autowired
private JobAgentConfigMapper configMapper;
@Autowired
private JobAgentChatMessageMapper messageMapper;
/**
* 查询当前用户的求职助手配置
* <p>根据userId查询,不存在返回null</p>
@@ -62,4 +72,35 @@ public class JobAgentConfigService {
configMapper.updateById(po);
}
}
/**
* 添加对话消息
*/
public void addMessage(ChatMessageParam param) {
Long userId = UserSecurityTool.getUserId();
JobAgentChatMessage po = new JobAgentChatMessage();
po.setUserId(userId);
po.setType(param.getType());
po.setContent(param.getContent());
po.setExtra(param.getExtra());
po.setCreateTime(Instant.now());
messageMapper.insert(po);
}
/**
* 查询对话消息(最近N条,按时间正序)
*/
public List<ChatMessageDto> listMessages(Integer limit) {
Long userId = UserSecurityTool.getUserId();
if (limit == null || limit <= 0) limit = 50;
Page<JobAgentChatMessage> page = new Page<>(1, limit);
Page<JobAgentChatMessage> result = messageMapper.selectPage(page, new LambdaQueryWrapper<JobAgentChatMessage>().eq(JobAgentChatMessage::getUserId, userId).orderByDesc(JobAgentChatMessage::getCreateTime));
List<JobAgentChatMessage> records = result.getRecords();
java.util.Collections.reverse(records);
return records.stream().map(po -> {
ChatMessageDto dto = new ChatMessageDto();
BeanUtils.copyProperties(po, dto);
return dto;
}).collect(Collectors.toList());
}
}
@@ -0,0 +1,13 @@
package org.jiayunet.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.jiayunet.pojo.po.JobAgentChatMessage;
/**
* 求职助手对话消息Mapper
*
* @author zk
*/
@Mapper
public interface JobAgentChatMessageMapper extends CommonMapper<JobAgentChatMessage> {
}
@@ -0,0 +1,37 @@
package org.jiayunet.pojo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.Instant;
/**
* 求职助手对话消息表(bg_job_agent_chat_message
* <p>记录用户与求职助手的完整对话流,含文本消息和前端维护的JSON数据</p>
*
* @author zk
*/
@Data
@TableName(value = "bg_job_agent_chat_message")
public class JobAgentChatMessage {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 用户ID */
private Long userId;
/** 消息类型:user=用户提问 assistant=AI回复 recommend=岗位推荐 apply_progress=投递进度 */
private String type;
/** 文本内容。user=用户提问,assistant=AI回复,recommend=AI推荐描述,apply_progress为null */
private String content;
/** 附加数据JSON。recommend=岗位推荐列表,apply_progress=投递进度,user/assistant为null */
private String extra;
/** 创建时间 */
private Instant createTime;
}