This commit is contained in:
777
2025-09-26 15:40:59 +08:00
parent 0a3889a5cb
commit e2a03924a9
17 changed files with 391 additions and 4 deletions

View File

@@ -0,0 +1,16 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.LoveRankToday;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.common.core.domain.PageQuery;
import java.util.List;
public interface LoveRankTodayService extends IService<LoveRankToday> {
List<AnchorListVo> homePage(PageQuery pageQuery, AnchorListQuery query);
void addRank(RankNotifyDTO rank);
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.Anchor;
import com.ruoyi.cai.domain.LoveRankToday;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.enums.rank.RankDataTypeEnum;
import com.ruoyi.cai.mapper.LoveRankTodayMapper;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.LoveRankTodayService;
import com.ruoyi.cai.util.IdLockManager;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.helper.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@Service
public class LoveRankTodayServiceImpl extends ServiceImpl<LoveRankTodayMapper, LoveRankToday> implements LoveRankTodayService {
@Resource
private LoveRankTodayMapper loveRankTodayMapper;
@Autowired
private AnchorService anchorService;
@Override
public List<AnchorListVo> homePage(PageQuery pageQuery, AnchorListQuery query){
if(pageQuery.checkPageNum(20)){
return Collections.emptyList();
}
pageQuery.resetPageSize();
Anchor anchor = anchorService.getByUserId(LoginHelper.getUserId());
if(anchor != null && anchor.getHiddenStatus() == 1){
query.setHiddenStatusUser(true);
}
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取本周的周一(如果今天是周一,则返回今天)
LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
Page<AnchorListVo> page = baseMapper.homePage(pageQuery.build(), query,monday);
return page.getRecords();
}
@Override
public void addRank(RankNotifyDTO rank) {
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取本周的周一(如果今天是周一,则返回今天)
LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 获取本周的周日(如果今天是周日,则返回今天)
LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
LoveRankToday one = this.getOne(Wrappers.lambdaQuery(LoveRankToday.class)
.eq(LoveRankToday::getUserId, rank.getUserId())
.eq(LoveRankToday::getDataType, RankDataTypeEnum.WEEK.getCode())
.eq(LoveRankToday::getBeginRankTime, monday)
.last("limit 1"));
if(one == null){
AtomicReference<LoveRankToday> atomicReference = new AtomicReference<>();
IdLockManager.executeWithLock(String.valueOf(rank.getUserId()), () -> {
LoveRankToday rankData = this.getOne(Wrappers.lambdaQuery(LoveRankToday.class)
.eq(LoveRankToday::getUserId, rank.getUserId())
.eq(LoveRankToday::getDataType, RankDataTypeEnum.WEEK.getCode())
.eq(LoveRankToday::getBeginRankTime, monday)
.last("limit 1"));
if(rankData == null){
LoveRankToday saveData = new LoveRankToday();
saveData.setDataType(RankDataTypeEnum.WEEK.getCode());
saveData.setRankTime(monday);
saveData.setBeginRankTime(monday);
saveData.setEndRankTime(sunday);
saveData.setNum(0L);
saveData.setUserId(rank.getUserId());
this.save(saveData);
atomicReference.set(saveData);
}
});
one = atomicReference.get();
}
loveRankTodayMapper.insRank(one.getId(), rank.getPrice());
}
}