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