Browse Source

登录时判断当前代理角色套餐是否到期并发送消息提示

master
La123123 1 month ago
parent
commit
604d92f4ab
  1. 20
      im-admin/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
  2. 10
      im-admin/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
  3. 14
      im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java
  4. 10
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java
  5. 44
      im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java

20
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.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.service.ISysClientService; import org.dromara.system.service.*;
import org.dromara.system.service.ISysConfigService;
import org.dromara.system.service.ISysSocialService;
import org.dromara.system.service.ISysTenantService;
import org.dromara.web.domain.vo.LoginTenantVo; import org.dromara.web.domain.vo.LoginTenantVo;
import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.LoginVo;
import org.dromara.web.domain.vo.TenantListVo; import org.dromara.web.domain.vo.TenantListVo;
@ -72,6 +69,8 @@ public class AuthController {
private final ISysClientService clientService; private final ISysClientService clientService;
private final ScheduledExecutorService scheduledExecutorService; private final ScheduledExecutorService scheduledExecutorService;
private final IImAgentAdminService imAgentAdminService;
/** /**
* 登录方法 * 登录方法
@ -103,10 +102,21 @@ public class AuthController {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> { scheduledExecutorService.schedule(() -> {
WebSocketMessageDto dto = new WebSocketMessageDto(); WebSocketMessageDto dto = new WebSocketMessageDto();
dto.setMessage("欢迎登录盒子IM后台管理系统"); dto.setMessage("欢迎登录多客服后台管理系统");
dto.setSessionKeys(List.of(userId)); dto.setSessionKeys(List.of(userId));
WebSocketUtils.publishMessage(dto); WebSocketUtils.publishMessage(dto);
}, 5, TimeUnit.SECONDS); }, 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); return R.ok(loginVo);
} }

10
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.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC; import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC;
@ -124,4 +125,13 @@ public class WebSocketUtils {
} }
} }
} }
/**
* 获取当前所有在线的用户ID列表
*
* @return 当前所有在线的用户ID列表
*/
public static Set<Long> getOnlineUserIds() {
return WebSocketSessionHolder.getSessionsAll();
}
} }

14
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.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.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; 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.ImUser;
import org.dromara.im.domain.bo.ImSensitiveWordBo; import org.dromara.im.domain.bo.ImSensitiveWordBo;
import org.dromara.im.domain.bo.ImUserBo; 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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap; import java.util.*;
import java.util.List; import java.util.concurrent.ScheduledExecutorService;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -49,6 +49,8 @@ public class ImUserController extends BaseController {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final ScheduledExecutorService scheduledExecutorService;
/** /**
* 查询用户列表 * 查询用户列表
*/ */
@ -153,6 +155,10 @@ public class ImUserController extends BaseController {
@SaCheckPermission("im:user:listCustomer") @SaCheckPermission("im:user:listCustomer")
@GetMapping("/listCustomer") @GetMapping("/listCustomer")
public TableDataInfo<ImUserVo> listCustomer(ImUserBo bo, PageQuery pageQuery) { public TableDataInfo<ImUserVo> listCustomer(ImUserBo bo, PageQuery pageQuery) {
Set<Long> test = WebSocketUtils.getOnlineUserIds();
System.out.println(LoginHelper.getUserId());
System.out.println("1111111");
System.out.println(test);
return userService.queryPageListCustomer(bo, pageQuery); return userService.queryPageListCustomer(bo, pageQuery);
} }

10
im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java

@ -73,4 +73,14 @@ public interface IImAgentAdminService {
* @return 插入数量 * @return 插入数量
*/ */
int insertAgentData(Long userId,String agentName); int insertAgentData(Long userId,String agentName);
/**
* 发送套餐过期消息的方法
* @param sysId 系统ID用于标识需要发送过期消息的目标系统
* @return 如果套餐即将到期三天内返回到对应提示
*/
String checkIsExpired(Long sysId);
} }

44
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; package org.dromara.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import org.dromara.common.core.utils.MapstructUtils; 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.mapper.ImAgentAdminMapper;
import org.dromara.system.service.IImAgentAdminService; import org.dromara.system.service.IImAgentAdminService;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@ -146,4 +148,46 @@ public class ImAgentAdminServiceImpl implements IImAgentAdminService {
return baseMapper.insert(agent); return baseMapper.insert(agent);
} }
@Override
public String checkIsExpired(Long sysId) {
LambdaQueryWrapper<ImAgentAdmin> 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 "";
}
} }

Loading…
Cancel
Save