diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 29e0083ba..1bdd7783f 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -132,6 +132,8 @@ tenant: - t_fans - sys_tenant - sys_tenant_package + - aws_system_statistics + - act_integral_history - sys_role_dept - sys_role_menu - sys_user_post diff --git a/ruoyi-modules/ruoyi-content/pom.xml b/ruoyi-modules/ruoyi-content/pom.xml index ad15ce273..22e7eb083 100644 --- a/ruoyi-modules/ruoyi-content/pom.xml +++ b/ruoyi-modules/ruoyi-content/pom.xml @@ -178,7 +178,10 @@ org.dromara ruoyi-system - + + org.dromara + ruoyi-im + diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java index 24642043c..377be4302 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java @@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import com.wzj.soopin.content.utils.RedisOperator; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ public class VlogController extends BaseInfoProperties { private QcCloud qcCloud; @Autowired private VlogUploadService vlogUploadService; + @Autowired + public RedisOperator redis; @PostMapping("vodCallBack") public R vodCallBack(@RequestBody Map callbackData) { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index b1057ee42..98dcb8c63 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -75,7 +75,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Autowired private ISysMessageTemplateService templateService; - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void updateVlogStatus(String fileId, Integer status, String reason) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -90,7 +90,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { String uploaderId = vlog.getVlogerId(); // 2. 选择模板(假设你有模板ID,实际可配置到常量或数据库) - Long templateId = (status == 1) ? 1001L : 1002L; // 1001=审核通过模板,1002=驳回模板 + Long templateId = (status == 1) ? 1938491493736902658L : 1938491899007332353L; // 1001=审核通过模板,1002=驳回模板 SysMessageTemplateVo template = templateService.selectTemplateById(templateId); if (template == null) return; @@ -110,7 +110,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { sysMessageService.sendMessageToUser(messageBo, Long.valueOf(uploaderId)); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void updateVlogFirstImg(String fileId, String url, String fileUrl) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -120,7 +120,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { vlogMapper.update(null, updateWrapper); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void createVlog(VlogBO vlogBO) { String vid = sid.nextShort(); @@ -257,7 +257,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return vo; } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -267,7 +267,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { vlogMapper.update(null, updateWrapper); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void changeVlogStatus(String userId, String vlogId, Integer status) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -304,7 +304,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return null; } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void userLikeVlog(String userId, String vlogId) { String rid = sid.nextShort(); @@ -325,13 +325,18 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { Vlog vlog = vlogMapper.selectById(vlogId); if (vlog != null) { String vlogerId = vlog.getVlogerId(); - if (!userId.equals(vlogerId)) { // 不给自己发 - Long templateId = 1003L; // 假设1003是点赞通知模板 + if (!userId.equals(vlogerId)) { + Long templateId = 1938491299175723009L; SysMessageTemplateVo template = templateService.selectTemplateById(templateId); if (template != null) { + // 查询点赞用户昵称 + Users liker = usersMapper.selectById(userId); + String likerNickname = liker != null && liker.getNickname() != null ? liker.getNickname() : ""; + String content = template.getTemplateContent() .replace("${videoTitle}", vlog.getTitle() == null ? "" : vlog.getTitle()) - .replace("${liker}", userId); // 可查昵称 + .replace("${liker}", userId) + .replace("${likerNickname}", likerNickname); SysMessageBo messageBo = new SysMessageBo(); messageBo.setTitle(template.getTitle()); messageBo.setContent(content); @@ -347,7 +352,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return vlogMapper.selectById(id); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void flushCounts(String vlogId, Integer counts) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -356,7 +361,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { vlogMapper.update(null, updateWrapper); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void userUnLikeVlog(String userId, String vlogId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -581,7 +586,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } catch (Exception e) { // 处理解析异常,例如日志记录 System.err.println("Error parsing beginTime: " + beginTimeStr + " - " + e.getMessage()); - vlogBO.setStartTime(null); // 设置为null以避免SQL错误 + vlogBO.setStartTime(null); } } else { System.out.println("beginTimeStr is blank or null."); @@ -602,7 +607,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } catch (Exception e) { // 处理解析异常,例如日志记录 System.err.println("Error parsing endTime: " + endTimeStr + " - " + e.getMessage()); - vlogBO.setEndTime(null); // 设置为null以避免SQL错误 + vlogBO.setEndTime(null); } } else { System.out.println("endTimeStr is blank or null."); diff --git a/ruoyi-modules/ruoyi-im/pom.xml b/ruoyi-modules/ruoyi-im/pom.xml index c6c53acd9..ecd6dec8c 100644 --- a/ruoyi-modules/ruoyi-im/pom.xml +++ b/ruoyi-modules/ruoyi-im/pom.xml @@ -72,6 +72,14 @@ org.dromara ruoyi-common-web + + + + + + org.dromara + ruoyi-system + org.dromara diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/consumer/MessageRocketMQConsumer.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/consumer/MessageRocketMQConsumer.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/consumer/MessageRocketMQConsumer.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/consumer/MessageRocketMQConsumer.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysMessageController.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/controller/SysMessageController.java similarity index 91% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysMessageController.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/controller/SysMessageController.java index 99af4512e..8cc5b8afc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysMessageController.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/controller/SysMessageController.java @@ -1,41 +1,31 @@ package org.dromara.system.controller; -import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.wzj.soopin.member.domain.po.Member; -import com.wzj.soopin.member.mapper.MemberMapper; -import io.swagger.v3.oas.annotations.Operation; +//import com.wzj.soopin.member.domain.po.Member; +//import com.wzj.soopin.member.mapper.MemberMapper; import io.swagger.v3.oas.annotations.tags.Tag; 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.service.UserService; import org.dromara.common.core.utils.MapstructUtils; 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.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.common.satoken.utils.LoginHelper; 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.SysUserBo; import org.dromara.system.domain.vo.SysMessageTemplateVo; import org.dromara.system.domain.vo.SysMessageVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysMessageService; 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 org.dromara.system.service.ISysUserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -56,7 +46,7 @@ public class SysMessageController extends BaseController { private final ISysMessageService messageService; private final ISysUserService userService; private final ISysMessageTemplateService templateService; - private final MemberMapper umsMemberMapper; +// private final MemberMapper umsMemberMapper; /** * 获取当前用户ID @@ -143,10 +133,10 @@ public class SysMessageController extends BaseController { // 当logmess=1时,sendScope接收的是角色ID或特殊标识 if ("all".equals(scope)) { // 全部会员用户(查ums_member表) - List members = umsMemberMapper.selectList( - new QueryWrapper().eq("status", 1) - ); - userIdStrings = members.stream().map(m -> String.valueOf(m.getId())).toList(); +// List members = umsMemberMapper.selectList( +// new QueryWrapper().eq("status", 1) +// ); +// userIdStrings = members.stream().map(m -> String.valueOf(m.getId())).toList(); } else if ("expert".equals(scope) || "merchant".equals(scope) || "user".equals(scope)) { List users = userService.selectUserListByDept(null); List userIds; @@ -346,13 +336,13 @@ public class SysMessageController extends BaseController { return R.ok(readPage); } - /** - * 获取用户列表 - */ -// @SaCheckPermission("system:message:list") - @GetMapping("/user/list") - public R> getUserList(@RequestParam(required = false) String keyword) { - // 无论是否有关键词,都查询 ums_member 表中的用户信息 - return R.ok(userService.selectMemberUsers(keyword)); - } +// /** +// * 获取用户列表 +// */ +//// @SaCheckPermission("system:message:list") +// @GetMapping("/user/list") +// public R> getUserList(@RequestParam(required = false) String keyword) { +// // 无论是否有关键词,都查询 ums_member 表中的用户信息 +// return R.ok(userService.selectMemberUsers(keyword)); +// } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysMessageTemplateController.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/controller/SysMessageTemplateController.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysMessageTemplateController.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/controller/SysMessageTemplateController.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/converter/SysMessageConvert.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/converter/SysMessageConvert.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/converter/SysMessageConvert.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/converter/SysMessageConvert.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessage.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessage.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessage.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessage.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessageTemplate.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessageTemplate.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessageTemplate.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessageTemplate.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessageUser.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessageUser.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysMessageUser.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/SysMessageUser.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMessageBo.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/bo/SysMessageBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMessageBo.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/bo/SysMessageBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMessageTemplateBo.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/bo/SysMessageTemplateBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysMessageTemplateBo.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/bo/SysMessageTemplateBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/event/MessageEvent.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/event/MessageEvent.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/event/MessageEvent.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/event/MessageEvent.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageTemplateVo.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageTemplateVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageTemplateVo.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageTemplateVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageUserVo.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageUserVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageUserVo.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageUserVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageVo.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysMessageVo.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/domain/vo/SysMessageVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/event/MessageEventListener.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/event/MessageEventListener.java similarity index 93% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/event/MessageEventListener.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/event/MessageEventListener.java index d6cb9ed7d..f4a497c46 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/event/MessageEventListener.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/event/MessageEventListener.java @@ -1,11 +1,8 @@ package org.dromara.system.event; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; -import org.dromara.system.config.RocketMQConfig; import org.dromara.system.consumer.MessageRocketMQConsumer; import org.dromara.system.domain.event.MessageEvent; import org.dromara.system.service.IRocketMQService; @@ -33,10 +30,10 @@ public class MessageEventListener { @Autowired private IRocketMQService rocketMQService; - + @Autowired private MessageWebSocketServer messageWebSocketServer; - + @Autowired @Qualifier("systemTencentIMService") private ITencentIMService tencentIMService; @@ -50,47 +47,47 @@ public class MessageEventListener { try { // 提取消息和用户ID String userId = event.getUserIdStr(); - + // 创建消息包装对象 MessageRocketMQConsumer.MessageWrapper wrapper = new MessageRocketMQConsumer.MessageWrapper(); wrapper.setUserId(userId); wrapper.setMessage(event.getMessage()); - + // 首先尝试发送消息到腾讯IM boolean tencentIMSendSuccess = false; try { // 消息发送者可能是系统或管理员,这里使用固定的管理员账号作为发送者 - String fromUserId = "administrator"; + String fromUserId = "administrator"; String toUserId = userId; // 接收者是事件中的用户ID String content = event.getMessage().getContent(); // 只取content字段 - + // 处理消息变量替换(如果有) Map variables = new HashMap<>(); // 这里可以添加变量映射,例如:variables.put("userName", "张三"); - + // 从消息中提取标题和描述 String title = event.getMessage().getTitle(); String desc = event.getMessage().getContent(); - + // 处理变量替换 if (variables.size() > 0) { title = tencentIMService.processMessageVariables(title, variables); desc = tencentIMService.processMessageVariables(desc, variables); } - + // 扩展字段,可以在APP端获取 String ext = null; if (event.getMessage().getParams() != null && !event.getMessage().getParams().isEmpty()) { ext = JsonUtils.toJsonString(event.getMessage().getParams()); } - + // 根据消息类型决定推送方式 Map params = event.getMessage().getParams(); String pushType = null; if (params != null && params.containsKey("pushType")) { pushType = String.valueOf(params.get("pushType")); } - + if (pushType != null) { switch (pushType) { case "ALL": @@ -114,7 +111,7 @@ public class MessageEventListener { if (params != null && params.containsKey("tags")) { Object tagsObj = params.get("tags"); if (tagsObj instanceof String[]) { - tencentIMSendSuccess = tencentIMService.pushByTags(title, desc, + tencentIMSendSuccess = tencentIMService.pushByTags(title, desc, Arrays.asList((String[]) tagsObj), true, ext); } } @@ -122,7 +119,7 @@ public class MessageEventListener { case "USER": default: // 单用户推送(默认) - tencentIMSendSuccess = tencentIMService.pushToUsers(title, desc, + tencentIMSendSuccess = tencentIMService.pushToUsers(title, desc, Collections.singletonList(toUserId), true, ext); break; } @@ -130,7 +127,7 @@ public class MessageEventListener { // 默认为单用户推送 tencentIMSendSuccess = tencentIMService.sendMessageToTencentIM(fromUserId, toUserId, content); } - + if (tencentIMSendSuccess) { log.info("消息已成功发送到腾讯IM,接收者: {}", toUserId); } else { @@ -139,7 +136,7 @@ public class MessageEventListener { } catch (Exception e) { log.error("发送消息到腾讯IM异常,将尝试通过其他方式发送", e); } - + // 无论腾讯IM是否发送成功,都继续尝试通过RocketMQ发送消息 // 这样可以确保消息至少通过一种方式发送出去 /* @@ -157,12 +154,12 @@ public class MessageEventListener { } */ boolean rocketMQSendSuccess = false; // 直接设为false,表示不走MQ - + // 如果前两种方式都失败,则尝试直接通过WebSocket发送 if (!tencentIMSendSuccess && !rocketMQSendSuccess && event.getUserId() != null) { try { messageWebSocketServer.sendMessage( - event.getUserId(), + event.getUserId(), JsonUtils.toJsonString(event.getMessage()) ); log.info("消息事件已直接通过WebSocket发送,userId: {}", event.getUserId()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageMapper.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageMapper.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageTemplateMapper.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageTemplateMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageTemplateMapper.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageTemplateMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageUserMapper.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageUserMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMessageUserMapper.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/mapper/SysMessageUserMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IMessageWebSocketService.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/IMessageWebSocketService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IMessageWebSocketService.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/IMessageWebSocketService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMessageService.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/ISysMessageService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMessageService.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/ISysMessageService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMessageTemplateService.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/ISysMessageTemplateService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMessageTemplateService.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/ISysMessageTemplateService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/MessageWebSocketServiceImpl.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/MessageWebSocketServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/MessageWebSocketServiceImpl.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/MessageWebSocketServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMessageServiceImpl.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/SysMessageServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMessageServiceImpl.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/SysMessageServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMessageTemplateServiceImpl.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/SysMessageTemplateServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMessageTemplateServiceImpl.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/SysMessageTemplateServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java similarity index 99% rename from ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java rename to ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java index e3af563e4..87555e6fe 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/service/impl/TencentIMServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.dromara.system.service.ITencentIMService; +import org.dromara.system.util.TLSSigAPIv2; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Service; @@ -19,7 +20,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.Deflater; import java.util.Base64; -import com.wzj.soopin.member.util.TLSSigAPIv2; + /** * 腾讯IM服务实现类 diff --git a/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/util/TLSSigAPIv2.java b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/util/TLSSigAPIv2.java new file mode 100644 index 000000000..083d69b4c --- /dev/null +++ b/ruoyi-modules/ruoyi-im/src/main/java/org/dromara/system/util/TLSSigAPIv2.java @@ -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; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMessageMapper.xml b/ruoyi-modules/ruoyi-im/src/main/resources/mapper.system/SysMessageMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMessageMapper.xml rename to ruoyi-modules/ruoyi-im/src/main/resources/mapper.system/SysMessageMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMessageUserMapper.xml b/ruoyi-modules/ruoyi-im/src/main/resources/mapper.system/SysMessageUserMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMessageUserMapper.xml rename to ruoyi-modules/ruoyi-im/src/main/resources/mapper.system/SysMessageUserMapper.xml diff --git a/ruoyi-modules/ruoyi-member/pom.xml b/ruoyi-modules/ruoyi-member/pom.xml index 0e1cbf41d..4a388b461 100644 --- a/ruoyi-modules/ruoyi-member/pom.xml +++ b/ruoyi-modules/ruoyi-member/pom.xml @@ -36,7 +36,10 @@ org.dromara ruoyi-common-translation - + + org.dromara + ruoyi-im + org.dromara diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java index 7386dd018..0e8c62dc7 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java @@ -17,6 +17,13 @@ import org.dromara.common.redis.config.RedisConfig; import org.dromara.common.redis.redis.RedisCache; import org.springframework.stereotype.Service; 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.Map; @@ -28,8 +35,14 @@ public class FansServiceImpl extends ServiceImpl implements IF private final RedisCache redisCache; + @Autowired + private ISysMessageService sysMessageService; + @Autowired + private ISysMessageTemplateService templateService; + @Autowired + private IMemberService memberService; - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void doFollow(Long myId, Long vloggerId) { @@ -49,12 +62,23 @@ public class FansServiceImpl extends ServiceImpl implements IF fans.setFriendFlag(YesOrNo.YES.type); } baseMapper.insert(fans); - - // 系统消息:关注 -// MessageMO messageMO = new MessageMO(); -// messageMO.setFromUserId(myId); -// messageMO.setToUserId(vlogerId); -// rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO)); + // 推送关注消息 + Member follower = memberService.getById(myId); + Member vlogger = memberService.getById(vloggerId); + if (follower != null && vlogger != null && !myId.equals(vloggerId)) { + Long templateId = 1938489429145284609L; + 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) { @@ -65,12 +89,12 @@ public class FansServiceImpl extends ServiceImpl implements IF return baseMapper.selectOne(queryWrapper); } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void doCancel(Long myId, Long 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); pendingFan.setBothFriend(YesOrNo.NO.type); @@ -81,6 +105,23 @@ public class FansServiceImpl extends ServiceImpl implements IF LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); deleteWrapper.eq(Fans::getId, fan.getId()); 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 diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 3f92aa590..23ebb9862 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -103,10 +103,10 @@ org.dromara ruoyi-common-sse - - org.dromara - ruoyi-member - + + + + org.apache.tomcat.embed tomcat-embed-core diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysAddressController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysAddressController.java index 5dc0a7e3f..4ac38ba38 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysAddressController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysAddressController.java @@ -2,8 +2,8 @@ package org.dromara.system.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.wzj.soopin.member.domain.po.Address; -import org.dromara.system.mapper.AddressMapper; +//import com.wzj.soopin.member.domain.po.Address; +//import org.dromara.system.mapper.AddressMapper; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.core.config.RuoYiConfig; @@ -45,8 +45,8 @@ public class SysAddressController @Autowired private RedisService redisService; - @Autowired - private AddressMapper addressMapper; +// @Autowired +// private AddressMapper addressMapper; /** * 通用下载请求 @@ -133,52 +133,52 @@ public class SysAddressController } } - @GetMapping("/common/area") - public AjaxResult getAddressList() { - String addresses = redisService.getAddressList(); - if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) { - List addressDTOList = JSON.parseArray(addresses, AddressDTO.class); - if(addressDTOList.size()>0){ - return AjaxResult.success(addressDTOList); - } - } - QueryWrapper
addressQueryWrapper = new QueryWrapper<>(); - addressQueryWrapper.in("level", Arrays.asList(0,1,2)); - List
addressList = addressMapper.selectList(addressQueryWrapper); - Map> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode())); - Map> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode())); - List result = new ArrayList<>(); - addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> { - AddressDTO dto = new AddressDTO(); - dto.setId(it.getCode()); - dto.setLevel("province"); - dto.setName(it.getName()); - dto.setPid(0L); - //获取城市列表 - List child = new ArrayList<>(); - if (cityMap.containsKey(it.getCode())) { - cityMap.get(it.getCode()).forEach(city -> { - AddressDTO cityDto = new AddressDTO(); - cityDto.setId(city.getCode()); - cityDto.setLevel("city"); - cityDto.setName(city.getName()); - cityDto.setPid(city.getParentCode()); - cityDto.setChildren(districtMap.containsKey(city.getCode()) ? - districtMap.get(city.getCode()).stream().map(district -> { - AddressDTO districtDto = new AddressDTO(); - districtDto.setId(district.getCode()); - districtDto.setLevel("district"); - districtDto.setName(district.getName()); - districtDto.setPid(district.getParentCode()); - return districtDto; - }).collect(Collectors.toList()) : Collections.EMPTY_LIST); - child.add(cityDto); - }); - } - dto.setChildren(child); - result.add(dto); - }); - redisService.setAddressList(JSON.toJSONString(result)); - return AjaxResult.success(result); - } +// @GetMapping("/common/area") +// public AjaxResult getAddressList() { +// String addresses = redisService.getAddressList(); +// if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) { +// List addressDTOList = JSON.parseArray(addresses, AddressDTO.class); +// if(addressDTOList.size()>0){ +// return AjaxResult.success(addressDTOList); +// } +// } +// QueryWrapper
addressQueryWrapper = new QueryWrapper<>(); +// addressQueryWrapper.in("level", Arrays.asList(0,1,2)); +// List
addressList = addressMapper.selectList(addressQueryWrapper); +// Map> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode())); +// Map> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode())); +// List result = new ArrayList<>(); +// addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> { +// AddressDTO dto = new AddressDTO(); +// dto.setId(it.getCode()); +// dto.setLevel("province"); +// dto.setName(it.getName()); +// dto.setPid(0L); +// //获取城市列表 +// List child = new ArrayList<>(); +// if (cityMap.containsKey(it.getCode())) { +// cityMap.get(it.getCode()).forEach(city -> { +// AddressDTO cityDto = new AddressDTO(); +// cityDto.setId(city.getCode()); +// cityDto.setLevel("city"); +// cityDto.setName(city.getName()); +// cityDto.setPid(city.getParentCode()); +// cityDto.setChildren(districtMap.containsKey(city.getCode()) ? +// districtMap.get(city.getCode()).stream().map(district -> { +// AddressDTO districtDto = new AddressDTO(); +// districtDto.setId(district.getCode()); +// districtDto.setLevel("district"); +// districtDto.setName(district.getName()); +// districtDto.setPid(district.getParentCode()); +// return districtDto; +// }).collect(Collectors.toList()) : Collections.EMPTY_LIST); +// child.add(cityDto); +// }); +// } +// dto.setChildren(child); +// result.add(dto); +// }); +// redisService.setAddressList(JSON.toJSONString(result)); +// return AjaxResult.success(result); +// } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AddressMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AddressMapper.java index b7317369b..cc3f50f44 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AddressMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AddressMapper.java @@ -2,7 +2,7 @@ package org.dromara.system.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 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; @@ -11,7 +11,7 @@ import java.util.List; * * @author sjm */ -@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤 -public interface AddressMapper extends BaseMapper
{ - -} +//@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤 +//public interface AddressMapper extends BaseMapper
{ +// +//} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 937da0c60..a10d0e96c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -229,29 +229,29 @@ public interface ISysUserService { */ List selectUserListByDept(Long deptId); - /** - * 根据条件查询用户列表 - * - * @param user 用户信息 - * @return 用户列表 - */ - List selectUserList(SysUserBo user); - - /** - * 查询所有会员用户信息(ums_member表) - * - * @return 会员用户列表 - */ - List selectAllMemberUsers(); +// /** +// * 根据条件查询用户列表 +// * +// * @param user 用户信息 +// * @return 用户列表 +// */ +// List selectUserList(SysUserBo user); +// +// /** +// * 查询所有会员用户信息(ums_member表) +// * +// * @return 会员用户列表 +// */ +// List selectAllMemberUsers(); /** * 根据关键字查询会员用户信息(ums_member表) * * @param keyword 关键字(用户名、昵称或手机号) * @return 会员用户列表 - */ - List selectMemberUsers(String keyword); - +// */ +// List selectMemberUsers(String keyword); + /** * 根据角色ID查询用户ID列表 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index ec1f92fa0..c1e2741bb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -41,8 +41,8 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import com.wzj.soopin.member.domain.po.Member; -import com.wzj.soopin.member.service.IMemberService; +//import com.wzj.soopin.member.domain.po.Member; +//import com.wzj.soopin.member.service.IMemberService; import org.dromara.common.core.utils.SpringUtils; /** @@ -730,132 +730,132 @@ public class SysUserServiceImpl implements ISysUserService, UserService { * @param user 用户信息 * @return 用户列表 */ - @Override - public List selectUserList(SysUserBo user) { - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(SysUser::getStatus, SystemConstants.NORMAL); - - // 模糊搜索昵称或手机号 - if (StringUtils.isNotBlank(user.getNickName())) { - lqw.and(wrapper -> wrapper - .like(SysUser::getNickName, user.getNickName()) - .or() - .like(StringUtils.isNotBlank(user.getPhonenumber()), SysUser::getPhonenumber, user.getPhonenumber())); - } - - return baseMapper.selectUserList(lqw); - } +// @Override +// public List selectUserList(SysUserBo user) { +// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); +// lqw.eq(SysUser::getStatus, SystemConstants.NORMAL); +// +// // 模糊搜索昵称或手机号 +// if (StringUtils.isNotBlank(user.getNickName())) { +// lqw.and(wrapper -> wrapper +// .like(SysUser::getNickName, user.getNickName()) +// .or() +// .like(StringUtils.isNotBlank(user.getPhonenumber()), SysUser::getPhonenumber, user.getPhonenumber())); +// } +// +// return baseMapper.selectUserList(lqw); +// } - @Override - public List selectAllMemberUsers() { - try { - // 获取 Spring 上下文中的 MemberService bean - IMemberService memberService = SpringUtils.getBean(IMemberService.class); - - if (memberService != null) { - // 查询所有会员信息 - List members = memberService.list(); - - // 将 Member 转换为 SysUserVo - return members.stream().map(member -> { - SysUserVo userVo = new SysUserVo(); - // 设置用户ID - userVo.setUserId(member.getId()); - // 设置用户名 - userVo.setUserName(member.getUserName()); - // 设置昵称 - userVo.setNickName(member.getNickname()); - // 设置手机号,如果加密了就用隐藏版本 - userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ? - member.getPhoneHidden() : member.getPhoneEncrypted()); - // 设置头像 - if (StringUtils.isNotBlank(member.getAvatar())) { - try { - userVo.setAvatar(Long.parseLong(member.getAvatar())); - } catch (NumberFormatException e) { - log.warn("会员头像ID格式不正确: {}", member.getAvatar()); - } - } - // 设置性别 - if (member.getGender() != null) { - userVo.setSex(member.getGender().toString()); - } - // 设置状态 - userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值 - - return userVo; - }).collect(Collectors.toList()); - } - } catch (Exception e) { - log.error("查询会员信息失败", e); - } - - // 如果查询失败或会员服务不可用,返回空列表 - return new ArrayList<>(); - } +// @Override +// public List selectAllMemberUsers() { +// try { +// // 获取 Spring 上下文中的 MemberService bean +// IMemberService memberService = SpringUtils.getBean(IMemberService.class); +// +// if (memberService != null) { +// // 查询所有会员信息 +// List members = memberService.list(); +// +// // 将 Member 转换为 SysUserVo +// return members.stream().map(member -> { +// SysUserVo userVo = new SysUserVo(); +// // 设置用户ID +// userVo.setUserId(member.getId()); +// // 设置用户名 +// userVo.setUserName(member.getUserName()); +// // 设置昵称 +// userVo.setNickName(member.getNickname()); +// // 设置手机号,如果加密了就用隐藏版本 +// userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ? +// member.getPhoneHidden() : member.getPhoneEncrypted()); +// // 设置头像 +// if (StringUtils.isNotBlank(member.getAvatar())) { +// try { +// userVo.setAvatar(Long.parseLong(member.getAvatar())); +// } catch (NumberFormatException e) { +// log.warn("会员头像ID格式不正确: {}", member.getAvatar()); +// } +// } +// // 设置性别 +// if (member.getGender() != null) { +// userVo.setSex(member.getGender().toString()); +// } +// // 设置状态 +// userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值 +// +// return userVo; +// }).collect(Collectors.toList()); +// } +// } catch (Exception e) { +// log.error("查询会员信息失败", e); +// } +// +// // 如果查询失败或会员服务不可用,返回空列表 +// return new ArrayList<>(); +// } - @Override - public List selectMemberUsers(String keyword) { - // 尝试获取会员服务 - try { - // 获取 Spring 上下文中的 MemberService bean - IMemberService memberService = SpringUtils.getBean(IMemberService.class); - - if (memberService != null) { - // 创建查询条件 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - - // 如果有关键词,添加模糊查询条件(昵称、用户名、手机号) - if (StringUtils.isNotBlank(keyword)) { - queryWrapper.like(Member::getNickname, keyword) - .or() - .like(Member::getUserName, keyword) - .or() - .like(Member::getPhoneEncrypted, keyword) - .or() - .like(Member::getPhoneHidden, keyword); - } - - // 查询会员信息 - List members = memberService.list(queryWrapper); - - // 将 Member 转换为 SysUserVo - return members.stream().map(member -> { - SysUserVo userVo = new SysUserVo(); - // 设置用户ID - userVo.setUserId(member.getId()); - // 设置用户名 - userVo.setUserName(member.getUserName()); - // 设置昵称 - userVo.setNickName(member.getNickname()); - // 设置手机号,如果加密了就用隐藏版本 - userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ? - member.getPhoneHidden() : member.getPhoneEncrypted()); - // 设置头像 - if (StringUtils.isNotBlank(member.getAvatar())) { - try { - userVo.setAvatar(Long.parseLong(member.getAvatar())); - } catch (NumberFormatException e) { - log.warn("会员头像ID格式不正确: {}", member.getAvatar()); - } - } - // 设置性别 - if (member.getGender() != null) { - userVo.setSex(member.getGender().toString()); - } - // 设置状态 - userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值 - - return userVo; - }).collect(Collectors.toList()); - } - } catch (Exception e) { - log.error("查询会员信息失败", e); - } - - // 如果查询失败或会员服务不可用,返回空列表 - return new ArrayList<>(); - } +// @Override +// public List selectMemberUsers(String keyword) { +// // 尝试获取会员服务 +// try { +// // 获取 Spring 上下文中的 MemberService bean +// IMemberService memberService = SpringUtils.getBean(IMemberService.class); +// +// if (memberService != null) { +// // 创建查询条件 +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// +// // 如果有关键词,添加模糊查询条件(昵称、用户名、手机号) +// if (StringUtils.isNotBlank(keyword)) { +// queryWrapper.like(Member::getNickname, keyword) +// .or() +// .like(Member::getUserName, keyword) +// .or() +// .like(Member::getPhoneEncrypted, keyword) +// .or() +// .like(Member::getPhoneHidden, keyword); +// } +// +// // 查询会员信息 +// List members = memberService.list(queryWrapper); +// +// // 将 Member 转换为 SysUserVo +// return members.stream().map(member -> { +// SysUserVo userVo = new SysUserVo(); +// // 设置用户ID +// userVo.setUserId(member.getId()); +// // 设置用户名 +// userVo.setUserName(member.getUserName()); +// // 设置昵称 +// userVo.setNickName(member.getNickname()); +// // 设置手机号,如果加密了就用隐藏版本 +// userVo.setPhonenumber(StringUtils.isNotBlank(member.getPhoneHidden()) ? +// member.getPhoneHidden() : member.getPhoneEncrypted()); +// // 设置头像 +// if (StringUtils.isNotBlank(member.getAvatar())) { +// try { +// userVo.setAvatar(Long.parseLong(member.getAvatar())); +// } catch (NumberFormatException e) { +// log.warn("会员头像ID格式不正确: {}", member.getAvatar()); +// } +// } +// // 设置性别 +// if (member.getGender() != null) { +// userVo.setSex(member.getGender().toString()); +// } +// // 设置状态 +// userVo.setStatus(member.getStatus() == 1 ? "0" : "1"); // 转换状态值 +// +// return userVo; +// }).collect(Collectors.toList()); +// } +// } catch (Exception e) { +// log.error("查询会员信息失败", e); +// } +// +// // 如果查询失败或会员服务不可用,返回空列表 +// return new ArrayList<>(); +// } /** * 根据角色ID查询用户ID列表 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/task/MessageScheduledTask.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/task/MessageScheduledTask.java index 44d5124ad..d865b9e5c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/task/MessageScheduledTask.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/task/MessageScheduledTask.java @@ -1,23 +1,9 @@ package org.dromara.system.task; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; 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.springframework.scheduling.annotation.Scheduled; 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 public class MessageScheduledTask { - private final SysMessageMapper messageMapper; - private final SysMessageUserMapper messageUserMapper; +// private final SysMessageMapper messageMapper; +// private final SysMessageUserMapper messageUserMapper; private final MessageWebSocketServer messageWebSocketServer; /**