ai聊天功能搭建
parent
988d790ae4
commit
7e82814906
@ -0,0 +1,66 @@
|
|||||||
|
package com.example.venue_reservation_service.controller;
|
||||||
|
|
||||||
|
import com.example.venue_reservation_service.domain.VeMessage;
|
||||||
|
import com.example.venue_reservation_service.domain.VeSession;
|
||||||
|
import com.example.venue_reservation_service.service.VeMessageService;
|
||||||
|
import com.example.venue_reservation_service.service.VeSessionService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/session")
|
||||||
|
@Api("ai会话管理模块")
|
||||||
|
@CrossOrigin
|
||||||
|
public class SessionController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VeSessionService sessionService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VeMessageService messageService;
|
||||||
|
|
||||||
|
@ApiOperation("创建新会话")
|
||||||
|
@PostMapping("/create")
|
||||||
|
public ResponseEntity<VeSession> createSession(@RequestBody VeSession session) {
|
||||||
|
VeSession savedSession = sessionService.saveSession(session);
|
||||||
|
return ResponseEntity.status(HttpStatus.CREATED).body(savedSession);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取用户会话历史")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public ResponseEntity<List<VeSession>> getUserSessions(@RequestParam(name = "userId") Integer userId) {
|
||||||
|
List<VeSession> sessions = sessionService.getSessionsByUserId(userId);
|
||||||
|
return ResponseEntity.ok(sessions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取会话详情")
|
||||||
|
@GetMapping("/{sessionId}")
|
||||||
|
public ResponseEntity<VeSession> getSession(@PathVariable("sessionId") Integer sessionId) {
|
||||||
|
VeSession session = sessionService.getById(sessionId);
|
||||||
|
if (session != null) {
|
||||||
|
return ResponseEntity.ok(session);
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取指定会话的所有消息")
|
||||||
|
@GetMapping("/message/{sessionId}")
|
||||||
|
public ResponseEntity<List<VeMessage>> getSessionMessages(@PathVariable("sessionId") Integer sessionId) {
|
||||||
|
List<VeMessage> messages = messageService.getMessagesBySessionId(sessionId);
|
||||||
|
return ResponseEntity.ok(messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("创建新消息")
|
||||||
|
@PostMapping("/message/create")
|
||||||
|
public ResponseEntity<VeMessage> createMessage(@RequestBody VeMessage message) {
|
||||||
|
VeMessage savedMessage = messageService.saveMessage(message);
|
||||||
|
return ResponseEntity.status(HttpStatus.CREATED).body(savedMessage);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.example.venue_reservation_service.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @TableName venue_message
|
||||||
|
*/
|
||||||
|
@TableName(value ="venue_message")
|
||||||
|
@Data
|
||||||
|
public class VeMessage implements Serializable {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属会话ID
|
||||||
|
*/
|
||||||
|
private Integer sessionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息内容
|
||||||
|
*/
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送者类型
|
||||||
|
*/
|
||||||
|
private Object sender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.example.venue_reservation_service.mapper;
|
||||||
|
|
||||||
|
import com.example.venue_reservation_service.domain.VeMessage;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_message】的数据库操作Mapper
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
* @Entity generator.domain.VeMessage
|
||||||
|
*/
|
||||||
|
public interface VeMessageMapper extends BaseMapper<VeMessage> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.example.venue_reservation_service.mapper;
|
||||||
|
|
||||||
|
import com.example.venue_reservation_service.domain.VeSession;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
|
import org.apache.ibatis.annotations.Options;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_session】的数据库操作Mapper
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
* @Entity generator.domain.VeSession
|
||||||
|
*/
|
||||||
|
public interface VeSessionMapper extends BaseMapper<VeSession> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.example.venue_reservation_service.service;
|
||||||
|
|
||||||
|
import com.example.venue_reservation_service.domain.VeMessage;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_message】的数据库操作Service
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
*/
|
||||||
|
public interface VeMessageService extends IService<VeMessage> {
|
||||||
|
|
||||||
|
VeMessage saveMessage(VeMessage message);
|
||||||
|
|
||||||
|
List<VeMessage> getMessagesBySessionId(Integer sessionId);
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.example.venue_reservation_service.service;
|
||||||
|
|
||||||
|
import com.example.venue_reservation_service.domain.VeSession;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_session】的数据库操作Service
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
*/
|
||||||
|
public interface VeSessionService extends IService<VeSession> {
|
||||||
|
|
||||||
|
VeSession saveSession(VeSession session);
|
||||||
|
|
||||||
|
List<VeSession> getSessionsByUserId(Integer userId);
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.example.venue_reservation_service.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.example.venue_reservation_service.domain.VeMessage;
|
||||||
|
import com.example.venue_reservation_service.service.VeMessageService;
|
||||||
|
import com.example.venue_reservation_service.mapper.VeMessageMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_message】的数据库操作Service实现
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class VeMessageServiceImpl extends ServiceImpl<VeMessageMapper, VeMessage>
|
||||||
|
implements VeMessageService{
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VeMessageMapper messageMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VeMessage saveMessage(VeMessage message) {
|
||||||
|
message.setCreatedAt(LocalDateTime.now());
|
||||||
|
messageMapper.insert(message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VeMessage> getMessagesBySessionId(Integer sessionId) {
|
||||||
|
QueryWrapper<VeMessage> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("session_id", sessionId)
|
||||||
|
.orderByAsc("created_at");
|
||||||
|
return messageMapper.selectList(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
package com.example.venue_reservation_service.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.UUID;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.example.venue_reservation_service.service.VeSessionService;
|
||||||
|
import com.example.venue_reservation_service.domain.VeSession;
|
||||||
|
import com.example.venue_reservation_service.mapper.VeSessionMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 31586
|
||||||
|
* @description 针对表【venue_session】的数据库操作Service实现
|
||||||
|
* @createDate 2025-06-17 15:36:33
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class VeSessionServiceImpl extends ServiceImpl<VeSessionMapper, VeSession>
|
||||||
|
implements VeSessionService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private VeSessionMapper sessionMapper;
|
||||||
|
|
||||||
|
public VeSession saveSession(VeSession session) {
|
||||||
|
session.setStartTime(LocalDateTime.now());
|
||||||
|
if (StringUtils.isEmpty(session.getSessionToken())) {
|
||||||
|
session.setSessionToken("sess_" + UUID.randomUUID());
|
||||||
|
}
|
||||||
|
sessionMapper.insert(session);
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<VeSession> getSessionsByUserId(Integer userId) {
|
||||||
|
QueryWrapper<VeSession> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("user_id", userId)
|
||||||
|
.orderByDesc("start_time");
|
||||||
|
return sessionMapper.selectList(queryWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.example.venue_reservation_service.mapper.VeMessageMapper">
|
||||||
|
|
||||||
|
<resultMap id="BaseResultMap" type="com.example.venue_reservation_service.domain.VeMessage">
|
||||||
|
<id property="id" column="id" jdbcType="INTEGER"/>
|
||||||
|
<result property="sessionId" column="session_id" jdbcType="INTEGER"/>
|
||||||
|
<result property="content" column="content" jdbcType="VARCHAR"/>
|
||||||
|
<result property="sender" column="sender" jdbcType="OTHER"/>
|
||||||
|
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
id,session_id,content,
|
||||||
|
sender,created_at
|
||||||
|
</sql>
|
||||||
|
</mapper>
|
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.example.venue_reservation_service.mapper.VeSessionMapper">
|
||||||
|
|
||||||
|
<resultMap id="BaseResultMap" type="com.example.venue_reservation_service.domain.VeSession">
|
||||||
|
<id property="id" column="id" jdbcType="INTEGER"/>
|
||||||
|
<result property="userId" column="user_id" jdbcType="INTEGER"/>
|
||||||
|
<result property="userIp" column="user_ip" jdbcType="VARCHAR"/>
|
||||||
|
<result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
|
||||||
|
<result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
|
||||||
|
<result property="sessionToken" column="session_token" jdbcType="VARCHAR"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
id,user_id,user_ip,
|
||||||
|
start_time,end_time,session_token
|
||||||
|
</sql>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue