ss季度年度榜单

ss

ss

ss
This commit is contained in:
2025-01-20 14:22:02 +08:00
parent 5d9d971b8f
commit 6dfa2b0ff5
13 changed files with 512 additions and 33 deletions

View File

@@ -1054,4 +1054,50 @@ public class DateTimeUtil {
return zonedDateTime.format(dateFormatter);
}
/**
* 获取季度 1-2-3-4
* @param zonedDateTime
* @return
*/
public static int getQuarter(ZonedDateTime zonedDateTime) {
return (zonedDateTime.getMonthValue() - 1) / 3 + 1;
}
/**
* 季度开始时间
* @param zonedDateTime
* @param quarter
* @return
*/
public static ZonedDateTime getQuarterBegin(ZonedDateTime zonedDateTime, int quarter) {
if (quarter < 1 || quarter > 4) {
throw new IllegalArgumentException("季度必须在 1 到 4 之间");
}
// 计算季度的第一个月
int firstMonthOfQuarter = (quarter - 1) * 3 + 1;
return zonedDateTime.withMonth(firstMonthOfQuarter).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
}
/**
* 季度结束时间
* @param zonedDateTime
* @param quarter
* @return
*/
public static ZonedDateTime getQuarterEnd(ZonedDateTime zonedDateTime, int quarter) {
ZonedDateTime quarterBegin = getQuarterBegin(zonedDateTime, quarter);
return quarterBegin.plusMonths(3).minusSeconds(1);
}
/**
* 当前季度开始时间
* @param zonedDateTime
* @return
*/
public static ZonedDateTime getCutrrentQuarterBegin(ZonedDateTime zonedDateTime) {
int quarter = getQuarter(zonedDateTime);
return getQuarterBegin(zonedDateTime, quarter);
}
}

View File

@@ -15,4 +15,17 @@ public class GuildSSConstant {
this.level = level;
}
}
public static class SSRankType {
public static final Byte month = 1;
public static final Byte quarter = 2;
public static final Byte year = 3;
}
public static class SSQuarter {
public final Integer spring = 1;
public final Integer summer = 2;
public final Integer autumn = 3;
public final Integer winter = 4;
}
}

View File

@@ -0,0 +1,45 @@
package com.accompany.business.model.guild;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* SS金币发放明细表实体类
*
* @author
* @since 2024-09-04
*/
@Data
public class SsMonthRecord implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 时间
*/
private String cycleDate;
private Integer guildId;
private Long uid;
private Integer partitionId;
/**
* 公会总流水
*/
private BigDecimal guildDiamondNum;
/**
* SS等级
*/
private Integer ssLevel;
private Integer memberNum;
/**
* 创建时间
*/
private Date createTime;
private Date updateTime;
}

View File

@@ -20,6 +20,7 @@ public class GuildSSMemberVo {
private String markScore;
private Integer ssLevel;
private BigDecimal diamondNum;
private BigDecimal diffNum;
private Long goldNum;
private Long ownerErbanNo;
}

View File

@@ -25,6 +25,7 @@ public class GuildSSRankDetailVo {
private Integer rank = 0;
@ApiModelProperty("流水")
private BigDecimal diamondNum;
private BigDecimal diffNum = BigDecimal.ZERO;
@ApiModelProperty("评级")
private String markScore;
private Integer ssLevel;

View File

@@ -17,5 +17,6 @@ public class GuildSSRankVo {
private GuildSSRankDetailVo selfRank;
private GuildSSMemberVo memberVo;
private List<GuildSSRankDetailVo> rankList = new ArrayList<>();
private String endDateTimeStr;
}

View File

@@ -0,0 +1,19 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.SsMonthRecord;
import com.accompany.business.vo.guild.GuildSSRankDetailVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* SS金币发放明细表 Mapper 接口
*
* @author
* @since 2024-09-04
*/
public interface SsMonthRecordMapper extends BaseMapper<SsMonthRecord> {
List<GuildSSRankDetailVo> groupByGuildId(@Param("partitionId") Integer partitionId, @Param("monthOneStrs") List<String> monthOneStrs);
}

View File

@@ -7,6 +7,7 @@ import com.accompany.business.model.UserLevelExperience;
import com.accompany.business.model.activity.h5.ActivityH5LevelAward;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guild.SsMonthRecord;
import com.accompany.business.service.activity.h5.ActivityH5AwardRecordService;
import com.accompany.business.service.activity.h5.ActivityH5LevelAwardService;
import com.accompany.business.service.activity.h5.ActivityH5LevelExpService;
@@ -32,10 +33,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Month;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import static com.accompany.common.status.BusiStatus.ACCESS_DENIED;
@@ -65,18 +68,48 @@ public class SSGuildService {
private SsMonthCoinRecordService ssMonthCoinRecordService;
@Autowired
private ActivityH5AwardRecordService activityH5AwardRecordService;
@Autowired
private SsMonthRecordService ssMonthRecordService;
private static final DateTimeFormatter dateFormatters = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN);
public BusiResult<GuildSSRankVo> activitySSGuildMonthlyRank(Long uid) {
GuildSSRankVo guildSSRankVo = new GuildSSRankVo();
public BusiResult<GuildSSRankVo> ssGuildRank(Long uid, Byte rankType, Integer quarter) {
Users users = usersService.getUsersByUid(uid);
Integer partitionId = users.getPartitionId();
if (PartitionEnum.ARAB.getId() != partitionId) {
throw new ServiceException(ACCESS_DENIED);
}
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionInfo.getZoneId());
GuildMember vaildGuildMemberByUid = guildMemberService.getVaildGuildMemberByUid(uid);
Integer guildId = vaildGuildMemberByUid.getGuildId();
if(guildId == null){ //非主播
throw new ServiceException(ACCESS_DENIED);
}
GuildSSRankVo guildSSRankVo = new GuildSSRankVo();
UserLevelExperience userExper = levelService.getUserExper(uid);
guildSSRankVo.setWealth(userExper.getLevelExperience().getLevelSeq());
guildSSRankVo.setLimitWealth(activityRankRuleService.getCommonLimitWealth());
Guild guild = guildService.getVaildGuildById(guildId);
Users guildOwner = usersService.getUsersByUid(guild.getOwnerUid());
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
if (GuildSSConstant.SSRankType.month.equals(rankType)) {
return monthlyRank(partitionEnum, users, guild, guildOwner, guildSSRankVo);
} else if (GuildSSConstant.SSRankType.quarter.equals(rankType)) {
return quarterRank(quarter, partitionEnum, users, guild, guildOwner, guildSSRankVo);
} else if (GuildSSConstant.SSRankType.year.equals(rankType)) {
return yearRank(partitionEnum, users, guild, guildOwner, guildSSRankVo);
}
return BusiResult.success();
}
public BusiResult<GuildSSRankVo> monthlyRank(PartitionEnum partitionEnum, Users users, Guild guild, Users guildOwner, GuildSSRankVo guildSSRankVo) {
Integer partitionId = partitionEnum.getId();
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());
String cycleOne = zonedDateTime.withDayOfMonth(1).format(dateFormatters);
String cycleTwo = zonedDateTime.withDayOfMonth(16).format(dateFormatters);
List<String> cycleDates = Arrays.asList(cycleOne, cycleTwo);
@@ -84,47 +117,50 @@ public class SSGuildService {
guildSSRankVo.setMonthEndTime(cycleEndDateTime.toInstant().toEpochMilli());
guildSSRankVo.setStartDate(zonedDateTime.withDayOfMonth(1).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
guildSSRankVo.setEndDate(cycleEndDateTime.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
UserLevelExperience userExper = levelService.getUserExper(uid);
guildSSRankVo.setWealth(userExper.getLevelExperience().getLevelSeq());
guildSSRankVo.setLimitWealth(activityRankRuleService.getCommonLimitWealth());
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, users.getPartitionId(), null);
List<GuildSSRankDetailVo> result = new ArrayList<>();
guildSSRankVo.setRankList(result);
GuildMember vaildGuildMemberByUid = guildMemberService.getVaildGuildMemberByUid(uid);
Integer guildId = null;
if (vaildGuildMemberByUid != null) {
guildId = vaildGuildMemberByUid.getGuildId();
}
Integer guildId = guild.getId();
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, users.getPartitionId(), null);
GuildSSRankDetailVo selfRank = null;
if (CollectionUtils.isNotEmpty(guildSSRankDetailVos)) {
for (GuildSSRankDetailVo guildSSRankDetailVo : guildSSRankDetailVos) {
guildSSRankDetailVo.setDiamondNum(null);
if (guildSSRankDetailVo.getRank() > 0) {
if (guildSSRankDetailVo.getRank() > 0) {//只取前30名
result.add(guildSSRankDetailVo);
}
if (guildSSRankDetailVo.getGuildId().equals(guildId)) {
selfRank = guildSSRankDetailVo;
}
}
if (CollectionUtils.isNotEmpty(result)) {//统计落后值
int size = result.size();
for (int i = size - 1; i >= 0 ; i--) {
if (i - 1 < 0) {
break;
}
GuildSSRankDetailVo guildSSRankDetailVo = result.get(i);
GuildSSRankDetailVo last = result.get(i - 1);
guildSSRankDetailVo.setDiffNum(last.getDiamondNum().subtract(guildSSRankDetailVo.getDiamondNum()));
}
}
}
guildSSRankVo.setSelfRank(selfRank);
if(guildId == null){ //非主播
return BusiResult.success(guildSSRankVo);
}
Guild vaildGuildById = guildService.getVaildGuildById(guildId);
Users guildOwner = usersService.getUsersByUid(vaildGuildById.getOwnerUid());
if (selfRank == null) {
selfRank = new GuildSSRankDetailVo();
selfRank.setGuildId(guildId);
selfRank.setOwnerErbanNo(guildOwner.getErbanNo());
selfRank.setGuildName(vaildGuildById.getName());
selfRank.setUid(vaildGuildById.getOwnerUid());
selfRank.setGuildName(guild.getName());
selfRank.setUid(guild.getOwnerUid());
selfRank.setAvatar(guildOwner.getAvatar());
selfRank.setDiamondNum(BigDecimal.valueOf(0));
selfRank.setMarkScore("-");
selfRank.setSsLevel(0);
guildSSRankVo.setSelfRank(selfRank);
}
if (selfRank.getRank() <= 0 && CollectionUtils.isNotEmpty(result)) {
selfRank.setDiffNum(result.get(result.size()-1).getDiamondNum().subtract(selfRank.getDiamondNum()));
}
ActivityType activityType = null;
if (GuildSSConstant.SSMarkEnmu.S.level.equals(selfRank.getSsLevel())) {
@@ -133,7 +169,7 @@ public class SSGuildService {
activityType = ActivityType.SS_GUILD_SS_GOLD_REWARD;
}
Long goldNum = 0L;
Double diamondNum = guildMemberDiamondStatisticsService.sumSSGuildMemberDetail(cycleDates, guildId, uid);
Double diamondNum = guildMemberDiamondStatisticsService.sumSSGuildMemberDetail(cycleDates, guildId, users.getUid());
if (activityType != null) {
List<ActivityExpVo> levelList = activityH5LevelExpService.getLevelList(activityType, partitionId);
TreeMap<BigDecimal, ActivityExpVo> treeMap = activityH5LevelExpService.expTreeMapByList(levelList);
@@ -149,6 +185,7 @@ public class SSGuildService {
.nick(users.getNick())
.ssLevel(selfRank.getSsLevel())
.markScore(selfRank.getMarkScore())
.diffNum(selfRank.getDiffNum())
.guildId(guildId)
.avatar(users.getAvatar())
.goldNum(goldNum)
@@ -158,9 +195,211 @@ public class SSGuildService {
return BusiResult.success(guildSSRankVo);
}
/**
* 查询季度是否包含当前月,当前月需要特殊处理
* @param uid
* @param searchQuarter
* @param partitionEnum
* @param users
* @param guild
* @param guildOwner
* @return
*/
public BusiResult<GuildSSRankVo> quarterRank(Integer searchQuarter, PartitionEnum partitionEnum, Users users,
Guild guild, Users guildOwner, GuildSSRankVo guildSSRankVo) {
Integer partitionId = partitionEnum.getId();
Integer guildId = guild.getId();
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());
ZonedDateTime quarterBegin = DateTimeUtil.getQuarterBegin(zonedDateTime, searchQuarter);
List<String> searchQuarterDateStrs = new ArrayList<>();
searchQuarterDateStrs.add(quarterBegin.format(dateFormatters));
searchQuarterDateStrs.add(quarterBegin.plusMonths(1).format(dateFormatters));
searchQuarterDateStrs.add(quarterBegin.plusMonths(2).format(dateFormatters));
//历史ss结算记录
List<GuildSSRankDetailVo> resultRankList = ssMonthRecordService.groupByGuildId(partitionId, searchQuarterDateStrs);
Boolean nowEqualSearchQuarter = false;
int nowQuarter = DateTimeUtil.getQuarter(zonedDateTime);
if (searchQuarter == nowQuarter) {//当前月份包含在查询季度中
nowEqualSearchQuarter = true;
}
if (nowEqualSearchQuarter) {
String cycleOne = zonedDateTime.withDayOfMonth(1).format(dateFormatters);
String cycleTwo = zonedDateTime.withDayOfMonth(16).format(dateFormatters);
List<String> cycleDates = Arrays.asList(cycleOne, cycleTwo);
List<GuildSSRankDetailVo> thisMonthSSRankList = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
if (CollectionUtils.isNotEmpty(thisMonthSSRankList)) {
Map<Integer, GuildSSRankDetailVo> ssRankDetailVoMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(resultRankList)) {
resultRankList.stream().collect(Collectors.toMap(GuildSSRankDetailVo::getGuildId, x -> x));
}
for (GuildSSRankDetailVo rankDetailVo : thisMonthSSRankList) {
GuildSSRankDetailVo guildSSRankDetailVo = ssRankDetailVoMap.get(rankDetailVo.getGuildId());
if (guildSSRankDetailVo == null) {
ssRankDetailVoMap.put(rankDetailVo.getGuildId(), rankDetailVo);
} else {
guildSSRankDetailVo.setDiamondNum(guildSSRankDetailVo.getDiamondNum().add(rankDetailVo.getDiamondNum()));
}
}
if (ssRankDetailVoMap.size() > 0) {
resultRankList = ssRankDetailVoMap.values().stream().collect(Collectors.toList());
}
}
}
GuildSSRankDetailVo selfRank = null;
if (CollectionUtils.isNotEmpty(resultRankList)) {
resultRankList.sort(Comparator.comparing(GuildSSRankDetailVo::getDiamondNum).reversed());
int size = resultRankList.size();
for (int i = 0; i < size; i++) {
if (i+1 >= size) {
break;
}
GuildSSRankDetailVo guildSSRankDetailVo = resultRankList.get(i);
guildSSRankDetailVo.setRank(i+1);
if (guildId.equals(guildSSRankDetailVo.getGuildId())) {
selfRank = guildSSRankDetailVo;
}
GuildSSRankDetailVo nextOne = resultRankList.get(i + 1);
nextOne.setDiffNum(guildSSRankDetailVo.getDiamondNum().subtract(nextOne.getDiamondNum()));
}
}
ZonedDateTime cutrrentQuarterBegin = DateTimeUtil.getCutrrentQuarterBegin(zonedDateTime);
guildSSRankVo.setStartDate(cutrrentQuarterBegin.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
guildSSRankVo.setEndDate(cutrrentQuarterBegin.plusMonths(3).minusSeconds(1).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
guildSSRankVo.setEndDateTimeStr(cutrrentQuarterBegin.plusMonths(3).minusSeconds(1).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN)));
if (selfRank == null) {
selfRank = new GuildSSRankDetailVo();
selfRank.setGuildId(guildId);
selfRank.setOwnerErbanNo(guildOwner.getErbanNo());
selfRank.setGuildName(guild.getName());
selfRank.setUid(guild.getOwnerUid());
selfRank.setAvatar(guild.getAvatar());
selfRank.setRank(0);
selfRank.setDiamondNum(BigDecimal.valueOf(0));
}
guildSSRankVo.setSelfRank(selfRank);
if (resultRankList != null && resultRankList.size() > 30) {
resultRankList = resultRankList.subList(0, 30);
}
if (selfRank.getRank() > 30) {
selfRank.setRank(0);
GuildSSRankDetailVo minRankVo = resultRankList.get(resultRankList.size() - 1);
selfRank.setDiffNum(minRankVo.getDiamondNum().subtract(selfRank.getDiamondNum()));
}
guildSSRankVo.setRankList(resultRankList);
GuildSSMemberVo memberVo = GuildSSMemberVo.builder().guildName(selfRank.getGuildName())
.erbanNo(users.getErbanNo())
.nick(users.getNick())
.guildId(guildId)
.avatar(users.getAvatar())
.ownerErbanNo(guildOwner.getErbanNo())
.diamondNum(selfRank.getDiamondNum()).build();
guildSSRankVo.setMemberVo(memberVo);
return BusiResult.success(guildSSRankVo);
}
public BusiResult<GuildSSRankVo> yearRank(PartitionEnum partitionEnum, Users users, Guild guild, Users guildOwner, GuildSSRankVo guildSSRankVo) {
Integer partitionId = partitionEnum.getId();
Integer guildId = guild.getId();
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());
List<String> searchQuarterDateStrs = new ArrayList<>();
for (int i=1; i<=12; i++) {
searchQuarterDateStrs.add(zonedDateTime.withMonth(i).withDayOfMonth(1).format(dateFormatters));
}
//历史ss结算记录
List<GuildSSRankDetailVo> resultRankList = ssMonthRecordService.groupByGuildId(partitionId, searchQuarterDateStrs);
String cycleOne = zonedDateTime.withDayOfMonth(1).format(dateFormatters);
String cycleTwo = zonedDateTime.withDayOfMonth(16).format(dateFormatters);
List<String> cycleDates = Arrays.asList(cycleOne, cycleTwo);
List<GuildSSRankDetailVo> thisMonthSSRankList = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
if (CollectionUtils.isNotEmpty(thisMonthSSRankList)) {
Map<Integer, GuildSSRankDetailVo> ssRankDetailVoMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(resultRankList)) {
resultRankList.stream().collect(Collectors.toMap(GuildSSRankDetailVo::getGuildId, x -> x));
}
for (GuildSSRankDetailVo rankDetailVo : thisMonthSSRankList) {
GuildSSRankDetailVo guildSSRankDetailVo = ssRankDetailVoMap.get(rankDetailVo.getGuildId());
if (guildSSRankDetailVo == null) {
ssRankDetailVoMap.put(rankDetailVo.getGuildId(), rankDetailVo);
} else {
guildSSRankDetailVo.setDiamondNum(guildSSRankDetailVo.getDiamondNum().add(rankDetailVo.getDiamondNum()));
}
}
if (ssRankDetailVoMap.size() > 0) {
resultRankList = ssRankDetailVoMap.values().stream().collect(Collectors.toList());
}
}
GuildSSRankDetailVo selfRank = null;
if (CollectionUtils.isNotEmpty(resultRankList)) {
resultRankList.sort(Comparator.comparing(GuildSSRankDetailVo::getDiamondNum).reversed());
int size = resultRankList.size();
for (int i = 0; i < size; i++) {
if (i+1 >= size) {
break;
}
GuildSSRankDetailVo guildSSRankDetailVo = resultRankList.get(i);
guildSSRankDetailVo.setRank(i+1);
if (guildId.equals(guildSSRankDetailVo.getGuildId())) {
selfRank = guildSSRankDetailVo;
}
GuildSSRankDetailVo nextOne = resultRankList.get(i + 1);
nextOne.setDiffNum(guildSSRankDetailVo.getDiamondNum().subtract(nextOne.getDiamondNum()));
}
}
guildSSRankVo.setStartDate(zonedDateTime.withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0)
.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
ZonedDateTime zonedEndTime = zonedDateTime.withMonth(12).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0).plusMonths(1).minusSeconds(1);
guildSSRankVo.setEndDate(zonedEndTime.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN_DOT)));
guildSSRankVo.setEndDateTimeStr(zonedEndTime.format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN)));
if (selfRank == null) {
selfRank = new GuildSSRankDetailVo();
selfRank.setGuildId(guildId);
selfRank.setOwnerErbanNo(guildOwner.getErbanNo());
selfRank.setGuildName(guild.getName());
selfRank.setUid(guild.getOwnerUid());
selfRank.setAvatar(guild.getAvatar());
selfRank.setRank(0);
selfRank.setDiamondNum(BigDecimal.valueOf(0));
}
guildSSRankVo.setSelfRank(selfRank);
if (resultRankList != null && resultRankList.size() > 30) {
resultRankList = resultRankList.subList(0, 30);
}
if (selfRank.getRank() > 30) {
selfRank.setRank(0);
GuildSSRankDetailVo minRankVo = resultRankList.get(resultRankList.size() - 1);
selfRank.setDiffNum(minRankVo.getDiamondNum().subtract(selfRank.getDiamondNum()));
}
guildSSRankVo.setRankList(resultRankList);
GuildSSMemberVo memberVo = GuildSSMemberVo.builder().guildName(selfRank.getGuildName())
.erbanNo(users.getErbanNo())
.nick(users.getNick())
.guildId(guildId)
.avatar(users.getAvatar())
.ownerErbanNo(guildOwner.getErbanNo())
.diamondNum(selfRank.getDiamondNum()).build();
guildSSRankVo.setMemberVo(memberVo);
return BusiResult.success(guildSSRankVo);
}
public void ssMonthTask(List<String> cycleDates, Integer partitionId) {
List<GuildSSRankDetailVo> guildSSRankDetailVos = null;
try {
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
if (CollectionUtils.isEmpty(guildSSRankDetailVos)) {
log.info("====ssMonthTask============= empty data");
return;
@@ -176,7 +415,7 @@ public class SSGuildService {
}
List<ActivityExpVo> levelList = activityH5LevelExpService.getLevelList(activityType, partitionId);
if (CollectionUtils.isEmpty(levelList)) {
return;
continue;
}
long minDiamond = levelList.get(0).getExp().longValue();
List<GuildMemberDiamondStatisticsVo> guildMemberDatas =
@@ -203,11 +442,28 @@ public class SSGuildService {
}
ssMonthCoinRecordService.saveRecord(rankDetailVo.getGuildId(), data.getUid(), data.getGuildMemberId(), partitionId, cycleDates.get(0),
rankDetailVo.getDiamondNum(), BigDecimal.valueOf(data.getDiamondNum()), rewardGoldNum, rankDetailVo.getSsLevel(), activityDiffExpVo.getLevel(), activityType.getType());
//不搞自动发,搞手动后台发了
// userPurseService.addDiamond(data.getUid(), rewardGoldNum, BillObjTypeEnum.SS_GUILD_MONTH_MEMBER_DIAMOND.getDesc());
// billRecordService.insertGeneralBillRecord(data.getUid(), data.getUid(), null, BillObjTypeEnum.SS_GUILD_MONTH_MEMBER_DIAMOND, rewardGoldNum.doubleValue());
//to-do 发金币
// 不搞自动发,搞手动后台发了
}
}
//保存全部ss公会排行榜记录
if (CollectionUtils.isNotEmpty(guildSSRankDetailVos)) {
List<SsMonthRecord> resultList = new ArrayList<>();
for (GuildSSRankDetailVo guildSSRankDetailVo : guildSSRankDetailVos) {
SsMonthRecord ssMonthRecord = new SsMonthRecord();
ssMonthRecord.setCycleDate(cycleDates.get(0));
ssMonthRecord.setGuildId(guildSSRankDetailVo.getGuildId());
ssMonthRecord.setUid(guildSSRankDetailVo.getUid());
ssMonthRecord.setGuildDiamondNum(guildSSRankDetailVo.getDiamondNum());
ssMonthRecord.setMemberNum(guildSSRankDetailVo.getMemberNum());
ssMonthRecord.setSsLevel(guildSSRankDetailVo.getSsLevel());
ssMonthRecord.setPartitionId(partitionId);
ssMonthRecord.setCreateTime(new Date());
ssMonthRecord.setUpdateTime(ssMonthRecord.getCreateTime());
resultList.add(ssMonthRecord);
}
ssMonthRecordService.saveBatch(resultList);
}
} catch (Exception e) {
log.error("=====ssMonthTask===== error:{}", e.getMessage());
}

View File

@@ -0,0 +1,19 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.SsMonthRecord;
import com.accompany.business.vo.guild.GuildSSRankDetailVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
import java.util.List;
/**
* SS金币发放明细表 服务类
*
* @author
* @since 2024-09-04
*/
public interface SsMonthRecordService extends IService<SsMonthRecord> {
List<GuildSSRankDetailVo> groupByGuildId(Integer partitionId, List<String> monthOneStrs);
}

View File

@@ -0,0 +1,28 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.SsMonthRecord;
import com.accompany.business.mybatismapper.guild.SsMonthRecordMapper;
import com.accompany.business.vo.guild.GuildSSRankDetailVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* SS金币发放明细表 服务实现类
*
* @author
* @since 2024-09-04
*/
@Slf4j
@Service
public class SsMonthRecordServiceImpl extends ServiceImpl<SsMonthRecordMapper, SsMonthRecord> implements SsMonthRecordService {
@Override
public List<GuildSSRankDetailVo> groupByGuildId(Integer partitionId, List<String> monthOneStrs) {
return baseMapper.groupByGuildId(partitionId, monthOneStrs);
}
}

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.accompany.business.mybatismapper.guild.SsMonthRecordMapper">
<select id="groupByGuildId" resultType="com.accompany.business.vo.guild.GuildSSRankDetailVo">
SELECT
s.guild_id guildId,
g.NAME guildName,
g.owner_uid uid,
sum(ifnull(s.guild_diamond_num, 0)) diamondNum,
g.avatar avatar,
u.erban_no ownerErbanNo
FROM
ss_month_record s
LEFT JOIN guild g ON g.id = s.guild_id
LEFT JOIN users u ON u.uid = g.owner_uid
where s.partition_id=#{partitionId}
<if test="monthOneStrs != null and monthOneStrs.size()>0">
<foreach collection="monthOneStrs" close=")" item="mStr" open="and s.cycle_date in(" separator=",">
#{mStr}
</foreach>
</if>
group by s.guild_id
order by diamondNum desc
</select>
<!-- CREATE TABLE `ss_month_record` (-->
<!-- `id` bigint NOT NULL AUTO_INCREMENT,-->
<!-- `cycle_date` varchar(20) NOT NULL COMMENT '时间',-->
<!-- `guild_id` int NOT NULL,-->
<!-- `uid` bigint(22) NOT NULL COMMENT '公会长uid',-->
<!-- `guild_diamond_num` decimal(20,2) DEFAULT NULL COMMENT '公会总流水',-->
<!-- `member_num` int DEFAULT 0,-->
<!-- `ss_level` int DEFAULT NULL COMMENT 'SS等级',-->
<!-- `partition_id` int DEFAULT '2',-->
<!-- `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',-->
<!-- `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,-->
<!-- PRIMARY KEY (`id`),-->
<!-- KEY `idx_cycle_date` (`cycle_date`),-->
<!-- KEY `idx_guild_id` (`guild_id`),-->
<!-- KEY `idx_uid` (`uid`)-->
<!-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='SS公会记录表';-->
</mapper>

View File

@@ -3,7 +3,9 @@ package com.accompany.business.controller.activity.h5;
import com.accompany.business.service.guild.SSGuildService;
import com.accompany.business.vo.guild.GuildSSRankVo;
import com.accompany.common.result.BusiResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -16,6 +18,7 @@ import java.util.Arrays;
/**
* 每月充值活动
*/
@Api(value = "SS榜单",tags = "SS榜单")
@RestController
@RequestMapping("/activity/h5/ssGuild")
public class SSGuildController {
@@ -23,13 +26,18 @@ public class SSGuildController {
@Autowired
private SSGuildService ssGuildService;
@ApiOperation(value = "榜单列表", httpMethod = "GET")
@ApiImplicitParam(name = "uid", value = "uid", required = true, dataType = "LONG", paramType = "query")
@ApiOperation(value = "SS榜单列表", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "uid", value = "uid", required = true, dataType = "LONG", paramType = "query"),
@ApiImplicitParam(name = "rankType,month = 1,quarter = 2,year = 3;", value = "rankType", required = true, dataType = "Byte", paramType = "query"),
@ApiImplicitParam(name = "quarter:spring-1,summer-2,autumn-3,winter-4", value = "quarter", required = true, dataType = "Byte", paramType = "query")
})
@GetMapping(value = "/ssAgencyRank")
public BusiResult<GuildSSRankVo> activitySSGuildMonthlyRank(@RequestParam Long uid) {
return ssGuildService.activitySSGuildMonthlyRank(uid);
public BusiResult<GuildSSRankVo> activitySSGuildMonthlyRank(@RequestParam Long uid, @RequestParam(defaultValue = "1") Byte rankType, Integer quarter) {
return ssGuildService.ssGuildRank(uid, rankType, quarter);
}
@GetMapping("/taskMonth")
public BusiResult<Void> taskMonth(String cycleOne, String cycleTwo, Integer partitionId) {
ssGuildService.ssMonthTask(Arrays.asList(cycleOne, cycleTwo), partitionId);

View File

@@ -62,7 +62,6 @@ public class SSGuildTask {
ssGuildService.ssTaskByMinutes(cycleDates, partitionEnum.getId());
});
}
}
}