From 838b61d27d426c1fefef4c52d3ecf5ef0bf4a973 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Sat, 19 Jun 2021 14:32:13 +0800
Subject: [PATCH] 1.新增插入单聊数据接口,单聊记录列表,聊天列表
---
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/entity/ChatRecords.java | 71 +++++++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.xml | 35 +++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/vo/ChatRecordsVo.java | 30 +++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/controller/ChatRecordsController.java | 95 +++++++++++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.java | 34 +++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/ChatRecordsService.java | 29 ++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/impl/ChatRecordsServiceImpl.java | 38 ++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/attendance/controller/AttendanceController.java | 5
8 files changed, 336 insertions(+), 1 deletions(-)
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/attendance/controller/AttendanceController.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/attendance/controller/AttendanceController.java
index 4d93dd0..2f32b49 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/attendance/controller/AttendanceController.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/attendance/controller/AttendanceController.java
@@ -494,7 +494,10 @@
@PostMapping("/AppSave")
@ApiOperationSupport(order = 4)
@ApiOperation(value = "新增", notes = "传入attendance")
- public R AppSave(@Valid Attendance attendance) {
+ public R AppSave(@Valid Attendance attendance,HttpServletResponse response) {
+ response.setHeader("Access-Control-Allow-Origin", "*");
+ response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
+ response.setHeader("Access-Control-Allow-Credentials", "true");
System.out.println("attendance = " + attendance);
Enclosure enclosure = new Enclosure();
enclosure.setAnumber(attendance.getNumber());
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/controller/ChatRecordsController.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/controller/ChatRecordsController.java
new file mode 100644
index 0000000..257d13c
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/controller/ChatRecordsController.java
@@ -0,0 +1,95 @@
+package org.springblade.jfpt.chatrecords.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.jfpt.chatrecords.entity.ChatRecords;
+import org.springblade.jfpt.chatrecords.service.ChatRecordsService;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.*;
+
+/**
+ * @author zhongrj
+ * @time 2021-06-18
+ * 聊天消息控制层
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/chat-records")
+public class ChatRecordsController {
+
+ private final IUserClient iUserClient;
+
+ private final ChatRecordsService chatRecordsService;
+
+ /**
+ * 查询单聊消息记录
+ * @param chatRecords 消息记录对象
+ * @param response 响应
+ * @param query 查询条件,分页
+ * @return
+ */
+ @GetMapping("/getSingleMessagePage")
+ public R getSingleMessagePage(@Valid ChatRecords chatRecords, HttpServletResponse response, Query query){
+ //跨域设置
+ crossDomain(response);
+ Map<String, Object> map = new HashMap<>(2);
+ //查询单聊人的信息
+ List<User> user = Arrays.asList(iUserClient.userInfoById(chatRecords.getSenderId()).getData(), iUserClient.userInfoById(chatRecords.getRecipientId()).getData());
+ //查询单聊记录信息
+ IPage<ChatRecords> chatRecordsIPage = chatRecordsService.selectChatRecordsPage(Condition.getPage(query), chatRecords);
+ //封装数据
+ map.put("user",user);
+ map.put("chatRecordsIPage",chatRecordsIPage);
+ //返回数据
+ return R.data(map);
+ }
+
+
+ /**
+ * 查询当前用户的聊天列表
+ * @param chatRecords 消息记录对象
+ * @param response 响应
+ * @param query 查询条件,分页
+ * @return
+ */
+ @GetMapping("/getChatListPage")
+ public R getChatListPage(@Valid ChatRecords chatRecords, HttpServletResponse response, Query query){
+ //跨域设置
+ crossDomain(response);
+ //查询当前人员的聊天列表,并返回数据
+ return R.data(chatRecordsService.getChatListPage(Condition.getPage(query), chatRecords));
+ }
+
+
+ /**
+ * 单聊消息插入
+ * @param chatRecords 消息记录对象
+ * @param response 响应
+ * @return
+ */
+ @PostMapping("/insertSingleChat")
+ public R insertSingleChat(@Valid @RequestBody ChatRecords chatRecords, HttpServletResponse response){
+ //跨域设置
+ crossDomain(response);
+ //单聊消息插入
+ return R.data(chatRecordsService.save(chatRecords));
+ }
+
+ /**
+ * 配置跨域设置
+ * @param response
+ */
+ private void crossDomain(HttpServletResponse response) {
+ response.setHeader("Access-Control-Allow-Origin", "*");
+ response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
+ response.setHeader("Access-Control-Allow-Credentials","true");
+ }
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/entity/ChatRecords.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/entity/ChatRecords.java
new file mode 100644
index 0000000..1f106df
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/entity/ChatRecords.java
@@ -0,0 +1,71 @@
+package org.springblade.jfpt.chatrecords.entity;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author zhongrj
+ * @time 2021-06-18
+ * @desc 聊天记录实体类
+ *
+ */
+
+@Data
+@TableName("sys_chat_records")
+public class ChatRecords implements Serializable {
+ /**
+ * 主键id
+ */
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 发送消息内容
+ */
+ @TableField("post_message")
+ private String postMessage;
+
+ /**
+ * 消息类型 0 文本 1 表情 2 图片 3 视频...
+ */
+ @TableField("message_type")
+ private Integer messageType;
+
+ /**
+ * 接收状态 0 已接收 1 未接收
+ */
+ private Integer status;
+
+ /**
+ * 发送时间
+ */
+ @TableField("post_time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date postTime;
+
+ /**
+ * 发送消息人id
+ *
+ */
+ @NotNull(message = "发送消息人id不能为空")
+ @TableField("sender_id")
+ private Long senderId;
+
+ /**
+ * 接收消息人id
+ * @NotNull(message = "接收消息人id不能为空")
+ */
+ @TableField("recipient_id")
+ private Long recipientId;
+
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.java
new file mode 100644
index 0000000..fef58dd
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.java
@@ -0,0 +1,34 @@
+package org.springblade.jfpt.chatrecords.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.jfpt.article.entity.Article;
+import org.springblade.jfpt.article.vo.ArticleVo;
+import org.springblade.jfpt.chatrecords.entity.ChatRecords;
+import org.springblade.jfpt.chatrecords.vo.ChatRecordsVo;
+
+import java.util.List;
+
+
+/**
+ * @author zhongrj
+ * mapper 映射层
+ */
+public interface ChatRecordsMapper extends BaseMapper<ChatRecords> {
+
+ /**
+ * 查询单聊消息记录分页信息
+ * @param page
+ * @param chatRecords 聊天消息对象
+ * @return
+ */
+ List<ChatRecords> selectChatRecordsPage(IPage<ChatRecords> page, ChatRecords chatRecords);
+
+ /**
+ * 查询当前用户的聊天列表
+ * @param chatRecords 消息记录对象
+ * @param page
+ * @return
+ */
+ List<ChatRecordsVo> getChatListPage(IPage<ChatRecordsVo> page, ChatRecords chatRecords);
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.xml b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.xml
new file mode 100644
index 0000000..e965b6c
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/mapper/ChatRecordsMapper.xml
@@ -0,0 +1,35 @@
+<?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="org.springblade.jfpt.chatrecords.mapper.ChatRecordsMapper">
+
+ <!--查询单聊的消息记录列表-->
+ <select id="selectChatRecordsPage" resultType="org.springblade.jfpt.chatrecords.entity.ChatRecords">
+ select * from sys_chat_records where sender_id = #{chatRecords.senderId} and recipient_id = #{chatRecords.recipientId}
+ union
+ select * from sys_chat_records where sender_id = #{chatRecords.recipientId} and recipient_id = #{chatRecords.senderId}
+ order by post_time desc
+ </select>
+
+ <!--聊天列表-->
+ <select id="getChatListPage" resultType="org.springblade.jfpt.chatrecords.vo.ChatRecordsVo">
+ select scrss.*,name recipientNickName,real_name recipientName,avatar from jfpthpublicsecurity.blade_user bu
+ right join
+ (
+ select scr.id,scrs.uid recipientId,post_time postTime,post_message postMessage from sys_chat_records scr
+ right join
+ (
+ select max(max_id) id,uid from (
+ select recipient_id as uid,max(id) as max_id from sys_chat_records where sender_id = #{chatRecords.senderId} group by recipient_id
+ union all
+ select sender_id as uid,max(id) as max_id from sys_chat_records where recipient_id = #{chatRecords.senderId} group by sender_id
+ )t group by uid
+ ) scrs
+ on
+ scr.id = scrs.id
+ ) scrss
+ on
+ bu.id = scrss.recipientId
+ order by postTime desc
+ </select>
+
+</mapper>
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/ChatRecordsService.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/ChatRecordsService.java
new file mode 100644
index 0000000..6a41e14
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/ChatRecordsService.java
@@ -0,0 +1,29 @@
+package org.springblade.jfpt.chatrecords.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.jfpt.chatrecords.entity.ChatRecords;
+import org.springblade.jfpt.chatrecords.vo.ChatRecordsVo;
+
+/**
+ * @author zhongrj
+ * 聊天消息接口层
+ */
+public interface ChatRecordsService extends IService<ChatRecords> {
+
+ /**
+ * 查询聊天消息分页信息
+ * @param page
+ * @param chatRecords 聊天消息对象
+ * @return
+ */
+ IPage<ChatRecords> selectChatRecordsPage(IPage<ChatRecords> page, ChatRecords chatRecords);
+
+ /**
+ * 查询当前用户的聊天列表
+ * @param chatRecords 消息记录对象
+ * @param page
+ * @return
+ */
+ IPage<ChatRecordsVo> getChatListPage(IPage<ChatRecordsVo> page, ChatRecords chatRecords);
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/impl/ChatRecordsServiceImpl.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/impl/ChatRecordsServiceImpl.java
new file mode 100644
index 0000000..a1f4b9a
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/service/impl/ChatRecordsServiceImpl.java
@@ -0,0 +1,38 @@
+package org.springblade.jfpt.chatrecords.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.jfpt.chatrecords.entity.ChatRecords;
+import org.springblade.jfpt.chatrecords.mapper.ChatRecordsMapper;
+import org.springblade.jfpt.chatrecords.service.ChatRecordsService;
+import org.springblade.jfpt.chatrecords.vo.ChatRecordsVo;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhongrj
+ */
+@Service
+public class ChatRecordsServiceImpl extends ServiceImpl<ChatRecordsMapper, ChatRecords> implements ChatRecordsService {
+
+ /**
+ * 查询聊天消息分页信息
+ * @param page
+ * @param chatRecords 聊天消息对象
+ * @return
+ */
+ @Override
+ public IPage<ChatRecords> selectChatRecordsPage(IPage<ChatRecords> page, ChatRecords chatRecords) {
+ return page.setRecords(baseMapper.selectChatRecordsPage(page,chatRecords));
+ }
+
+ /**
+ * 查询当前用户的聊天列表
+ * @param chatRecords 消息记录对象
+ * @param page
+ * @return
+ */
+ @Override
+ public IPage<ChatRecordsVo> getChatListPage(IPage<ChatRecordsVo> page, ChatRecords chatRecords) {
+ return page.setRecords(baseMapper.getChatListPage(page,chatRecords));
+ }
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/vo/ChatRecordsVo.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/vo/ChatRecordsVo.java
new file mode 100644
index 0000000..cc87bdf
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/chatrecords/vo/ChatRecordsVo.java
@@ -0,0 +1,30 @@
+package org.springblade.jfpt.chatrecords.vo;
+
+import lombok.Data;
+import org.springblade.jfpt.chatrecords.entity.ChatRecords;
+
+import java.io.Serializable;
+
+/**
+ * @author zhongrj
+ * @time 2021-06-19
+ * @desc 聊天列表vo
+ */
+@Data
+public class ChatRecordsVo extends ChatRecords implements Serializable {
+ /**
+ * 接收或者发送的昵称
+ */
+ private String recipientNickName;
+
+ /**
+ * 接收或者发送的姓名
+ */
+ private String recipientName;
+
+ /**
+ * 接收或者发送的头像 url
+ */
+ private String avatar;
+
+}
--
Gitblit v1.9.3