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; + +}