diff --git a/docs/version/2023-07-17.sql b/docs/version/2023-07-17.sql
new file mode 100644
index 0000000..c9c28f4
--- /dev/null
+++ b/docs/version/2023-07-17.sql
@@ -0,0 +1,77 @@
+###单聊群聊功能
+ALTER TABLE `user` add COLUMN `active_status` INT(11) DEFAULT "2" COMMENT '在线状态 1在线 2离线' AFTER `open_id` ;
+
+DROP TABLE IF EXISTS `room`;
+CREATE TABLE `room` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `name` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群名称',
+ `avatar` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '群头像',
+ `type` int(11) NOT NULL COMMENT '房间类型 1群聊',
+ `hot_flag` int(11) DEFAULT '0' COMMENT '是否全员展示 0否 1是',
+ `active_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '群最后消息的更新时间(热点群不需要写扩散,更新这里就行)',
+ `ext_json` json DEFAULT NULL COMMENT '额外信息(根据不同类型房间有不同存储的东西)',
+ `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
+ `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_create_time` (`create_time`) USING BTREE,
+ KEY `idx_update_time` (`update_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间表';
+
+CREATE TABLE `user_apply` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `uid` bigint(20) NOT NULL COMMENT '申请人uid',
+ `type` int(11) NOT NULL COMMENT '申请类型 1加好友',
+ `target_id` bigint(20) NOT NULL COMMENT '接收人uid',
+ `msg` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '申请信息',
+ `status` int(11) NOT NULL COMMENT '申请状态 1待审批 2同意',
+ `read_status` int(11) NOT NULL COMMENT '阅读状态 1未读 2已读',
+ `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
+ `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uniq_target_id_uid` (`target_id`,`uid`) USING BTREE,
+ KEY `idx_target_id` (`target_id`) USING BTREE,
+ KEY `idx_create_time` (`create_time`) USING BTREE,
+ KEY `idx_update_time` (`update_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户申请表';
+
+CREATE TABLE `user_friend` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `uid` bigint(20) NOT NULL COMMENT 'uid',
+ `friend_uid` bigint(20) NOT NULL COMMENT '好友uid',
+ `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
+ `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uniq_uid_friend_uid` (`uid`,`friend_uid`) USING BTREE,
+ KEY `idx_create_time` (`create_time`) USING BTREE,
+ KEY `idx_update_time` (`update_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户联系人表';
+
+CREATE TABLE `group_member` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `room_id` bigint(20) NOT NULL COMMENT '房间id',
+ `uid` bigint(20) NOT NULL COMMENT '成员uid',
+ `type` int(11) NOT NULL COMMENT '成员类型 1群主 2管理员 3普通成员',
+ `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
+ `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_room_id_type` (`room_id`,`type`) USING BTREE,
+ KEY `idx_create_time` (`create_time`) USING BTREE,
+ KEY `idx_update_time` (`update_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='群成员表';
+
+CREATE TABLE `contact` (
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `uid` bigint(20) NOT NULL COMMENT 'uid',
+ `type` int(11) NOT NULL COMMENT '聊天类型 1单聊 2普通群聊',
+ `hot_flag` int(11) DEFAULT '0' COMMENT '是否全员展示 0否 1是',
+ `target_id` bigint(20) NOT NULL COMMENT '聊天对象type=1:uid,type=2:房间id',
+ `read_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '阅读到的时间',
+ `active_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '会话内消息最后更新的时间(只有普通会话需要维护,全员会话不需要维护)',
+ `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
+ `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uniq_uid_target_id_type` (`uid`,`target_id`,`type`) USING BTREE,
+ KEY `idx_target_id_read_time` (`target_id`,`read_time`) USING BTREE,
+ KEY `idx_create_time` (`create_time`) USING BTREE,
+ KEY `idx_update_time` (`update_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会话列表';
\ No newline at end of file
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/ContactController.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/ContactController.java
new file mode 100644
index 0000000..d530605
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/ContactController.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.chat.controller;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 会话列表 前端控制器
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Controller
+@RequestMapping("/contact")
+public class ContactController {
+
+}
+
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/GroupMemberController.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/GroupMemberController.java
new file mode 100644
index 0000000..ece7322
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/GroupMemberController.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.chat.controller;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 群成员表 前端控制器
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Controller
+@RequestMapping("/groupMember")
+public class GroupMemberController {
+
+}
+
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/RoomController.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/RoomController.java
new file mode 100644
index 0000000..ef4f012
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/controller/RoomController.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.chat.controller;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 房间表 前端控制器
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Controller
+@RequestMapping("/room")
+public class RoomController {
+
+}
+
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/ContactDao.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/ContactDao.java
new file mode 100644
index 0000000..efd2bf0
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/ContactDao.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.chat.dao;
+
+import com.abin.mallchat.common.chat.domain.entity.Contact;
+import com.abin.mallchat.common.chat.mapper.ContactMapper;
+import com.abin.mallchat.common.chat.service.IContactService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 会话列表 服务实现类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Service
+public class ContactDao extends ServiceImpl implements IContactService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/GroupMemberDao.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/GroupMemberDao.java
new file mode 100644
index 0000000..9a7dbdb
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/GroupMemberDao.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.chat.dao;
+
+import com.abin.mallchat.common.chat.domain.entity.GroupMember;
+import com.abin.mallchat.common.chat.mapper.GroupMemberMapper;
+import com.abin.mallchat.common.chat.service.IGroupMemberService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 群成员表 服务实现类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Service
+public class GroupMemberDao extends ServiceImpl implements IGroupMemberService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/RoomDao.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/RoomDao.java
index bc8669e..c43b483 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/RoomDao.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/dao/RoomDao.java
@@ -1,31 +1,20 @@
package com.abin.mallchat.common.chat.dao;
import com.abin.mallchat.common.chat.domain.entity.Room;
-import com.abin.mallchat.common.chat.domain.enums.RoomTypeEnum;
import com.abin.mallchat.common.chat.mapper.RoomMapper;
-import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
-import com.abin.mallchat.common.common.domain.vo.response.CursorPageBaseResp;
-import com.abin.mallchat.common.common.utils.CursorUtils;
+import com.abin.mallchat.common.chat.service.IRoomService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
- * 会话表 服务实现类
+ * 房间表 服务实现类
*
*
* @author abin
- * @since 2023-03-25
+ * @since 2023-07-16
*/
@Service
-public class RoomDao extends ServiceImpl {
- @Autowired
- private CursorUtils cursorUtils;
+public class RoomDao extends ServiceImpl implements IRoomService {
- public CursorPageBaseResp getCursorPage(CursorPageBaseReq request) {
- return cursorUtils.getCursorPageByMysql(this, request, wrapper -> {
- wrapper.ne(Room::getType, RoomTypeEnum.GROUP.getStatus());
- }, Room::getActiveTime);
- }
}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Contact.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Contact.java
new file mode 100644
index 0000000..dae18dc
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Contact.java
@@ -0,0 +1,83 @@
+package com.abin.mallchat.common.chat.domain.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 会话列表
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("contact")
+public class Contact implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * uid
+ */
+ @TableField("uid")
+ private Long uid;
+
+ /**
+ * 聊天类型 1单聊 2普通群聊
+ */
+ @TableField("type")
+ private Integer type;
+
+ /**
+ * 是否全员展示 0否 1是
+ */
+ @TableField("hot_flag")
+ private Integer hotFlag;
+
+ /**
+ * 聊天对象type=1:uid,type=2:房间id
+ */
+ @TableField("target_id")
+ private Long targetId;
+
+ /**
+ * 阅读到的时间
+ */
+ @TableField("read_time")
+ private LocalDateTime readTime;
+
+ /**
+ * 会话内消息最后更新的时间(只有普通会话需要维护,全员会话不需要维护)
+ */
+ @TableField("active_time")
+ private LocalDateTime activeTime;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/GroupMember.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/GroupMember.java
new file mode 100644
index 0000000..1b8ed4f
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/GroupMember.java
@@ -0,0 +1,65 @@
+package com.abin.mallchat.common.chat.domain.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 群成员表
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("group_member")
+public class GroupMember implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 房间id
+ */
+ @TableField("room_id")
+ private Long roomId;
+
+ /**
+ * 成员uid
+ */
+ @TableField("uid")
+ private Long uid;
+
+ /**
+ * 成员类型 1群主 2管理员 3普通成员
+ */
+ @TableField("type")
+ private Integer type;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Room.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Room.java
index ef74c67..67a6ec2 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Room.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/domain/entity/Room.java
@@ -8,15 +8,15 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
-import java.util.Date;
+import java.time.LocalDateTime;
/**
*
- * 会话表
+ * 房间表
*
*
* @author abin
- * @since 2023-03-25
+ * @since 2023-07-16
*/
@Data
@EqualsAndHashCode(callSuper = false)
@@ -32,36 +32,52 @@ public class Room implements Serializable {
private Long id;
/**
- * 会话名
+ * 群名称
*/
@TableField("name")
private String name;
/**
- * 会话类型 1大群聊 2沸点
- *
- * @see com.abin.mallchat.common.chat.domain.enums.RoomTypeEnum
+ * 群头像
+ */
+ @TableField("avatar")
+ private String avatar;
+
+ /**
+ * 房间类型 1群聊
*/
@TableField("type")
private Integer type;
/**
- * 最后活跃时间-排序
+ * 是否全员展示 0否 1是
+ */
+ @TableField("hot_flag")
+ private Integer hotFlag;
+
+ /**
+ * 群最后消息的更新时间(热点群不需要写扩散,更新这里就行)
*/
@TableField("active_time")
- private Date activeTime;
+ private LocalDateTime activeTime;
+
+ /**
+ * 额外信息(根据不同类型房间有不同存储的东西)
+ */
+ @TableField("ext_json")
+ private String extJson;
/**
* 创建时间
*/
@TableField("create_time")
- private Date createTime;
+ private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField("update_time")
- private Date updateTime;
+ private LocalDateTime updateTime;
}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/ContactMapper.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/ContactMapper.java
new file mode 100644
index 0000000..5e9aa15
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/ContactMapper.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.chat.mapper;
+
+import com.abin.mallchat.common.chat.domain.entity.Contact;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 会话列表 Mapper 接口
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface ContactMapper extends BaseMapper {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/GroupMemberMapper.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/GroupMemberMapper.java
new file mode 100644
index 0000000..79412ea
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/GroupMemberMapper.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.chat.mapper;
+
+import com.abin.mallchat.common.chat.domain.entity.GroupMember;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 群成员表 Mapper 接口
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface GroupMemberMapper extends BaseMapper {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/RoomMapper.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/RoomMapper.java
index 5eb89ad..51d745f 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/RoomMapper.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/mapper/RoomMapper.java
@@ -1,16 +1,15 @@
package com.abin.mallchat.common.chat.mapper;
-
import com.abin.mallchat.common.chat.domain.entity.Room;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
*
- * 会话表 Mapper 接口
+ * 房间表 Mapper 接口
*
*
* @author abin
- * @since 2023-03-25
+ * @since 2023-07-16
*/
public interface RoomMapper extends BaseMapper {
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IContactService.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IContactService.java
new file mode 100644
index 0000000..a6af570
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IContactService.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.chat.service;
+
+import com.abin.mallchat.common.chat.domain.entity.Contact;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 会话列表 服务类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface IContactService extends IService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IGroupMemberService.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IGroupMemberService.java
new file mode 100644
index 0000000..65190db
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IGroupMemberService.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.chat.service;
+
+import com.abin.mallchat.common.chat.domain.entity.GroupMember;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 群成员表 服务类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface IGroupMemberService extends IService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IRoomService.java b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IRoomService.java
index 3cf91fe..380208f 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IRoomService.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/chat/service/IRoomService.java
@@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
/**
*
- * 会话表 服务类
+ * 房间表 服务类
*
*
* @author abin
- * @since 2023-03-25
+ * @since 2023-07-16
*/
public interface IRoomService extends IService {
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserApplyController.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserApplyController.java
new file mode 100644
index 0000000..cdd0737
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserApplyController.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.user.controller;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 用户申请表 前端控制器
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Controller
+@RequestMapping("/userApply")
+public class UserApplyController {
+
+}
+
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserFriendController.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserFriendController.java
new file mode 100644
index 0000000..654c5d3
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/controller/UserFriendController.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.user.controller;
+
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ *
+ * 用户联系人表 前端控制器
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Controller
+@RequestMapping("/userFriend")
+public class UserFriendController {
+
+}
+
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserApplyDao.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserApplyDao.java
new file mode 100644
index 0000000..0beacd6
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserApplyDao.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.user.dao;
+
+import com.abin.mallchat.common.user.domain.entity.UserApply;
+import com.abin.mallchat.common.user.mapper.UserApplyMapper;
+import com.abin.mallchat.common.user.service.IUserApplyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 用户申请表 服务实现类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Service
+public class UserApplyDao extends ServiceImpl implements IUserApplyService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserFriendDao.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserFriendDao.java
new file mode 100644
index 0000000..5921882
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/dao/UserFriendDao.java
@@ -0,0 +1,20 @@
+package com.abin.mallchat.common.user.dao;
+
+import com.abin.mallchat.common.user.domain.entity.UserFriend;
+import com.abin.mallchat.common.user.mapper.UserFriendMapper;
+import com.abin.mallchat.common.user.service.IUserFriendService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 用户联系人表 服务实现类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Service
+public class UserFriendDao extends ServiceImpl implements IUserFriendService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/User.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/User.java
index 0421526..95a6146 100644
--- a/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/User.java
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/User.java
@@ -58,6 +58,12 @@ public class User implements Serializable {
@TableField("open_id")
private String openId;
+ /**
+ * 上下线状态 1在线 2离线
+ */
+ @TableField("active_status")
+ private Integer activeStatus;
+
/**
* 最后上下线时间
*/
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserApply.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserApply.java
new file mode 100644
index 0000000..cf84697
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserApply.java
@@ -0,0 +1,83 @@
+package com.abin.mallchat.common.user.domain.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 用户申请表
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("user_apply")
+public class UserApply implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 申请人uid
+ */
+ @TableField("uid")
+ private Long uid;
+
+ /**
+ * 申请类型 1加好友
+ */
+ @TableField("type")
+ private Integer type;
+
+ /**
+ * 接收人uid
+ */
+ @TableField("target_id")
+ private Long targetId;
+
+ /**
+ * 申请信息
+ */
+ @TableField("msg")
+ private String msg;
+
+ /**
+ * 申请状态 1待审批 2同意
+ */
+ @TableField("status")
+ private Integer status;
+
+ /**
+ * 阅读状态 1未读 2已读
+ */
+ @TableField("read_status")
+ private Integer readStatus;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserFriend.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserFriend.java
new file mode 100644
index 0000000..45a8d28
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/domain/entity/UserFriend.java
@@ -0,0 +1,59 @@
+package com.abin.mallchat.common.user.domain.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 用户联系人表
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("user_friend")
+public class UserFriend implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * uid
+ */
+ @TableField("uid")
+ private Long uid;
+
+ /**
+ * 好友uid
+ */
+ @TableField("friend_uid")
+ private Long friendUid;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改时间
+ */
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserApplyMapper.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserApplyMapper.java
new file mode 100644
index 0000000..18f7f7f
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserApplyMapper.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.user.mapper;
+
+import com.abin.mallchat.common.user.domain.entity.UserApply;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 用户申请表 Mapper 接口
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface UserApplyMapper extends BaseMapper {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserFriendMapper.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserFriendMapper.java
new file mode 100644
index 0000000..bc76cfc
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/mapper/UserFriendMapper.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.user.mapper;
+
+import com.abin.mallchat.common.user.domain.entity.UserFriend;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 用户联系人表 Mapper 接口
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface UserFriendMapper extends BaseMapper {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserApplyService.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserApplyService.java
new file mode 100644
index 0000000..705ac44
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserApplyService.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.user.service;
+
+import com.abin.mallchat.common.user.domain.entity.UserApply;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 用户申请表 服务类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface IUserApplyService extends IService {
+
+}
diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserFriendService.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserFriendService.java
new file mode 100644
index 0000000..048c380
--- /dev/null
+++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/IUserFriendService.java
@@ -0,0 +1,16 @@
+package com.abin.mallchat.common.user.service;
+
+import com.abin.mallchat.common.user.domain.entity.UserFriend;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 用户联系人表 服务类
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+public interface IUserFriendService extends IService {
+
+}
diff --git a/mallchat-common/src/main/resources/mapper/chat/ContactMapper.xml b/mallchat-common/src/main/resources/mapper/chat/ContactMapper.xml
new file mode 100644
index 0000000..87c4137
--- /dev/null
+++ b/mallchat-common/src/main/resources/mapper/chat/ContactMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/mallchat-common/src/main/resources/mapper/chat/GroupMemberMapper.xml b/mallchat-common/src/main/resources/mapper/chat/GroupMemberMapper.xml
new file mode 100644
index 0000000..2701027
--- /dev/null
+++ b/mallchat-common/src/main/resources/mapper/chat/GroupMemberMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/mallchat-common/src/main/resources/mapper/user/UserApplyMapper.xml b/mallchat-common/src/main/resources/mapper/user/UserApplyMapper.xml
new file mode 100644
index 0000000..245ae10
--- /dev/null
+++ b/mallchat-common/src/main/resources/mapper/user/UserApplyMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/mallchat-common/src/main/resources/mapper/user/UserFriendMapper.xml b/mallchat-common/src/main/resources/mapper/user/UserFriendMapper.xml
new file mode 100644
index 0000000..812f98a
--- /dev/null
+++ b/mallchat-common/src/main/resources/mapper/user/UserFriendMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/RoomAdapter.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/RoomAdapter.java
index 58a69c4..b91a308 100644
--- a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/RoomAdapter.java
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/chat/service/adapter/RoomAdapter.java
@@ -1,7 +1,6 @@
package com.abin.mallchat.custom.chat.service.adapter;
import cn.hutool.core.bean.BeanUtil;
-import com.abin.mallchat.common.chat.domain.entity.Room;
import com.abin.mallchat.custom.chat.domain.vo.response.ChatRoomResp;
import java.util.List;
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/FriendController.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/FriendController.java
new file mode 100644
index 0000000..b18126e
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/controller/FriendController.java
@@ -0,0 +1,94 @@
+package com.abin.mallchat.custom.user.controller;
+
+
+import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
+import com.abin.mallchat.common.common.domain.vo.request.PageBaseReq;
+import com.abin.mallchat.common.common.domain.vo.response.ApiResult;
+import com.abin.mallchat.common.common.domain.vo.response.CursorPageBaseResp;
+import com.abin.mallchat.common.common.domain.vo.response.PageBaseResp;
+import com.abin.mallchat.common.common.utils.RequestHolder;
+import com.abin.mallchat.common.user.service.cache.UserCache;
+import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberResp;
+import com.abin.mallchat.custom.chat.service.ChatService;
+import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApplyReq;
+import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApproveReq;
+import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendCheckReq;
+import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendDeleteReq;
+import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendApplyResp;
+import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendCheckResp;
+import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendUnreadResp;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 好友相关接口
+ *
+ *
+ * @author abin
+ * @since 2023-07-16
+ */
+@RestController
+@RequestMapping("/capi/user/friend")
+@Api(tags = "好友相关接口")
+@Slf4j
+public class FriendController {
+ @Autowired
+ private ChatService chatService;
+ @Autowired
+ private UserCache userCache;
+
+ @GetMapping("/check")
+ @ApiOperation("批量判断是否是自己好友")
+ public ApiResult check(@Valid FriendCheckReq request) {//todo
+ return ApiResult.success();
+ }
+
+ @PostMapping("/apply")
+ @ApiOperation("申请好友")
+ public ApiResult apply(@Valid @RequestBody FriendApplyReq request) {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+
+ @DeleteMapping()
+ @ApiOperation("删除好友")
+ public ApiResult delete(@Valid @RequestBody FriendDeleteReq request) {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+
+ @GetMapping("/apply/page")
+ @ApiOperation("好友申请列表")
+ public ApiResult> page(@Valid PageBaseReq request) {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+
+ @GetMapping("/apply/unread")
+ @ApiOperation("申请未读数")
+ public ApiResult unread() {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+
+ @PutMapping("/apply")
+ @ApiOperation("申请审批")
+ public ApiResult applyApprove(@Valid @RequestBody FriendApproveReq request) {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+
+ @PutMapping("/page")
+ @ApiOperation("联系人列表")
+ public ApiResult> applyApprove(@Valid CursorPageBaseReq request) {//todo
+ Long uid = RequestHolder.get().getUid();
+ return ApiResult.success();
+ }
+}
+
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApplyReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApplyReq.java
new file mode 100644
index 0000000..b0a5c0c
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApplyReq.java
@@ -0,0 +1,31 @@
+package com.abin.mallchat.custom.user.domain.vo.request.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+
+/**
+ * Description: 申请好友信息
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendApplyReq {
+
+ @NotBlank
+ @ApiModelProperty("申请信息")
+ private String msg;
+
+ @NotBlank
+ @ApiModelProperty("好友uid")
+ private Long targetUid;
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApproveReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApproveReq.java
new file mode 100644
index 0000000..3658c11
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendApproveReq.java
@@ -0,0 +1,27 @@
+package com.abin.mallchat.custom.user.domain.vo.request.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * Description: 申请好友信息
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendApproveReq {
+
+ @NotNull
+ @ApiModelProperty("审批动作 2同意")
+ private Integer approveStatus;
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendCheckReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendCheckReq.java
new file mode 100644
index 0000000..f5d71b1
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendCheckReq.java
@@ -0,0 +1,30 @@
+package com.abin.mallchat.custom.user.domain.vo.request.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+
+/**
+ * Description: 好友校验
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendCheckReq {
+
+ @NotEmpty
+ @Size(max = 50)
+ @ApiModelProperty("校验好友的uid")
+ private List uidList;
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendDeleteReq.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendDeleteReq.java
new file mode 100644
index 0000000..b10e7fc
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/request/friend/FriendDeleteReq.java
@@ -0,0 +1,27 @@
+package com.abin.mallchat.custom.user.domain.vo.request.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+
+/**
+ * Description: 申请好友信息
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendDeleteReq {
+
+ @NotBlank
+ @ApiModelProperty("好友uid")
+ private Long targetUid;
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendApplyResp.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendApplyResp.java
new file mode 100644
index 0000000..f2c701d
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendApplyResp.java
@@ -0,0 +1,32 @@
+package com.abin.mallchat.custom.user.domain.vo.response.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Description: 好友校验
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendApplyResp {
+
+ @ApiModelProperty("申请人uid")
+ private Long uid;
+
+ @ApiModelProperty("申请类型 1加好友")
+ private Integer type;
+
+ @ApiModelProperty("申请信息")
+ private String msg;
+
+ @ApiModelProperty("申请状态 1待审批 2同意")//todo 自己去加枚举
+ private Integer status;
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendCheckResp.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendCheckResp.java
new file mode 100644
index 0000000..d03434d
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendCheckResp.java
@@ -0,0 +1,32 @@
+package com.abin.mallchat.custom.user.domain.vo.response.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+
+/**
+ * Description: 好友校验
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendCheckResp {
+
+ @ApiModelProperty("校验结果")
+ private List checkedList;
+
+ @Data
+ public static class FriendCheck {
+ private Long uid;
+ private Boolean isFriend;
+ }
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendResp.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendResp.java
new file mode 100644
index 0000000..04715f6
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendResp.java
@@ -0,0 +1,24 @@
+package com.abin.mallchat.custom.user.domain.vo.response.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Description: 好友校验
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendResp {
+
+ @ApiModelProperty("申请列表的未读数")
+ private Integer unReadCount;
+
+}
diff --git a/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendUnreadResp.java b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendUnreadResp.java
new file mode 100644
index 0000000..c2ab89a
--- /dev/null
+++ b/mallchat-custom-server/src/main/java/com/abin/mallchat/custom/user/domain/vo/response/friend/FriendUnreadResp.java
@@ -0,0 +1,24 @@
+package com.abin.mallchat.custom.user.domain.vo.response.friend;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Description: 好友校验
+ * Author: abin
+ * Date: 2023-03-23
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FriendUnreadResp {
+
+ @ApiModelProperty("申请列表的未读数")
+ private Integer unReadCount;
+
+}