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); }); } }