init
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.ruoyi.cai.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.cai.domain.Rank;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 榜单Service接口
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-20
|
||||
*/
|
||||
public interface RankService extends IService<Rank> {
|
||||
|
||||
void saveDayRank(LocalDate date,Integer type);
|
||||
|
||||
void saveWeekRank(LocalDate date,Integer type);
|
||||
|
||||
void saveMonthRank(LocalDate date,Integer type);
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
package com.ruoyi.cai.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.Rank;
|
||||
import com.ruoyi.cai.mapper.RankMapper;
|
||||
import com.ruoyi.cai.rank.RankManager;
|
||||
import com.ruoyi.cai.rank.RankNode;
|
||||
import com.ruoyi.cai.service.RankService;
|
||||
import com.ruoyi.cai.service.UserService;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
/**
|
||||
* 榜单Service业务层处理
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-20
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@Slf4j
|
||||
public class RankServiceImpl extends ServiceImpl<RankMapper,Rank> implements RankService {
|
||||
|
||||
@Autowired
|
||||
private RankManager rankManager;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Override
|
||||
public void saveDayRank(LocalDate date, Integer type) {
|
||||
List<RankNode> rank;
|
||||
if(type == 1){
|
||||
rank = rankManager.getLoveRankDay(date, 30);
|
||||
}else if(type == 2){
|
||||
rank = rankManager.getInviteRankDay(date, 30);
|
||||
}else{
|
||||
throw new ServiceException("type 参数错误");
|
||||
}
|
||||
if(CollectionUtil.isEmpty(rank)){
|
||||
return;
|
||||
}
|
||||
boolean exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
ReentrantLock lock = new ReentrantLock();
|
||||
try {
|
||||
lock.lock();
|
||||
exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
List<Rank> res = new ArrayList<>();
|
||||
for (int i = 0; i < rank.size(); i++) {
|
||||
RankNode rankNode = rank.get(i);
|
||||
Rank db = new Rank();
|
||||
db.setType(type);
|
||||
db.setDataType(1);
|
||||
db.setRankTime(date.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||
db.setRankBeginTime(date);
|
||||
db.setRankEndTime(date);
|
||||
db.setOrderRank(i+1);
|
||||
db.setNum(rankNode.getScore());
|
||||
db.setUserId(rankNode.getUserId());
|
||||
res.add(db);
|
||||
}
|
||||
this.saveBatch(res);
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveWeekRank(LocalDate date, Integer type) {
|
||||
List<RankNode> rank;
|
||||
if(type == 1){
|
||||
rank = rankManager.getLoveRankWeek(date, 30);
|
||||
}else if(type == 2){
|
||||
rank = rankManager.getInviteRankWeek(date, 30);
|
||||
}else{
|
||||
throw new ServiceException("type 参数错误");
|
||||
}
|
||||
if(CollectionUtil.isEmpty(rank)){
|
||||
return;
|
||||
}
|
||||
boolean exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
ReentrantLock lock = new ReentrantLock();
|
||||
try {
|
||||
lock.lock();
|
||||
exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
List<Rank> res = new ArrayList<>();
|
||||
LocalDate endDate = date.plusDays(7);
|
||||
String rankTime = date.format(DateTimeFormatter.ofPattern("yyyyMMdd")) +"-"+endDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
for (int i = 0; i < rank.size(); i++) {
|
||||
RankNode rankNode = rank.get(i);
|
||||
Rank db = new Rank();
|
||||
db.setType(type);
|
||||
db.setDataType(2);
|
||||
db.setRankTime(rankTime);
|
||||
db.setRankBeginTime(date);
|
||||
db.setRankEndTime(endDate);
|
||||
db.setOrderRank(i+1);
|
||||
db.setNum(rankNode.getScore());
|
||||
db.setUserId(rankNode.getUserId());
|
||||
res.add(db);
|
||||
}
|
||||
this.saveBatch(res);
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveMonthRank(LocalDate date, Integer type) {
|
||||
List<RankNode> rank;
|
||||
if(type == 1){
|
||||
rank = rankManager.getLoveRankDay(date, 30);
|
||||
}else if(type == 2){
|
||||
rank = rankManager.getInviteRankDay(date, 30);
|
||||
}else{
|
||||
throw new ServiceException("type 参数错误");
|
||||
}
|
||||
if(CollectionUtil.isEmpty(rank)){
|
||||
return;
|
||||
}
|
||||
boolean exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
ReentrantLock lock = new ReentrantLock();
|
||||
try {
|
||||
lock.lock();
|
||||
exists = this.exists(Wrappers.lambdaQuery(Rank.class)
|
||||
.eq(Rank::getType, type)
|
||||
.eq(Rank::getRankBeginTime, date));
|
||||
if(exists){
|
||||
log.error("本期榜单已经持久化 date={},type={}",date,type);
|
||||
return;
|
||||
}
|
||||
LocalDate endDate = date.plusMonths(1).plusDays(-1);
|
||||
List<Rank> res = new ArrayList<>();
|
||||
for (int i = 0; i < rank.size(); i++) {
|
||||
RankNode rankNode = rank.get(i);
|
||||
Rank db = new Rank();
|
||||
db.setType(type);
|
||||
db.setDataType(3);
|
||||
db.setRankTime(date.format(DateTimeFormatter.ofPattern("yyMM")));
|
||||
db.setRankBeginTime(date);
|
||||
db.setRankEndTime(endDate);
|
||||
db.setOrderRank(i+1);
|
||||
db.setNum(rankNode.getScore());
|
||||
db.setUserId(rankNode.getUserId());
|
||||
res.add(db);
|
||||
}
|
||||
this.saveBatch(res);
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user