From 4020297c590468ef96040076e7a39e61fe210a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Tue, 14 Oct 2025 19:07:21 +0800 Subject: [PATCH] 123 --- .../com/ruoyi/cai/domain/LoginMinLog.java | 23 +++++++++++ .../ruoyi/cai/mapper/LoginMinLogMapper.java | 7 ++++ .../cai/mq/handle/LoginNotifyHandle.java | 9 +++++ .../ruoyi/cai/service/LoginMinLogService.java | 9 +++++ .../cai/service/LoginMinLogServiceImpl.java | 38 +++++++++++++++++++ 5 files changed, 86 insertions(+) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/domain/LoginMinLog.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/LoginMinLogMapper.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogService.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogServiceImpl.java diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/LoginMinLog.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/LoginMinLog.java new file mode 100644 index 00000000..11fba2ea --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/LoginMinLog.java @@ -0,0 +1,23 @@ +package com.ruoyi.cai.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@TableName("cai_login_min_log") +public class LoginMinLog implements Serializable { + + private static final long serialVersionUID=1L; + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + private LocalDate loginDate; + private Long userId; + private LocalDateTime createTime; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/LoginMinLogMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/LoginMinLogMapper.java new file mode 100644 index 00000000..fc3d3e9e --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/LoginMinLogMapper.java @@ -0,0 +1,7 @@ +package com.ruoyi.cai.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.cai.domain.LoginMinLog; + +public interface LoginMinLogMapper extends BaseMapper { +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java index c05dd217..036a4b6d 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java @@ -11,6 +11,7 @@ import com.ruoyi.cai.mapper.UserFollowMapper; import com.ruoyi.cai.mq.CommonConsumerEnum; import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; import com.ruoyi.cai.notice.YunxinHttpService; +import com.ruoyi.cai.service.LoginMinLogService; import com.ruoyi.cai.service.UserInfoService; import com.ruoyi.cai.service.UserService; import com.ruoyi.common.utils.ip.AddressUtils; @@ -40,6 +41,8 @@ public class LoginNotifyHandle implements IHandle { private UserService userService; @Autowired private RedissonClient redissonClient; + @Autowired + private LoginMinLogService loginMinLogService; @Override public void run(String message) { @@ -52,6 +55,11 @@ public class LoginNotifyHandle implements IHandle { this.updateUserInfoSB(loginNotify.getUserId(),loginNotify.getClientIP(),loginNotify.getImei()); } } + try { + loginMinLogService.saveData(loginNotify); + }catch (Exception e){ + log.error(e.getMessage(),e); + } // 上线通知 String loginNoticeFansLock = LockManager.getLoginNoticeFansLock(loginNotify.getUserId()); RBucket bucket = redissonClient.getBucket(loginNoticeFansLock); @@ -59,6 +67,7 @@ public class LoginNotifyHandle implements IHandle { if(boo){ sendOnlineNotice(loginNotify.getUserId()); } + } @Resource diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogService.java new file mode 100644 index 00000000..36f2a3b8 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogService.java @@ -0,0 +1,9 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.cai.domain.LoginMinLog; +import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; + +public interface LoginMinLogService extends IService { + void saveData(LoginNotifyDTO loginNotify); +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogServiceImpl.java new file mode 100644 index 00000000..7a0fdbc2 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/LoginMinLogServiceImpl.java @@ -0,0 +1,38 @@ +package com.ruoyi.cai.service; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.domain.LoginMinLog; +import com.ruoyi.cai.mapper.LoginMinLogMapper; +import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; +import com.ruoyi.cai.util.IdLockManager; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; + +@Service +public class LoginMinLogServiceImpl extends ServiceImpl implements LoginMinLogService { + @Override + public void saveData(LoginNotifyDTO loginNotify) { + LocalDate now = loginNotify.getHappenTime().toLocalDate(); + boolean exists = this.exists(Wrappers.lambdaQuery(LoginMinLog.class) + .eq(LoginMinLog::getLoginDate, now) + .eq(LoginMinLog::getUserId, loginNotify.getUserId())); + if(exists){ + return; + } + String lockKey = String.format("loginMinLog:%s", loginNotify.getUserId()); + IdLockManager.executeWithLock(lockKey, () -> { + boolean existsF = this.exists(Wrappers.lambdaQuery(LoginMinLog.class) + .eq(LoginMinLog::getLoginDate, now) + .eq(LoginMinLog::getUserId, loginNotify.getUserId())); + if(existsF){ + return; + } + LoginMinLog log = new LoginMinLog(); + log.setLoginDate(now); + log.setUserId(loginNotify.getUserId()); + this.save(log); + }); + } +}