From 604d92f4abeedbf3c63cfaf6db8fba04370fd7a5 Mon Sep 17 00:00:00 2001 From: La123123 <617330105@qq.com> Date: Fri, 10 Apr 2026 10:26:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=B6=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E4=BB=A3=E7=90=86=E8=A7=92=E8=89=B2=E5=A5=97?= =?UTF-8?q?=E9=A4=90=E6=98=AF=E5=90=A6=E5=88=B0=E6=9C=9F=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=B6=88=E6=81=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/AuthController.java | 20 ++++++--- .../websocket/utils/WebSocketUtils.java | 10 +++++ .../im/controller/ImUserController.java | 14 ++++-- .../system/service/IImAgentAdminService.java | 10 +++++ .../service/impl/ImAgentAdminServiceImpl.java | 44 +++++++++++++++++++ 5 files changed, 89 insertions(+), 9 deletions(-) diff --git a/im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 870cee0..b1013b5 100644 --- a/im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -30,10 +30,7 @@ import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.domain.vo.SysTenantVo; -import org.dromara.system.service.ISysClientService; -import org.dromara.system.service.ISysConfigService; -import org.dromara.system.service.ISysSocialService; -import org.dromara.system.service.ISysTenantService; +import org.dromara.system.service.*; import org.dromara.web.domain.vo.LoginTenantVo; import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.TenantListVo; @@ -72,6 +69,8 @@ public class AuthController { private final ISysClientService clientService; private final ScheduledExecutorService scheduledExecutorService; + private final IImAgentAdminService imAgentAdminService; + /** * 登录方法 @@ -103,10 +102,21 @@ public class AuthController { Long userId = LoginHelper.getUserId(); scheduledExecutorService.schedule(() -> { WebSocketMessageDto dto = new WebSocketMessageDto(); - dto.setMessage("欢迎登录盒子IM后台管理系统"); + dto.setMessage("欢迎登录多客服后台管理系统"); dto.setSessionKeys(List.of(userId)); WebSocketUtils.publishMessage(dto); }, 5, TimeUnit.SECONDS); + + //判断是否到期,到期7天内发送到期时间提醒 + String expiredMsg = imAgentAdminService.checkIsExpired(userId); + if (expiredMsg != null && ObjectUtil.isNotEmpty(expiredMsg)) { + scheduledExecutorService.schedule(() -> { + WebSocketMessageDto dto = new WebSocketMessageDto(); + dto.setMessage(expiredMsg); + dto.setSessionKeys(List.of(userId)); + WebSocketUtils.publishMessage(dto); + }, 5, TimeUnit.SECONDS); + } return R.ok(loginVo); } diff --git a/im-admin/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/im-admin/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java index 8c4170a..0f94260 100644 --- a/im-admin/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java +++ b/im-admin/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java @@ -15,6 +15,7 @@ import org.springframework.web.socket.WebSocketSession; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.function.Consumer; import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC; @@ -124,4 +125,13 @@ public class WebSocketUtils { } } } + + /** + * 获取当前所有在线的用户ID列表 + * + * @return 当前所有在线的用户ID列表 + */ + public static Set getOnlineUserIds() { + return WebSocketSessionHolder.getSessionsAll(); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java index 491a63e..82ace5d 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java @@ -13,7 +13,9 @@ 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.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.im.domain.ImUser; import org.dromara.im.domain.bo.ImSensitiveWordBo; import org.dromara.im.domain.bo.ImUserBo; @@ -27,10 +29,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.concurrent.ScheduledExecutorService; import java.util.stream.Collectors; /** @@ -49,6 +49,8 @@ public class ImUserController extends BaseController { private final PasswordEncoder passwordEncoder; + private final ScheduledExecutorService scheduledExecutorService; + /** * 查询用户列表 */ @@ -153,6 +155,10 @@ public class ImUserController extends BaseController { @SaCheckPermission("im:user:listCustomer") @GetMapping("/listCustomer") public TableDataInfo listCustomer(ImUserBo bo, PageQuery pageQuery) { + Set test = WebSocketUtils.getOnlineUserIds(); + System.out.println(LoginHelper.getUserId()); + System.out.println("1111111"); + System.out.println(test); return userService.queryPageListCustomer(bo, pageQuery); } diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java index 8e11d47..23a119e 100644 --- a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java @@ -73,4 +73,14 @@ public interface IImAgentAdminService { * @return 插入数量 */ int insertAgentData(Long userId,String agentName); + + /** + * 发送套餐过期消息的方法 + * @param sysId 系统ID,用于标识需要发送过期消息的目标系统 + * @return 如果套餐即将到期(三天内),返回到对应提示 + */ + String checkIsExpired(Long sysId); + + + } diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java index 1e38315..5284fa0 100644 --- a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.dynamic.datasource.annotation.DS; import org.dromara.common.core.utils.MapstructUtils; @@ -18,6 +19,7 @@ import org.springframework.stereotype.Service; import org.dromara.system.mapper.ImAgentAdminMapper; import org.dromara.system.service.IImAgentAdminService; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -146,4 +148,46 @@ public class ImAgentAdminServiceImpl implements IImAgentAdminService { return baseMapper.insert(agent); } + + @Override + public String checkIsExpired(Long sysId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ImAgentAdmin::getSysId, sysId); + + ImAgentAdmin agent = baseMapper.selectOne(lqw); + + if(agent == null){ + return ""; + } + + Date expirationDate = agent.getPackageExpireTime(); + + // 判断当前代理套餐是否即将到期 + if (expirationDate == null) { + return ""; + } + + //获取当前时间,判断两个日期的差值 + Date now = new Date(); + long diff = expirationDate.getTime() - now.getTime(); + // 将毫秒转换为天数 + long days = diff / (1000 * 60 * 60 * 24); + + String formatTime = DateUtil.format(expirationDate, "yyyy-MM-dd"); + + // 如果大于等于0小于等于7天则返回即将到期提示 + if (days >= 0 && days <= 7) { + return "您的代理套餐将于 "+ formatTime + " 到期,请及时续费!"; + } + + // 如果小于0则返回已过期提示 + if (days < 0) { + return "您的代理套餐已于 " + formatTime + " 到期,请及时续费!"; + } + + return ""; + + } + + }