发送消息迁移到im
This commit is contained in:
parent
d2d8c6ee40
commit
5eec4e9255
@ -132,6 +132,8 @@ tenant:
|
|||||||
- t_fans
|
- t_fans
|
||||||
- sys_tenant
|
- sys_tenant
|
||||||
- sys_tenant_package
|
- sys_tenant_package
|
||||||
|
- aws_system_statistics
|
||||||
|
- act_integral_history
|
||||||
- sys_role_dept
|
- sys_role_dept
|
||||||
- sys_role_menu
|
- sys_role_menu
|
||||||
- sys_user_post
|
- sys_user_post
|
||||||
|
@ -178,7 +178,10 @@
|
|||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-system</artifactId>
|
<artifactId>ruoyi-system</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara</groupId>
|
||||||
|
<artifactId>ruoyi-im</artifactId>
|
||||||
|
</dependency>
|
||||||
<!-- 腾讯云SDK核心模块 -->
|
<!-- 腾讯云SDK核心模块 -->
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>com.tencentcloudapi</groupId>-->
|
<!-- <groupId>com.tencentcloudapi</groupId>-->
|
||||||
|
@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import com.wzj.soopin.content.utils.RedisOperator;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -34,6 +35,8 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
private QcCloud qcCloud;
|
private QcCloud qcCloud;
|
||||||
@Autowired
|
@Autowired
|
||||||
private VlogUploadService vlogUploadService;
|
private VlogUploadService vlogUploadService;
|
||||||
|
@Autowired
|
||||||
|
public RedisOperator redis;
|
||||||
|
|
||||||
@PostMapping("vodCallBack")
|
@PostMapping("vodCallBack")
|
||||||
public R<Void> vodCallBack(@RequestBody Map<String, Object> callbackData) {
|
public R<Void> vodCallBack(@RequestBody Map<String, Object> callbackData) {
|
||||||
|
@ -75,7 +75,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ISysMessageTemplateService templateService;
|
private ISysMessageTemplateService templateService;
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void updateVlogStatus(String fileId, Integer status, String reason) {
|
public void updateVlogStatus(String fileId, Integer status, String reason) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -90,7 +90,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
String uploaderId = vlog.getVlogerId();
|
String uploaderId = vlog.getVlogerId();
|
||||||
|
|
||||||
// 2. 选择模板(假设你有模板ID,实际可配置到常量或数据库)
|
// 2. 选择模板(假设你有模板ID,实际可配置到常量或数据库)
|
||||||
Long templateId = (status == 1) ? 1001L : 1002L; // 1001=审核通过模板,1002=驳回模板
|
Long templateId = (status == 1) ? 1938491493736902658L : 1938491899007332353L; // 1001=审核通过模板,1002=驳回模板
|
||||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||||
if (template == null) return;
|
if (template == null) return;
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
sysMessageService.sendMessageToUser(messageBo, Long.valueOf(uploaderId));
|
sysMessageService.sendMessageToUser(messageBo, Long.valueOf(uploaderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void updateVlogFirstImg(String fileId, String url, String fileUrl) {
|
public void updateVlogFirstImg(String fileId, String url, String fileUrl) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -120,7 +120,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
vlogMapper.update(null, updateWrapper);
|
vlogMapper.update(null, updateWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void createVlog(VlogBO vlogBO) {
|
public void createVlog(VlogBO vlogBO) {
|
||||||
String vid = sid.nextShort();
|
String vid = sid.nextShort();
|
||||||
@ -257,7 +257,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) {
|
public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -267,7 +267,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
vlogMapper.update(null, updateWrapper);
|
vlogMapper.update(null, updateWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void changeVlogStatus(String userId, String vlogId, Integer status) {
|
public void changeVlogStatus(String userId, String vlogId, Integer status) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -304,7 +304,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void userLikeVlog(String userId, String vlogId) {
|
public void userLikeVlog(String userId, String vlogId) {
|
||||||
String rid = sid.nextShort();
|
String rid = sid.nextShort();
|
||||||
@ -325,13 +325,18 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
Vlog vlog = vlogMapper.selectById(vlogId);
|
Vlog vlog = vlogMapper.selectById(vlogId);
|
||||||
if (vlog != null) {
|
if (vlog != null) {
|
||||||
String vlogerId = vlog.getVlogerId();
|
String vlogerId = vlog.getVlogerId();
|
||||||
if (!userId.equals(vlogerId)) { // 不给自己发
|
if (!userId.equals(vlogerId)) {
|
||||||
Long templateId = 1003L; // 假设1003是点赞通知模板
|
Long templateId = 1938491299175723009L;
|
||||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||||
if (template != null) {
|
if (template != null) {
|
||||||
|
// 查询点赞用户昵称
|
||||||
|
Users liker = usersMapper.selectById(userId);
|
||||||
|
String likerNickname = liker != null && liker.getNickname() != null ? liker.getNickname() : "";
|
||||||
|
|
||||||
String content = template.getTemplateContent()
|
String content = template.getTemplateContent()
|
||||||
.replace("${videoTitle}", vlog.getTitle() == null ? "" : vlog.getTitle())
|
.replace("${videoTitle}", vlog.getTitle() == null ? "" : vlog.getTitle())
|
||||||
.replace("${liker}", userId); // 可查昵称
|
.replace("${liker}", userId)
|
||||||
|
.replace("${likerNickname}", likerNickname);
|
||||||
SysMessageBo messageBo = new SysMessageBo();
|
SysMessageBo messageBo = new SysMessageBo();
|
||||||
messageBo.setTitle(template.getTitle());
|
messageBo.setTitle(template.getTitle());
|
||||||
messageBo.setContent(content);
|
messageBo.setContent(content);
|
||||||
@ -347,7 +352,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
return vlogMapper.selectById(id);
|
return vlogMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void flushCounts(String vlogId, Integer counts) {
|
public void flushCounts(String vlogId, Integer counts) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -356,7 +361,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
vlogMapper.update(null, updateWrapper);
|
vlogMapper.update(null, updateWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void userUnLikeVlog(String userId, String vlogId) {
|
public void userUnLikeVlog(String userId, String vlogId) {
|
||||||
LambdaQueryWrapper<MyLikedVlog> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<MyLikedVlog> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
@ -581,7 +586,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 处理解析异常,例如日志记录
|
// 处理解析异常,例如日志记录
|
||||||
System.err.println("Error parsing beginTime: " + beginTimeStr + " - " + e.getMessage());
|
System.err.println("Error parsing beginTime: " + beginTimeStr + " - " + e.getMessage());
|
||||||
vlogBO.setStartTime(null); // 设置为null以避免SQL错误
|
vlogBO.setStartTime(null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.out.println("beginTimeStr is blank or null.");
|
System.out.println("beginTimeStr is blank or null.");
|
||||||
@ -602,7 +607,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 处理解析异常,例如日志记录
|
// 处理解析异常,例如日志记录
|
||||||
System.err.println("Error parsing endTime: " + endTimeStr + " - " + e.getMessage());
|
System.err.println("Error parsing endTime: " + endTimeStr + " - " + e.getMessage());
|
||||||
vlogBO.setEndTime(null); // 设置为null以避免SQL错误
|
vlogBO.setEndTime(null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.out.println("endTimeStr is blank or null.");
|
System.out.println("endTimeStr is blank or null.");
|
||||||
|
@ -72,6 +72,14 @@
|
|||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-common-web</artifactId>
|
<artifactId>ruoyi-common-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>org.dromara</groupId>-->
|
||||||
|
<!-- <artifactId>ruoyi-member</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara</groupId>
|
||||||
|
<artifactId>ruoyi-system</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
|
@ -1,41 +1,31 @@
|
|||||||
package org.dromara.system.controller;
|
package org.dromara.system.controller;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.wzj.soopin.member.domain.po.Member;
|
//import com.wzj.soopin.member.domain.po.Member;
|
||||||
import com.wzj.soopin.member.mapper.MemberMapper;
|
//import com.wzj.soopin.member.mapper.MemberMapper;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.service.UserService;
|
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
|
||||||
import org.dromara.common.core.validate.EditGroup;
|
|
||||||
import org.dromara.common.core.validate.QueryGroup;
|
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
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.common.web.core.BaseController;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.system.domain.SysMessage;
|
import org.dromara.system.domain.SysMessage;
|
||||||
import org.dromara.system.domain.SysUser;
|
|
||||||
import org.dromara.system.domain.bo.SysMessageBo;
|
import org.dromara.system.domain.bo.SysMessageBo;
|
||||||
import org.dromara.system.domain.bo.SysUserBo;
|
|
||||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||||
import org.dromara.system.domain.vo.SysMessageVo;
|
import org.dromara.system.domain.vo.SysMessageVo;
|
||||||
import org.dromara.system.domain.vo.SysUserVo;
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
import org.dromara.system.service.ISysMessageService;
|
import org.dromara.system.service.ISysMessageService;
|
||||||
import org.dromara.system.service.ISysMessageTemplateService;
|
import org.dromara.system.service.ISysMessageTemplateService;
|
||||||
import org.dromara.system.service.ISysUserService;
|
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import org.dromara.system.service.ISysUserService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -56,7 +46,7 @@ public class SysMessageController extends BaseController {
|
|||||||
private final ISysMessageService messageService;
|
private final ISysMessageService messageService;
|
||||||
private final ISysUserService userService;
|
private final ISysUserService userService;
|
||||||
private final ISysMessageTemplateService templateService;
|
private final ISysMessageTemplateService templateService;
|
||||||
private final MemberMapper umsMemberMapper;
|
// private final MemberMapper umsMemberMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前用户ID
|
* 获取当前用户ID
|
||||||
@ -143,10 +133,10 @@ public class SysMessageController extends BaseController {
|
|||||||
// 当logmess=1时,sendScope接收的是角色ID或特殊标识
|
// 当logmess=1时,sendScope接收的是角色ID或特殊标识
|
||||||
if ("all".equals(scope)) {
|
if ("all".equals(scope)) {
|
||||||
// 全部会员用户(查ums_member表)
|
// 全部会员用户(查ums_member表)
|
||||||
List<Member> members = umsMemberMapper.selectList(
|
// List<Member> members = umsMemberMapper.selectList(
|
||||||
new QueryWrapper<Member>().eq("status", 1)
|
// new QueryWrapper<Member>().eq("status", 1)
|
||||||
);
|
// );
|
||||||
userIdStrings = members.stream().map(m -> String.valueOf(m.getId())).toList();
|
// userIdStrings = members.stream().map(m -> String.valueOf(m.getId())).toList();
|
||||||
} else if ("expert".equals(scope) || "merchant".equals(scope) || "user".equals(scope)) {
|
} else if ("expert".equals(scope) || "merchant".equals(scope) || "user".equals(scope)) {
|
||||||
List<SysUserVo> users = userService.selectUserListByDept(null);
|
List<SysUserVo> users = userService.selectUserListByDept(null);
|
||||||
List<Long> userIds;
|
List<Long> userIds;
|
||||||
@ -346,13 +336,13 @@ public class SysMessageController extends BaseController {
|
|||||||
return R.ok(readPage);
|
return R.ok(readPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 获取用户列表
|
// * 获取用户列表
|
||||||
*/
|
// */
|
||||||
// @SaCheckPermission("system:message:list")
|
//// @SaCheckPermission("system:message:list")
|
||||||
@GetMapping("/user/list")
|
// @GetMapping("/user/list")
|
||||||
public R<List<SysUserVo>> getUserList(@RequestParam(required = false) String keyword) {
|
// public R<List<SysUserVo>> getUserList(@RequestParam(required = false) String keyword) {
|
||||||
// 无论是否有关键词,都查询 ums_member 表中的用户信息
|
// // 无论是否有关键词,都查询 ums_member 表中的用户信息
|
||||||
return R.ok(userService.selectMemberUsers(keyword));
|
// return R.ok(userService.selectMemberUsers(keyword));
|
||||||
}
|
// }
|
||||||
}
|
}
|
@ -1,11 +1,8 @@
|
|||||||
package org.dromara.system.event;
|
package org.dromara.system.event;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
|
||||||
import org.dromara.common.json.utils.JsonUtils;
|
import org.dromara.common.json.utils.JsonUtils;
|
||||||
import org.dromara.system.config.RocketMQConfig;
|
|
||||||
import org.dromara.system.consumer.MessageRocketMQConsumer;
|
import org.dromara.system.consumer.MessageRocketMQConsumer;
|
||||||
import org.dromara.system.domain.event.MessageEvent;
|
import org.dromara.system.domain.event.MessageEvent;
|
||||||
import org.dromara.system.service.IRocketMQService;
|
import org.dromara.system.service.IRocketMQService;
|
||||||
@ -33,10 +30,10 @@ public class MessageEventListener {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IRocketMQService rocketMQService;
|
private IRocketMQService rocketMQService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MessageWebSocketServer messageWebSocketServer;
|
private MessageWebSocketServer messageWebSocketServer;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("systemTencentIMService")
|
@Qualifier("systemTencentIMService")
|
||||||
private ITencentIMService tencentIMService;
|
private ITencentIMService tencentIMService;
|
||||||
@ -50,47 +47,47 @@ public class MessageEventListener {
|
|||||||
try {
|
try {
|
||||||
// 提取消息和用户ID
|
// 提取消息和用户ID
|
||||||
String userId = event.getUserIdStr();
|
String userId = event.getUserIdStr();
|
||||||
|
|
||||||
// 创建消息包装对象
|
// 创建消息包装对象
|
||||||
MessageRocketMQConsumer.MessageWrapper wrapper = new MessageRocketMQConsumer.MessageWrapper();
|
MessageRocketMQConsumer.MessageWrapper wrapper = new MessageRocketMQConsumer.MessageWrapper();
|
||||||
wrapper.setUserId(userId);
|
wrapper.setUserId(userId);
|
||||||
wrapper.setMessage(event.getMessage());
|
wrapper.setMessage(event.getMessage());
|
||||||
|
|
||||||
// 首先尝试发送消息到腾讯IM
|
// 首先尝试发送消息到腾讯IM
|
||||||
boolean tencentIMSendSuccess = false;
|
boolean tencentIMSendSuccess = false;
|
||||||
try {
|
try {
|
||||||
// 消息发送者可能是系统或管理员,这里使用固定的管理员账号作为发送者
|
// 消息发送者可能是系统或管理员,这里使用固定的管理员账号作为发送者
|
||||||
String fromUserId = "administrator";
|
String fromUserId = "administrator";
|
||||||
String toUserId = userId; // 接收者是事件中的用户ID
|
String toUserId = userId; // 接收者是事件中的用户ID
|
||||||
String content = event.getMessage().getContent(); // 只取content字段
|
String content = event.getMessage().getContent(); // 只取content字段
|
||||||
|
|
||||||
// 处理消息变量替换(如果有)
|
// 处理消息变量替换(如果有)
|
||||||
Map<String, String> variables = new HashMap<>();
|
Map<String, String> variables = new HashMap<>();
|
||||||
// 这里可以添加变量映射,例如:variables.put("userName", "张三");
|
// 这里可以添加变量映射,例如:variables.put("userName", "张三");
|
||||||
|
|
||||||
// 从消息中提取标题和描述
|
// 从消息中提取标题和描述
|
||||||
String title = event.getMessage().getTitle();
|
String title = event.getMessage().getTitle();
|
||||||
String desc = event.getMessage().getContent();
|
String desc = event.getMessage().getContent();
|
||||||
|
|
||||||
// 处理变量替换
|
// 处理变量替换
|
||||||
if (variables.size() > 0) {
|
if (variables.size() > 0) {
|
||||||
title = tencentIMService.processMessageVariables(title, variables);
|
title = tencentIMService.processMessageVariables(title, variables);
|
||||||
desc = tencentIMService.processMessageVariables(desc, variables);
|
desc = tencentIMService.processMessageVariables(desc, variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 扩展字段,可以在APP端获取
|
// 扩展字段,可以在APP端获取
|
||||||
String ext = null;
|
String ext = null;
|
||||||
if (event.getMessage().getParams() != null && !event.getMessage().getParams().isEmpty()) {
|
if (event.getMessage().getParams() != null && !event.getMessage().getParams().isEmpty()) {
|
||||||
ext = JsonUtils.toJsonString(event.getMessage().getParams());
|
ext = JsonUtils.toJsonString(event.getMessage().getParams());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据消息类型决定推送方式
|
// 根据消息类型决定推送方式
|
||||||
Map<String, Object> params = event.getMessage().getParams();
|
Map<String, Object> params = event.getMessage().getParams();
|
||||||
String pushType = null;
|
String pushType = null;
|
||||||
if (params != null && params.containsKey("pushType")) {
|
if (params != null && params.containsKey("pushType")) {
|
||||||
pushType = String.valueOf(params.get("pushType"));
|
pushType = String.valueOf(params.get("pushType"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pushType != null) {
|
if (pushType != null) {
|
||||||
switch (pushType) {
|
switch (pushType) {
|
||||||
case "ALL":
|
case "ALL":
|
||||||
@ -114,7 +111,7 @@ public class MessageEventListener {
|
|||||||
if (params != null && params.containsKey("tags")) {
|
if (params != null && params.containsKey("tags")) {
|
||||||
Object tagsObj = params.get("tags");
|
Object tagsObj = params.get("tags");
|
||||||
if (tagsObj instanceof String[]) {
|
if (tagsObj instanceof String[]) {
|
||||||
tencentIMSendSuccess = tencentIMService.pushByTags(title, desc,
|
tencentIMSendSuccess = tencentIMService.pushByTags(title, desc,
|
||||||
Arrays.asList((String[]) tagsObj), true, ext);
|
Arrays.asList((String[]) tagsObj), true, ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,7 +119,7 @@ public class MessageEventListener {
|
|||||||
case "USER":
|
case "USER":
|
||||||
default:
|
default:
|
||||||
// 单用户推送(默认)
|
// 单用户推送(默认)
|
||||||
tencentIMSendSuccess = tencentIMService.pushToUsers(title, desc,
|
tencentIMSendSuccess = tencentIMService.pushToUsers(title, desc,
|
||||||
Collections.singletonList(toUserId), true, ext);
|
Collections.singletonList(toUserId), true, ext);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -130,7 +127,7 @@ public class MessageEventListener {
|
|||||||
// 默认为单用户推送
|
// 默认为单用户推送
|
||||||
tencentIMSendSuccess = tencentIMService.sendMessageToTencentIM(fromUserId, toUserId, content);
|
tencentIMSendSuccess = tencentIMService.sendMessageToTencentIM(fromUserId, toUserId, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tencentIMSendSuccess) {
|
if (tencentIMSendSuccess) {
|
||||||
log.info("消息已成功发送到腾讯IM,接收者: {}", toUserId);
|
log.info("消息已成功发送到腾讯IM,接收者: {}", toUserId);
|
||||||
} else {
|
} else {
|
||||||
@ -139,7 +136,7 @@ public class MessageEventListener {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("发送消息到腾讯IM异常,将尝试通过其他方式发送", e);
|
log.error("发送消息到腾讯IM异常,将尝试通过其他方式发送", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 无论腾讯IM是否发送成功,都继续尝试通过RocketMQ发送消息
|
// 无论腾讯IM是否发送成功,都继续尝试通过RocketMQ发送消息
|
||||||
// 这样可以确保消息至少通过一种方式发送出去
|
// 这样可以确保消息至少通过一种方式发送出去
|
||||||
/*
|
/*
|
||||||
@ -157,12 +154,12 @@ public class MessageEventListener {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
boolean rocketMQSendSuccess = false; // 直接设为false,表示不走MQ
|
boolean rocketMQSendSuccess = false; // 直接设为false,表示不走MQ
|
||||||
|
|
||||||
// 如果前两种方式都失败,则尝试直接通过WebSocket发送
|
// 如果前两种方式都失败,则尝试直接通过WebSocket发送
|
||||||
if (!tencentIMSendSuccess && !rocketMQSendSuccess && event.getUserId() != null) {
|
if (!tencentIMSendSuccess && !rocketMQSendSuccess && event.getUserId() != null) {
|
||||||
try {
|
try {
|
||||||
messageWebSocketServer.sendMessage(
|
messageWebSocketServer.sendMessage(
|
||||||
event.getUserId(),
|
event.getUserId(),
|
||||||
JsonUtils.toJsonString(event.getMessage())
|
JsonUtils.toJsonString(event.getMessage())
|
||||||
);
|
);
|
||||||
log.info("消息事件已直接通过WebSocket发送,userId: {}", event.getUserId());
|
log.info("消息事件已直接通过WebSocket发送,userId: {}", event.getUserId());
|
@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import jakarta.annotation.PostConstruct;
|
import jakarta.annotation.PostConstruct;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.system.service.ITencentIMService;
|
import org.dromara.system.service.ITencentIMService;
|
||||||
|
import org.dromara.system.util.TLSSigAPIv2;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.http.*;
|
import org.springframework.http.*;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -19,7 +20,7 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.zip.Deflater;
|
import java.util.zip.Deflater;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import com.wzj.soopin.member.util.TLSSigAPIv2;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯IM服务实现类
|
* 腾讯IM服务实现类
|
@ -0,0 +1,194 @@
|
|||||||
|
package org.dromara.system.util;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONException;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
|
||||||
|
public class TLSSigAPIv2 {
|
||||||
|
private static long sdkappid = 1600080789; // 替换为您的 SDKAppID
|
||||||
|
|
||||||
|
private static String key = "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091"; // 替换为您的密钥
|
||||||
|
|
||||||
|
public TLSSigAPIv2(long sdkappid, String key) {
|
||||||
|
this.sdkappid = sdkappid;
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成 UserSig 签名
|
||||||
|
*
|
||||||
|
* @param userid - 用户id,限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符
|
||||||
|
* @param expire - UserSig 票据的过期时间,单位是秒,比如 86400 代表生成的 UserSig 票据在一天后就无法再使用了
|
||||||
|
* @return usersig - 生成的签名
|
||||||
|
*/
|
||||||
|
public String genUserSig(String userid, long expire) {
|
||||||
|
return genUserSig(userid, expire, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成带 UserBuf 的 UserSig
|
||||||
|
*
|
||||||
|
* @param userid - 用户id
|
||||||
|
* @param expire - 过期时间,单位秒
|
||||||
|
* @param userbuf - 用户数据
|
||||||
|
* @return 生成的签名
|
||||||
|
*/
|
||||||
|
private String genUserSig(String userid, long expire, byte[] userbuf) {
|
||||||
|
long currTime = System.currentTimeMillis() / 1000;
|
||||||
|
|
||||||
|
JSONObject sigDoc = new JSONObject();
|
||||||
|
try {
|
||||||
|
sigDoc.put("TLS.ver", "2.0");
|
||||||
|
sigDoc.put("TLS.identifier", userid);
|
||||||
|
sigDoc.put("TLS.sdkappid", sdkappid);
|
||||||
|
sigDoc.put("TLS.expire", expire);
|
||||||
|
sigDoc.put("TLS.time", currTime);
|
||||||
|
|
||||||
|
String base64UserBuf = null;
|
||||||
|
if (null != userbuf) {
|
||||||
|
base64UserBuf = Base64.getEncoder().encodeToString(userbuf).replaceAll("\\s*", "");
|
||||||
|
sigDoc.put("TLS.userbuf", base64UserBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
String sig = hmacsha256(userid, currTime, expire, base64UserBuf);
|
||||||
|
if (sig.length() == 0) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
sigDoc.put("TLS.sig", sig);
|
||||||
|
|
||||||
|
Deflater compressor = new Deflater();
|
||||||
|
compressor.setInput(sigDoc.toString().getBytes(StandardCharsets.UTF_8));
|
||||||
|
compressor.finish();
|
||||||
|
byte[] compressedBytes = new byte[2048];
|
||||||
|
int compressedBytesLength = compressor.deflate(compressedBytes);
|
||||||
|
compressor.end();
|
||||||
|
|
||||||
|
return Base64.getEncoder().encodeToString(
|
||||||
|
Arrays.copyOfRange(compressedBytes, 0, compressedBytesLength)
|
||||||
|
).replaceAll("\\s*", "");
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成 PrivateMapKey
|
||||||
|
*/
|
||||||
|
public String genPrivateMapKey(String userid, long expire, long roomid, long privilegeMap) {
|
||||||
|
byte[] userbuf = genUserBuf(userid, roomid, expire, privilegeMap, 0, "");
|
||||||
|
return genUserSig(userid, expire, userbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成带字符串房间号的 PrivateMapKey
|
||||||
|
*/
|
||||||
|
public String genPrivateMapKeyWithStringRoomID(String userid, long expire, String roomstr, long privilegeMap) {
|
||||||
|
byte[] userbuf = genUserBuf(userid, 0, expire, privilegeMap, 0, roomstr);
|
||||||
|
return genUserSig(userid, expire, userbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成 HMAC-SHA256 签名
|
||||||
|
*/
|
||||||
|
private String hmacsha256(String identifier, long currTime, long expire, String base64Userbuf) {
|
||||||
|
String contentToBeSigned = "TLS.identifier:" + identifier + "\n"
|
||||||
|
+ "TLS.sdkappid:" + sdkappid + "\n"
|
||||||
|
+ "TLS.time:" + currTime + "\n"
|
||||||
|
+ "TLS.expire:" + expire + "\n";
|
||||||
|
if (null != base64Userbuf) {
|
||||||
|
contentToBeSigned += "TLS.userbuf:" + base64Userbuf + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
byte[] byteKey = key.getBytes(StandardCharsets.UTF_8);
|
||||||
|
Mac hmac = Mac.getInstance("HmacSHA256");
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(byteKey, "HmacSHA256");
|
||||||
|
hmac.init(keySpec);
|
||||||
|
byte[] byteSig = hmac.doFinal(contentToBeSigned.getBytes(StandardCharsets.UTF_8));
|
||||||
|
return Base64.getEncoder().encodeToString(byteSig).replaceAll("\\s*", "");
|
||||||
|
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成用户数据
|
||||||
|
*/
|
||||||
|
private byte[] genUserBuf(String account, long dwAuthID, long dwExpTime,
|
||||||
|
long dwPrivilegeMap, long dwAccountType, String roomStr) {
|
||||||
|
int accountLength = account.length();
|
||||||
|
int roomStrLength = roomStr.length();
|
||||||
|
int offset = 0;
|
||||||
|
int bufLength = 1 + 2 + accountLength + 20;
|
||||||
|
|
||||||
|
if (roomStrLength > 0) {
|
||||||
|
bufLength = bufLength + 2 + roomStrLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] userbuf = new byte[bufLength];
|
||||||
|
|
||||||
|
// 版本号
|
||||||
|
userbuf[offset++] = (byte)(roomStrLength > 0 ? 1 : 0);
|
||||||
|
|
||||||
|
// 账号长度
|
||||||
|
userbuf[offset++] = (byte) ((accountLength & 0xFF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (accountLength & 0x00FF);
|
||||||
|
|
||||||
|
// 写入账号
|
||||||
|
for (; offset < 3 + accountLength; ++offset) {
|
||||||
|
userbuf[offset] = (byte) account.charAt(offset - 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入 sdkappid
|
||||||
|
userbuf[offset++] = (byte) ((sdkappid & 0xFF000000) >> 24);
|
||||||
|
userbuf[offset++] = (byte) ((sdkappid & 0x00FF0000) >> 16);
|
||||||
|
userbuf[offset++] = (byte) ((sdkappid & 0x0000FF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (sdkappid & 0x000000FF);
|
||||||
|
|
||||||
|
// 写入房间号
|
||||||
|
userbuf[offset++] = (byte) ((dwAuthID & 0xFF000000) >> 24);
|
||||||
|
userbuf[offset++] = (byte) ((dwAuthID & 0x00FF0000) >> 16);
|
||||||
|
userbuf[offset++] = (byte) ((dwAuthID & 0x0000FF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (dwAuthID & 0x000000FF);
|
||||||
|
|
||||||
|
// 过期时间
|
||||||
|
long expire = System.currentTimeMillis() / 1000 + dwExpTime;
|
||||||
|
userbuf[offset++] = (byte) ((expire & 0xFF000000) >> 24);
|
||||||
|
userbuf[offset++] = (byte) ((expire & 0x00FF0000) >> 16);
|
||||||
|
userbuf[offset++] = (byte) ((expire & 0x0000FF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (expire & 0x000000FF);
|
||||||
|
|
||||||
|
// 权限位
|
||||||
|
userbuf[offset++] = (byte) ((dwPrivilegeMap & 0xFF000000) >> 24);
|
||||||
|
userbuf[offset++] = (byte) ((dwPrivilegeMap & 0x00FF0000) >> 16);
|
||||||
|
userbuf[offset++] = (byte) ((dwPrivilegeMap & 0x0000FF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (dwPrivilegeMap & 0x000000FF);
|
||||||
|
|
||||||
|
// 账号类型
|
||||||
|
userbuf[offset++] = (byte) ((dwAccountType & 0xFF000000) >> 24);
|
||||||
|
userbuf[offset++] = (byte) ((dwAccountType & 0x00FF0000) >> 16);
|
||||||
|
userbuf[offset++] = (byte) ((dwAccountType & 0x0000FF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (dwAccountType & 0x000000FF);
|
||||||
|
|
||||||
|
// 房间号字符串
|
||||||
|
if (roomStrLength > 0) {
|
||||||
|
userbuf[offset++] = (byte) ((roomStrLength & 0xFF00) >> 8);
|
||||||
|
userbuf[offset++] = (byte) (roomStrLength & 0x00FF);
|
||||||
|
for (; offset < bufLength; ++offset) {
|
||||||
|
userbuf[offset] = (byte) roomStr.charAt(offset - (bufLength - roomStrLength));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return userbuf;
|
||||||
|
}
|
||||||
|
}
|
@ -36,7 +36,10 @@
|
|||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-common-translation</artifactId>
|
<artifactId>ruoyi-common-translation</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara</groupId>
|
||||||
|
<artifactId>ruoyi-im</artifactId>
|
||||||
|
</dependency>
|
||||||
<!-- OSS功能模块 -->
|
<!-- OSS功能模块 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
|
@ -17,6 +17,13 @@ import org.dromara.common.redis.config.RedisConfig;
|
|||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.dromara.system.service.ISysMessageService;
|
||||||
|
import org.dromara.system.service.ISysMessageTemplateService;
|
||||||
|
import org.dromara.system.domain.bo.SysMessageBo;
|
||||||
|
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||||
|
import com.wzj.soopin.member.domain.po.Member;
|
||||||
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -28,8 +35,14 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
|
|
||||||
|
|
||||||
private final RedisCache redisCache;
|
private final RedisCache redisCache;
|
||||||
|
@Autowired
|
||||||
|
private ISysMessageService sysMessageService;
|
||||||
|
@Autowired
|
||||||
|
private ISysMessageTemplateService templateService;
|
||||||
|
@Autowired
|
||||||
|
private IMemberService memberService;
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void doFollow(Long myId, Long vloggerId) {
|
public void doFollow(Long myId, Long vloggerId) {
|
||||||
|
|
||||||
@ -49,12 +62,23 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
fans.setFriendFlag(YesOrNo.YES.type);
|
fans.setFriendFlag(YesOrNo.YES.type);
|
||||||
}
|
}
|
||||||
baseMapper.insert(fans);
|
baseMapper.insert(fans);
|
||||||
|
// 推送关注消息
|
||||||
// 系统消息:关注
|
Member follower = memberService.getById(myId);
|
||||||
// MessageMO messageMO = new MessageMO();
|
Member vlogger = memberService.getById(vloggerId);
|
||||||
// messageMO.setFromUserId(myId);
|
if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
|
||||||
// messageMO.setToUserId(vlogerId);
|
Long templateId = 1938489429145284609L;
|
||||||
// rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
|
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||||
|
if (template != null) {
|
||||||
|
String content = template.getTemplateContent()
|
||||||
|
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname())
|
||||||
|
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||||
|
SysMessageBo messageBo = new SysMessageBo();
|
||||||
|
messageBo.setTitle(template.getTitle());
|
||||||
|
messageBo.setContent(content);
|
||||||
|
messageBo.setSenderId(myId);
|
||||||
|
sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Fans queryFansRelationship(Long fanId, Long vlogerId) {
|
public Fans queryFansRelationship(Long fanId, Long vlogerId) {
|
||||||
@ -65,12 +89,12 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
return baseMapper.selectOne(queryWrapper);
|
return baseMapper.selectOne(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
public void doCancel(Long myId, Long vloggerId) {
|
public void doCancel(Long myId, Long vloggerId) {
|
||||||
// 判断我们是否朋友关系,如果是,则需要取消双方的关系
|
// 判断我们是否朋友关系,如果是,则需要取消双方的关系
|
||||||
Fans fan = queryFansRelationship(myId, vloggerId);
|
Fans fan = queryFansRelationship(myId, vloggerId);
|
||||||
if (fan != null && fan.getFriendFlag() == YesOrNo.YES.type) {
|
if (fan != null && YesOrNo.YES.type.equals(fan.getFriendFlag())) {
|
||||||
// 抹除双方的朋友关系,自己的关系删除即可
|
// 抹除双方的朋友关系,自己的关系删除即可
|
||||||
Fans pendingFan = queryFansRelationship(vloggerId, myId);
|
Fans pendingFan = queryFansRelationship(vloggerId, myId);
|
||||||
pendingFan.setBothFriend(YesOrNo.NO.type);
|
pendingFan.setBothFriend(YesOrNo.NO.type);
|
||||||
@ -81,6 +105,23 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
LambdaQueryWrapper<Fans> deleteWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<Fans> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
deleteWrapper.eq(Fans::getId, fan.getId());
|
deleteWrapper.eq(Fans::getId, fan.getId());
|
||||||
baseMapper.delete(deleteWrapper);
|
baseMapper.delete(deleteWrapper);
|
||||||
|
// 推送取关消息
|
||||||
|
Member follower = memberService.getById(myId);
|
||||||
|
Member vlogger = memberService.getById(vloggerId);
|
||||||
|
if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
|
||||||
|
Long templateId = 1938491158159028226L;
|
||||||
|
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||||
|
if (template != null) {
|
||||||
|
String content = template.getTemplateContent()
|
||||||
|
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname())
|
||||||
|
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||||
|
SysMessageBo messageBo = new SysMessageBo();
|
||||||
|
messageBo.setTitle(template.getTitle());
|
||||||
|
messageBo.setContent(content);
|
||||||
|
messageBo.setSenderId(myId);
|
||||||
|
sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,10 +103,10 @@
|
|||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-common-sse</artifactId>
|
<artifactId>ruoyi-common-sse</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<!-- <dependency>-->
|
||||||
<groupId>org.dromara</groupId>
|
<!-- <groupId>org.dromara</groupId>-->
|
||||||
<artifactId>ruoyi-member</artifactId>
|
<!-- <artifactId>ruoyi-member</artifactId>-->
|
||||||
</dependency>
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.tomcat.embed</groupId>
|
<groupId>org.apache.tomcat.embed</groupId>
|
||||||
<artifactId>tomcat-embed-core</artifactId>
|
<artifactId>tomcat-embed-core</artifactId>
|
||||||
|
@ -2,8 +2,8 @@ package org.dromara.system.controller;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.wzj.soopin.member.domain.po.Address;
|
//import com.wzj.soopin.member.domain.po.Address;
|
||||||
import org.dromara.system.mapper.AddressMapper;
|
//import org.dromara.system.mapper.AddressMapper;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.dromara.common.core.config.RuoYiConfig;
|
import org.dromara.common.core.config.RuoYiConfig;
|
||||||
@ -45,8 +45,8 @@ public class SysAddressController
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RedisService redisService;
|
private RedisService redisService;
|
||||||
|
|
||||||
@Autowired
|
// @Autowired
|
||||||
private AddressMapper addressMapper;
|
// private AddressMapper addressMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用下载请求
|
* 通用下载请求
|
||||||
@ -133,52 +133,52 @@ public class SysAddressController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/common/area")
|
// @GetMapping("/common/area")
|
||||||
public AjaxResult getAddressList() {
|
// public AjaxResult getAddressList() {
|
||||||
String addresses = redisService.getAddressList();
|
// String addresses = redisService.getAddressList();
|
||||||
if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) {
|
// if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) {
|
||||||
List<AddressDTO> addressDTOList = JSON.parseArray(addresses, AddressDTO.class);
|
// List<AddressDTO> addressDTOList = JSON.parseArray(addresses, AddressDTO.class);
|
||||||
if(addressDTOList.size()>0){
|
// if(addressDTOList.size()>0){
|
||||||
return AjaxResult.success(addressDTOList);
|
// return AjaxResult.success(addressDTOList);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
QueryWrapper<Address> addressQueryWrapper = new QueryWrapper<>();
|
// QueryWrapper<Address> addressQueryWrapper = new QueryWrapper<>();
|
||||||
addressQueryWrapper.in("level", Arrays.asList(0,1,2));
|
// addressQueryWrapper.in("level", Arrays.asList(0,1,2));
|
||||||
List<Address> addressList = addressMapper.selectList(addressQueryWrapper);
|
// List<Address> addressList = addressMapper.selectList(addressQueryWrapper);
|
||||||
Map<Long, List<Address>> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode()));
|
// Map<Long, List<Address>> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode()));
|
||||||
Map<Long, List<Address>> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode()));
|
// Map<Long, List<Address>> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode()));
|
||||||
List<AddressDTO> result = new ArrayList<>();
|
// List<AddressDTO> result = new ArrayList<>();
|
||||||
addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> {
|
// addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> {
|
||||||
AddressDTO dto = new AddressDTO();
|
// AddressDTO dto = new AddressDTO();
|
||||||
dto.setId(it.getCode());
|
// dto.setId(it.getCode());
|
||||||
dto.setLevel("province");
|
// dto.setLevel("province");
|
||||||
dto.setName(it.getName());
|
// dto.setName(it.getName());
|
||||||
dto.setPid(0L);
|
// dto.setPid(0L);
|
||||||
//获取城市列表
|
// //获取城市列表
|
||||||
List<AddressDTO> child = new ArrayList<>();
|
// List<AddressDTO> child = new ArrayList<>();
|
||||||
if (cityMap.containsKey(it.getCode())) {
|
// if (cityMap.containsKey(it.getCode())) {
|
||||||
cityMap.get(it.getCode()).forEach(city -> {
|
// cityMap.get(it.getCode()).forEach(city -> {
|
||||||
AddressDTO cityDto = new AddressDTO();
|
// AddressDTO cityDto = new AddressDTO();
|
||||||
cityDto.setId(city.getCode());
|
// cityDto.setId(city.getCode());
|
||||||
cityDto.setLevel("city");
|
// cityDto.setLevel("city");
|
||||||
cityDto.setName(city.getName());
|
// cityDto.setName(city.getName());
|
||||||
cityDto.setPid(city.getParentCode());
|
// cityDto.setPid(city.getParentCode());
|
||||||
cityDto.setChildren(districtMap.containsKey(city.getCode()) ?
|
// cityDto.setChildren(districtMap.containsKey(city.getCode()) ?
|
||||||
districtMap.get(city.getCode()).stream().map(district -> {
|
// districtMap.get(city.getCode()).stream().map(district -> {
|
||||||
AddressDTO districtDto = new AddressDTO();
|
// AddressDTO districtDto = new AddressDTO();
|
||||||
districtDto.setId(district.getCode());
|
// districtDto.setId(district.getCode());
|
||||||
districtDto.setLevel("district");
|
// districtDto.setLevel("district");
|
||||||
districtDto.setName(district.getName());
|
// districtDto.setName(district.getName());
|
||||||
districtDto.setPid(district.getParentCode());
|
// districtDto.setPid(district.getParentCode());
|
||||||
return districtDto;
|
// return districtDto;
|
||||||
}).collect(Collectors.toList()) : Collections.EMPTY_LIST);
|
// }).collect(Collectors.toList()) : Collections.EMPTY_LIST);
|
||||||
child.add(cityDto);
|
// child.add(cityDto);
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
dto.setChildren(child);
|
// dto.setChildren(child);
|
||||||
result.add(dto);
|
// result.add(dto);
|
||||||
});
|
// });
|
||||||
redisService.setAddressList(JSON.toJSONString(result));
|
// redisService.setAddressList(JSON.toJSONString(result));
|
||||||
return AjaxResult.success(result);
|
// return AjaxResult.success(result);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package org.dromara.system.mapper;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.wzj.soopin.member.domain.po.Address;
|
//import com.wzj.soopin.member.domain.po.Address;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author sjm
|
* @author sjm
|
||||||
*/
|
*/
|
||||||
@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
//@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
||||||
public interface AddressMapper extends BaseMapper<Address> {
|
//public interface AddressMapper extends BaseMapper<Address> {
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
@ -229,29 +229,29 @@ public interface ISysUserService {
|
|||||||
*/
|
*/
|
||||||
List<SysUserVo> selectUserListByDept(Long deptId);
|
List<SysUserVo> selectUserListByDept(Long deptId);
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 根据条件查询用户列表
|
// * 根据条件查询用户列表
|
||||||
*
|
// *
|
||||||
* @param user 用户信息
|
// * @param user 用户信息
|
||||||
* @return 用户列表
|
// * @return 用户列表
|
||||||
*/
|
// */
|
||||||
List<SysUserVo> selectUserList(SysUserBo user);
|
// List<SysUserVo> selectUserList(SysUserBo user);
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* 查询所有会员用户信息(ums_member表)
|
// * 查询所有会员用户信息(ums_member表)
|
||||||
*
|
// *
|
||||||
* @return 会员用户列表
|
// * @return 会员用户列表
|
||||||
*/
|
// */
|
||||||
List<SysUserVo> selectAllMemberUsers();
|
// List<SysUserVo> selectAllMemberUsers();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据关键字查询会员用户信息(ums_member表)
|
* 根据关键字查询会员用户信息(ums_member表)
|
||||||
*
|
*
|
||||||
* @param keyword 关键字(用户名、昵称或手机号)
|
* @param keyword 关键字(用户名、昵称或手机号)
|
||||||
* @return 会员用户列表
|
* @return 会员用户列表
|
||||||
*/
|
// */
|
||||||
List<SysUserVo> selectMemberUsers(String keyword);
|
// List<SysUserVo> selectMemberUsers(String keyword);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据角色ID查询用户ID列表
|
* 根据角色ID查询用户ID列表
|
||||||
*
|
*
|
||||||
|
@ -41,8 +41,8 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.wzj.soopin.member.domain.po.Member;
|
//import com.wzj.soopin.member.domain.po.Member;
|
||||||
import com.wzj.soopin.member.service.IMemberService;
|
//import com.wzj.soopin.member.service.IMemberService;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -730,132 +730,132 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
|||||||
* @param user 用户信息
|
* @param user 用户信息
|
||||||
* @return 用户列表
|
* @return 用户列表
|
||||||
*/
|
*/
|
||||||
@Override
|
// @Override
|
||||||
public List<SysUserVo> selectUserList(SysUserBo user) {
|
// public List<SysUserVo> selectUserList(SysUserBo user) {
|
||||||
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
|
// LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
|
||||||
lqw.eq(SysUser::getStatus, SystemConstants.NORMAL);
|
// lqw.eq(SysUser::getStatus, SystemConstants.NORMAL);
|
||||||
|
//
|
||||||
// 模糊搜索昵称或手机号
|
// // 模糊搜索昵称或手机号
|
||||||
if (StringUtils.isNotBlank(user.getNickName())) {
|
// if (StringUtils.isNotBlank(user.getNickName())) {
|
||||||
lqw.and(wrapper -> wrapper
|
// lqw.and(wrapper -> wrapper
|
||||||
.like(SysUser::getNickName, user.getNickName())
|
// .like(SysUser::getNickName, user.getNickName())
|
||||||
.or()
|
// .or()
|
||||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), SysUser::getPhonenumber, user.getPhonenumber()));
|
// .like(StringUtils.isNotBlank(user.getPhonenumber()), SysUser::getPhonenumber, user.getPhonenumber()));
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return baseMapper.selectUserList(lqw);
|
// return baseMapper.selectUserList(lqw);
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public List<SysUserVo> selectAllMemberUsers() {
|
// public List<SysUserVo> selectAllMemberUsers() {
|
||||||
try {
|
// try {
|
||||||
// 获取 Spring 上下文中的 MemberService bean
|
// // 获取 Spring 上下文中的 MemberService bean
|
||||||
IMemberService memberService = SpringUtils.getBean(IMemberService.class);
|
// IMemberService memberService = SpringUtils.getBean(IMemberService.class);
|
||||||
|
//
|
||||||
if (memberService != null) {
|
// if (memberService != null) {
|
||||||
// 查询所有会员信息
|
// // 查询所有会员信息
|
||||||
List<Member> members = memberService.list();
|
// List<Member> members = memberService.list();
|
||||||
|
//
|
||||||
// 将 Member 转换为 SysUserVo
|
// // 将 Member 转换为 SysUserVo
|
||||||
return members.stream().map(member -> {
|
// return members.stream().map(member -> {
|
||||||
SysUserVo userVo = new SysUserVo();
|
// SysUserVo userVo = new SysUserVo();
|
||||||
// 设置用户ID
|
// // 设置用户ID
|
||||||
userVo.setUserId(member.getId());
|
// userVo.setUserId(member.getId());
|
||||||
// 设置用户名
|
// // 设置用户名
|
||||||
userVo.setUserName(member.getUserName());
|
// userVo.setUserName(member.getUserName());
|
||||||
// 设置昵称
|
// // 设置昵称
|
||||||
userVo.setNickName(member.getNickname());
|
// userVo.setNickName(member.getNickname());
|
||||||
// 设置手机号,如果加密了就用隐藏版本
|
// // 设置手机号,如果加密了就用隐藏版本
|
||||||
userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ?
|
// userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ?
|
||||||
member.getPhoneHidden() : member.getPhoneEncrypted());
|
// member.getPhoneHidden() : member.getPhoneEncrypted());
|
||||||
// 设置头像
|
// // 设置头像
|
||||||
if (StringUtils.isNotBlank(member.getAvatar())) {
|
// if (StringUtils.isNotBlank(member.getAvatar())) {
|
||||||
try {
|
// try {
|
||||||
userVo.setAvatar(Long.parseLong(member.getAvatar()));
|
// userVo.setAvatar(Long.parseLong(member.getAvatar()));
|
||||||
} catch (NumberFormatException e) {
|
// } catch (NumberFormatException e) {
|
||||||
log.warn("会员头像ID格式不正确: {}", member.getAvatar());
|
// log.warn("会员头像ID格式不正确: {}", member.getAvatar());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
// 设置性别
|
// // 设置性别
|
||||||
if (member.getGender() != null) {
|
// if (member.getGender() != null) {
|
||||||
userVo.setSex(member.getGender().toString());
|
// userVo.setSex(member.getGender().toString());
|
||||||
}
|
// }
|
||||||
// 设置状态
|
// // 设置状态
|
||||||
userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值
|
// userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值
|
||||||
|
//
|
||||||
return userVo;
|
// return userVo;
|
||||||
}).collect(Collectors.toList());
|
// }).collect(Collectors.toList());
|
||||||
}
|
// }
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
log.error("查询会员信息失败", e);
|
// log.error("查询会员信息失败", e);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 如果查询失败或会员服务不可用,返回空列表
|
// // 如果查询失败或会员服务不可用,返回空列表
|
||||||
return new ArrayList<>();
|
// return new ArrayList<>();
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public List<SysUserVo> selectMemberUsers(String keyword) {
|
// public List<SysUserVo> selectMemberUsers(String keyword) {
|
||||||
// 尝试获取会员服务
|
// // 尝试获取会员服务
|
||||||
try {
|
// try {
|
||||||
// 获取 Spring 上下文中的 MemberService bean
|
// // 获取 Spring 上下文中的 MemberService bean
|
||||||
IMemberService memberService = SpringUtils.getBean(IMemberService.class);
|
// IMemberService memberService = SpringUtils.getBean(IMemberService.class);
|
||||||
|
//
|
||||||
if (memberService != null) {
|
// if (memberService != null) {
|
||||||
// 创建查询条件
|
// // 创建查询条件
|
||||||
LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
|
// LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
//
|
||||||
// 如果有关键词,添加模糊查询条件(昵称、用户名、手机号)
|
// // 如果有关键词,添加模糊查询条件(昵称、用户名、手机号)
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
// if (StringUtils.isNotBlank(keyword)) {
|
||||||
queryWrapper.like(Member::getNickname, keyword)
|
// queryWrapper.like(Member::getNickname, keyword)
|
||||||
.or()
|
// .or()
|
||||||
.like(Member::getUserName, keyword)
|
// .like(Member::getUserName, keyword)
|
||||||
.or()
|
// .or()
|
||||||
.like(Member::getPhoneEncrypted, keyword)
|
// .like(Member::getPhoneEncrypted, keyword)
|
||||||
.or()
|
// .or()
|
||||||
.like(Member::getPhoneHidden, keyword);
|
// .like(Member::getPhoneHidden, keyword);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 查询会员信息
|
// // 查询会员信息
|
||||||
List<Member> members = memberService.list(queryWrapper);
|
// List<Member> members = memberService.list(queryWrapper);
|
||||||
|
//
|
||||||
// 将 Member 转换为 SysUserVo
|
// // 将 Member 转换为 SysUserVo
|
||||||
return members.stream().map(member -> {
|
// return members.stream().map(member -> {
|
||||||
SysUserVo userVo = new SysUserVo();
|
// SysUserVo userVo = new SysUserVo();
|
||||||
// 设置用户ID
|
// // 设置用户ID
|
||||||
userVo.setUserId(member.getId());
|
// userVo.setUserId(member.getId());
|
||||||
// 设置用户名
|
// // 设置用户名
|
||||||
userVo.setUserName(member.getUserName());
|
// userVo.setUserName(member.getUserName());
|
||||||
// 设置昵称
|
// // 设置昵称
|
||||||
userVo.setNickName(member.getNickname());
|
// userVo.setNickName(member.getNickname());
|
||||||
// 设置手机号,如果加密了就用隐藏版本
|
// // 设置手机号,如果加密了就用隐藏版本
|
||||||
userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ?
|
// userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ?
|
||||||
member.getPhoneHidden() : member.getPhoneEncrypted());
|
// member.getPhoneHidden() : member.getPhoneEncrypted());
|
||||||
// 设置头像
|
// // 设置头像
|
||||||
if (StringUtils.isNotBlank(member.getAvatar())) {
|
// if (StringUtils.isNotBlank(member.getAvatar())) {
|
||||||
try {
|
// try {
|
||||||
userVo.setAvatar(Long.parseLong(member.getAvatar()));
|
// userVo.setAvatar(Long.parseLong(member.getAvatar()));
|
||||||
} catch (NumberFormatException e) {
|
// } catch (NumberFormatException e) {
|
||||||
log.warn("会员头像ID格式不正确: {}", member.getAvatar());
|
// log.warn("会员头像ID格式不正确: {}", member.getAvatar());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
// 设置性别
|
// // 设置性别
|
||||||
if (member.getGender() != null) {
|
// if (member.getGender() != null) {
|
||||||
userVo.setSex(member.getGender().toString());
|
// userVo.setSex(member.getGender().toString());
|
||||||
}
|
// }
|
||||||
// 设置状态
|
// // 设置状态
|
||||||
userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值
|
// userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值
|
||||||
|
//
|
||||||
return userVo;
|
// return userVo;
|
||||||
}).collect(Collectors.toList());
|
// }).collect(Collectors.toList());
|
||||||
}
|
// }
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
log.error("查询会员信息失败", e);
|
// log.error("查询会员信息失败", e);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 如果查询失败或会员服务不可用,返回空列表
|
// // 如果查询失败或会员服务不可用,返回空列表
|
||||||
return new ArrayList<>();
|
// return new ArrayList<>();
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据角色ID查询用户ID列表
|
* 根据角色ID查询用户ID列表
|
||||||
|
@ -1,23 +1,9 @@
|
|||||||
package org.dromara.system.task;
|
package org.dromara.system.task;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
|
||||||
import org.dromara.system.domain.SysMessage;
|
|
||||||
//import org.dromara.system.domain.SysMessageUser;
|
|
||||||
import org.dromara.system.domain.SysMessageUser;
|
|
||||||
import org.dromara.system.domain.vo.SysMessageVo;
|
|
||||||
import org.dromara.system.mapper.SysMessageMapper;
|
|
||||||
//import org.dromara.system.mapper.SysMessageUserMapper
|
|
||||||
import org.dromara.system.mapper.SysMessageUserMapper;
|
|
||||||
import org.dromara.system.websocket.MessageWebSocketServer;
|
import org.dromara.system.websocket.MessageWebSocketServer;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息定时任务
|
* 消息定时任务
|
||||||
@ -29,8 +15,8 @@ import java.util.List;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MessageScheduledTask {
|
public class MessageScheduledTask {
|
||||||
|
|
||||||
private final SysMessageMapper messageMapper;
|
// private final SysMessageMapper messageMapper;
|
||||||
private final SysMessageUserMapper messageUserMapper;
|
// private final SysMessageUserMapper messageUserMapper;
|
||||||
private final MessageWebSocketServer messageWebSocketServer;
|
private final MessageWebSocketServer messageWebSocketServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user