导入数据库表和音视频demo
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -5,3 +5,5 @@
|
||||
**/im-common/target
|
||||
**/im-message-store/target
|
||||
**/im-tcp/target
|
||||
|
||||
**/node_modules/**
|
||||
7
.gitignore.bak
Normal file
7
.gitignore.bak
Normal file
@@ -0,0 +1,7 @@
|
||||
**/.idea
|
||||
/logs
|
||||
**/im-service/target
|
||||
**/im-codec/target
|
||||
**/im-common/target
|
||||
**/im-message-store/target
|
||||
**/im-tcp/target
|
||||
4
hs-im-server/.gitignore
vendored
Normal file
4
hs-im-server/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/.idea
|
||||
/logs
|
||||
/im-service/target
|
||||
/im-common/target
|
||||
0
hs-im-server/README.md
Normal file
0
hs-im-server/README.md
Normal file
283
hs-im-server/doc/im-core-send.sql
Normal file
283
hs-im-server/doc/im-core-send.sql
Normal file
@@ -0,0 +1,283 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : localhost
|
||||
Source Server Type : MySQL
|
||||
Source Server Version : 50740
|
||||
Source Host : localhost:3306
|
||||
Source Schema : im-core
|
||||
|
||||
Target Server Type : MySQL
|
||||
Target Server Version : 50740
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 30/01/2023 18:41:03
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for app_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `app_user`;
|
||||
CREATE TABLE `app_user` (
|
||||
`user_id` varchar(20) NOT NULL,
|
||||
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`mobile` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`user_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of app_user
|
||||
-- ----------------------------
|
||||
INSERT INTO `app_user` VALUES ('lld', 'lld', 'lld', '13266520732', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_conversation_set
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_conversation_set`;
|
||||
CREATE TABLE `im_conversation_set` (
|
||||
`conversation_id` varchar(255) NOT NULL,
|
||||
`conversation_type` int(10) NULL DEFAULT NULL COMMENT '0 单聊 1群聊 2机器人 3公众号',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`is_mute` int(10) NULL DEFAULT NULL COMMENT '是否免打扰 1免打扰',
|
||||
`is_top` int(10) NULL DEFAULT NULL COMMENT '是否置顶 1置顶',
|
||||
`sequence` bigint(20) NULL DEFAULT NULL COMMENT 'sequence',
|
||||
`readed_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`app_id` int(10) NOT NULL,
|
||||
PRIMARY KEY (`app_id`, `conversation_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_conversation_set
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_conversation_set` VALUES ('0_lld2_lld', 0, 'lld2', 'lld', 0, 0, 23, 120201, 10000);
|
||||
INSERT INTO `im_conversation_set` VALUES ('0_lld_lld2', 0, 'lld', 'lld2', 1, 0, 22, 120200, 10000);
|
||||
INSERT INTO `im_conversation_set` VALUES ('0_lld_lld3', 0, 'lld', 'lld3', 0, 0, 21, 1, 10000);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship`;
|
||||
CREATE TABLE `im_friendship` (
|
||||
`app_id` int(20) NOT NULL,
|
||||
`from_id` varchar(50) NOT NULL,
|
||||
`to_id` varchar(50) NOT NULL,
|
||||
`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`status` int(10) NULL DEFAULT NULL COMMENT '状态 1正常 2删除',
|
||||
`black` int(10) NULL DEFAULT NULL COMMENT '1正常 2拉黑',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`friend_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`black_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`add_source` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源',
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源',
|
||||
PRIMARY KEY (`app_id`, `from_id`, `to_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_friendship
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_friendship` VALUES (10000, 'lld', 'lld2', 'lld小号', 1, NULL, 1673919586042, NULL, NULL, 'group', NULL);
|
||||
INSERT INTO `im_friendship` VALUES (10000, 'lld2', 'lld', 'lld小号', 2, NULL, 1673919586046, NULL, NULL, 'group', NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_group
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_group`;
|
||||
CREATE TABLE `im_friendship_group` (
|
||||
`app_id` int(20) NOT NULL,
|
||||
`from_id` varchar(50) NOT NULL,
|
||||
`group_id` int(50) NOT NULL AUTO_INCREMENT,
|
||||
`group_name` varchar(50) NOT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
`del_flag` int(10) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`group_id`) USING BTREE,
|
||||
UNIQUE INDEX `UNIQUE`(`app_id`, `from_id`, `group_name`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_group_member
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_group_member`;
|
||||
CREATE TABLE `im_friendship_group_member` (
|
||||
`group_id` bigint(20) NOT NULL,
|
||||
`to_id` varchar(50) NOT NULL,
|
||||
PRIMARY KEY (`group_id`,`to_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_request
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_request`;
|
||||
CREATE TABLE `im_friendship_request` (
|
||||
`id` int(20) NOT NULL AUTO_INCREMENT,
|
||||
`app_id` int(20) NULL DEFAULT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'from_id',
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'to_id',
|
||||
`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`read_status` int(10) NULL DEFAULT NULL COMMENT '是否已读 1已读',
|
||||
`add_source` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '好友来源',
|
||||
`add_wording` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '好友验证信息',
|
||||
`approve_status` int(10) NULL DEFAULT NULL COMMENT '审批状态 1同意 2拒绝',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_friendship_request
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_friendship_request` VALUES (3, 10000, 'lld', 'lld2', 'lld小号', 0, 'group', NULL, 1, 1671612496849, 1673921920088, 4);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group`;
|
||||
CREATE TABLE `im_group` (
|
||||
`app_id` int(20) NOT NULL,
|
||||
`group_id` varchar(50) NOT NULL,
|
||||
`owner_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '群主\r\n',
|
||||
`group_type` int(10) NULL DEFAULT NULL COMMENT '群类型 1私有群(类似微信) 2公开群(类似qq)',
|
||||
`group_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`mute` int(10) NULL DEFAULT NULL COMMENT '是否全员禁言,0 不禁言;1 全员禁言',
|
||||
`apply_join_type` int(10) NULL DEFAULT NULL COMMENT '// 申请加群选项包括如下几种:\r\n// 0 表示禁止任何人申请加入\r\n// 1 表示需要群主或管理员审批\r\n// 2 表示允许无需审批自由加入群组',
|
||||
`photo` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`max_member_count` int(20) NULL DEFAULT NULL,
|
||||
`introduction` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群简介',
|
||||
`notification` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群公告',
|
||||
`status` int(5) NULL DEFAULT NULL COMMENT '群状态 0正常 1解散',
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源',
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`app_id`, `group_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_group
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_group` VALUES (10000, '123123', 'lld', 1, 'lld测试群3', 0, NULL, '', NULL, '', '', 1, 7, 1669686480634, NULL, 1671615867897);
|
||||
INSERT INTO `im_group` VALUES (10000, 'test1', 'lld', 1, 'lld测试群', 0, NULL, '', NULL, '', '', 1, 1, 1671625608444, NULL, NULL);
|
||||
INSERT INTO `im_group` VALUES (10000, 'test2', 'lld', 1, '123456', 0, NULL, '', NULL, '', '', 1, 3, 1671625622489, NULL, 1671625653981);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group_member
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group_member`;
|
||||
CREATE TABLE `im_group_member` (
|
||||
`group_member_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`group_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'group_id',
|
||||
`app_id` int(10) NULL DEFAULT NULL,
|
||||
`member_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '成员id\r\n',
|
||||
`role` int(10) NULL DEFAULT NULL COMMENT '群成员类型,0 普通成员, 1 管理员, 2 群主, 3 禁言,4 已经移除的成员',
|
||||
`speak_date` bigint(100) NULL DEFAULT NULL,
|
||||
`mute` int(10) NULL DEFAULT NULL COMMENT '是否全员禁言,0 不禁言;1 全员禁言',
|
||||
`alias` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群昵称',
|
||||
`join_time` bigint(20) NULL DEFAULT NULL COMMENT '加入时间',
|
||||
`leave_time` bigint(20) NULL DEFAULT NULL COMMENT '离开时间',
|
||||
`join_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加入类型',
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`group_member_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_group_member
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_group_member` VALUES (5, '123123', 10000, 'lld', 2, NULL, NULL, NULL, 1669686484744, NULL, NULL, NULL);
|
||||
INSERT INTO `im_group_member` VALUES (6, '123123', 10000, 'lld2', 1, NULL, NULL, '', 1669686485958, NULL, 'joinType', NULL);
|
||||
INSERT INTO `im_group_member` VALUES (7, 'test1', 10000, 'lld', 2, NULL, NULL, NULL, 1671615885587, NULL, NULL, NULL);
|
||||
INSERT INTO `im_group_member` VALUES (8, 'test1', 10000, 'lld2', 1, NULL, NULL, '', 1671615885595, NULL, 'joinType', NULL);
|
||||
INSERT INTO `im_group_member` VALUES (9, 'test2', 10000, 'lld', 0, NULL, NULL, NULL, 1671616883069, NULL, NULL, NULL);
|
||||
INSERT INTO `im_group_member` VALUES (10, 'test2', 10000, 'lld2', 2, NULL, NULL, '', 1671616883077, NULL, 'joinType', NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group_message_history
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group_message_history`;
|
||||
CREATE TABLE `im_group_message_history` (
|
||||
`app_id` int(20) NOT NULL,
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'from_id',
|
||||
`group_id` varchar(50) NOT NULL,
|
||||
`message_key` bigint(50) NOT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`message_random` int(20) NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL COMMENT '来源',
|
||||
PRIMARY KEY (`app_id`, `group_id`, `message_key`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_message_body
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_message_body`;
|
||||
CREATE TABLE `im_message_body` (
|
||||
`app_id` int(10) NOT NULL,
|
||||
`message_key` bigint(50) NOT NULL,
|
||||
`message_body` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`security_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`del_flag` int(10) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`message_key`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_message_history
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_message_history`;
|
||||
CREATE TABLE `im_message_history` (
|
||||
`app_id` int(20) NOT NULL,
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'from_id',
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'to_id\r\n',
|
||||
`owner_id` varchar(50) NOT NULL,
|
||||
`message_key` bigint(50) NOT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`message_random` int(20) NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL COMMENT '来源',
|
||||
PRIMARY KEY (`app_id`, `owner_id`, `message_key`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_user_data
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_user_data`;
|
||||
CREATE TABLE `im_user_data` (
|
||||
`user_id` varchar(50) NOT NULL,
|
||||
`app_id` int(11) NOT NULL,
|
||||
`nick_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`photo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`user_sex` int(10) NULL DEFAULT NULL,
|
||||
`birth_day` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生日',
|
||||
`location` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
|
||||
`self_signature` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个性签名',
|
||||
`friend_allow_type` int(10) NOT NULL DEFAULT 1 COMMENT '加好友验证类型(Friend_AllowType) 1无需验证 2需要验证',
|
||||
`forbidden_flag` int(10) NOT NULL DEFAULT 0 COMMENT '禁用标识 1禁用',
|
||||
`disable_add_friend` int(10) NOT NULL DEFAULT 0 COMMENT '管理员禁止用户添加加好友:0 未禁用 1 已禁用',
|
||||
`silent_flag` int(10) NOT NULL DEFAULT 0 COMMENT '禁言标识 1禁言',
|
||||
`user_type` int(10) NOT NULL DEFAULT 1 COMMENT '用户类型 1普通用户 2客服 3机器人',
|
||||
`del_flag` int(20) NOT NULL DEFAULT 0,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`app_id`, `user_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of im_user_data
|
||||
-- ----------------------------
|
||||
INSERT INTO `im_user_data` VALUES ('lld', 10000, 'lldlld', '123', NULL, NULL, NULL, NULL, NULL, 1, 0, 0, 0, 1, 0, NULL);
|
||||
INSERT INTO `im_user_data` VALUES ('lld2', 10000, 'lld2', NULL, NULL, NULL, NULL, NULL, NULL, 2, 0, 0, 0, 1, 0, NULL);
|
||||
INSERT INTO `im_user_data` VALUES ('lld3', 10000, 'lld3', NULL, NULL, NULL, NULL, NULL, NULL, 1, 0, 0, 0, 1, 0, NULL);
|
||||
INSERT INTO `im_user_data` VALUES ('lld6', 10000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 0, 0, 0, 1, 1, NULL);
|
||||
INSERT INTO `im_user_data` VALUES ('lld7', 10000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 0, 0, 0, 1, 1, NULL);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
222
hs-im-server/doc/im-core-study.sql
Normal file
222
hs-im-server/doc/im-core-study.sql
Normal file
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : localhost
|
||||
Source Server Type : MySQL
|
||||
Source Server Version : 50740
|
||||
Source Host : localhost:3306
|
||||
Source Schema : im-core
|
||||
|
||||
Target Server Type : MySQL
|
||||
Target Server Version : 50740
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 17/01/2023 16:52:36
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for app_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `app_user`;
|
||||
CREATE TABLE `app_user` (
|
||||
`user_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`mobile` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_conversation_set
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_conversation_set`;
|
||||
CREATE TABLE `im_conversation_set` (
|
||||
`conversation_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
`conversation_type` int(10) NULL DEFAULT NULL COMMENT '0 单聊 1群聊 2机器人 3公众号',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`is_mute` int(10) NULL DEFAULT NULL COMMENT '是否免打扰 1免打扰',
|
||||
`is_top` int(10) NULL DEFAULT NULL COMMENT '是否置顶 1置顶',
|
||||
`sequence` bigint(20) NULL DEFAULT NULL COMMENT 'sequence',
|
||||
`readed_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`app_id` int(10) NOT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship`;
|
||||
CREATE TABLE `im_friendship` (
|
||||
`app_id` int(20) NOT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'from_id',
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'to_id',
|
||||
`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`status` int(10) NULL DEFAULT NULL COMMENT '状态 1正常 2删除',
|
||||
`black` int(10) NULL DEFAULT NULL COMMENT '1正常 2拉黑',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`friend_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`black_sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`add_source` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源',
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源'
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_group
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_group`;
|
||||
CREATE TABLE `im_friendship_group` (
|
||||
`app_id` int(20) NULL DEFAULT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'from_id',
|
||||
`group_id` int(50) NOT NULL AUTO_INCREMENT,
|
||||
`group_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
`del_flag` int(10) NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_group_member
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_group_member`;
|
||||
CREATE TABLE `im_friendship_group_member` (
|
||||
`group_id` bigint(20) NOT NULL,
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_friendship_request
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_friendship_request`;
|
||||
CREATE TABLE `im_friendship_request` (
|
||||
`id` int(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`app_id` int(20) NULL DEFAULT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'from_id',
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'to_id',
|
||||
`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`read_status` int(10) NULL DEFAULT NULL COMMENT '是否已读 1已读',
|
||||
`add_source` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '好友来源',
|
||||
`add_wording` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '好友验证信息',
|
||||
`approve_status` int(10) NULL DEFAULT NULL COMMENT '审批状态 1同意 2拒绝',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`update_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group`;
|
||||
CREATE TABLE `im_group` (
|
||||
`app_id` int(20) NOT NULL COMMENT 'app_id',
|
||||
`group_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'group_id',
|
||||
`owner_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '群主\r\n',
|
||||
`group_type` int(10) NULL DEFAULT NULL COMMENT '群类型 1私有群(类似微信) 2公开群(类似qq)',
|
||||
`group_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`mute` int(10) NULL DEFAULT NULL COMMENT '是否全员禁言,0 不禁言;1 全员禁言',
|
||||
`apply_join_type` int(10) NULL DEFAULT NULL COMMENT '// 申请加群选项包括如下几种:\r\n// 0 表示禁止任何人申请加入\r\n// 1 表示需要群主或管理员审批\r\n// 2 表示允许无需审批自由加入群组',
|
||||
`photo` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`max_member_count` int(20) NULL DEFAULT NULL,
|
||||
`introduction` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群简介',
|
||||
`notification` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群公告',
|
||||
`status` int(5) NULL DEFAULT NULL COMMENT '群状态 0正常 1解散',
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源',
|
||||
`update_time` bigint(20) NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group_member
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group_member`;
|
||||
CREATE TABLE `im_group_member` (
|
||||
`group_member_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`group_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'group_id',
|
||||
`app_id` int(10) NULL DEFAULT NULL,
|
||||
`member_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '成员id\r\n',
|
||||
`role` int(10) NULL DEFAULT NULL COMMENT '群成员类型,0 普通成员, 1 管理员, 2 群主, 3 禁言,4 已经移除的成员',
|
||||
`speak_date` bigint(100) NULL DEFAULT NULL,
|
||||
`mute` int(10) NULL DEFAULT NULL COMMENT '是否全员禁言,0 不禁言;1 全员禁言',
|
||||
`alias` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '群昵称',
|
||||
`join_time` bigint(20) NULL DEFAULT NULL COMMENT '加入时间',
|
||||
`leave_time` bigint(20) NULL DEFAULT NULL COMMENT '离开时间',
|
||||
`join_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加入类型',
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_group_message_history
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_group_message_history`;
|
||||
CREATE TABLE `im_group_message_history` (
|
||||
`app_id` int(20) NOT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'from_id',
|
||||
`group_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'group_id',
|
||||
`message_key` bigint(50) NOT NULL COMMENT 'messageBodyId',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`message_random` int(20) NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL COMMENT
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_message_body
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_message_body`;
|
||||
CREATE TABLE `im_message_body` (
|
||||
`app_id` int(10) NOT NULL,
|
||||
`message_key` bigint(50) NOT NULL,
|
||||
`message_body` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`security_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL,
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`del_flag` int(10) NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_message_history
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_message_history`;
|
||||
CREATE TABLE `im_message_history` (
|
||||
`app_id` int(20) NOT NULL COMMENT 'app_id',
|
||||
`from_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'from_id',
|
||||
`to_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'to_id\r\n',
|
||||
`owner_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'owner_id\r\n',
|
||||
`message_key` bigint(50) NOT NULL COMMENT 'messageBodyId',
|
||||
`create_time` bigint(20) NULL DEFAULT NULL,
|
||||
`sequence` bigint(20) NULL DEFAULT NULL,
|
||||
`message_random` int(20) NULL DEFAULT NULL,
|
||||
`message_time` bigint(20) NULL DEFAULT NULL COMMENT '来源'
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for im_user_data
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `im_user_data`;
|
||||
CREATE TABLE `im_user_data` (
|
||||
`user_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
`app_id` int(11) NOT NULL,
|
||||
`nick_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`photo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`user_sex` int(10) NULL DEFAULT NULL,
|
||||
`birth_day` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生日',
|
||||
`location` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
|
||||
`self_signature` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个性签名',
|
||||
`friend_allow_type` int(10) NOT NULL DEFAULT 1 COMMENT '加好友验证类型(Friend_AllowType) 1无需验证 2需要验证',
|
||||
`forbidden_flag` int(10) NOT NULL DEFAULT 0 COMMENT '禁用标识 1禁用',
|
||||
`disable_add_friend` int(10) NOT NULL DEFAULT 0 COMMENT '管理员禁止用户添加加好友:0 未禁用 1 已禁用',
|
||||
`silent_flag` int(10) NOT NULL DEFAULT 0 COMMENT '禁言标识 1禁言',
|
||||
`user_type` int(10) NOT NULL DEFAULT 1 COMMENT '用户类型 1普通用户 2客服 3机器人',
|
||||
`del_flag` int(20) NOT NULL DEFAULT 0,
|
||||
`extra` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
52
hs-im-server/im-common/pom.xml
Normal file
52
hs-im-server/im-common/pom.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>im-system</artifactId>
|
||||
<groupId>com.lld</groupId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>common</artifactId>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-logging</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- commons -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.lld.im.common;
|
||||
|
||||
|
||||
import com.lld.im.common.exception.ApplicationExceptionEnum;
|
||||
|
||||
|
||||
public enum BaseErrorCode implements ApplicationExceptionEnum {
|
||||
|
||||
SUCCESS(200,"success"),
|
||||
SYSTEM_ERROR(90000,"服务器内部错误,请联系管理员"),
|
||||
PARAMETER_ERROR(90001,"参数校验错误"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String error;
|
||||
|
||||
BaseErrorCode(int code, String error){
|
||||
this.code = code;
|
||||
this.error = error;
|
||||
}
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return this.error;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.lld.im.common;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
public enum ClientType {
|
||||
|
||||
WEBAPI(0,"webApi"),
|
||||
WEB(1,"web"),
|
||||
IOS(2,"ios"),
|
||||
ANDROID(3,"android"),
|
||||
WINDOWS(4,"windows"),
|
||||
MAC(5,"mac"),
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String error;
|
||||
|
||||
ClientType(int code, String error){
|
||||
this.code = code;
|
||||
this.error = error;
|
||||
}
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return this.error;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.lld.im.common;
|
||||
|
||||
import com.lld.im.common.exception.ApplicationExceptionEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ResponseVO<T> {
|
||||
|
||||
private int code;
|
||||
|
||||
private String msg;
|
||||
|
||||
private T data;
|
||||
|
||||
public static ResponseVO successResponse(Object data) {
|
||||
return new ResponseVO(200, "success", data);
|
||||
}
|
||||
|
||||
public static ResponseVO successResponse() {
|
||||
return new ResponseVO(200, "success");
|
||||
}
|
||||
|
||||
public static ResponseVO errorResponse() {
|
||||
return new ResponseVO(500, "系统内部异常");
|
||||
}
|
||||
|
||||
public static ResponseVO errorResponse(int code, String msg) {
|
||||
return new ResponseVO(code, msg);
|
||||
}
|
||||
|
||||
public static ResponseVO errorResponse(ApplicationExceptionEnum enums) {
|
||||
return new ResponseVO(enums.getCode(), enums.getError());
|
||||
}
|
||||
|
||||
public boolean isOk(){
|
||||
return this.code == 200;
|
||||
}
|
||||
|
||||
|
||||
public ResponseVO(int code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
// this.data = null;
|
||||
}
|
||||
|
||||
public ResponseVO success(){
|
||||
this.code = 200;
|
||||
this.msg = "success";
|
||||
return this;
|
||||
}
|
||||
|
||||
public ResponseVO success(T data){
|
||||
this.code = 200;
|
||||
this.msg = "success";
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum AllowFriendTypeEnum {
|
||||
|
||||
/**
|
||||
* 验证
|
||||
*/
|
||||
NEED(2),
|
||||
|
||||
/**
|
||||
* 不需要验证
|
||||
*/
|
||||
NOT_NEED(1),
|
||||
|
||||
;
|
||||
|
||||
|
||||
private int code;
|
||||
|
||||
AllowFriendTypeEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum ApproverFriendRequestStatusEnum {
|
||||
|
||||
/**
|
||||
* 1 同意;2 拒绝。
|
||||
*/
|
||||
AGREE(1),
|
||||
|
||||
REJECT(2),
|
||||
;
|
||||
|
||||
private int code;
|
||||
|
||||
ApproverFriendRequestStatusEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum CheckFriendShipTypeEnum {
|
||||
|
||||
/**
|
||||
* 1 单方校验;2双方校验。
|
||||
*/
|
||||
SINGLE(1),
|
||||
|
||||
BOTH(2),
|
||||
;
|
||||
|
||||
private int type;
|
||||
|
||||
CheckFriendShipTypeEnum(int type){
|
||||
this.type=type;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum DelFlagEnum {
|
||||
|
||||
/**
|
||||
* 0 正常;1 删除。
|
||||
*/
|
||||
NORMAL(0),
|
||||
|
||||
DELETE(1),
|
||||
;
|
||||
|
||||
private int code;
|
||||
|
||||
DelFlagEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
import com.lld.im.common.exception.ApplicationExceptionEnum;
|
||||
|
||||
public enum FriendShipErrorCode implements ApplicationExceptionEnum {
|
||||
|
||||
|
||||
IMPORT_SIZE_BEYOND(30000,"导入數量超出上限"),
|
||||
|
||||
ADD_FRIEND_ERROR(30001,"添加好友失败"),
|
||||
|
||||
TO_IS_YOUR_FRIEND(30002,"对方已经是你的好友"),
|
||||
|
||||
TO_IS_NOT_YOUR_FRIEND(30003,"对方不是你的好友"),
|
||||
|
||||
FRIEND_IS_DELETED(30004,"好友已被删除"),
|
||||
|
||||
FRIEND_IS_BLACK(30006,"好友已被拉黑"),
|
||||
|
||||
TARGET_IS_BLACK_YOU(30007,"对方把你拉黑"),
|
||||
|
||||
REPEATSHIP_IS_NOT_EXIST(30008,"关系链记录不存在"),
|
||||
|
||||
ADD_BLACK_ERROR(30009,"添加黑名單失败"),
|
||||
|
||||
FRIEND_IS_NOT_YOUR_BLACK(30010,"好友已經不在你的黑名單内"),
|
||||
|
||||
NOT_APPROVER_OTHER_MAN_REQUEST(30011,"无法审批其他人的好友请求"),
|
||||
|
||||
FRIEND_REQUEST_IS_NOT_EXIST(30012,"好友申请不存在"),
|
||||
|
||||
FRIEND_SHIP_GROUP_CREATE_ERROR(30014,"好友分组创建失败"),
|
||||
|
||||
FRIEND_SHIP_GROUP_IS_EXIST(30015,"好友分组已存在"),
|
||||
|
||||
FRIEND_SHIP_GROUP_IS_NOT_EXIST(30016,"好友分组不存在"),
|
||||
|
||||
|
||||
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String error;
|
||||
|
||||
FriendShipErrorCode(int code, String error){
|
||||
this.code = code;
|
||||
this.error = error;
|
||||
}
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return this.error;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum FriendShipStatusEnum {
|
||||
|
||||
/**
|
||||
* 0未添加 1正常 2删除
|
||||
*/
|
||||
FRIEND_STATUS_NO_FRIEND(0),
|
||||
|
||||
FRIEND_STATUS_NORMAL(1),
|
||||
|
||||
FRIEND_STATUS_DELETE(2),
|
||||
|
||||
/**
|
||||
* 0未添加 1正常 2删除
|
||||
*/
|
||||
BLACK_STATUS_NORMAL(1),
|
||||
|
||||
BLACK_STATUS_BLACKED(2),
|
||||
;
|
||||
|
||||
private int code;
|
||||
|
||||
FriendShipStatusEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
import com.lld.im.common.exception.ApplicationExceptionEnum;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
public enum GroupErrorCode implements ApplicationExceptionEnum {
|
||||
|
||||
GROUP_IS_NOT_EXIST(40000,"群不存在"),
|
||||
|
||||
GROUP_IS_EXIST(40001,"群已存在"),
|
||||
|
||||
GROUP_IS_HAVE_OWNER(40002,"群已存在群主"),
|
||||
|
||||
USER_IS_JOINED_GROUP(40003,"该用户已经进入该群"),
|
||||
|
||||
USER_JOIN_GROUP_ERROR(40004,"群成员添加失败"),
|
||||
|
||||
GROUP_MEMBER_IS_BEYOND(40005,"群成员已达到上限"),
|
||||
|
||||
MEMBER_IS_NOT_JOINED_GROUP(40006,"该用户不在群内"),
|
||||
|
||||
THIS_OPERATE_NEED_MANAGER_ROLE(40007,"该操作只允许群主/管理员操作"),
|
||||
|
||||
THIS_OPERATE_NEED_APPMANAGER_ROLE(40008,"该操作只允许APP管理员操作"),
|
||||
|
||||
THIS_OPERATE_NEED_OWNER_ROLE(40009,"该操作只允许群主操作"),
|
||||
|
||||
GROUP_OWNER_IS_NOT_REMOVE(40010,"群主无法移除"),
|
||||
|
||||
UPDATE_GROUP_BASE_INFO_ERROR(40011,"更新群信息失败"),
|
||||
|
||||
THIS_GROUP_IS_MUTE(40012,"该群禁止发言"),
|
||||
|
||||
IMPORT_GROUP_ERROR(40013,"导入群组失败"),
|
||||
|
||||
THIS_OPERATE_NEED_ONESELF(40014,"该操作只允许自己操作"),
|
||||
|
||||
PRIVATE_GROUP_CAN_NOT_DESTORY(40015,"私有群不允许解散"),
|
||||
|
||||
PUBLIC_GROUP_MUST_HAVE_OWNER(40016,"公开群必须指定群主"),
|
||||
|
||||
GROUP_MEMBER_IS_SPEAK(40017,"群成员被禁言"),
|
||||
|
||||
GROUP_IS_DESTROY(40018,"群组已解散"),
|
||||
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String error;
|
||||
|
||||
GroupErrorCode(int code, String error){
|
||||
this.code = code;
|
||||
this.error = error;
|
||||
}
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return this.error;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum GroupMemberRoleEnum {
|
||||
|
||||
/**
|
||||
* 普通成员
|
||||
*/
|
||||
ORDINARY(0),
|
||||
|
||||
/**
|
||||
* 管理员
|
||||
*/
|
||||
MAMAGER(1),
|
||||
|
||||
/**
|
||||
* 群主
|
||||
*/
|
||||
OWNER(2),
|
||||
|
||||
/**
|
||||
* 离开
|
||||
*/
|
||||
LEAVE(3);
|
||||
;
|
||||
|
||||
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 不能用 默认的 enumType b= enumType.values()[i]; 因为本枚举是类形式封装
|
||||
* @param ordinal
|
||||
* @return
|
||||
*/
|
||||
public static GroupMemberRoleEnum getItem(int ordinal) {
|
||||
for (int i = 0; i < GroupMemberRoleEnum.values().length; i++) {
|
||||
if (GroupMemberRoleEnum.values()[i].getCode() == ordinal) {
|
||||
return GroupMemberRoleEnum.values()[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
GroupMemberRoleEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum GroupMuteTypeEnum {
|
||||
|
||||
/**
|
||||
* 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
*/
|
||||
NOT_MUTE(0),
|
||||
|
||||
|
||||
MUTE(1),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* 不能用 默认的 enumType b= enumType.values()[i]; 因为本枚举是类形式封装
|
||||
* @param ordinal
|
||||
* @return
|
||||
*/
|
||||
public static GroupMuteTypeEnum getEnum(Integer ordinal) {
|
||||
|
||||
if(ordinal == null){
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < GroupMuteTypeEnum.values().length; i++) {
|
||||
if (GroupMuteTypeEnum.values()[i].getCode() == ordinal) {
|
||||
return GroupMuteTypeEnum.values()[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private int code;
|
||||
|
||||
GroupMuteTypeEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum GroupStatusEnum {
|
||||
|
||||
/**
|
||||
* 1正常 2解散 其他待定比如封禁...
|
||||
*/
|
||||
NORMAL(1),
|
||||
|
||||
DESTROY(2),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* 不能用 默认的 enumType b= enumType.values()[i]; 因为本枚举是类形式封装
|
||||
* @param ordinal
|
||||
* @return
|
||||
*/
|
||||
public static GroupStatusEnum getEnum(Integer ordinal) {
|
||||
|
||||
if(ordinal == null){
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < GroupStatusEnum.values().length; i++) {
|
||||
if (GroupStatusEnum.values()[i].getCode() == ordinal) {
|
||||
return GroupStatusEnum.values()[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private int code;
|
||||
|
||||
GroupStatusEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum GroupTypeEnum {
|
||||
|
||||
/**
|
||||
* 群类型 1私有群(类似微信) 2公开群(类似qq)
|
||||
*/
|
||||
PRIVATE(1),
|
||||
|
||||
PUBLIC(2),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* 不能用 默认的 enumType b= enumType.values()[i]; 因为本枚举是类形式封装
|
||||
* @param ordinal
|
||||
* @return
|
||||
*/
|
||||
public static GroupTypeEnum getEnum(Integer ordinal) {
|
||||
|
||||
if(ordinal == null){
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < GroupTypeEnum.values().length; i++) {
|
||||
if (GroupTypeEnum.values()[i].getCode() == ordinal) {
|
||||
return GroupTypeEnum.values()[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private int code;
|
||||
|
||||
GroupTypeEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
import com.lld.im.common.exception.ApplicationExceptionEnum;
|
||||
|
||||
public enum UserErrorCode implements ApplicationExceptionEnum {
|
||||
|
||||
|
||||
IMPORT_SIZE_BEYOND(20000,"导入數量超出上限"),
|
||||
USER_IS_NOT_EXIST(20001,"用户不存在"),
|
||||
SERVER_GET_USER_ERROR(20002,"服务获取用户失败"),
|
||||
MODIFY_USER_ERROR(20003,"更新用户失败"),
|
||||
SERVER_NOT_AVAILABLE(71000, "没有可用的服务"),
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String error;
|
||||
|
||||
UserErrorCode(int code, String error){
|
||||
this.code = code;
|
||||
this.error = error;
|
||||
}
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return this.error;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum UserForbiddenFlagEnum {
|
||||
|
||||
/**
|
||||
* 0 正常;1 禁用。
|
||||
*/
|
||||
NORMAL(0),
|
||||
|
||||
FORBIBBEN(1),
|
||||
;
|
||||
|
||||
private int code;
|
||||
|
||||
UserForbiddenFlagEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.common.enums;
|
||||
|
||||
public enum UserSilentFlagEnum {
|
||||
|
||||
/**
|
||||
* 0 正常;1 禁言。
|
||||
*/
|
||||
NORMAL(0),
|
||||
|
||||
MUTE(1),
|
||||
;
|
||||
|
||||
private int code;
|
||||
|
||||
UserSilentFlagEnum(int code){
|
||||
this.code=code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.lld.im.common.exception;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
public class ApplicationException extends RuntimeException {
|
||||
|
||||
private int code;
|
||||
|
||||
private String error;
|
||||
|
||||
|
||||
public ApplicationException(int code, String message) {
|
||||
super(message);
|
||||
this.code = code;
|
||||
this.error = message;
|
||||
}
|
||||
|
||||
public ApplicationException(ApplicationExceptionEnum exceptionEnum) {
|
||||
super(exceptionEnum.getError());
|
||||
this.code = exceptionEnum.getCode();
|
||||
this.error = exceptionEnum.getError();
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* avoid the expensive and useless stack trace for api exceptions
|
||||
* @see Throwable#fillInStackTrace()
|
||||
*/
|
||||
@Override
|
||||
public Throwable fillInStackTrace() {
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.lld.im.common.exception;
|
||||
|
||||
public interface ApplicationExceptionEnum {
|
||||
|
||||
int getCode();
|
||||
|
||||
String getError();
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.lld.im.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class ClientInfo {
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private Integer clientType;
|
||||
|
||||
private String imei;
|
||||
|
||||
public ClientInfo(Integer appId, Integer clientType, String imei) {
|
||||
this.appId = appId;
|
||||
this.clientType = clientType;
|
||||
this.imei = imei;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class RequestBase {
|
||||
private Integer appId;
|
||||
|
||||
private String operater;
|
||||
|
||||
private Integer clientType;
|
||||
|
||||
private String imei;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.lld.im.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class UserClientDto {
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private Integer clientType;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String imei;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.lld.im.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class UserSession {
|
||||
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 应用ID
|
||||
*/
|
||||
private Integer appId;
|
||||
|
||||
/**
|
||||
* 端的标识
|
||||
*/
|
||||
private Integer clientType;
|
||||
|
||||
//sdk 版本号
|
||||
private Integer version;
|
||||
|
||||
//连接状态 1=在线 2=离线
|
||||
private Integer connectState;
|
||||
|
||||
private Integer brokerId;
|
||||
|
||||
private String brokerHost;
|
||||
|
||||
private String imei;
|
||||
|
||||
}
|
||||
0
hs-im-server/im-service/im-service.iml
Normal file
0
hs-im-server/im-service/im-service.iml
Normal file
101
hs-im-server/im-service/pom.xml
Normal file
101
hs-im-server/im-service/pom.xml
Normal file
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>im-system</artifactId>
|
||||
<groupId>com.lld</groupId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<description>lld-im-service project</description>
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<artifactId>service</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- rabbitmq -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||
<!-- <artifactId>spring-boot-starter-amqp</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.github.sgroschupf</groupId>-->
|
||||
<!-- <artifactId>zkclient</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!-- redis -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||
<!-- <artifactId>spring-boot-starter-data-redis</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!-- spring boot web -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.lld</groupId>-->
|
||||
<!-- <artifactId>codec</artifactId>-->
|
||||
<!-- <version>1.0.0-SNAPSHOT</version>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!-- hutool -->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--MySQL JDBC驱动 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--MySQL -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- mybatis plus -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.jeffreyning</groupId>
|
||||
<artifactId>mybatisplus-plus</artifactId>
|
||||
<version>1.5.1-RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- common -->
|
||||
<dependency>
|
||||
<groupId>com.lld</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.lld.im.service;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
@MapperScan("com.lld.im.service.*.dao.mapper")
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.lld.im.service.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Configuration
|
||||
public class BeanConfig {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.lld.im.service.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Configuration
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/**")
|
||||
.allowedOrigins("*")
|
||||
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
|
||||
.allowCredentials(true)
|
||||
.maxAge(3600)
|
||||
.allowedHeaders("*");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.lld.im.service.exception;
|
||||
|
||||
import com.lld.im.common.BaseErrorCode;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.common.exception.ApplicationException;
|
||||
import org.hibernate.validator.internal.engine.path.PathImpl;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.FieldError;
|
||||
import org.springframework.validation.ObjectError;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import java.util.Set;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
|
||||
@ExceptionHandler(value=Exception.class)
|
||||
@ResponseBody
|
||||
public ResponseVO unknowException(Exception e){
|
||||
e.printStackTrace();
|
||||
ResponseVO resultBean =new ResponseVO();
|
||||
resultBean.setCode(BaseErrorCode.SYSTEM_ERROR.getCode());
|
||||
resultBean.setMsg(BaseErrorCode.SYSTEM_ERROR.getError());
|
||||
/**
|
||||
* 未知异常的话,这里写逻辑,发邮件,发短信都可以、、
|
||||
*/
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validator 参数校验异常处理
|
||||
*
|
||||
* @param ex
|
||||
* @return
|
||||
*/
|
||||
@ExceptionHandler(value = ConstraintViolationException.class)
|
||||
@ResponseBody
|
||||
public Object handleMethodArgumentNotValidException(ConstraintViolationException ex) {
|
||||
|
||||
Set<ConstraintViolation<?>> constraintViolations = ex.getConstraintViolations();
|
||||
ResponseVO resultBean =new ResponseVO();
|
||||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||||
for (ConstraintViolation<?> constraintViolation : constraintViolations) {
|
||||
PathImpl pathImpl = (PathImpl) constraintViolation.getPropertyPath();
|
||||
// 读取参数字段,constraintViolation.getMessage() 读取验证注解中的message值
|
||||
String paramName = pathImpl.getLeafNode().getName();
|
||||
String message = "参数{".concat(paramName).concat("}").concat(constraintViolation.getMessage());
|
||||
resultBean.setMsg(message);
|
||||
|
||||
return resultBean;
|
||||
}
|
||||
resultBean.setMsg(BaseErrorCode.PARAMETER_ERROR.getError() + ex.getMessage());
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
@ExceptionHandler(ApplicationException.class)
|
||||
@ResponseBody
|
||||
public Object applicationExceptionHandler(ApplicationException e) {
|
||||
// 使用公共的结果类封装返回结果, 这里我指定状态码为
|
||||
ResponseVO resultBean =new ResponseVO();
|
||||
resultBean.setCode(e.getCode());
|
||||
resultBean.setMsg(e.getError());
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validator 参数校验异常处理
|
||||
*
|
||||
* @param ex
|
||||
* @return
|
||||
*/
|
||||
@ExceptionHandler(value = BindException.class)
|
||||
@ResponseBody
|
||||
public Object handleException2(BindException ex) {
|
||||
FieldError err = ex.getFieldError();
|
||||
String message = "参数{".concat(err.getField()).concat("}").concat(err.getDefaultMessage());
|
||||
ResponseVO resultBean =new ResponseVO();
|
||||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||||
resultBean.setMsg(message);
|
||||
return resultBean;
|
||||
|
||||
|
||||
}
|
||||
|
||||
//json格式
|
||||
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
||||
@ResponseBody
|
||||
public Object handleException1(MethodArgumentNotValidException ex) {
|
||||
StringBuilder errorMsg = new StringBuilder();
|
||||
BindingResult re = ex.getBindingResult();
|
||||
for (ObjectError error : re.getAllErrors()) {
|
||||
errorMsg.append(error.getDefaultMessage()).append(",");
|
||||
}
|
||||
errorMsg.delete(errorMsg.length() - 1, errorMsg.length());
|
||||
|
||||
ResponseVO resultBean =new ResponseVO();
|
||||
resultBean.setCode(BaseErrorCode.PARAMETER_ERROR.getCode());
|
||||
resultBean.setMsg(BaseErrorCode.PARAMETER_ERROR.getError() + " : " + errorMsg.toString());
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.lld.im.service.friendship.controller;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.model.req.*;
|
||||
import com.lld.im.service.friendship.service.ImFriendService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("v1/friendship")
|
||||
public class ImFriendShipController {
|
||||
|
||||
@Autowired
|
||||
ImFriendService imFriendShipService;
|
||||
|
||||
@RequestMapping("/importFriendShip")
|
||||
public ResponseVO importFriendShip(@RequestBody @Validated ImporFriendShipReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.importFriendShip(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/addFriend")
|
||||
public ResponseVO addFriend(@RequestBody @Validated AddFriendReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.addFriend(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/updateFriend")
|
||||
public ResponseVO updateFriend(@RequestBody @Validated UpdateFriendReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.updateFriend(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/deleteFriend")
|
||||
public ResponseVO deleteFriend(@RequestBody @Validated DeleteFriendReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.deleteFriend(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/deleteAllFriend")
|
||||
public ResponseVO deleteAllFriend(@RequestBody @Validated DeleteFriendReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.deleteAllFriend(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/getAllFriendShip")
|
||||
public ResponseVO getAllFriendShip(@RequestBody @Validated GetAllFriendShipReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.getAllFriendShip(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/getRelation")
|
||||
public ResponseVO getRelation(@RequestBody @Validated GetRelationReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.getRelation(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/checkFriend")
|
||||
public ResponseVO checkFriend(@RequestBody @Validated CheckFriendShipReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.checkFriendship(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/addBlack")
|
||||
public ResponseVO addBlack(@RequestBody @Validated AddFriendShipBlackReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.addBlack(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/deleteBlack")
|
||||
public ResponseVO deleteBlack(@RequestBody @Validated DeleteBlackReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.deleteBlack(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/checkBlck")
|
||||
public ResponseVO checkBlck(@RequestBody @Validated CheckFriendShipReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipService.checkBlck(req);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.lld.im.service.friendship.controller;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupReq;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupMemberService;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping("v1/friendship/group")
|
||||
public class ImFriendShipGroupController {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupService imFriendShipGroupService;
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupMemberService imFriendShipGroupMemberService;
|
||||
|
||||
|
||||
@RequestMapping("/add")
|
||||
public ResponseVO add(@RequestBody @Validated AddFriendShipGroupReq req, Integer appId) {
|
||||
req.setAppId(appId);
|
||||
return imFriendShipGroupService.addGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/del")
|
||||
public ResponseVO del(@RequestBody @Validated DeleteFriendShipGroupReq req, Integer appId) {
|
||||
req.setAppId(appId);
|
||||
return imFriendShipGroupService.deleteGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/member/add")
|
||||
public ResponseVO memberAdd(@RequestBody @Validated AddFriendShipGroupMemberReq req, Integer appId) {
|
||||
req.setAppId(appId);
|
||||
return imFriendShipGroupMemberService.addGroupMember(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/member/del")
|
||||
public ResponseVO memberdel(@RequestBody @Validated DeleteFriendShipGroupMemberReq req, Integer appId) {
|
||||
req.setAppId(appId);
|
||||
return imFriendShipGroupMemberService.delGroupMember(req);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.lld.im.service.friendship.controller;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.model.req.ApproverFriendRequestReq;
|
||||
import com.lld.im.service.friendship.model.req.GetFriendShipRequestReq;
|
||||
import com.lld.im.service.friendship.model.req.ReadFriendShipRequestReq;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipRequestService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequestMapping("v1/friendshipRequest")
|
||||
public class ImFriendShipRequestController {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipRequestService imFriendShipRequestService;
|
||||
|
||||
@RequestMapping("/approveFriendRequest")
|
||||
public ResponseVO approveFriendRequest(@RequestBody @Validated
|
||||
ApproverFriendRequestReq req, Integer appId, String identifier){
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return imFriendShipRequestService.approverFriendRequest(req);
|
||||
}
|
||||
@RequestMapping("/getFriendRequest")
|
||||
public ResponseVO getFriendRequest(@RequestBody @Validated GetFriendShipRequestReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipRequestService.getFriendRequest(req.getFromId(),req.getAppId());
|
||||
}
|
||||
|
||||
@RequestMapping("/readFriendShipRequestReq")
|
||||
public ResponseVO readFriendShipRequestReq(@RequestBody @Validated ReadFriendShipRequestReq req, Integer appId){
|
||||
req.setAppId(appId);
|
||||
return imFriendShipRequestService.readFriendShipRequestReq(req);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.lld.im.service.friendship.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.github.jeffreyning.mybatisplus.anno.AutoMap;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
|
||||
@Data
|
||||
@TableName("im_friendship")
|
||||
@AutoMap
|
||||
public class ImFriendShipEntity {
|
||||
|
||||
@TableField(value = "app_id")
|
||||
private Integer appId;
|
||||
|
||||
@TableField(value = "from_id")
|
||||
private String fromId;
|
||||
|
||||
@TableField(value = "to_id")
|
||||
private String toId;
|
||||
/** 备注*/
|
||||
private String remark;
|
||||
/** 状态 1正常 2删除*/
|
||||
private Integer status;
|
||||
/** 状态 1正常 2拉黑*/
|
||||
private Integer black;
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private Long createTime;
|
||||
/** 好友关系序列号*/
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private Long friendSequence;
|
||||
|
||||
/** 黑名单关系序列号*/
|
||||
private Long blackSequence;
|
||||
/** 好友来源*/
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private String addSource;
|
||||
|
||||
private String extra;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.lld.im.service.friendship.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("im_friendship_group")
|
||||
public class ImFriendShipGroupEntity {
|
||||
|
||||
@TableId(value = "group_id",type = IdType.AUTO)
|
||||
private Long groupId;
|
||||
|
||||
private String fromId;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private String groupName;
|
||||
/** 备注*/
|
||||
private Long createTime;
|
||||
|
||||
/** 备注*/
|
||||
private Long updateTime;
|
||||
|
||||
/** 序列号*/
|
||||
private Long sequence;
|
||||
|
||||
private int delFlag;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.lld.im.service.friendship.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
@TableName("im_friendship_group_member")
|
||||
public class ImFriendShipGroupMemberEntity {
|
||||
|
||||
@TableId(value = "group_id")
|
||||
private Long groupId;
|
||||
|
||||
private String toId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.lld.im.service.friendship.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
@TableName("im_friendship_request")
|
||||
public class ImFriendShipRequestEntity {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private String fromId;
|
||||
|
||||
private String toId;
|
||||
/** 备注*/
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private String remark;
|
||||
|
||||
//是否已读 1已读
|
||||
private Integer readStatus;
|
||||
|
||||
/** 好友来源*/
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private String addSource;
|
||||
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private String addWording;
|
||||
|
||||
//审批状态 1同意 2拒绝
|
||||
private Integer approveStatus;
|
||||
|
||||
// @TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private Long createTime;
|
||||
|
||||
private Long updateTime;
|
||||
|
||||
/** 序列号*/
|
||||
private Long sequence;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.lld.im.service.friendship.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupEntity;
|
||||
|
||||
public interface ImFriendShipGroupMapper extends BaseMapper<ImFriendShipGroupEntity> {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.lld.im.service.friendship.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupMemberEntity;
|
||||
|
||||
public interface ImFriendShipGroupMemberMapper extends BaseMapper<ImFriendShipGroupMemberEntity> {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.lld.im.service.friendship.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipEntity;
|
||||
import com.lld.im.service.friendship.model.req.CheckFriendShipReq;
|
||||
import com.lld.im.service.friendship.model.resp.CheckFriendShipResp;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface ImFriendShipMapper extends BaseMapper<ImFriendShipEntity> {
|
||||
|
||||
|
||||
|
||||
|
||||
@Select("<script>"+
|
||||
"select from_id as fromId , to_id as toId ,if(status = 1,1,0) as status from im_friendship where from_id = #{fromId} and to_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close = ')' open='(' > " +
|
||||
"#{id}" +
|
||||
"</foreach>" +
|
||||
"</script>")
|
||||
public List<CheckFriendShipResp> checkFriendShip(CheckFriendShipReq req);
|
||||
|
||||
|
||||
@Select("<script>" +
|
||||
" select a.fromId,a.toId , ( \n" +
|
||||
" case \n" +
|
||||
" when a.status = 1 and b.status = 1 then 1 \n" +
|
||||
" when a.status = 1 and b.status != 1 then 2 \n" +
|
||||
" when a.status != 1 and b.status = 1 then 3 \n" +
|
||||
" when a.status != 1 and b.status != 1 then 4 \n" +
|
||||
" end \n" +
|
||||
" ) \n " +
|
||||
" as status from "+
|
||||
" (select from_id AS fromId , to_id AS toId , if(status = 1,1,0) as status from im_friendship where app_id = #{appId} and from_id = #{fromId} AND to_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close=')' open='('>" +
|
||||
" #{id} " +
|
||||
"</foreach>" +
|
||||
" ) as a INNER join" +
|
||||
" (select from_id AS fromId, to_id AS toId , if(status = 1,1,0) as status from im_friendship where app_id = #{appId} and to_id = #{fromId} AND from_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close=')' open='('>" +
|
||||
" #{id} " +
|
||||
"</foreach>" +
|
||||
" ) as b " +
|
||||
" on a.fromId = b.toId AND b.fromId = a.toId "+
|
||||
"</script>"
|
||||
)
|
||||
List<CheckFriendShipResp> checkFriendShipBoth(CheckFriendShipReq toId);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Select("<script>" +
|
||||
" select from_id AS fromId, to_id AS toId , if(black = 1,1,0) as status from im_friendship where app_id = #{appId} and from_id = #{fromId} and to_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close=')' open='('>" +
|
||||
" #{id} " +
|
||||
"</foreach>" +
|
||||
"</script>"
|
||||
)
|
||||
List<CheckFriendShipResp> checkFriendShipBlack(CheckFriendShipReq req);
|
||||
|
||||
@Select("<script>" +
|
||||
" select a.fromId,a.toId , ( \n" +
|
||||
" case \n" +
|
||||
" when a.black = 1 and b.black = 1 then 1 \n" +
|
||||
" when a.black = 1 and b.black != 1 then 2 \n" +
|
||||
" when a.black != 1 and b.black = 1 then 3 \n" +
|
||||
" when a.black != 1 and b.black != 1 then 4 \n" +
|
||||
" end \n" +
|
||||
" ) \n " +
|
||||
" as status from "+
|
||||
" (select from_id AS fromId , to_id AS toId , if(black = 1,1,0) as black from im_friendship where app_id = #{appId} and from_id = #{fromId} AND to_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close=')' open='('>" +
|
||||
" #{id} " +
|
||||
"</foreach>" +
|
||||
" ) as a INNER join" +
|
||||
" (select from_id AS fromId, to_id AS toId , if(black = 1,1,0) as black from im_friendship where app_id = #{appId} and to_id = #{fromId} AND from_id in " +
|
||||
"<foreach collection='toIds' index='index' item='id' separator=',' close=')' open='('>" +
|
||||
" #{id} " +
|
||||
"</foreach>" +
|
||||
" ) as b " +
|
||||
" on a.fromId = b.toId AND b.fromId = a.toId "+
|
||||
"</script>"
|
||||
)
|
||||
List<CheckFriendShipResp> checkFriendShipBlackBoth(CheckFriendShipReq toId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.lld.im.service.friendship.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipRequestEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface ImFriendShipRequestMapper extends BaseMapper<ImFriendShipRequestEntity> {
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
|
||||
@Data
|
||||
public class AddFriendReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotNull(message = "toItem不能为空")
|
||||
private FriendDto toItem;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class AddFriendShipBlackReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String fromId;
|
||||
|
||||
private String toId;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class AddFriendShipGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotBlank(message = "分组名称不能为空")
|
||||
private String groupName;
|
||||
|
||||
@NotEmpty(message = "请选择用户")
|
||||
private List<String> toIds;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class AddFriendShipGroupReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
public String fromId;
|
||||
|
||||
@NotBlank(message = "分组名称不能为空")
|
||||
private String groupName;
|
||||
|
||||
private List<String> toIds;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
public class ApproverFriendRequestReq extends RequestBase {
|
||||
|
||||
private Long id;
|
||||
|
||||
//1同意 2拒绝
|
||||
private Integer status;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class CheckFriendShipReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotEmpty(message = "toIds不能为空")
|
||||
private List<String> toIds;
|
||||
|
||||
@NotNull(message = "checkType不能为空")
|
||||
private Integer checkType;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class DeleteBlackReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotBlank(message = "好友id不能为空")
|
||||
private String toId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class DeleteFriendReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotBlank(message = "toId不能为空")
|
||||
private String toId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class DeleteFriendShipGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotBlank(message = "分组名称不能为空")
|
||||
private String groupName;
|
||||
|
||||
@NotEmpty(message = "请选择用户")
|
||||
private List<String> toIds;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description: 删除分组,同时删除分组下的成员
|
||||
**/
|
||||
@Data
|
||||
public class DeleteFriendShipGroupReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotEmpty(message = "分组名称不能为空")
|
||||
private List<String> groupName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
public class FriendDto {
|
||||
|
||||
private String toId;
|
||||
|
||||
private String remark;
|
||||
|
||||
private String addSource;
|
||||
|
||||
private String extra;
|
||||
|
||||
private String addWording;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class GetAllFriendShipReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String fromId;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class GetFriendShipRequestReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String fromId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class GetRelationReq extends RequestBase {
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotBlank(message = "toId不能为空")
|
||||
private String toId;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.enums.FriendShipStatusEnum;
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class ImporFriendShipReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
private List<ImportFriendDto> friendItem;
|
||||
|
||||
@Data
|
||||
public static class ImportFriendDto{
|
||||
|
||||
private String toId;
|
||||
|
||||
private String remark;
|
||||
|
||||
private String addSource;
|
||||
|
||||
private Integer status = FriendShipStatusEnum.FRIEND_STATUS_NO_FRIEND.getCode();
|
||||
|
||||
private Integer black = FriendShipStatusEnum.BLACK_STATUS_NORMAL.getCode();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
@Data
|
||||
public class ReadFriendShipRequestReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String fromId;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.lld.im.service.friendship.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
|
||||
@Data
|
||||
public class UpdateFriendReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "fromId不能为空")
|
||||
private String fromId;
|
||||
|
||||
@NotNull(message = "toItem不能为空")
|
||||
private FriendDto toItem;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.lld.im.service.friendship.model.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
public class CheckFriendShipResp {
|
||||
|
||||
private String fromId;
|
||||
|
||||
private String toId;
|
||||
|
||||
|
||||
//校验状态,根据双向校验和单向校验有不同的status
|
||||
//单向校验:1 from添加了to,不确定to是否添加了from CheckResult_single_Type_AWithB;
|
||||
// 0 from没有添加to,也不确定to有没有添加from CheckResult_single_Type_NoRelation
|
||||
//双向校验 1 from添加了to,to也添加了from CheckResult_Type_BothWay
|
||||
// 2 from添加了t0,to没有添加from CheckResult_Both_Type_AWithB
|
||||
// 3 from没有添加to,to添加了from, CheckResult_Both_Type_BWithA
|
||||
// 4 双方都没有添加 CheckResult_Both_Type_NoRelation
|
||||
|
||||
//单向校验黑名单:1 from没有拉黑to,不确定to是否拉黑了from CheckResult_singe_Type_AWithB;
|
||||
// 0 from拉黑to,不确定to是佛拉黑from CheckResult_singe_Type_NoRelation
|
||||
//双向校验黑名单 1 from没有拉黑to,to也没有拉黑from CheckResult_Type_BothWay
|
||||
// 2 from没有拉黑to,to拉黑from CheckResult_Both_Type_AWithB
|
||||
// 3 from拉黑了to,to没有拉黑from CheckResult_Both_Type_BWithA
|
||||
// 4 双方都拉黑 CheckResult_Both_Type_NoRelation
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.lld.im.service.friendship.model.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class ImportFriendShipResp {
|
||||
|
||||
private List<String> successId;
|
||||
|
||||
private List<String> errorId;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.lld.im.service.friendship.service;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import com.lld.im.service.friendship.model.req.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface ImFriendService {
|
||||
|
||||
public ResponseVO importFriendShip(ImporFriendShipReq req);
|
||||
|
||||
public ResponseVO addFriend(AddFriendReq req);
|
||||
|
||||
public ResponseVO updateFriend(UpdateFriendReq req);
|
||||
|
||||
public ResponseVO deleteFriend(DeleteFriendReq req);
|
||||
|
||||
public ResponseVO deleteAllFriend(DeleteFriendReq req);
|
||||
|
||||
public ResponseVO getAllFriendShip(GetAllFriendShipReq req);
|
||||
|
||||
public ResponseVO getRelation(GetRelationReq req);
|
||||
|
||||
public ResponseVO doAddFriend(RequestBase requestBase,String fromId, FriendDto dto, Integer appId);
|
||||
|
||||
public ResponseVO checkFriendship(CheckFriendShipReq req);
|
||||
|
||||
public ResponseVO addBlack(AddFriendShipBlackReq req);
|
||||
|
||||
public ResponseVO deleteBlack(DeleteBlackReq req);
|
||||
|
||||
public ResponseVO checkBlck(CheckFriendShipReq req);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.lld.im.service.friendship.service;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupMemberReq;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
public interface ImFriendShipGroupMemberService {
|
||||
|
||||
public ResponseVO addGroupMember(AddFriendShipGroupMemberReq req);
|
||||
|
||||
public ResponseVO delGroupMember(DeleteFriendShipGroupMemberReq req);
|
||||
|
||||
public int doAddGroupMember(Long groupId, String toId);
|
||||
|
||||
public int clearGroupMember(Long groupId);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.lld.im.service.friendship.service;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupEntity;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupReq;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
public interface ImFriendShipGroupService {
|
||||
|
||||
public ResponseVO addGroup(AddFriendShipGroupReq req);
|
||||
|
||||
public ResponseVO deleteGroup(DeleteFriendShipGroupReq req);
|
||||
|
||||
public ResponseVO<ImFriendShipGroupEntity> getGroup(String fromId, String groupName, Integer appId);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.lld.im.service.friendship.service;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.model.req.ApproverFriendRequestReq;
|
||||
import com.lld.im.service.friendship.model.req.FriendDto;
|
||||
import com.lld.im.service.friendship.model.req.ReadFriendShipRequestReq;
|
||||
|
||||
|
||||
public interface ImFriendShipRequestService {
|
||||
|
||||
public ResponseVO addFienshipRequest(String fromId, FriendDto dto, Integer appId);
|
||||
|
||||
public ResponseVO approverFriendRequest(ApproverFriendRequestReq req);
|
||||
|
||||
public ResponseVO readFriendShipRequestReq(ReadFriendShipRequestReq req);
|
||||
|
||||
public ResponseVO getFriendRequest(String fromId, Integer appId);
|
||||
}
|
||||
@@ -0,0 +1,439 @@
|
||||
package com.lld.im.service.friendship.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.common.enums.AllowFriendTypeEnum;
|
||||
import com.lld.im.common.enums.CheckFriendShipTypeEnum;
|
||||
import com.lld.im.common.enums.FriendShipErrorCode;
|
||||
import com.lld.im.common.enums.FriendShipStatusEnum;
|
||||
import com.lld.im.common.exception.ApplicationException;
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipEntity;
|
||||
import com.lld.im.service.friendship.dao.mapper.ImFriendShipMapper;
|
||||
import com.lld.im.service.friendship.model.req.*;
|
||||
import com.lld.im.service.friendship.model.resp.CheckFriendShipResp;
|
||||
import com.lld.im.service.friendship.model.resp.ImportFriendShipResp;
|
||||
import com.lld.im.service.friendship.service.ImFriendService;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipRequestService;
|
||||
import com.lld.im.service.user.dao.ImUserDataEntity;
|
||||
import com.lld.im.service.user.service.ImUserService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Service
|
||||
public class ImFriendServiceImpl implements ImFriendService {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipMapper imFriendShipMapper;
|
||||
|
||||
@Autowired
|
||||
ImUserService imUserService;
|
||||
|
||||
@Autowired
|
||||
ImFriendService imFriendService;
|
||||
|
||||
@Autowired
|
||||
ImFriendShipRequestService imFriendShipRequestService;
|
||||
|
||||
@Override
|
||||
public ResponseVO importFriendShip(ImporFriendShipReq req) {
|
||||
|
||||
if(req.getFriendItem().size() > 100){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.IMPORT_SIZE_BEYOND);
|
||||
}
|
||||
ImportFriendShipResp resp = new ImportFriendShipResp();
|
||||
List<String> successId = new ArrayList<>();
|
||||
List<String> errorId = new ArrayList<>();
|
||||
|
||||
for (ImporFriendShipReq.ImportFriendDto dto:
|
||||
req.getFriendItem()) {
|
||||
ImFriendShipEntity entity = new ImFriendShipEntity();
|
||||
BeanUtils.copyProperties(dto,entity);
|
||||
entity.setAppId(req.getAppId());
|
||||
entity.setFromId(req.getFromId());
|
||||
try {
|
||||
int insert = imFriendShipMapper.insert(entity);
|
||||
if(insert == 1){
|
||||
successId.add(dto.getToId());
|
||||
}else{
|
||||
errorId.add(dto.getToId());
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
errorId.add(dto.getToId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
resp.setErrorId(errorId);
|
||||
resp.setSuccessId(successId);
|
||||
|
||||
return ResponseVO.successResponse(resp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO addFriend(AddFriendReq req) {
|
||||
|
||||
ResponseVO<ImUserDataEntity> fromInfo = imUserService.getSingleUserInfo(req.getFromId(), req.getAppId());
|
||||
if(!fromInfo.isOk()){
|
||||
return fromInfo;
|
||||
}
|
||||
|
||||
ResponseVO<ImUserDataEntity> toInfo = imUserService.getSingleUserInfo(req.getToItem().getToId(), req.getAppId());
|
||||
if(!toInfo.isOk()){
|
||||
return toInfo;
|
||||
}
|
||||
|
||||
ImUserDataEntity data = toInfo.getData();
|
||||
|
||||
if(data.getFriendAllowType() != null && data.getFriendAllowType() == AllowFriendTypeEnum.NOT_NEED.getCode()){
|
||||
return this.doAddFriend(req,req.getFromId(), req.getToItem(), req.getAppId());
|
||||
}else{
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
query.eq("to_id",req.getToItem().getToId());
|
||||
ImFriendShipEntity fromItem = imFriendShipMapper.selectOne(query);
|
||||
if(fromItem == null || fromItem.getStatus()
|
||||
!= FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode()){
|
||||
//插入一条好友申请的数据
|
||||
ResponseVO responseVO = imFriendShipRequestService.addFienshipRequest(req.getFromId(), req.getToItem(), req.getAppId());
|
||||
if(!responseVO.isOk()){
|
||||
return responseVO;
|
||||
}
|
||||
}else{
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.TO_IS_YOUR_FRIEND);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO updateFriend(UpdateFriendReq req) {
|
||||
|
||||
ResponseVO<ImUserDataEntity> fromInfo = imUserService.getSingleUserInfo(req.getFromId(), req.getAppId());
|
||||
if(!fromInfo.isOk()){
|
||||
return fromInfo;
|
||||
}
|
||||
|
||||
ResponseVO<ImUserDataEntity> toInfo = imUserService.getSingleUserInfo(req.getToItem().getToId(), req.getAppId());
|
||||
if(!toInfo.isOk()){
|
||||
return toInfo;
|
||||
}
|
||||
|
||||
ResponseVO responseVO = this.doUpdate(req.getFromId(), req.getToItem(), req.getAppId());
|
||||
return responseVO;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public ResponseVO doUpdate(String fromId, FriendDto dto,Integer appId){
|
||||
|
||||
|
||||
UpdateWrapper<ImFriendShipEntity> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.lambda().set(ImFriendShipEntity::getAddSource,dto.getAddSource())
|
||||
.set(ImFriendShipEntity::getExtra,dto.getExtra())
|
||||
.set(ImFriendShipEntity::getRemark,dto.getRemark())
|
||||
.eq(ImFriendShipEntity::getAppId,appId)
|
||||
.eq(ImFriendShipEntity::getToId,dto.getToId())
|
||||
.eq(ImFriendShipEntity::getFromId,fromId);
|
||||
|
||||
int update = imFriendShipMapper.update(null, updateWrapper);
|
||||
if(update == 1){
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
return ResponseVO.errorResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ResponseVO doAddFriend(RequestBase requestBase,String fromId, FriendDto dto, Integer appId){
|
||||
|
||||
//A-B
|
||||
//Friend表插入A 和 B 两条记录
|
||||
//查询是否有记录存在,如果存在则判断状态,如果是已添加,则提示已添加,如果是未添加,则修改状态
|
||||
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",appId);
|
||||
query.eq("from_id",fromId);
|
||||
query.eq("to_id",dto.getToId());
|
||||
ImFriendShipEntity fromItem = imFriendShipMapper.selectOne(query);
|
||||
if(fromItem == null){
|
||||
//走添加逻辑。
|
||||
fromItem = new ImFriendShipEntity();
|
||||
fromItem.setAppId(appId);
|
||||
fromItem.setFromId(fromId);
|
||||
// entity.setToId(to);
|
||||
BeanUtils.copyProperties(dto,fromItem);
|
||||
fromItem.setStatus(FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode());
|
||||
fromItem.setCreateTime(System.currentTimeMillis());
|
||||
int insert = imFriendShipMapper.insert(fromItem);
|
||||
if(insert != 1){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.ADD_FRIEND_ERROR);
|
||||
}
|
||||
} else{
|
||||
//如果存在则判断状态,如果是已添加,则提示已添加,如果是未添加,则修改状态
|
||||
if(fromItem.getStatus() == FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode()){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.TO_IS_YOUR_FRIEND);
|
||||
} else{
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
|
||||
if(StringUtils.isNotBlank(dto.getAddSource())){
|
||||
update.setAddSource(dto.getAddSource());
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(dto.getRemark())){
|
||||
update.setRemark(dto.getRemark());
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(dto.getExtra())){
|
||||
update.setExtra(dto.getExtra());
|
||||
}
|
||||
update.setStatus(FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode());
|
||||
|
||||
int result = imFriendShipMapper.update(update, query);
|
||||
if(result != 1){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.ADD_FRIEND_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QueryWrapper<ImFriendShipEntity> toQuery = new QueryWrapper<>();
|
||||
toQuery.eq("app_id",appId);
|
||||
toQuery.eq("from_id",dto.getToId());
|
||||
toQuery.eq("to_id",fromId);
|
||||
ImFriendShipEntity toItem = imFriendShipMapper.selectOne(toQuery);
|
||||
if(toItem == null){
|
||||
toItem = new ImFriendShipEntity();
|
||||
toItem.setAppId(appId);
|
||||
toItem.setFromId(dto.getToId());
|
||||
BeanUtils.copyProperties(dto,toItem);
|
||||
toItem.setToId(fromId);
|
||||
toItem.setStatus(FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode());
|
||||
toItem.setCreateTime(System.currentTimeMillis());
|
||||
// toItem.setBlack(FriendShipStatusEnum.BLACK_STATUS_NORMAL.getCode());
|
||||
int insert = imFriendShipMapper.insert(toItem);
|
||||
}else{
|
||||
if(FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode() !=
|
||||
toItem.getStatus()){
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
update.setStatus(FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode());
|
||||
imFriendShipMapper.update(update,toQuery);
|
||||
}
|
||||
}
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResponseVO deleteFriend(DeleteFriendReq req) {
|
||||
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
query.eq("to_id",req.getToId());
|
||||
ImFriendShipEntity fromItem = imFriendShipMapper.selectOne(query);
|
||||
if(fromItem == null){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.TO_IS_NOT_YOUR_FRIEND);
|
||||
}else{
|
||||
if(fromItem.getStatus() != null && fromItem.getStatus() == FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode()){
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
update.setStatus(FriendShipStatusEnum.FRIEND_STATUS_DELETE.getCode());
|
||||
imFriendShipMapper.update(update,query);
|
||||
|
||||
}else{
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_IS_DELETED);
|
||||
}
|
||||
}
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO deleteAllFriend(DeleteFriendReq req) {
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
query.eq("status",FriendShipStatusEnum.FRIEND_STATUS_NORMAL.getCode());
|
||||
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
update.setStatus(FriendShipStatusEnum.FRIEND_STATUS_DELETE.getCode());
|
||||
imFriendShipMapper.update(update,query);
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO getAllFriendShip(GetAllFriendShipReq req) {
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
return ResponseVO.successResponse(imFriendShipMapper.selectList(query));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO getRelation(GetRelationReq req) {
|
||||
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
query.eq("to_id",req.getToId());
|
||||
|
||||
ImFriendShipEntity entity = imFriendShipMapper.selectOne(query);
|
||||
if(entity == null){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.REPEATSHIP_IS_NOT_EXIST);
|
||||
}
|
||||
return ResponseVO.successResponse(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO checkBlck(CheckFriendShipReq req) {
|
||||
|
||||
Map<String, Integer> toIdMap
|
||||
= req.getToIds().stream().collect(Collectors
|
||||
.toMap(Function.identity(), s -> 0));
|
||||
List<CheckFriendShipResp> result = new ArrayList<>();
|
||||
if (req.getCheckType() == CheckFriendShipTypeEnum.SINGLE.getType()) {
|
||||
result = imFriendShipMapper.checkFriendShipBlack(req);
|
||||
} else {
|
||||
result = imFriendShipMapper.checkFriendShipBlackBoth(req);
|
||||
}
|
||||
|
||||
Map<String, Integer> collect = result.stream()
|
||||
.collect(Collectors
|
||||
.toMap(CheckFriendShipResp::getToId,
|
||||
CheckFriendShipResp::getStatus));
|
||||
for (String toId:
|
||||
toIdMap.keySet()) {
|
||||
if(!collect.containsKey(toId)){
|
||||
CheckFriendShipResp checkFriendShipResp = new CheckFriendShipResp();
|
||||
checkFriendShipResp.setToId(toId);
|
||||
checkFriendShipResp.setFromId(req.getFromId());
|
||||
checkFriendShipResp.setStatus(toIdMap.get(toId));
|
||||
result.add(checkFriendShipResp);
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse(result);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResponseVO addBlack(AddFriendShipBlackReq req) {
|
||||
|
||||
ResponseVO<ImUserDataEntity> fromInfo = imUserService.getSingleUserInfo(req.getFromId(), req.getAppId());
|
||||
if(!fromInfo.isOk()){
|
||||
return fromInfo;
|
||||
}
|
||||
|
||||
ResponseVO<ImUserDataEntity> toInfo = imUserService.getSingleUserInfo(req.getToId(), req.getAppId());
|
||||
if(!toInfo.isOk()){
|
||||
return toInfo;
|
||||
}
|
||||
QueryWrapper<ImFriendShipEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id",req.getAppId());
|
||||
query.eq("from_id",req.getFromId());
|
||||
query.eq("to_id",req.getToId());
|
||||
|
||||
ImFriendShipEntity fromItem = imFriendShipMapper.selectOne(query);
|
||||
if(fromItem == null){
|
||||
//走添加逻辑。
|
||||
fromItem = new ImFriendShipEntity();
|
||||
fromItem.setFromId(req.getFromId());
|
||||
fromItem.setToId(req.getToId());
|
||||
fromItem.setAppId(req.getAppId());
|
||||
fromItem.setBlack(FriendShipStatusEnum.BLACK_STATUS_BLACKED.getCode());
|
||||
fromItem.setCreateTime(System.currentTimeMillis());
|
||||
int insert = imFriendShipMapper.insert(fromItem);
|
||||
if(insert != 1){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.ADD_FRIEND_ERROR);
|
||||
}
|
||||
|
||||
} else{
|
||||
//如果存在则判断状态,如果是拉黑,则提示已拉黑,如果是未拉黑,则修改状态
|
||||
if(fromItem.getBlack() != null && fromItem.getBlack() == FriendShipStatusEnum.BLACK_STATUS_BLACKED.getCode()){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_IS_BLACK);
|
||||
} else {
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
update.setBlack(FriendShipStatusEnum.BLACK_STATUS_BLACKED.getCode());
|
||||
int result = imFriendShipMapper.update(update, query);
|
||||
if(result != 1){
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.ADD_BLACK_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO deleteBlack(DeleteBlackReq req) {
|
||||
QueryWrapper queryFrom = new QueryWrapper<>()
|
||||
.eq("from_id", req.getFromId())
|
||||
.eq("app_id", req.getAppId())
|
||||
.eq("to_id", req.getToId());
|
||||
ImFriendShipEntity fromItem = imFriendShipMapper.selectOne(queryFrom);
|
||||
if (fromItem.getBlack() != null && fromItem.getBlack() == FriendShipStatusEnum.BLACK_STATUS_NORMAL.getCode()) {
|
||||
throw new ApplicationException(FriendShipErrorCode.FRIEND_IS_NOT_YOUR_BLACK);
|
||||
}
|
||||
|
||||
ImFriendShipEntity update = new ImFriendShipEntity();
|
||||
update.setBlack(FriendShipStatusEnum.BLACK_STATUS_NORMAL.getCode());
|
||||
int update1 = imFriendShipMapper.update(update, queryFrom);
|
||||
if(update1 == 1){
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
return ResponseVO.errorResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO checkFriendship(CheckFriendShipReq req) {
|
||||
|
||||
Map<String, Integer> result
|
||||
= req.getToIds().stream()
|
||||
.collect(Collectors.toMap(Function.identity(), s -> 0));
|
||||
|
||||
List<CheckFriendShipResp> resp = new ArrayList<>();
|
||||
|
||||
if(req.getCheckType() == CheckFriendShipTypeEnum.SINGLE.getType()){
|
||||
resp =imFriendShipMapper.checkFriendShip(req);
|
||||
}else {
|
||||
resp =imFriendShipMapper.checkFriendShipBoth(req);
|
||||
}
|
||||
|
||||
Map<String, Integer> collect = resp.stream()
|
||||
.collect(Collectors.toMap(CheckFriendShipResp::getToId
|
||||
, CheckFriendShipResp::getStatus));
|
||||
|
||||
for (String toId : result.keySet()){
|
||||
if(!collect.containsKey(toId)){
|
||||
CheckFriendShipResp checkFriendShipResp = new CheckFriendShipResp();
|
||||
checkFriendShipResp.setFromId(req.getFromId());
|
||||
checkFriendShipResp.setToId(toId);
|
||||
checkFriendShipResp.setStatus(result.get(toId));
|
||||
resp.add(checkFriendShipResp);
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse(resp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
package com.lld.im.service.friendship.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupEntity;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupMemberEntity;
|
||||
import com.lld.im.service.friendship.dao.mapper.ImFriendShipGroupMemberMapper;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupMemberService;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupService;
|
||||
import com.lld.im.service.user.dao.ImUserDataEntity;
|
||||
import com.lld.im.service.user.service.ImUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Service
|
||||
public class ImFriendShipGroupMemberServiceImpl
|
||||
implements ImFriendShipGroupMemberService {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupMemberMapper imFriendShipGroupMemberMapper;
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupService imFriendShipGroupService;
|
||||
|
||||
@Autowired
|
||||
ImUserService imUserService;
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupMemberService thisService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ResponseVO addGroupMember(AddFriendShipGroupMemberReq req) {
|
||||
|
||||
ResponseVO<ImFriendShipGroupEntity> group = imFriendShipGroupService
|
||||
.getGroup(req.getFromId(),req.getGroupName(),req.getAppId());
|
||||
if(!group.isOk()){
|
||||
return group;
|
||||
}
|
||||
|
||||
List<String> successId = new ArrayList<>();
|
||||
for (String toId : req.getToIds()) {
|
||||
ResponseVO<ImUserDataEntity> singleUserInfo = imUserService.getSingleUserInfo(toId, req.getAppId());
|
||||
if(singleUserInfo.isOk()){
|
||||
int i = thisService.doAddGroupMember(group.getData().getGroupId(), toId);
|
||||
if(i == 1){
|
||||
successId.add(toId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse(successId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO delGroupMember(DeleteFriendShipGroupMemberReq req) {
|
||||
ResponseVO<ImFriendShipGroupEntity> group = imFriendShipGroupService
|
||||
.getGroup(req.getFromId(),req.getGroupName(),req.getAppId());
|
||||
if(!group.isOk()){
|
||||
return group;
|
||||
}
|
||||
|
||||
ArrayList list = new ArrayList();
|
||||
for (String toId : req.getToIds()) {
|
||||
ResponseVO<ImUserDataEntity> singleUserInfo = imUserService.getSingleUserInfo(toId, req.getAppId());
|
||||
if(singleUserInfo.isOk()){
|
||||
int i = deleteGroupMember(group.getData().getGroupId(), toId);
|
||||
if(i == 1){
|
||||
list.add(toId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ResponseVO.successResponse(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int doAddGroupMember(Long groupId, String toId) {
|
||||
ImFriendShipGroupMemberEntity imFriendShipGroupMemberEntity = new ImFriendShipGroupMemberEntity();
|
||||
imFriendShipGroupMemberEntity.setGroupId(groupId);
|
||||
imFriendShipGroupMemberEntity.setToId(toId);
|
||||
try {
|
||||
int insert = imFriendShipGroupMemberMapper.insert(imFriendShipGroupMemberEntity);
|
||||
return insert;
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int deleteGroupMember(Long groupId, String toId) {
|
||||
QueryWrapper<ImFriendShipGroupMemberEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("group_id",groupId);
|
||||
queryWrapper.eq("to_id",toId);
|
||||
|
||||
try {
|
||||
int delete = imFriendShipGroupMemberMapper.delete(queryWrapper);
|
||||
// int insert = imFriendShipGroupMemberMapper.insert(imFriendShipGroupMemberEntity);
|
||||
return delete;
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int clearGroupMember(Long groupId) {
|
||||
QueryWrapper<ImFriendShipGroupMemberEntity> query = new QueryWrapper<>();
|
||||
query.eq("group_id",groupId);
|
||||
int delete = imFriendShipGroupMemberMapper.delete(query);
|
||||
return delete;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.lld.im.service.friendship.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.common.enums.DelFlagEnum;
|
||||
import com.lld.im.common.enums.FriendShipErrorCode;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipGroupEntity;
|
||||
import com.lld.im.service.friendship.dao.mapper.ImFriendShipGroupMapper;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupMemberReq;
|
||||
import com.lld.im.service.friendship.model.req.AddFriendShipGroupReq;
|
||||
import com.lld.im.service.friendship.model.req.DeleteFriendShipGroupReq;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupMemberService;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipGroupService;
|
||||
import com.lld.im.service.user.service.ImUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
public class ImFriendShipGroupServiceImpl implements ImFriendShipGroupService {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupMapper imFriendShipGroupMapper;
|
||||
|
||||
@Autowired
|
||||
ImFriendShipGroupMemberService imFriendShipGroupMemberService;
|
||||
|
||||
@Autowired
|
||||
ImUserService imUserService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ResponseVO addGroup(AddFriendShipGroupReq req) {
|
||||
|
||||
QueryWrapper<ImFriendShipGroupEntity> query = new QueryWrapper<>();
|
||||
query.eq("group_name", req.getGroupName());
|
||||
query.eq("app_id", req.getAppId());
|
||||
query.eq("from_id", req.getFromId());
|
||||
query.eq("del_flag", DelFlagEnum.NORMAL.getCode());
|
||||
|
||||
ImFriendShipGroupEntity entity = imFriendShipGroupMapper.selectOne(query);
|
||||
|
||||
if (entity != null) {
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_SHIP_GROUP_IS_EXIST);
|
||||
}
|
||||
|
||||
//写入db
|
||||
ImFriendShipGroupEntity insert = new ImFriendShipGroupEntity();
|
||||
insert.setAppId(req.getAppId());
|
||||
insert.setCreateTime(System.currentTimeMillis());
|
||||
insert.setDelFlag(DelFlagEnum.NORMAL.getCode());
|
||||
insert.setGroupName(req.getGroupName());
|
||||
insert.setFromId(req.getFromId());
|
||||
try {
|
||||
int insert1 = imFriendShipGroupMapper.insert(insert);
|
||||
|
||||
if (insert1 != 1) {
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_SHIP_GROUP_CREATE_ERROR);
|
||||
}
|
||||
|
||||
if (insert1 == 1 && CollectionUtil.isNotEmpty(req.getToIds())) {
|
||||
AddFriendShipGroupMemberReq addFriendShipGroupMemberReq = new AddFriendShipGroupMemberReq();
|
||||
addFriendShipGroupMemberReq.setFromId(req.getFromId());
|
||||
addFriendShipGroupMemberReq.setGroupName(req.getGroupName());
|
||||
addFriendShipGroupMemberReq.setToIds(req.getToIds());
|
||||
addFriendShipGroupMemberReq.setAppId(req.getAppId());
|
||||
imFriendShipGroupMemberService.addGroupMember(addFriendShipGroupMemberReq);
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
} catch (DuplicateKeyException e) {
|
||||
e.getStackTrace();
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_SHIP_GROUP_IS_EXIST);
|
||||
}
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ResponseVO deleteGroup(DeleteFriendShipGroupReq req) {
|
||||
|
||||
for (String groupName : req.getGroupName()) {
|
||||
QueryWrapper<ImFriendShipGroupEntity> query = new QueryWrapper<>();
|
||||
query.eq("group_name", groupName);
|
||||
query.eq("app_id", req.getAppId());
|
||||
query.eq("from_id", req.getFromId());
|
||||
query.eq("del_flag", DelFlagEnum.NORMAL.getCode());
|
||||
|
||||
ImFriendShipGroupEntity entity = imFriendShipGroupMapper.selectOne(query);
|
||||
|
||||
if (entity != null) {
|
||||
ImFriendShipGroupEntity update = new ImFriendShipGroupEntity();
|
||||
update.setGroupId(entity.getGroupId());
|
||||
update.setDelFlag(DelFlagEnum.DELETE.getCode());
|
||||
imFriendShipGroupMapper.updateById(update);
|
||||
imFriendShipGroupMemberService.clearGroupMember(entity.getGroupId());
|
||||
|
||||
}
|
||||
}
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO getGroup(String fromId, String groupName, Integer appId) {
|
||||
QueryWrapper<ImFriendShipGroupEntity> query = new QueryWrapper<>();
|
||||
query.eq("group_name", groupName);
|
||||
query.eq("app_id", appId);
|
||||
query.eq("from_id", fromId);
|
||||
query.eq("del_flag", DelFlagEnum.NORMAL.getCode());
|
||||
|
||||
ImFriendShipGroupEntity entity = imFriendShipGroupMapper.selectOne(query);
|
||||
if (entity == null) {
|
||||
return ResponseVO.errorResponse(FriendShipErrorCode.FRIEND_SHIP_GROUP_IS_NOT_EXIST);
|
||||
}
|
||||
return ResponseVO.successResponse(entity);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package com.lld.im.service.friendship.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.common.enums.ApproverFriendRequestStatusEnum;
|
||||
import com.lld.im.common.enums.FriendShipErrorCode;
|
||||
import com.lld.im.common.exception.ApplicationException;
|
||||
import com.lld.im.service.friendship.dao.ImFriendShipRequestEntity;
|
||||
import com.lld.im.service.friendship.dao.mapper.ImFriendShipRequestMapper;
|
||||
import com.lld.im.service.friendship.model.req.ApproverFriendRequestReq;
|
||||
import com.lld.im.service.friendship.model.req.FriendDto;
|
||||
import com.lld.im.service.friendship.model.req.ReadFriendShipRequestReq;
|
||||
import com.lld.im.service.friendship.service.ImFriendService;
|
||||
import com.lld.im.service.friendship.service.ImFriendShipRequestService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Service
|
||||
public class ImFriendShipRequestServiceImpl implements ImFriendShipRequestService {
|
||||
|
||||
@Autowired
|
||||
ImFriendShipRequestMapper imFriendShipRequestMapper;
|
||||
|
||||
@Autowired
|
||||
ImFriendService imFriendShipService;
|
||||
|
||||
@Override
|
||||
public ResponseVO getFriendRequest(String fromId, Integer appId) {
|
||||
|
||||
QueryWrapper<ImFriendShipRequestEntity> query = new QueryWrapper();
|
||||
query.eq("app_id", appId);
|
||||
query.eq("to_id", fromId);
|
||||
|
||||
List<ImFriendShipRequestEntity> requestList = imFriendShipRequestMapper.selectList(query);
|
||||
|
||||
return ResponseVO.successResponse(requestList);
|
||||
}
|
||||
|
||||
|
||||
//A + B
|
||||
@Override
|
||||
public ResponseVO addFienshipRequest(String fromId, FriendDto dto, Integer appId) {
|
||||
|
||||
QueryWrapper<ImFriendShipRequestEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("app_id",appId);
|
||||
queryWrapper.eq("from_id",fromId);
|
||||
queryWrapper.eq("to_id",dto.getToId());
|
||||
ImFriendShipRequestEntity request = imFriendShipRequestMapper.selectOne(queryWrapper);
|
||||
|
||||
if(request == null){
|
||||
request = new ImFriendShipRequestEntity();
|
||||
request.setAddSource(dto.getAddSource());
|
||||
request.setAddWording(dto.getAddWording());
|
||||
request.setAppId(appId);
|
||||
request.setFromId(fromId);
|
||||
request.setToId(dto.getToId());
|
||||
request.setReadStatus(0);
|
||||
request.setApproveStatus(0);
|
||||
request.setRemark(dto.getRemark());
|
||||
request.setCreateTime(System.currentTimeMillis());
|
||||
imFriendShipRequestMapper.insert(request);
|
||||
|
||||
}else {
|
||||
//修改记录内容 和更新时间
|
||||
if(StringUtils.isNotBlank(dto.getAddSource())){
|
||||
request.setAddWording(dto.getAddWording());
|
||||
}
|
||||
if(StringUtils.isNotBlank(dto.getRemark())){
|
||||
request.setRemark(dto.getRemark());
|
||||
}
|
||||
if(StringUtils.isNotBlank(dto.getAddWording())){
|
||||
request.setAddWording(dto.getAddWording());
|
||||
}
|
||||
request.setApproveStatus(0);
|
||||
request.setReadStatus(0);
|
||||
imFriendShipRequestMapper.updateById(request);
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ResponseVO approverFriendRequest(ApproverFriendRequestReq req) {
|
||||
|
||||
ImFriendShipRequestEntity imFriendShipRequestEntity = imFriendShipRequestMapper.selectById(req.getId());
|
||||
if(imFriendShipRequestEntity == null){
|
||||
throw new ApplicationException(FriendShipErrorCode.FRIEND_REQUEST_IS_NOT_EXIST);
|
||||
}
|
||||
|
||||
if(!req.getOperater().equals(imFriendShipRequestEntity.getToId())){
|
||||
//只能审批发给自己的好友请求
|
||||
throw new ApplicationException(FriendShipErrorCode.NOT_APPROVER_OTHER_MAN_REQUEST);
|
||||
}
|
||||
|
||||
ImFriendShipRequestEntity update = new ImFriendShipRequestEntity();
|
||||
update.setApproveStatus(req.getStatus());
|
||||
update.setUpdateTime(System.currentTimeMillis());
|
||||
update.setId(req.getId());
|
||||
imFriendShipRequestMapper.updateById(update);
|
||||
|
||||
if(ApproverFriendRequestStatusEnum.AGREE.getCode() == req.getStatus()){
|
||||
//同意 ===> 去执行添加好友逻辑
|
||||
FriendDto dto = new FriendDto();
|
||||
dto.setAddSource(imFriendShipRequestEntity.getAddSource());
|
||||
dto.setAddWording(imFriendShipRequestEntity.getAddWording());
|
||||
dto.setRemark(imFriendShipRequestEntity.getRemark());
|
||||
dto.setToId(imFriendShipRequestEntity.getToId());
|
||||
ResponseVO responseVO = imFriendShipService.doAddFriend(req,imFriendShipRequestEntity.getFromId(), dto,req.getAppId());
|
||||
// if(!responseVO.isOk()){
|
||||
//// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
// return responseVO;
|
||||
// }
|
||||
if(!responseVO.isOk() && responseVO.getCode() != FriendShipErrorCode.TO_IS_YOUR_FRIEND.getCode()){
|
||||
return responseVO;
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseVO readFriendShipRequestReq(ReadFriendShipRequestReq req) {
|
||||
QueryWrapper<ImFriendShipRequestEntity> query = new QueryWrapper<>();
|
||||
query.eq("app_id", req.getAppId());
|
||||
query.eq("to_id", req.getFromId());
|
||||
|
||||
ImFriendShipRequestEntity update = new ImFriendShipRequestEntity();
|
||||
update.setReadStatus(1);
|
||||
imFriendShipRequestMapper.update(update, query);
|
||||
|
||||
return ResponseVO.successResponse();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.lld.im.service.group.controller;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.group.model.req.*;
|
||||
import com.lld.im.service.group.service.ImGroupService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("v1/group")
|
||||
public class ImGroupController {
|
||||
|
||||
@Autowired
|
||||
ImGroupService groupService;
|
||||
|
||||
@RequestMapping("/importGroup")
|
||||
public ResponseVO importGroup(@RequestBody @Validated ImportGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.importGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/createGroup")
|
||||
public ResponseVO createGroup(@RequestBody @Validated CreateGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.createGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/getGroupInfo")
|
||||
public ResponseVO getGroupInfo(@RequestBody @Validated GetGroupReq req, Integer appId) {
|
||||
req.setAppId(appId);
|
||||
return groupService.getGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/update")
|
||||
public ResponseVO update(@RequestBody @Validated UpdateGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.updateBaseGroupInfo(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/getJoinedGroup")
|
||||
public ResponseVO getJoinedGroup(@RequestBody @Validated GetJoinedGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.getJoinedGroup(req);
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/destroyGroup")
|
||||
public ResponseVO destroyGroup(@RequestBody @Validated DestroyGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.destroyGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/transferGroup")
|
||||
public ResponseVO transferGroup(@RequestBody @Validated TransferGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.transferGroup(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/forbidSendMessage")
|
||||
public ResponseVO forbidSendMessage(@RequestBody @Validated MuteGroupReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupService.muteGroup(req);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.lld.im.service.group.controller;
|
||||
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.group.model.req.*;
|
||||
import com.lld.im.service.group.service.ImGroupMemberService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("v1/group/member")
|
||||
public class ImGroupMemberController {
|
||||
|
||||
@Autowired
|
||||
ImGroupMemberService groupMemberService;
|
||||
|
||||
@RequestMapping("/importGroupMember")
|
||||
public ResponseVO importGroupMember(@RequestBody @Validated ImportGroupMemberReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupMemberService.importGroupMember(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/add")
|
||||
public ResponseVO addMember(@RequestBody @Validated AddGroupMemberReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupMemberService.addMember(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/remove")
|
||||
public ResponseVO removeMember(@RequestBody @Validated RemoveGroupMemberReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupMemberService.removeMember(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/update")
|
||||
public ResponseVO updateGroupMember(@RequestBody @Validated UpdateGroupMemberReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupMemberService.updateGroupMember(req);
|
||||
}
|
||||
|
||||
@RequestMapping("/speak")
|
||||
public ResponseVO speak(@RequestBody @Validated SpeaMemberReq req, Integer appId, String identifier) {
|
||||
req.setAppId(appId);
|
||||
req.setOperater(identifier);
|
||||
return groupMemberService.speak(req);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.lld.im.service.group.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@TableName("im_group")
|
||||
public class ImGroupEntity {
|
||||
|
||||
@TableId(value = "group_id")
|
||||
private String groupId;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
//群主id
|
||||
private String ownerId;
|
||||
|
||||
//群类型 1私有群(类似微信) 2公开群(类似qq)
|
||||
private Integer groupType;
|
||||
|
||||
private String groupName;
|
||||
|
||||
private Integer mute;// 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
|
||||
// 申请加群选项包括如下几种:
|
||||
// 0 表示禁止任何人申请加入
|
||||
// 1 表示需要群主或管理员审批
|
||||
// 2 表示允许无需审批自由加入群组
|
||||
private Integer applyJoinType;
|
||||
|
||||
private String introduction;//群简介
|
||||
|
||||
private String notification;//群公告
|
||||
|
||||
private String photo;//群头像
|
||||
|
||||
private Integer maxMemberCount;//群成员上限
|
||||
|
||||
private Integer status;//群状态 0正常 1解散
|
||||
|
||||
private Long sequence;
|
||||
|
||||
private Long createTime;
|
||||
|
||||
private Long updateTime;
|
||||
|
||||
private String extra;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.lld.im.service.group.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@TableName("im_group_member")
|
||||
public class ImGroupMemberEntity {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long groupMemberId;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private String groupId;
|
||||
|
||||
//成员id
|
||||
private String memberId;
|
||||
|
||||
//群成员类型,0 普通成员, 1 管理员, 2 群主, 3 禁言,4 已经移除的成员
|
||||
private Integer role;
|
||||
|
||||
private Long speakDate;
|
||||
|
||||
//群昵称
|
||||
private String alias;
|
||||
|
||||
//加入时间
|
||||
private Long joinTime;
|
||||
|
||||
//离开时间
|
||||
private Long leaveTime;
|
||||
|
||||
private String joinType;
|
||||
|
||||
private String extra;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.lld.im.service.group.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
@TableName("im_group_message_history")
|
||||
public class ImGroupMessageHistoryEntity {
|
||||
|
||||
private Integer appId;
|
||||
|
||||
private String fromId;
|
||||
|
||||
private String groupId;
|
||||
|
||||
/** messageBodyId*/
|
||||
private Long messageKey;
|
||||
/** 序列号*/
|
||||
private Long sequence;
|
||||
|
||||
private String messageRandom;
|
||||
|
||||
private Long messageTime;
|
||||
|
||||
private Long createTime;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.lld.im.service.group.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.group.dao.ImGroupEntity;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@Repository
|
||||
public interface ImGroupMapper extends BaseMapper<ImGroupEntity> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.lld.im.service.group.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.group.dao.ImGroupMemberEntity;
|
||||
import com.lld.im.service.group.model.req.GroupMemberDto;
|
||||
import org.apache.ibatis.annotations.Result;
|
||||
import org.apache.ibatis.annotations.Results;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface ImGroupMemberMapper extends BaseMapper<ImGroupMemberEntity> {
|
||||
|
||||
@Select("select group_id from im_group_member where app_id = #{appId} AND member_id = #{memberId} ")
|
||||
public List<String> getJoinedGroupId(Integer appId, String memberId);
|
||||
|
||||
|
||||
|
||||
@Results({
|
||||
@Result(column = "member_id", property = "memberId"),
|
||||
// @Result(column = "speak_flag", property = "speakFlag"),
|
||||
@Result(column = "speak_date", property = "speakDate"),
|
||||
@Result(column = "role", property = "role"),
|
||||
@Result(column = "alias", property = "alias"),
|
||||
@Result(column = "join_time", property = "joinTime"),
|
||||
@Result(column = "join_type", property = "joinType")
|
||||
})
|
||||
@Select("select " +
|
||||
" member_id, " +
|
||||
// " speak_flag, " +
|
||||
" speak_date, " +
|
||||
" role, " +
|
||||
" alias, " +
|
||||
" join_time ," +
|
||||
" join_type " +
|
||||
" from im_group_member where app_id = #{appId} AND group_id = #{groupId} ")
|
||||
public List<GroupMemberDto> getGroupMember(Integer appId, String groupId);
|
||||
|
||||
@Select("select " +
|
||||
" member_id " +
|
||||
" from im_group_member where app_id = #{appId} AND group_id = #{groupId} and role != 3")
|
||||
public List<String> getGroupMemberId(Integer appId, String groupId);
|
||||
|
||||
|
||||
@Results({
|
||||
@Result(column = "member_id", property = "memberId"),
|
||||
// @Result(column = "speak_flag", property = "speakFlag"),
|
||||
@Result(column = "role", property = "role")
|
||||
// @Result(column = "alias", property = "alias"),
|
||||
// @Result(column = "join_time", property = "joinTime"),
|
||||
// @Result(column = "join_type", property = "joinType")
|
||||
})
|
||||
@Select("select " +
|
||||
" member_id, " +
|
||||
// " speak_flag, " +
|
||||
" role " +
|
||||
// " alias, " +
|
||||
// " join_time ," +
|
||||
// " join_type " +
|
||||
" from im_group_member where app_id = #{appId} AND group_id = #{groupId} and role in (1,2) ")
|
||||
public List<GroupMemberDto> getGroupManager(String groupId, Integer appId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.lld.im.service.group.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.lld.im.service.group.dao.ImGroupMessageHistoryEntity;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ImGroupMessageHistoryMapper extends BaseMapper<ImGroupMessageHistoryEntity> {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class AddGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
@NotEmpty(message = "群成员不能为空")
|
||||
private List<GroupMemberDto> members;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class CreateGroupReq extends RequestBase {
|
||||
|
||||
private String groupId;
|
||||
//群主id
|
||||
private String ownerId;
|
||||
|
||||
//群类型 1私有群(类似微信) 2公开群(类似qq)
|
||||
private Integer groupType;
|
||||
|
||||
private String groupName;
|
||||
|
||||
private Integer mute;// 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
|
||||
private Integer applyJoinType;//加入群权限,0 所有人可以加入;1 群成员可以拉人;2 群管理员或群组可以拉人。
|
||||
|
||||
private String introduction;//群简介
|
||||
|
||||
private String notification;//群公告
|
||||
|
||||
private String photo;//群头像
|
||||
|
||||
private Integer MaxMemberCount;
|
||||
|
||||
private List<GroupMemberDto> member;
|
||||
|
||||
private String extra;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class DestroyGroupReq extends RequestBase {
|
||||
|
||||
@NotNull(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class GetGroupReq extends RequestBase {
|
||||
|
||||
private String groupId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class GetJoinedGroupReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String memberId;
|
||||
|
||||
//群类型
|
||||
private List<Integer> groupType;
|
||||
|
||||
//单次拉取的群组数量,如果不填代表所有群组
|
||||
private Integer limit;
|
||||
|
||||
//第几页
|
||||
private Integer offset;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class GetRoleInGroupReq extends RequestBase {
|
||||
|
||||
private String groupId;
|
||||
|
||||
private List<String> memberId;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class GroupMemberDto {
|
||||
|
||||
private String memberId;
|
||||
|
||||
private String alias;
|
||||
|
||||
private Integer role;//群成员类型,0 普通成员, 1 管理员, 2 群主, 3 已经移除的成员,当修改群成员信息时,只能取值0/1,其他值由其他接口实现,暂不支持3
|
||||
|
||||
// private Integer speakFlag;
|
||||
|
||||
private Long speakDate;
|
||||
|
||||
private String joinType;
|
||||
|
||||
private Long joinTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class ImportGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
private List<GroupMemberDto> members;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class ImportGroupReq extends RequestBase {
|
||||
|
||||
private String groupId;
|
||||
//群主id
|
||||
private String ownerId;
|
||||
|
||||
//群类型 1私有群(类似微信) 2公开群(类似qq)
|
||||
private Integer groupType;
|
||||
|
||||
@NotBlank(message = "群名称不能为空")
|
||||
private String groupName;
|
||||
|
||||
private Integer mute;// 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
|
||||
private Integer applyJoinType;//加入群权限,0 所有人可以加入;1 群成员可以拉人;2 群管理员或群组可以拉人。
|
||||
|
||||
private String introduction;//群简介
|
||||
|
||||
private String notification;//群公告
|
||||
|
||||
private String photo;//群头像
|
||||
|
||||
private Integer MaxMemberCount;
|
||||
|
||||
private Long createTime;
|
||||
|
||||
private String extra;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class MuteGroupReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "groupId不能为空")
|
||||
private String groupId;
|
||||
|
||||
@NotNull(message = "mute不能为空")
|
||||
private Integer mute;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class RemoveGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
private String memberId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class SendGroupMessageReq extends RequestBase {
|
||||
|
||||
//客户端传的messageId
|
||||
private String messageId;
|
||||
|
||||
private String fromId;
|
||||
|
||||
private String groupId;
|
||||
|
||||
private int messageRandom;
|
||||
|
||||
private long messageTime;
|
||||
|
||||
private String messageBody;
|
||||
/**
|
||||
* 这个字段缺省或者为 0 表示需要计数,为 1 表示本条消息不需要计数,即右上角图标数字不增加
|
||||
*/
|
||||
private int badgeMode;
|
||||
|
||||
private Long messageLifeTime;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class SpeaMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
@NotBlank(message = "memberId不能为空")
|
||||
private String memberId;
|
||||
|
||||
//禁言时间,单位毫秒
|
||||
@NotNull(message = "禁言时间不能为空")
|
||||
private Long speakDate;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
|
||||
@Data
|
||||
public class TransferGroupReq extends RequestBase {
|
||||
|
||||
@NotNull(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
private String ownerId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class UpdateGroupMemberReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
@NotBlank(message = "memberId不能为空")
|
||||
private String memberId;
|
||||
|
||||
private String alias;
|
||||
|
||||
private Integer role;
|
||||
|
||||
private String extra;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.lld.im.service.group.model.req;
|
||||
|
||||
import com.lld.im.common.model.RequestBase;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class UpdateGroupReq extends RequestBase {
|
||||
|
||||
@NotBlank(message = "群id不能为空")
|
||||
private String groupId;
|
||||
|
||||
private String groupName;
|
||||
|
||||
private Integer mute;// 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
|
||||
private Integer applyJoinType;//加入群权限,0 所有人可以加入;1 群成员可以拉人;2 群管理员或群组可以拉人。
|
||||
|
||||
private String introduction;//群简介
|
||||
|
||||
private String notification;//群公告
|
||||
|
||||
private String photo;//群头像
|
||||
|
||||
private Integer maxMemberCount;//群成员上限
|
||||
|
||||
private String extra;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lld.im.service.group.model.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description:
|
||||
* @author: lld
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class AddMemberResp {
|
||||
|
||||
private String memberId;
|
||||
|
||||
// 加人结果:0 为成功;1 为失败;2 为已经是群成员
|
||||
private Integer result;
|
||||
|
||||
private String resultMessage;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.lld.im.service.group.model.resp;
|
||||
|
||||
import com.lld.im.service.group.model.req.GroupMemberDto;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Chackylee
|
||||
* @description:
|
||||
**/
|
||||
@Data
|
||||
public class GetGroupResp {
|
||||
|
||||
private String groupId;
|
||||
|
||||
private Integer appId;
|
||||
|
||||
//群主id
|
||||
private String ownerId;
|
||||
|
||||
//群类型 1私有群(类似微信) 2公开群(类似qq)
|
||||
private Integer groupType;
|
||||
|
||||
private String groupName;
|
||||
|
||||
private Integer mute;// 是否全员禁言,0 不禁言;1 全员禁言。
|
||||
|
||||
// 申请加群选项包括如下几种:
|
||||
// 0 表示禁止任何人申请加入
|
||||
// 1 表示需要群主或管理员审批
|
||||
// 2 表示允许无需审批自由加入群组
|
||||
private Integer applyJoinType;
|
||||
|
||||
private Integer privateChat; //是否禁止私聊,0 允许群成员发起私聊;1 不允许群成员发起私聊。
|
||||
|
||||
private String introduction;//群简介
|
||||
|
||||
private String notification;//群公告
|
||||
|
||||
private String photo;//群头像
|
||||
|
||||
private Integer maxMemberCount;//群成员上限
|
||||
|
||||
private Integer status;//群状态 0正常 1解散
|
||||
|
||||
private List<GroupMemberDto> memberList;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user