Browse Source

群管理

master
xsx 1 year ago
parent
commit
d68e04c6a1
  1. 27
      db/im-admin.sql
  2. 20
      im-admin-ui/LICENSE
  3. 6
      im-admin-ui/src/components/ImagePreview/index.vue
  4. 6
      im-admin-ui/src/layout/components/Sidebar/Logo.vue
  5. 6
      im-admin-ui/src/layout/components/notice/index.vue
  6. 13
      im-admin-ui/src/types/bpmn/editor/global.d.ts
  7. 15
      im-admin-ui/src/types/bpmn/index.d.ts
  8. 37
      im-admin-ui/src/types/bpmn/moddle.d.ts
  9. 92
      im-admin-ui/src/types/bpmn/panel.d.ts
  10. 2
      im-admin-ui/src/views/register.vue
  11. 1
      im-admin-ui/vite/plugins/compression.ts
  12. 23
      im-admin/pom.xml
  13. 2
      im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
  14. 11
      im-admin/ruoyi-admin/src/main/resources/application.yml
  15. 12
      im-admin/ruoyi-im/pom.xml
  16. 32
      im-admin/ruoyi-im/src/main/java/org/dromara/im/config/ImCacheConfig.java
  17. 40
      im-admin/ruoyi-im/src/main/java/org/dromara/im/config/ImTransConfig.java
  18. 104
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java
  19. 105
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMemberController.java
  20. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java
  21. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java
  22. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSensitiveWordController.java
  23. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSmPushTaskController.java
  24. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSystemMessageController.java
  25. 46
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java
  26. 14
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroup.java
  27. 17
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroupMember.java
  28. 8
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroupMessage.java
  29. 8
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImPrivateMessage.java
  30. 5
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSensitiveWord.java
  31. 9
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSmPushTask.java
  32. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSystemMessage.java
  33. 13
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImUser.java
  34. 45
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupBo.java
  35. 15
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupMemberBo.java
  36. 13
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupMessageBo.java
  37. 13
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImPrivateMessageBo.java
  38. 11
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSensitiveWordBo.java
  39. 13
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSmPushTaskBo.java
  40. 11
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSystemMessageBo.java
  41. 12
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImUserBo.java
  42. 24
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImGroupBanDto.java
  43. 20
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImGroupUnbanDto.java
  44. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserBanDto.java
  45. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserUnbanDto.java
  46. 29
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupMemberVo.java
  47. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupMessageVo.java
  48. 64
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupVo.java
  49. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImPrivateMessageVo.java
  50. 5
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSensitiveWordVo.java
  51. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSmPushTaskVo.java
  52. 5
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSystemMessageVo.java
  53. 12
      im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImUserVo.java
  54. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMapper.java
  55. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMemberMapper.java
  56. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java
  57. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java
  58. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSensitiveWordMapper.java
  59. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSmPushTaskMapper.java
  60. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSystemMessageMapper.java
  61. 2
      im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java
  62. 31
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMemberService.java
  63. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java
  64. 36
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java
  65. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java
  66. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSensitiveWordService.java
  67. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSmPushTaskService.java
  68. 6
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSystemMessageService.java
  69. 22
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java
  70. 84
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMemberServiceImpl.java
  71. 16
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java
  72. 132
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java
  73. 16
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java
  74. 16
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSensitiveWordServiceImpl.java
  75. 16
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSmPushTaskServiceImpl.java
  76. 16
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSystemMessageServiceImpl.java
  77. 42
      im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java

27
db/im-admin.sql

@ -233,9 +233,9 @@ create table sys_menu (
-- 初始化-菜单信息表数据
-- ----------------------------
-- 一级菜单
insert into sys_menu values('1', '系统管理', '0', '1', 'system', null, '', 1, 0, 'M', '0', '0', '', 'system', 103, 1, sysdate(), null, null, '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '3', 'monitor', null, '', 1, 0, 'M', '0', '0', '', 'monitor', 103, 1, sysdate(), null, null, '系统监控目录');
insert into sys_menu values('3', '系统工具', '0', '4', 'tool', null, '', 1, 0, 'M', '0', '0', '', 'tool', 103, 1, sysdate(), null, null, '系统工具目录');
insert into sys_menu values('1', '系统管理', '0', '11', 'system', null, '', 1, 0, 'M', '0', '0', '', 'system', 103, 1, sysdate(), null, null, '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '13', 'monitor', null, '', 1, 0, 'M', '0', '0', '', 'monitor', 103, 1, sysdate(), null, null, '系统监控目录');
insert into sys_menu values('3', '系统工具', '0', '14', 'tool', null, '', 1, 0, 'M', '0', '0', '', 'tool', 103, 1, sysdate(), null, null, '系统工具目录');
-- 二级菜单
insert into sys_menu values('100', '用户管理', '1', '1', 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 103, 1, sysdate(), null, null, '用户管理菜单');
@ -250,8 +250,6 @@ insert into sys_menu values('108', '日志管理', '1', '9', 'log',
insert into sys_menu values('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 103, 1, sysdate(), null, null, '在线用户菜单');
insert into sys_menu values('113', '缓存监控', '2', '5', 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 103, 1, sysdate(), null, null, '缓存监控菜单');
insert into sys_menu values('115', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 103, 1, sysdate(), null, null, '代码生成菜单');
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, sysdate(), null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, sysdate(), null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate(), null, null, '客户端管理菜单');
-- oss菜单
@ -344,6 +342,19 @@ insert into sys_menu values('1063', '客户端管理修改', '123', '3', '#', '
insert into sys_menu values('1064', '客户端管理删除', '123', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:remove', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('1065', '客户端管理导出', '123', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:export', '#', 103, 1, sysdate(), null, null, '');
-- IM-用户管理
insert into sys_menu values('4', '用户管理', '0', '1', 'im/user', 'im/user/index', '', 1, 0, 'C', '0', '0', 'im:user:list', 'user', 103, 1, sysdate(), null, null, 'IM用户管理');
insert into sys_menu values('4001', '用户查询', '4', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:query', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('4002', '用户封禁', '4', '2', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:ban', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('4003', '用户导出', '4', '3', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:export', '#', 103, 1, sysdate(), null, null, '');
-- IM-群聊管理
insert into sys_menu values('5', '群聊管理', '0', '2', 'im/group', 'im/group/index', '', 1, 0, 'C', '0', '0', 'im:group:list', 'user', 103, 1, sysdate(), null, null, 'IM群聊管理');
insert into sys_menu values('5001', '群聊查询', '5', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:query', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('5002', '群聊封禁', '5', '2', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:ban', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('5003', '群聊导出', '5', '3', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:export', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('5004', '群聊成员', '5', '4', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:member', '#', 103, 1, sysdate(), null, null, '');
-- ----------------------------
-- 6、用户和角色关联表 用户N-1角色
@ -450,6 +461,8 @@ insert into sys_dict_type values(9, '000000', '操作类型', 'sys_oper_type',
insert into sys_dict_type values(10, '000000', '系统状态', 'sys_common_status', 103, 1, sysdate(), null, null, '登录状态列表');
insert into sys_dict_type values(11, '000000', '授权类型', 'sys_grant_type', 103, 1, sysdate(), null, null, '认证授权类型');
insert into sys_dict_type values(12, '000000', '设备类型', 'sys_device_type', 103, 1, sysdate(), null, null, '客户端设备类型');
insert into sys_dict_type values(13, '000000', '布尔值', 'sys_bool', 103, 1, sysdate(), null, null, '布尔值, true 或 false');
insert into sys_dict_type values(14, '000000', '用户状态', 'im_user_status', 103, 1, sysdate(), null, null, 'IM用户状态');
-- ----------------------------
@ -509,6 +522,10 @@ insert into sys_dict_data values(35, '000000', 0, 'PC', 'pc', 'sys_d
insert into sys_dict_data values(36, '000000', 0, '安卓', 'android', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, '安卓');
insert into sys_dict_data values(37, '000000', 0, 'iOS', 'ios', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, 'iOS');
insert into sys_dict_data values(38, '000000', 0, '小程序', 'xcx', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, '小程序');
insert into sys_dict_data values(39, '000000', 0, '', 'false', 'sys_bool', '', 'danger', 'N', 103, 1, sysdate(), null, null, 'PC');
insert into sys_dict_data values(40, '000000', 0, '', 'true', 'sys_bool', '', 'primary', 'N', 103, 1, sysdate(), null, null, '安卓');
insert into sys_dict_data values(41, '000000', 0, '正常', '0', 'im_user_status', '', 'primary', 'N', 103, 1, sysdate(), null, null, 'iOS');
insert into sys_dict_data values(42, '000000', 0, '已注销', '1', 'im_user_status', '', 'danger', 'N', 103, 1, sysdate(), null, null, '小程序');
-- ----------------------------

20
im-admin-ui/LICENSE

@ -1,20 +0,0 @@
The MIT License (MIT)
Copyright (c) 2019 RuoYi-Vue-Plus
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

6
im-admin-ui/src/components/ImagePreview/index.vue

@ -13,6 +13,7 @@ import { propTypes } from '@/utils/propTypes';
const props = defineProps({
src: propTypes.string.def(''),
fullSrc: propTypes.string.def(''),
width: {
type: [Number, String],
default: ''
@ -32,10 +33,11 @@ const realSrc = computed(() => {
});
const realSrcList = computed(() => {
if (!props.src) {
let src = props.fullSrc || props.src
if (!src) {
return [];
}
let real_src_list = props.src.split(',');
let real_src_list = src.split(',');
let srcList: string[] = [];
real_src_list.forEach((item: string) => {
if (item.trim() === '') {

6
im-admin-ui/src/layout/components/Sidebar/Logo.vue

@ -34,7 +34,7 @@ defineProps({
}
});
const title = ref('RuoYi-Vue-Plus');
const title = ref('盒子IM后台');
const settingsStore = useSettingsStore();
const sideTheme = computed(() => settingsStore.sideTheme);
</script>
@ -63,8 +63,8 @@ const sideTheme = computed(() => settingsStore.sideTheme);
width: 100%;
& .sidebar-logo {
width: 32px;
height: 32px;
width: 25px;
height: 25px;
vertical-align: middle;
margin-right: 12px;
}

6
im-admin-ui/src/layout/components/notice/index.vue

@ -19,7 +19,6 @@
</template>
<el-empty v-else :description="'消息为空'"></el-empty>
</div>
<div v-if="newsList.length > 0" class="foot-box" @click="onGoToGiteeClick">前往gitee</div>
</div>
</template>
@ -53,11 +52,6 @@ const onNewsClick = (item: any) => {
noticeStore.state.value.notices = newsList.value;
};
//
const onGoToGiteeClick = () => {
window.open('https://gitee.com/dromara/RuoYi-Vue-Plus/tree/5.X/');
};
onMounted(() => {
nextTick(() => {
getTableData();

13
im-admin-ui/src/types/bpmn/editor/global.d.ts

@ -1,13 +0,0 @@
import { MessageApiInjection } from 'naive-ui/lib/message/src/MessageProvider';
declare global {
interface Window {
bpmnInstances: any;
__messageBox: MessageApiInjection;
URL: any;
}
}
declare interface Window {
bpmnInstances: any;
}

15
im-admin-ui/src/types/bpmn/index.d.ts

@ -1,15 +0,0 @@
declare module 'bpmn' {
import type modeler from 'bpmn-js/lib/Modeler';
import type modeling from 'bpmn-js/lib/features/modeling/Modeling';
import type canvas from 'diagram-js/lib/core/Canvas';
import type elementRegistry from 'diagram-js/lib/core/ElementRegistry';
import type bpmnFactory from 'bpmn-js/lib/features/modeling/BpmnFactory';
export type Modeler = modeler;
export type Modeling = modeling;
export type Canvas = canvas;
export type ElementRegistry = elementRegistry;
export type Moddle = import('moddle').Moddle;
export type ModdleElement = import('moddle').ModdleElement;
export type BpmnFactory = bpmnFactory;
}

37
im-admin-ui/src/types/bpmn/moddle.d.ts

@ -1,37 +0,0 @@
declare module 'moddle' {
import type { Element as element } from 'bpmn-js/lib/model/Types';
export type Element = {
get<T>(name: string): T;
set(name: string, value: any): void;
} & element;
export interface ModdleElement extends Element {
$model: Moddle;
readonly $type: string;
$attrs: object | {};
$parent: any;
businessObject: ModdleElement;
type: string;
[field: string]: any;
hasType(element: ModdleElement, type?: string): boolean;
}
export interface Package {
name: string;
prefix: string;
}
export interface Moddle {
typeCache: Record<string, ModdleElement>;
getPackage: typeof Registry.prototype.getPackage;
getPackages: typeof Registry.prototype.getPackages;
create(type: string, attrs?: any): ModdleElement;
}
}

92
im-admin-ui/src/types/bpmn/panel.d.ts

@ -1,92 +0,0 @@
declare module 'bpmnDesign' {
import { AllocationTypeEnum, SpecifyDescEnum, MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums';
export interface ParamVO {
type: string;
name: string;
value: string;
}
export interface TaskListenerVO {
event: string;
type: string;
name: string;
className: string;
params: ParamVO[];
}
export interface ExecutionListenerVO {
event: string;
type: string;
className: string;
params: ParamVO[];
}
interface BasePanel {
id: string;
name: string;
}
export interface ProcessPanel extends BasePanel {}
export interface TaskPanel extends BasePanel {
allocationType: AllocationTypeEnum;
specifyDesc: SpecifyDescEnum;
multiInstanceType: MultiInstanceTypeEnum;
async?: boolean;
priority?: number;
formKey?: string;
skipExpression?: string;
isForCompensation?: boolean;
triggerServiceTask?: boolean;
autoStoreVariables?: boolean;
ruleVariablesInput?: string;
excludeTaskListener?: boolean;
exclude?: boolean;
class?: string;
dueDate?: string;
fixedAssignee?: string;
candidateUsers?: string;
assignee?: string;
candidateGroups?: string;
collection?: string;
elementVariable?: string;
completionCondition?: string;
isSequential?: boolean;
loopCharacteristics?: {
collection: string;
elementVariable: string;
isSequential: boolean;
completionCondition: {
body: string;
};
};
}
export interface StartEndPanel extends BasePanel {}
export interface GatewayPanel extends BasePanel {}
export interface SequenceFlowPanel extends BasePanel {
conditionExpression: {
body: string;
};
conditionExpressionValue: string;
skipExpression: string;
}
export interface ParticipantPanel extends BasePanel {}
export interface SubProcessPanel extends BasePanel {
multiInstanceType: MultiInstanceTypeEnum;
collection?: string;
elementVariable?: string;
completionCondition?: string;
loopCharacteristics?: {
collection: string;
elementVariable: string;
isSequential: boolean;
completionCondition: {
body: string;
};
};
}
}

2
im-admin-ui/src/views/register.vue

@ -1,7 +1,7 @@
<template>
<div class="register">
<el-form ref="registerRef" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">RuoYi-Vue-Plus多租户管理系统</h3>
<h3 class="title">盒子IM后台管理</h3>
<el-form-item v-if="tenantEnabled" prop="tenantId">
<el-select v-model="registerForm.tenantId" filterable placeholder="请选择/输入公司名称" style="width: 100%">
<el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"> </el-option>

1
im-admin-ui/vite/plugins/compression.ts

@ -6,7 +6,6 @@ export default (env: any) => {
if (VITE_BUILD_COMPRESS) {
const compressList = VITE_BUILD_COMPRESS.split(',');
if (compressList.includes('gzip')) {
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
plugin.push(
compression({
ext: '.gz',

23
im-admin/pom.xml

@ -47,13 +47,12 @@
<fastjson.version>1.2.83</fastjson.version>
<!-- 面向运行时的D-ORM依赖 -->
<anyline.version>8.7.2-20241022</anyline.version>
<easytrans.version>3.0.0</easytrans.version>
<!-- 插件版本 -->
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
<maven-war-plugin.version>3.2.2</maven-war-plugin.version>
<maven-compiler-plugin.verison>3.11.0</maven-compiler-plugin.verison>
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
</properties>
<profiles>
@ -315,11 +314,6 @@
<artifactId>ruoyi-im</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-job</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
@ -328,18 +322,15 @@
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-demo</artifactId>
<version>${revision}</version>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-spring-boot-starter</artifactId>
<version>${easytrans.version}</version>
</dependency>
<!-- 工作流模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-workflow</artifactId>
<version>${revision}</version>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-mybatis-plus-extend</artifactId>
<version>${easytrans.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

2
im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java

@ -103,7 +103,7 @@ public class AuthController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
SseMessageDto dto = new SseMessageDto();
dto.setMessage("欢迎登录RuoYi-Vue-Plus后台管理系统");
dto.setMessage("欢迎登录盒子IM后台管理系统");
dto.setUserIds(List.of(userId));
SseMessageUtils.publishMessage(dto);
}, 5, TimeUnit.SECONDS);

11
im-admin/ruoyi-admin/src/main/resources/application.yml

@ -218,3 +218,14 @@ websocket:
path: /resource/websocket
# 设置访问源地址
allowedOrigins: '*'
#easy trans 数据翻译组件
easy-trans:
#启用redis缓存 如果不用redis请设置为false
is-enable-redis: false
#启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
is-enable-global: true
#启用平铺模式
is-enable-tile: true
#支持多数据源
multiple-data-sources: true

12
im-admin/ruoyi-im/pom.xml

@ -6,7 +6,7 @@
<parent>
<groupId>org.dromara</groupId>
<artifactId>im-admin</artifactId>
<version>5.2.3</version>
<version>${revision}</version>
</parent>
<groupId>org.dromara</groupId>
@ -16,12 +16,18 @@
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-system</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-mybatis-plus-extend</artifactId>
</dependency>
</dependencies>
</project>

32
im-admin/ruoyi-im/src/main/java/org/dromara/im/config/ImCacheConfig.java

@ -0,0 +1,32 @@
package org.dromara.im.config;
import lombok.AllArgsConstructor;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
@EnableCaching
@AllArgsConstructor
public class ImCacheConfig extends CachingConfigurerSupport {
private final RedisConnectionFactory factory;
private final GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer;
@Bean
public CacheManager cacheManager() {
// 设置redis缓存管理器
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
}
}

40
im-admin/ruoyi-im/src/main/java/org/dromara/im/config/ImTransConfig.java

@ -0,0 +1,40 @@
package org.dromara.im.config;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.fhs.trans.ds.DataSourceSetter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
/**
* easy trans配置
*
* @author: Blue
* @date: 2024-07-20
* @version: 1.0
*/
@Configuration
public class ImTransConfig {
@Bean
public DataSourceSetter dataSourceSetter() {
// 适配多数据源
return new DataSourceSetter() {
@Override
public void setDataSource(String datasourceName) {
DynamicDataSourceContextHolder.push(datasourceName);
}
@Override
public Map<Object, Object> getContext() {
return null;
}
@Override
public void setContext(Map<Object, Object> context) {
}
};
}
}

104
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java

@ -1,26 +1,31 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.fhs.core.trans.anno.TransMethodResult;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImGroupVo;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImGroupBo;
import org.dromara.im.domain.bo.ImGroupMemberBo;
import org.dromara.im.domain.dto.ImGroupBanDto;
import org.dromara.im.domain.dto.ImGroupUnbanDto;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import org.dromara.im.domain.vo.ImGroupVo;
import org.dromara.im.service.IImGroupMemberService;
import org.dromara.im.service.IImGroupService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
@ -34,15 +39,17 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
@RequestMapping("/im/group")
public class ImGroupController extends BaseController {
private final IImGroupService imGroupService;
private final IImGroupService groupService;
private final IImGroupMemberService groupMemberService;
/**
* 查询群列表
*/
@TransMethodResult
@SaCheckPermission("im:group:list")
@GetMapping("/list")
public TableDataInfo<ImGroupVo> list(ImGroupBo bo, PageQuery pageQuery) {
return imGroupService.queryPageList(bo, pageQuery);
return groupService.queryPageList(bo, pageQuery);
}
/**
@ -52,7 +59,7 @@ public class ImGroupController extends BaseController {
@Log(title = "群", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ImGroupBo bo, HttpServletResponse response) {
List<ImGroupVo> list = imGroupService.queryList(bo);
List<ImGroupVo> list = groupService.queryList(bo);
ExcelUtil.exportExcel(list, "群", ImGroupVo.class, response);
}
@ -61,45 +68,40 @@ public class ImGroupController extends BaseController {
*
* @param id 主键
*/
@TransMethodResult
@SaCheckPermission("im:group:query")
@GetMapping("/{id}")
public R<ImGroupVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(imGroupService.queryById(id));
public R<ImGroupVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
return R.ok(groupService.queryById(id));
}
/**
* 新增群
*/
@SaCheckPermission("im:group:add")
@Log(title = "群", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ImGroupBo bo) {
return toAjax(imGroupService.insertByBo(bo));
@Operation(summary = "封禁")
@PutMapping("/ban")
@SaCheckPermission("im:group:ban")
public void ban(@RequestBody @Valid ImGroupBanDto dto) {
groupService.ban(dto);
}
/**
* 修改群
*/
@SaCheckPermission("im:group:edit")
@Log(title = "群", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ImGroupBo bo) {
return toAjax(imGroupService.updateByBo(bo));
@Operation(summary = "解封")
@PutMapping("/unban")
@SaCheckPermission("im:group:ban")
public void unban(@RequestBody @Valid ImGroupUnbanDto dto) {
groupService.unban(dto);
}
/**
* 删除群
*
* @param ids 主键串
*/
@SaCheckPermission("im:group:remove")
@Log(title = "群", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(imGroupService.deleteWithValidByIds(List.of(ids), true));
@GetMapping("/findByName")
@Operation(summary = "根据名称查找群组",description = "用于下拉框选择群组")
@SaCheckPermission("im:group:info")
public R<List<ImGroupVo>> findByName(@RequestParam String name){
List<ImGroupVo> vos = groupService.findByName(name);
return R.ok(vos);
}
@GetMapping("/member/list")
@Operation(summary = "分页查询群成员")
@SaCheckPermission("im:group:member")
public TableDataInfo<ImGroupMemberVo> findMembers( ImGroupMemberBo bo, PageQuery pageQuery) {
return groupMemberService.queryPageList(bo,pageQuery);
}
}

105
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMemberController.java

@ -1,105 +0,0 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import org.dromara.im.domain.bo.ImGroupMemberBo;
import org.dromara.im.service.IImGroupMemberService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 群成员
*
* @author Blue
* @date 2024-12-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/im/groupMember")
public class ImGroupMemberController extends BaseController {
private final IImGroupMemberService imGroupMemberService;
/**
* 查询群成员列表
*/
@SaCheckPermission("im:groupMember:list")
@GetMapping("/list")
public TableDataInfo<ImGroupMemberVo> list(ImGroupMemberBo bo, PageQuery pageQuery) {
return imGroupMemberService.queryPageList(bo, pageQuery);
}
/**
* 导出群成员列表
*/
@SaCheckPermission("im:groupMember:export")
@Log(title = "群成员", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ImGroupMemberBo bo, HttpServletResponse response) {
List<ImGroupMemberVo> list = imGroupMemberService.queryList(bo);
ExcelUtil.exportExcel(list, "群成员", ImGroupMemberVo.class, response);
}
/**
* 获取群成员详细信息
*
* @param id 主键
*/
@SaCheckPermission("im:groupMember:query")
@GetMapping("/{id}")
public R<ImGroupMemberVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(imGroupMemberService.queryById(id));
}
/**
* 新增群成员
*/
@SaCheckPermission("im:groupMember:add")
@Log(title = "群成员", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ImGroupMemberBo bo) {
return toAjax(imGroupMemberService.insertByBo(bo));
}
/**
* 修改群成员
*/
@SaCheckPermission("im:groupMember:edit")
@Log(title = "群成员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ImGroupMemberBo bo) {
return toAjax(imGroupMemberService.updateByBo(bo));
}
/**
* 删除群成员
*
* @param ids 主键串
*/
@SaCheckPermission("im:groupMember:remove")
@Log(title = "群成员", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(imGroupMemberService.deleteWithValidByIds(List.of(ids), true));
}
}

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java

@ -1,26 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImGroupMessageBo;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import org.dromara.im.service.IImGroupMessageService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 群消息

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java

@ -1,26 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImPrivateMessageBo;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import org.dromara.im.service.IImPrivateMessageService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 私聊消息

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSensitiveWordController.java

@ -1,26 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImSensitiveWordBo;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import org.dromara.im.service.IImSensitiveWordService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 敏感词

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSmPushTaskController.java

@ -1,26 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImSmPushTaskBo;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import org.dromara.im.service.IImSmPushTaskService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 系统消息推送任务

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImSystemMessageController.java

@ -1,26 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImSystemMessageBo;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import org.dromara.im.service.IImSystemMessageService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 系统消息

46
im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java

@ -1,30 +1,27 @@
package org.dromara.im.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.im.domain.dto.ImUserBanDTO;
import org.dromara.im.domain.dto.ImUserUnbanDTO;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.im.domain.bo.ImUserBo;
import org.dromara.im.domain.dto.ImUserBanDto;
import org.dromara.im.domain.dto.ImUserUnbanDto;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.im.service.IImUserService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户
@ -74,7 +71,7 @@ public class ImUserController extends BaseController {
@Operation(summary = "账号封禁")
@PutMapping("/ban")
@SaCheckPermission("im:user:ban")
public void ban(@RequestBody @Valid ImUserBanDTO dto){
public void ban(@RequestBody @Valid ImUserBanDto dto){
userService.ban(dto);
}
@ -82,8 +79,17 @@ public class ImUserController extends BaseController {
@Operation(summary = "账号解封")
@PutMapping("/unban")
@SaCheckPermission("im:user:ban")
public void unban(@RequestBody @Valid ImUserUnbanDTO dto){
public void unban(@RequestBody @Valid ImUserUnbanDto dto){
userService.unban(dto);
}
@GetMapping("/findByName")
@Operation(summary = "根据用户名查找用户",description = "用于下拉框选择用户")
@SaCheckPermission("im:user:info")
public R<List<ImUserVo>> findByName(@RequestParam String name){
List<ImUserVo> vos = userService.findByName(name);
return R.ok(vos);
}
}

14
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroup.java

@ -1,15 +1,11 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.util.Date;
/**
* 群对象 im_group
@ -63,7 +59,7 @@ public class ImGroup {
/**
* 是否已解散
*/
private Long dissolve;
private Boolean dissolve;
/**
* 创建时间
@ -73,7 +69,7 @@ public class ImGroup {
/**
* 是否被封禁 0: 1:
*/
private Long isBanned;
private Boolean isBanned;
/**
* 被封禁原因

17
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroupMember.java

@ -1,15 +1,11 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fhs.core.trans.vo.TransPojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.util.Date;
/**
* 群成员对象 im_group_member
@ -19,10 +15,7 @@ import java.io.Serial;
*/
@Data
@TableName("im_group_member")
public class ImGroupMember {
@Serial
private static final long serialVersionUID = 1L;
public class ImGroupMember implements TransPojo {
/**
* id

8
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImGroupMessage.java

@ -1,13 +1,11 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.Date;
/**
* 群消息对象 im_group_message

8
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImPrivateMessage.java

@ -1,13 +1,11 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.Date;
/**
* 私聊消息对象 im_private_message

5
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSensitiveWord.java

@ -1,9 +1,8 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;

9
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSmPushTask.java

@ -1,13 +1,12 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.Date;
/**
* 系统消息推送任务对象 im_sm_push_task

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImSystemMessage.java

@ -1,9 +1,11 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;

13
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/ImUser.java

@ -1,15 +1,12 @@
package org.dromara.im.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fhs.core.trans.vo.TransPojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.util.Date;
/**
* 用户对象 im_user
@ -19,7 +16,7 @@ import java.io.Serial;
*/
@Data
@TableName("im_user")
public class ImUser {
public class ImUser implements TransPojo {
@Serial
private static final long serialVersionUID = 1L;

45
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupBo.java

@ -1,17 +1,14 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.im.domain.ImGroup;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import java.util.HashMap;
import java.util.Map;
/**
* 群业务对象 im_group
@ -20,75 +17,65 @@ import org.dromara.common.translation.constant.TransConstant;
* @date 2024-12-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ImGroup.class, reverseConvertGenerate = false)
public class ImGroupBo extends BaseEntity {
public class ImGroupBo {
/**
* id
*/
@NotNull(message = "id不能为空")
private Long id;
/**
* 群名字
*/
@NotBlank(message = "群名字不能为空")
private String name;
/**
* 群主id
*/
@NotNull(message = "群主id不能为空")
private Long ownerId;
/**
* 群头像
*/
@NotBlank(message = "群头像不能为空")
private String headImage;
/**
* 群头像缩略图
*/
@NotBlank(message = "群头像缩略图不能为空")
private String headImageThumb;
/**
* 群公告
*/
@NotBlank(message = "群公告不能为空")
private String notice;
/**
* 群备注
*/
@NotBlank(message = "群备注不能为空")
private String remark;
/**
* 是否已解散
*/
@NotNull(message = "是否已解散不能为空")
private Long dissolve;
private Boolean dissolve;
/**
* 创建时间
*/
@NotNull(message = "创建时间不能为空")
private Date createdTime;
/**
* 是否被封禁 0: 1:
*/
@NotNull(message = "是否被封禁")
private Long isBanned;
private Boolean isBanned;
/**
* 被封禁原因
*/
@NotBlank(message = "被封禁原因不能为空")
private String reason;
/**
* 请求参数
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
}

15
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupMemberBo.java

@ -1,17 +1,16 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImGroupMember;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImGroupMember;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
/**
* 群成员业务对象 im_group_member

13
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImGroupMessageBo.java

@ -1,15 +1,16 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImGroupMessage;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImGroupMessage;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 群消息业务对象 im_group_message

13
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImPrivateMessageBo.java

@ -1,15 +1,16 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImPrivateMessage;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImPrivateMessage;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 私聊消息业务对象 im_private_message

11
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSensitiveWordBo.java

@ -1,13 +1,14 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImSensitiveWord;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImSensitiveWord;
/**
* 敏感词业务对象 im_sensitive_word

13
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSmPushTaskBo.java

@ -1,15 +1,16 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImSmPushTask;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImSmPushTask;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 系统消息推送任务业务对象 im_sm_push_task

11
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImSystemMessageBo.java

@ -1,13 +1,14 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImSystemMessage;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.im.domain.ImSystemMessage;
/**
* 系统消息业务对象 im_system_message

12
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/bo/ImUserBo.java

@ -1,17 +1,10 @@
package org.dromara.im.domain.bo;
import org.dromara.im.domain.ImUser;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.im.domain.ImUser;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
/**
* 用户业务对象 im_user
@ -26,7 +19,6 @@ public class ImUserBo {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**

24
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImGroupBanDto.java

@ -0,0 +1,24 @@
package org.dromara.im.domain.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author: Blue
* @date: 2024-07-14
* @version: 1.0
*/
@Data
@Schema(description = "群组封禁")
public class ImGroupBanDto {
@NotNull(message = "群组id不可为空")
@Schema(description = "群组id")
private Long id;
@Length(max = 128, message = "封禁原因长度不能超过128")
@Schema(description = "封禁原因")
private String reason;
}

20
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImGroupUnbanDto.java

@ -0,0 +1,20 @@
package org.dromara.im.domain.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author: Blue
* @date: 2024-07-14
* @version: 1.0
*/
@Data
@Schema(description = "群组解锁")
public class ImGroupUnbanDto {
@NotNull(message = "群组id不可为空")
@Schema(description = "群组id")
private Long id;
}

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserBanDTO.java → im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserBanDto.java

@ -12,7 +12,7 @@ import org.hibernate.validator.constraints.Length;
*/
@Data
@Schema(description = "用户锁定")
public class ImUserBanDTO {
public class ImUserBanDto {
@NotNull(message = "用户id不可为空")
@Schema(description = "用户id")

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserUnbanDTO.java → im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/dto/ImUserUnbanDto.java

@ -11,7 +11,7 @@ import lombok.Data;
*/
@Data
@Schema(description = "用户解锁")
public class ImUserUnbanDTO {
public class ImUserUnbanDto {
@NotNull(message = "用户id不可为空")
@Schema(description = "用户id")

29
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupMemberVo.java

@ -1,19 +1,17 @@
package org.dromara.im.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.im.domain.ImGroupMember;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import com.fhs.core.trans.anno.Trans;
import com.fhs.core.trans.constant.TransType;
import com.fhs.core.trans.vo.TransPojo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.constant.ImConstant;
import org.dromara.im.domain.ImGroupMember;
import org.dromara.im.domain.ImUser;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
@ -27,7 +25,7 @@ import java.util.Date;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ImGroupMember.class)
public class ImGroupMemberVo implements Serializable {
public class ImGroupMemberVo implements TransPojo {
@Serial
private static final long serialVersionUID = 1L;
@ -47,9 +45,15 @@ public class ImGroupMemberVo implements Serializable {
/**
* 用户id
*/
@ExcelProperty(value = "用户id")
@Trans(type = TransType.SIMPLE,dataSource = ImConstant.DS_IM_PLATFORM,target = ImUser.class, fields = "userName", ref = "userName")
private Long userId;
/**
* 用户名
*/
@ExcelProperty(value = "用户名")
private String userName;
/**
* 组内显示名称
*/
@ -92,5 +96,10 @@ public class ImGroupMemberVo implements Serializable {
@ExcelProperty(value = "用户昵称")
private String userNickName;
/**
* 群内显示昵称
*/
@ExcelProperty(value = "群内显示昵称")
private String showNickName;
}

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupMessageVo.java

@ -1,14 +1,10 @@
package org.dromara.im.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.im.domain.ImGroupMessage;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.domain.ImGroupMessage;
import java.io.Serial;
import java.io.Serializable;

64
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImGroupVo.java

@ -1,23 +1,22 @@
package org.dromara.im.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.im.domain.ImGroup;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import com.fhs.core.trans.anno.Trans;
import com.fhs.core.trans.constant.TransType;
import com.fhs.core.trans.vo.TransPojo;
import io.github.linpeilie.annotations.AutoMapper;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.im.constant.ImConstant;
import org.dromara.im.domain.ImGroup;
import org.dromara.im.domain.ImUser;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 群视图对象 im_group
*
@ -27,7 +26,7 @@ import java.util.Date;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ImGroup.class)
public class ImGroupVo implements Serializable {
public class ImGroupVo implements TransPojo {
@Serial
private static final long serialVersionUID = 1L;
@ -47,18 +46,24 @@ public class ImGroupVo implements Serializable {
/**
* 群主id
*/
@ExcelProperty(value = "群主id")
@Trans(type = TransType.SIMPLE, dataSource = ImConstant.DS_IM_PLATFORM, target = ImUser.class, fields = "userName",
ref = "ownerUserName")
private Long ownerId;
/**
* 群主名
*/
@ExcelProperty(value = "群主")
private String ownerUserName;
/**
* 群头像
*/
@ExcelProperty(value = "群头像")
private String headImage;
/**
* 群头像缩略图
* 群头像
*/
@ExcelProperty(value = "群头像缩略图")
private String headImageThumb;
@ -66,32 +71,21 @@ public class ImGroupVo implements Serializable {
/**
* 群公告
*/
@ExcelProperty(value = "群公告")
private String notice;
/**
* 群备注
*/
@ExcelProperty(value = "群备注")
private String remark;
/**
* 是否已解散
*/
@ExcelProperty(value = "是否已解散")
private Long dissolve;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createdTime;
@ExcelProperty(value = "是否已解散", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "false=否,true=是")
private Boolean dissolve;
/**
* 是否被封禁 0: 1:
*/
@ExcelProperty(value = "是否被封禁 0:否 1:是")
private Long isBanned;
@ExcelProperty(value = "是否被封禁", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "false=否,true=是")
private Boolean isBanned;
/**
* 被封禁原因
@ -99,5 +93,13 @@ public class ImGroupVo implements Serializable {
@ExcelProperty(value = "被封禁原因")
private String reason;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createdTime;
@Schema(description = "成员数量")
private Long memberCount;
}

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImPrivateMessageVo.java

@ -1,14 +1,10 @@
package org.dromara.im.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.im.domain.ImPrivateMessage;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.domain.ImPrivateMessage;
import java.io.Serial;
import java.io.Serializable;

5
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSensitiveWordVo.java

@ -1,16 +1,13 @@
package org.dromara.im.domain.vo;
import org.dromara.im.domain.ImSensitiveWord;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.domain.ImSensitiveWord;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSmPushTaskVo.java

@ -1,14 +1,10 @@
package org.dromara.im.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.im.domain.ImSmPushTask;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.domain.ImSmPushTask;
import java.io.Serial;
import java.io.Serializable;

5
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImSystemMessageVo.java

@ -1,16 +1,13 @@
package org.dromara.im.domain.vo;
import org.dromara.im.domain.ImSystemMessage;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.im.domain.ImSystemMessage;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

12
im-admin/ruoyi-im/src/main/java/org/dromara/im/domain/vo/ImUserVo.java

@ -1,16 +1,12 @@
package org.dromara.im.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.im.domain.ImUser;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.im.domain.ImUser;
import java.io.Serial;
import java.io.Serializable;
@ -100,7 +96,7 @@ public class ImUserVo implements Serializable {
* 是否被封禁 0: 1:
*/
@ExcelProperty(value = "是否被封禁", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=否,1=是")
@ExcelDictFormat(readConverterExp = "false=否,true=是")
private Boolean isBanned;
/**

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImGroup;
import org.dromara.im.domain.vo.ImGroupVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 群Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMemberMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImGroupMember;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 群成员Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImGroupMessage;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 群消息Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImPrivateMessage;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 私聊消息Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSensitiveWordMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImSensitiveWord;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 敏感词Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSmPushTaskMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImSmPushTask;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 系统消息推送任务Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImSystemMessageMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImSystemMessage;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 系统消息Mapper接口

2
im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java

@ -1,8 +1,8 @@
package org.dromara.im.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.im.domain.ImUser;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 用户Mapper接口

31
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMemberService.java

@ -1,11 +1,10 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import org.dromara.im.domain.bo.ImGroupMemberBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImGroupMemberBo;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import java.util.Collection;
import java.util.List;
/**
@ -41,28 +40,14 @@ public interface IImGroupMemberService {
*/
List<ImGroupMemberVo> queryList(ImGroupMemberBo bo);
/**
* 新增群成员
*
* @param bo 群成员
* @return 是否新增成功
*/
Boolean insertByBo(ImGroupMemberBo bo);
/**
* 修改群成员
* 查询群成员数量
*
* @param bo 群成员
* @return 是否修改成功
* @param groupId 群id
* @return 群成员数量
*/
Boolean updateByBo(ImGroupMemberBo bo);
Long findCountByGroupId(Long groupId);
/**
* 校验并批量删除群成员信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java

@ -1,9 +1,9 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import org.dromara.im.domain.bo.ImGroupMessageBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImGroupMessageBo;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import java.util.Collection;
import java.util.List;

36
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java

@ -1,11 +1,12 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImGroupVo;
import org.dromara.im.domain.bo.ImGroupBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImGroupBo;
import org.dromara.im.domain.dto.ImGroupBanDto;
import org.dromara.im.domain.dto.ImGroupUnbanDto;
import org.dromara.im.domain.vo.ImGroupVo;
import java.util.Collection;
import java.util.List;
/**
@ -42,27 +43,28 @@ public interface IImGroupService {
List<ImGroupVo> queryList(ImGroupBo bo);
/**
* 新增
* 聊封禁
*
* @param bo
* @return 是否新增成功
* @param dto dto
*/
Boolean insertByBo(ImGroupBo bo);
void ban(ImGroupBanDto dto);
/**
* 修改
* 聊解封
*
* @param bo
* @return 是否修改成功
* @param dto dto
*/
Boolean updateByBo(ImGroupBo bo);
void unban(ImGroupUnbanDto dto);
/**
* 校验并批量删除群信息
* 根据用户名查找
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
* @param name 用户名
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<ImGroupVo> findByName(String name);
}

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java

@ -1,9 +1,9 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import org.dromara.im.domain.bo.ImPrivateMessageBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImPrivateMessageBo;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import java.util.Collection;
import java.util.List;

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSensitiveWordService.java

@ -1,9 +1,9 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import org.dromara.im.domain.bo.ImSensitiveWordBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImSensitiveWordBo;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import java.util.Collection;
import java.util.List;

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSmPushTaskService.java

@ -1,9 +1,9 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import org.dromara.im.domain.bo.ImSmPushTaskBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImSmPushTaskBo;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import java.util.Collection;
import java.util.List;

6
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImSystemMessageService.java

@ -1,9 +1,9 @@
package org.dromara.im.service;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import org.dromara.im.domain.bo.ImSystemMessageBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImSystemMessageBo;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import java.util.Collection;
import java.util.List;

22
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java

@ -1,13 +1,12 @@
package org.dromara.im.service;
import org.dromara.im.domain.dto.ImUserBanDTO;
import org.dromara.im.domain.dto.ImUserUnbanDTO;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.im.domain.bo.ImUserBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.domain.bo.ImUserBo;
import org.dromara.im.domain.dto.ImUserBanDto;
import org.dromara.im.domain.dto.ImUserUnbanDto;
import org.dromara.im.domain.vo.ImUserVo;
import java.util.Collection;
import java.util.List;
/**
@ -48,13 +47,20 @@ public interface IImUserService {
*
* @param dto dto
*/
void ban(ImUserBanDTO dto);
void ban(ImUserBanDto dto);
/**
* 解封用户
*
* @param dto dto
*/
void unban(ImUserUnbanDTO dto);
void unban(ImUserUnbanDto dto);
/**
* 根据用户名查找
*
* @param name 用户名
*/
List<ImUserVo> findByName(String name);
}

84
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMemberServiceImpl.java

@ -1,25 +1,24 @@
package org.dromara.im.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImGroupMember;
import org.dromara.im.domain.bo.ImGroupMemberBo;
import org.dromara.im.domain.vo.ImGroupMemberVo;
import org.dromara.im.domain.ImGroupMember;
import org.dromara.im.mapper.ImGroupMemberMapper;
import org.dromara.im.service.IImGroupMemberService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 群成员Service业务层处理
@ -56,6 +55,10 @@ public class ImGroupMemberServiceImpl implements IImGroupMemberService {
public TableDataInfo<ImGroupMemberVo> queryPageList(ImGroupMemberBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ImGroupMember> lqw = buildQueryWrapper(bo);
Page<ImGroupMemberVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 填充显示昵称
result.getRecords().forEach(m -> {
m.setShowNickName(StrUtil.isEmpty(m.getRemarkNickName()) ? m.getUserNickName() : m.getRemarkNickName());
});
return TableDataInfo.build(result);
}
@ -71,70 +74,27 @@ public class ImGroupMemberServiceImpl implements IImGroupMemberService {
return baseMapper.selectVoList(lqw);
}
@Override
public Long findCountByGroupId(Long groupId) {
LambdaQueryWrapper<ImGroupMember> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ImGroupMember::getGroupId, groupId);
wrapper.eq(ImGroupMember::getQuit, false);
return baseMapper.selectCount(wrapper);
}
private LambdaQueryWrapper<ImGroupMember> buildQueryWrapper(ImGroupMemberBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ImGroupMember> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getGroupId() != null, ImGroupMember::getGroupId, bo.getGroupId());
lqw.eq(bo.getUserId() != null, ImGroupMember::getUserId, bo.getUserId());
lqw.like(StringUtils.isNotBlank(bo.getRemarkNickName()), ImGroupMember::getRemarkNickName, bo.getRemarkNickName());
lqw.eq(StringUtils.isNotBlank(bo.getHeadImage()), ImGroupMember::getHeadImage, bo.getHeadImage());
lqw.like(StringUtils.isNotBlank(bo.getRemarkGroupName()), ImGroupMember::getRemarkGroupName, bo.getRemarkGroupName());
lqw.eq(bo.getQuit() != null, ImGroupMember::getQuit, bo.getQuit());
lqw.eq(bo.getCreatedTime() != null, ImGroupMember::getCreatedTime, bo.getCreatedTime());
lqw.eq(bo.getQuitTime() != null, ImGroupMember::getQuitTime, bo.getQuitTime());
lqw.like(StringUtils.isNotBlank(bo.getUserNickName()), ImGroupMember::getUserNickName, bo.getUserNickName());
lqw.eq(ImGroupMember::getQuit, false);
lqw.orderByDesc(ImGroupMember::getCreatedTime);
return lqw;
}
/**
* 新增群成员
*
* @param bo 群成员
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(ImGroupMemberBo bo) {
ImGroupMember add = MapstructUtils.convert(bo, ImGroupMember.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改群成员
*
* @param bo 群成员
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(ImGroupMemberBo bo) {
ImGroupMember update = MapstructUtils.convert(bo, ImGroupMember.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ImGroupMember entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除群成员信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

16
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java

@ -1,25 +1,25 @@
package org.dromara.im.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImGroupMessage;
import org.dromara.im.domain.bo.ImGroupMessageBo;
import org.dromara.im.domain.vo.ImGroupMessageVo;
import org.dromara.im.domain.ImGroupMessage;
import org.dromara.im.mapper.ImGroupMessageMapper;
import org.dromara.im.service.IImGroupMessageService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 群消息Service业务层处理

132
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java

@ -1,25 +1,35 @@
package org.dromara.im.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fhs.core.trans.anno.TransMethodResult;
import lombok.RequiredArgsConstructor;
import org.apache.logging.log4j.util.Strings;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.constant.ImRedisKey;
import org.dromara.im.domain.ImGroup;
import org.dromara.im.domain.bo.ImGroupBo;
import org.dromara.im.domain.dto.ImGroupBanDto;
import org.dromara.im.domain.dto.ImGroupUnbanDto;
import org.dromara.im.domain.vo.ImGroupVo;
import org.dromara.im.domain.ImGroup;
import org.dromara.im.mapper.ImGroupMapper;
import org.dromara.im.mq.ImRedisMQTemplate;
import org.dromara.im.service.IImGroupMemberService;
import org.dromara.im.service.IImGroupService;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 群Service业务层处理
@ -28,12 +38,17 @@ import java.util.Collection;
* @date 2024-12-22
*/
@DS(ImConstant.DS_IM_PLATFORM)
@CacheConfig(cacheNames = ImRedisKey.IM_CACHE_GROUP)
@RequiredArgsConstructor
@Service
public class ImGroupServiceImpl implements IImGroupService {
private final ImGroupMapper baseMapper;
private final ImRedisMQTemplate redisMQTemplate;
private final IImGroupMemberService groupMemberService;
/**
* 查询群
*
@ -56,6 +71,8 @@ public class ImGroupServiceImpl implements IImGroupService {
public TableDataInfo<ImGroupVo> queryPageList(ImGroupBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ImGroup> lqw = buildQueryWrapper(bo);
Page<ImGroupVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 填充成员数量
result.getRecords().forEach(vo -> vo.setMemberCount(groupMemberService.findCountByGroupId(vo.getId())));
return TableDataInfo.build(result);
}
@ -65,76 +82,65 @@ public class ImGroupServiceImpl implements IImGroupService {
* @param bo 查询条件
* @return 群列表
*/
@TransMethodResult
@Override
public List<ImGroupVo> queryList(ImGroupBo bo) {
LambdaQueryWrapper<ImGroup> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ImGroup> buildQueryWrapper(ImGroupBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ImGroup> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), ImGroup::getName, bo.getName());
lqw.eq(bo.getOwnerId() != null, ImGroup::getOwnerId, bo.getOwnerId());
lqw.eq(StringUtils.isNotBlank(bo.getHeadImage()), ImGroup::getHeadImage, bo.getHeadImage());
lqw.eq(StringUtils.isNotBlank(bo.getHeadImageThumb()), ImGroup::getHeadImageThumb, bo.getHeadImageThumb());
lqw.eq(StringUtils.isNotBlank(bo.getNotice()), ImGroup::getNotice, bo.getNotice());
lqw.eq(bo.getDissolve() != null, ImGroup::getDissolve, bo.getDissolve());
lqw.eq(bo.getCreatedTime() != null, ImGroup::getCreatedTime, bo.getCreatedTime());
lqw.eq(bo.getIsBanned() != null, ImGroup::getIsBanned, bo.getIsBanned());
lqw.eq(StringUtils.isNotBlank(bo.getReason()), ImGroup::getReason, bo.getReason());
return lqw;
}
/**
* 新增群
*
* @param bo
* @return 是否新增成功
*/
@Transactional(rollbackFor = Exception.class)
@CacheEvict(key = "#dto.getId()")
@Override
public Boolean insertByBo(ImGroupBo bo) {
ImGroup add = MapstructUtils.convert(bo, ImGroup.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
public void ban(ImGroupBanDto dto) {
LambdaUpdateWrapper<ImGroup> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(ImGroup::getId, dto.getId());
wrapper.set(ImGroup::getIsBanned, true);
wrapper.set(ImGroup::getReason, dto.getReason());
baseMapper.update(wrapper);
// 推送到处理队列,等待im-platfrom处理
redisMQTemplate.opsForList().rightPush(ImRedisKey.IM_QUEUE_GROUP_BANNED, dto);
}
/**
* 修改群
*
* @param bo
* @return 是否修改成功
*/
@CacheEvict(key = "#dto.getId()")
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updateByBo(ImGroupBo bo) {
ImGroup update = MapstructUtils.convert(bo, ImGroup.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
public void unban(ImGroupUnbanDto dto) {
LambdaUpdateWrapper<ImGroup> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(ImGroup::getId, dto.getId());
wrapper.set(ImGroup::getIsBanned, false);
wrapper.set(ImGroup::getReason, Strings.EMPTY);
baseMapper.update(wrapper);
// 推送到处理队列,等待im-platfrom处理
redisMQTemplate.opsForList().rightPush(ImRedisKey.IM_QUEUE_GROUP_UNBAN, dto);
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ImGroup entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除群信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
public List<ImGroupVo> findByName(String name) {
// 取出用户名或昵称匹配的前10条
LambdaQueryWrapper<ImGroup> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.like(StrUtil.isNotEmpty(name), ImGroup::getName, name);
queryWrapper.select(ImGroup::getId, ImGroup::getName);
queryWrapper.orderByDesc(ImGroup::getId);
queryWrapper.last("limit 10");
return baseMapper.selectVoList(queryWrapper);
}
return baseMapper.deleteByIds(ids) > 0;
private LambdaQueryWrapper<ImGroup> buildQueryWrapper(ImGroupBo bo) {;
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ImGroup> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getName()), ImGroup::getName, bo.getName());
lqw.eq(bo.getOwnerId() != null, ImGroup::getOwnerId, bo.getOwnerId());
lqw.eq(bo.getDissolve() != null, ImGroup::getDissolve, bo.getDissolve());
lqw.eq(bo.getCreatedTime() != null, ImGroup::getCreatedTime, bo.getCreatedTime());
lqw.eq(bo.getIsBanned() != null, ImGroup::getIsBanned, bo.getIsBanned());
lqw.eq(StringUtils.isNotBlank(bo.getReason()), ImGroup::getReason, bo.getReason());
lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
ImGroup::getCreatedTime, params.get("beginTime"), params.get("endTime"));
lqw.orderByDesc(ImGroup::getCreatedTime);
return lqw;
}
}

16
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java

@ -1,25 +1,25 @@
package org.dromara.im.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImPrivateMessage;
import org.dromara.im.domain.bo.ImPrivateMessageBo;
import org.dromara.im.domain.vo.ImPrivateMessageVo;
import org.dromara.im.domain.ImPrivateMessage;
import org.dromara.im.mapper.ImPrivateMessageMapper;
import org.dromara.im.service.IImPrivateMessageService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 私聊消息Service业务层处理

16
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSensitiveWordServiceImpl.java

@ -1,25 +1,25 @@
package org.dromara.im.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImSensitiveWord;
import org.dromara.im.domain.bo.ImSensitiveWordBo;
import org.dromara.im.domain.vo.ImSensitiveWordVo;
import org.dromara.im.domain.ImSensitiveWord;
import org.dromara.im.mapper.ImSensitiveWordMapper;
import org.dromara.im.service.IImSensitiveWordService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 敏感词Service业务层处理

16
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSmPushTaskServiceImpl.java

@ -1,25 +1,25 @@
package org.dromara.im.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImSmPushTask;
import org.dromara.im.domain.bo.ImSmPushTaskBo;
import org.dromara.im.domain.vo.ImSmPushTaskVo;
import org.dromara.im.domain.ImSmPushTask;
import org.dromara.im.mapper.ImSmPushTaskMapper;
import org.dromara.im.service.IImSmPushTaskService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 系统消息推送任务Service业务层处理

16
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImSystemMessageServiceImpl.java

@ -1,25 +1,25 @@
package org.dromara.im.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImSystemMessage;
import org.dromara.im.domain.bo.ImSystemMessageBo;
import org.dromara.im.domain.vo.ImSystemMessageVo;
import org.dromara.im.domain.ImSystemMessage;
import org.dromara.im.mapper.ImSystemMessageMapper;
import org.dromara.im.service.IImSystemMessageService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 系统消息Service业务层处理

42
im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java

@ -1,31 +1,29 @@
package org.dromara.im.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.apache.logging.log4j.util.Strings;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.im.constant.ImConstant;
import org.dromara.im.constant.ImRedisKey;
import org.dromara.im.domain.dto.ImUserBanDTO;
import org.dromara.im.domain.dto.ImUserUnbanDTO;
import org.dromara.im.mq.ImRedisMQTemplate;
import org.springframework.stereotype.Service;
import org.dromara.im.domain.ImUser;
import org.dromara.im.domain.bo.ImUserBo;
import org.dromara.im.domain.dto.ImUserBanDto;
import org.dromara.im.domain.dto.ImUserUnbanDto;
import org.dromara.im.domain.vo.ImUserVo;
import org.dromara.im.domain.ImUser;
import org.dromara.im.mapper.ImUserMapper;
import org.dromara.im.mq.ImRedisMQTemplate;
import org.dromara.im.service.IImUserService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 用户Service业务层处理
@ -80,7 +78,7 @@ public class ImUserServiceImpl implements IImUserService {
@Override
public void ban(ImUserBanDTO dto) {
public void ban(ImUserBanDto dto) {
LambdaUpdateWrapper<ImUser> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(ImUser::getId, dto.getId());
wrapper.set(ImUser::getIsBanned, true);
@ -91,7 +89,7 @@ public class ImUserServiceImpl implements IImUserService {
}
@Override
public void unban(ImUserUnbanDTO dto) {
public void unban(ImUserUnbanDto dto) {
LambdaUpdateWrapper<ImUser> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(ImUser::getId, dto.getId());
wrapper.set(ImUser::getIsBanned, false);
@ -103,7 +101,21 @@ public class ImUserServiceImpl implements IImUserService {
LambdaQueryWrapper<ImUser> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getUserName()), ImUser::getUserName, bo.getUserName());
lqw.like(StringUtils.isNotBlank(bo.getNickName()), ImUser::getNickName, bo.getNickName());
lqw.orderByDesc(ImUser::getCreatedTime);
return lqw;
}
@Override
public List<ImUserVo> findByName(String name) {
// 取出用户名或昵称匹配的前10条
LambdaQueryWrapper<ImUser> queryWrapper = Wrappers.lambdaQuery();
if(StrUtil.isNotEmpty(name)){
queryWrapper.like(ImUser::getUserName, name);
}
queryWrapper.select(ImUser::getId, ImUser::getUserName);
queryWrapper.orderByDesc(ImUser::getId);
queryWrapper.last("limit 10");
return baseMapper.selectVoList(queryWrapper);
}
}

Loading…
Cancel
Save