Commit e0910118 authored by liming's avatar liming

聊天记录保存

parent 5acc3a4e
package com.antai.sport.http.server.game.api.business.sport.social.controller;
import com.antai.sport.http.server.common.annotation.LoginSportUser;
import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqChatHistoryQueryParam;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqChatMessage;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespChatHistory;
import com.antai.sport.http.server.game.api.business.sport.social.service.ChatService;
import com.antai.sport.http.server.repository.sport.entity.SportUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import static com.antai.sport.http.server.common.util.ResultUtil.success;
@RestController
@Api(tags = {"社交相关接口"})
@RequestMapping("/chat")
public class ChatController {
@Resource
private ChatService chatService;
@ApiOperation(value = "发送聊天信息", notes = "data中为聊天记录id")
@PostMapping("message")
public ResponseEntity<Result<Long>> sendMessage(@RequestBody ReqChatMessage message, @LoginSportUser SportUser loginUser) {
return success(chatService.sendMessage(message, loginUser));
}
@ApiOperation(value = "查询聊天记录")
@PostMapping("history")
public ResponseEntity<Result<List<RespChatHistory>>> getChatHistory(@RequestBody ReqChatHistoryQueryParam param) {
return success(chatService.getChatHistory(param));
}
}
......@@ -36,11 +36,10 @@ public class FriendsController {
return success(friendsService.getFriendsRequestToMe(loginUser));
}
@ApiOperation(value = "发送好友请求", notes = "当重复提交待确认好友申请或已经是好友时会报业务异常,应在前端展示")
@ApiOperation(value = "发送好友请求", notes = "data中为好友请求持久化Id,当重复提交待确认好友申请或已经是好友时会报业务异常,应在前端展示")
@GetMapping("/send/request/{targetUserId}")
public ResponseEntity<Result> sendFriendRequest(@PathVariable("targetUserId") Long targetUserId, @LoginSportUser SportUser loginUser) {
friendsService.sendFriendRequest(targetUserId, loginUser);
return success();
public ResponseEntity<Result<Long>> sendFriendRequest(@PathVariable("targetUserId") Long targetUserId, @LoginSportUser SportUser loginUser) {
return success(friendsService.sendFriendRequest(targetUserId, loginUser));
}
@ApiOperation(value = "响应好友请求")
......
package com.antai.sport.http.server.game.api.business.sport.social.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("聊天记录查询请求对象")
@Data
public class ReqChatHistoryQueryParam {
@ApiModelProperty("聊天室键值")
private String roomKey;
@ApiModelProperty("从哪条记录之后开始查询,传入 0 的话就取最新的")
private Long sinceId;
@ApiModelProperty("查询记录条数,传入0时默认20条")
private Integer querySize;
}
package com.antai.sport.http.server.game.api.business.sport.social.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("聊天信息")
@Data
public class ReqChatMessage {
@ApiModelProperty("接收人id:聊天室聊天可不填")
private Long receiverId;
@ApiModelProperty("聊天内容")
private String content;
@ApiModelProperty("聊天室key")
private String roomKey;
}
package com.antai.sport.http.server.game.api.business.sport.social.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel("聊天历史对象")
public class RespChatHistory {
@ApiModelProperty("消息Id")
private Long id;
@ApiModelProperty("发送者Id")
private Long senderId;
@ApiModelProperty("发送时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime time;
@ApiModelProperty("聊天内容")
private String content;
}
package com.antai.sport.http.server.game.api.business.sport.social.mapper;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqChatHistoryQueryParam;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespChatHistory;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SportChatHistoryBusinessMapper {
List<RespChatHistory> getChatHistory(@Param("param") ReqChatHistoryQueryParam param);
}
package com.antai.sport.http.server.game.api.business.sport.social.service;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqChatHistoryQueryParam;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqChatMessage;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespChatHistory;
import com.antai.sport.http.server.game.api.business.sport.social.mapper.SportChatHistoryBusinessMapper;
import com.antai.sport.http.server.repository.sport.entity.SportChatHistory;
import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.mapper.SportChatHistoryMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
@Service
public class ChatService {
@Resource
private SportChatHistoryMapper sportChatHistoryMapper;
@Resource
private SportChatHistoryBusinessMapper sportChatHistoryBusinessMapper;
public Long sendMessage(ReqChatMessage message, SportUser loginUser) {
SportChatHistory history = new SportChatHistory();
history.setSenderId(loginUser.getId());
history.setReceiverId(message.getReceiverId());
history.setContent(message.getContent());
history.setRoomKey(message.getRoomKey());
history.setCtDate(LocalDateTime.now());
sportChatHistoryMapper.insert(history);
return history.getId();
}
public List<RespChatHistory> getChatHistory(ReqChatHistoryQueryParam param) {
if (param.getQuerySize() == null || param.getQuerySize() == 0) {
param.setQuerySize(20);
}
List<RespChatHistory> resultList = sportChatHistoryBusinessMapper.getChatHistory(param);
Collections.reverse(resultList);
return resultList;
}
}
......@@ -16,6 +16,7 @@ import com.antai.sport.http.server.repository.sport.mapper.SportUserFriendsMappe
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
......@@ -43,7 +44,8 @@ public class FriendsService {
return sportUserFriendRequestBusinessMapper.getFriendsRequestToMe(loginUser.getId());
}
public void sendFriendRequest(Long targetUserId, SportUser loginUser) {
@Transactional
public Long sendFriendRequest(Long targetUserId, SportUser loginUser) {
if (sportUserMapper.selectById(targetUserId) == null) {
throw new BusinessException("您请求的用户不存在");
}
......@@ -58,8 +60,10 @@ public class FriendsService {
request.setTargetUserId(targetUserId);
request.setStatus(FriendRequestStatus.WAIT);
sportUserFriendRequestMapper.insert(request);
return request.getId();
}
@Transactional
public void requestResponse(ReqFriendRequestResponse param, SportUser loginUser) {
if (param.getResult() == null) {
throw new BusinessException("响应结果参数异常");
......
<?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.antai.sport.http.server.game.api.business.sport.social.mapper.SportChatHistoryBusinessMapper">
<select id="getChatHistory"
resultType="com.antai.sport.http.server.game.api.business.sport.social.dto.RespChatHistory">
select id,sender_id,ct_date as time,content
from sport_chat_history t1
where t1.deleted = 0
and t1.room_key = #{param.roomKey}
<if test="param.sinceId != null and param.sinceId != 0">
and t1.id &lt; #{param.sinceId}
</if>
order by t1.id desc
limit #{param.querySize}
</select>
</mapper>
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author liming
* @since 2022-04-06
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportChatHistory implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 发送者用户id
*/
private Long senderId;
/**
* 接受人id
*/
private Long receiverId;
/**
* 聊天室key
*/
private String roomKey;
/**
* 聊天内容
*/
private String content;
/**
* 状态 1:未读 2:已读
*/
private Integer status;
/**
* 排序号
*/
private Integer showOrder;
/**
* 数据版本号
*/
private Integer version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime ctDate;
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportChatHistory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-06
*/
public interface SportChatHistoryMapper extends BaseMapper<SportChatHistory> {
}
<?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.antai.sport.http.server.repository.sport.mapper.SportChatHistoryMapper">
</mapper>
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