SS公会榜单fixed

SS公会榜单1
This commit is contained in:
2024-09-03 19:06:08 +08:00
parent 3042cb7be6
commit 3b3515c228
23 changed files with 518 additions and 67 deletions

View File

@@ -186,6 +186,7 @@ public enum BillObjTypeEnum {
GUILD_USD_TO_PLATFORM_OUT((byte) 125, "公会usd提现支出", BillTypeEnum.OUT, CurrencyEnum.GUILD_USD),
GUILD_SETTLEMENT_USD_IN((byte) 124, "公会周期结算会长usd收入", BillTypeEnum.IN, CurrencyEnum.GUILD_USD),
SS_GUILD_MONTH_MEMBER_DIAMOND((byte) 125, "游戏开黑收入", BillTypeEnum.IN, CurrencyEnum.GOLD),
;
BillObjTypeEnum(byte value, String desc, BillTypeEnum type, CurrencyEnum currency) {

View File

@@ -6,8 +6,9 @@ public enum ActivityType {
activity_charge(1, "Monthly Recharge","Monthly Recharge","每月充值活动","Aylık şarj etkinliği",ACTIVITY_FIRST_COMMON,true),
SS_GUILD(2, "SS GUILD","SS GUILD","SS GUILD","SS GUILD",ACTIVITY_FIRST_COMMON,true),
SS_GUILD_DRESS_REWARD(3, "SS GUILD DRESS REWARD","SS GUILD DRESS REWARD","SS GUILD DRESS REWARD","SS GUILD DRESS REWARD",ACTIVITY_FIRST_COMMON,true),
SS_GUILD_GOLD_REWARD(4, "SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD",ACTIVITY_FIRST_COMMON,true),
SS_GUILD_S_GOLD_REWARD(3, "SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD",ACTIVITY_FIRST_COMMON,true),
SS_GUILD_SS_GOLD_REWARD(4, "SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD","SS GUILD GOLD REWARD",ACTIVITY_FIRST_COMMON,true),
SS_GUILD_DRESS_REWARD(5, "SS GUILD DRESS REWARD","SS GUILD DRESS REWARD","SS GUILD DRESS REWARD","SS GUILD DRESS REWARD",ACTIVITY_FIRST_COMMON,true),
;
private Integer type;

View File

@@ -0,0 +1,18 @@
package com.accompany.business.constant.activity;
import lombok.Data;
@Data
public class GuildSSConstant {
public enum SSMarkEnmu {
B(1),
A(2),
S(3),
SS(4),
;
public final Integer level;
SSMarkEnmu(Integer level) {
this.level = level;
}
}
}

View File

@@ -0,0 +1,56 @@
package com.accompany.business.model.guild;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
/**
* SS金币发放明细表实体类
*
* @author
* @since 2024-09-04
*/
@Data
public class SsMonthCoinRecord implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 时间
*/
private String cycleDate;
private Long uid;
private Long guildMemberId;
private Integer guildId;
/**
* 公会总流水
*/
private BigDecimal guildDiamondNum;
/**
* 主播流水
*/
private BigDecimal diamondNum;
/**
* 金币数量
*/
private Long goldNum;
/**
* 发放状态1-已发放0-待发放
*/
private Long sendStatus;
/**
* 发送人
*/
private String sendUser;
/**
* 创建时间
*/
private Date createTime;
private Date updateTime;
}

View File

@@ -6,5 +6,6 @@ import lombok.Data;
@Data
public class GuildMemberDiamondStatisticsVo extends GuildMemberDiamondStatistics {
private Integer hallMemberCount;
private Long guildMemberId;
}

View File

@@ -21,4 +21,5 @@ public class GuildSSMemberVo {
private Integer ssLevel;
private BigDecimal diamondNum;
private Long goldNum;
private Long ownerErbanNo;
}

View File

@@ -29,6 +29,8 @@ public class GuildSSRankDetailVo {
private String markScore;
private Integer ssLevel;
private Long uid;
private Integer memberNum;
private Long ownerErbanNo;
}

View File

@@ -33,11 +33,13 @@ public interface GuildMemberDiamondStatisticsMapper extends BaseMapper<GuildMemb
List<GuildSSRankDetailVo> ssGuildRankList(@Param("cycleDates") List<String> cycleDates,
@Param("partitionId") Integer partitionId,
@Param("guildId") Integer guildId,
@Param("minDiamondNum") Long minDiamondNum,
@Param("limit") Integer limit);
@Param("guildId") Integer guildId);
Double ssGuildMemberDetail(@Param("cycleDates") List<String> cycleDates,
List<GuildMemberDiamondStatisticsVo> sumSSGuildMemberDetailList(@Param("cycleDates") List<String> cycleDates,
@Param("guildId") Integer guildId,
@Param("uid") Long uid, @Param("minDiamond") Long minDiamond);
Double sumSSGuildMemberDetail(@Param("cycleDates") List<String> cycleDates,
@Param("guildId") Integer guildId,
@Param("uid") Long uid);

View File

@@ -0,0 +1,14 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.SsMonthCoinRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* SS金币发放明细表 Mapper 接口
*
* @author
* @since 2024-09-04
*/
public interface SsMonthCoinRecordMapper extends BaseMapper<SsMonthCoinRecord> {
}

View File

@@ -32,6 +32,7 @@ public interface ActivityH5AwardRecordService extends IService<ActivityH5AwardRe
* @param activitySkipType
*/
void sendAward(ActivityType activityType,Long uid, Integer level, String date, ActivitySkipType activitySkipType);
void sendAwardCheckSend(ActivityType activityType,Long uid, Integer level, String date, ActivitySkipType activitySkipType, Long statusCacheDay);
void sendAward(ActivityType activityType,Long uid, Integer level, String date, ActivitySkipType activitySkipType,String msg);
void delLoopCoinQywxMessage(ActivityType activityType);
String getRecitalCoinLoopQywxMessage(ActivityType activityType, Long uid, ActivityH5LevelAward award, Integer level);

View File

@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RSet;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +35,7 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* <p>
@@ -80,6 +82,17 @@ public class ActivityH5AwardRecordServiceImpl extends ServiceImpl<ActivityH5Awar
this.sendAward(activityType,uid,level,date,activitySkipType,null);
}
@Override
public void sendAwardCheckSend(ActivityType activityType, Long uid, Integer level, String date, ActivitySkipType activitySkipType, Long statusCacheDay) {
String activityRewardSignKey = ActivityH5RedisKey.activity_reward_sign.getKey(activityType.name(), level.toString(), date, uid.toString());
RSet<Integer> set = redissonClient.getSet(activityRewardSignKey);
boolean added = set.add(level);
set.expire(statusCacheDay, TimeUnit.DAYS);
if (added) {
this.sendAward(activityType,uid,level,date,activitySkipType,null);
}
}
@Override
public void sendAwardForRegion(ActivityType activityType, Long uid, Integer level, String date, ActivitySkipType activitySkipType, String msg, Byte region) {
ActivityH5LevelExp activityH5LevelExp = activityH5LevelExpService.getLevelExp(level,activityType.getType());

View File

@@ -24,6 +24,8 @@ public interface ActivityH5LevelExpService extends IService<ActivityH5LevelExp>
TreeMap<BigDecimal, ActivityExpVo> expTreeMap(ActivityType activityType);
TreeMap<BigDecimal, ActivityExpVo> expTreeMapByList(List<ActivityExpVo> activityExpVos);
/**
* exp达到
* @param expTreeMap

View File

@@ -42,6 +42,12 @@ public class ActivityH5LevelExpServiceImpl extends ServiceImpl<ActivityH5LevelEx
public TreeMap<BigDecimal, ActivityExpVo> expTreeMap(ActivityType activityType) {
TreeMap<BigDecimal, ActivityExpVo> treeMap = new TreeMap<>();
List<ActivityExpVo> levelList = this.getLevelList(activityType);
return expTreeMapByList(levelList);
}
@Override
public TreeMap<BigDecimal, ActivityExpVo> expTreeMapByList(List<ActivityExpVo> levelList) {
TreeMap<BigDecimal, ActivityExpVo> treeMap = new TreeMap<>();
if (CollectionUtils.isEmpty(levelList)) {
return treeMap;
}

View File

@@ -1,6 +1,5 @@
package com.accompany.business.service.activity.h5;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.activity.ActivityH5RedisKey;
import com.accompany.business.constant.activity.ActivitySkipType;
import com.accompany.business.constant.activity.ActivityType;
@@ -20,7 +19,6 @@ import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.payment.service.RechargeUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.*;
import org.redisson.client.codec.LongCodec;
@@ -36,7 +34,6 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@Service

View File

@@ -1,14 +1,17 @@
package com.accompany.business.service.guild;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.activity.ActivityType;
import com.accompany.business.model.guild.GuildDiamondWage;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guild.GuildMemberDiamondStatistics;
import com.accompany.business.mybatismapper.guild.GuildMemberDiamondStatisticsMapper;
import com.accompany.business.service.activity.h5.ActivityH5LevelExpService;
import com.accompany.business.vo.activity.h5.ActivityDiffExpVo;
import com.accompany.business.vo.activity.h5.ActivityExpVo;
import com.accompany.business.vo.guild.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -25,6 +28,8 @@ public class GuildMemberDiamondStatisticsService extends ServiceImpl<GuildMember
@Autowired
private GuildDiamondWageService guildDiamondWageService;
@Autowired
private ActivityH5LevelExpService activityH5LevelExpService;
public void update(String cycleDate, GuildMember guildMember, double diamond){
Date now = new Date();
@@ -97,11 +102,45 @@ public class GuildMemberDiamondStatisticsService extends ServiceImpl<GuildMember
return levelMonths;
}
public List<GuildSSRankDetailVo> ssGuildRankList(List<String> cycleDates, Integer partitionId, Integer guildId, Long minDiamondNum, Integer limit) {
return baseMapper.ssGuildRankList(cycleDates, partitionId, guildId, minDiamondNum, limit);
public List<GuildSSRankDetailVo> ssGuildRankList(List<String> cycleDates, Integer partitionId, Integer guildId) {
List<GuildSSRankDetailVo> guildSSRankDetailVos = baseMapper.ssGuildRankList(cycleDates, partitionId, guildId);
if (CollectionUtils.isEmpty(guildSSRankDetailVos)) {
return new ArrayList<>();
}
int rank = 1;
List<ActivityExpVo> ssRankExpVos = activityH5LevelExpService.getLevelList(ActivityType.SS_GUILD);
for (GuildSSRankDetailVo guildSSRankDetailVo : guildSSRankDetailVos) {
ActivityDiffExpVo activityDiffExpVo = activityH5LevelExpService.calCurrentOrNextPosition(ssRankExpVos,
guildSSRankDetailVo.getDiamondNum().doubleValue(), guildSSRankDetailVo.getMemberNum().longValue());
if (activityDiffExpVo.getLevel() >= 1 && rank <= 30) {
guildSSRankDetailVo.setRank(rank++);
}
guildSSRankDetailVo.setMarkScore(activityDiffExpVo.getName());
guildSSRankDetailVo.setSsLevel(activityDiffExpVo.getLevel());
}
return guildSSRankDetailVos;
}
public Double ssGuildMemberDetail(List<String> cycleDates, Integer guildId, Long uid) {
return baseMapper.ssGuildMemberDetail(cycleDates, guildId, uid);
/**
* 统计主播钻石流水 sum
* @param cycleDates
* @param guildId allow null
* @param uid allow null
* @return
*/
public Double sumSSGuildMemberDetail(List<String> cycleDates, Integer guildId, Long uid) {
return baseMapper.sumSSGuildMemberDetail(cycleDates, guildId, uid);
}
/**
* 统计主播钻石流水
* @param cycleDates
* @param guildId allow null
* @param uid allow null
* @param minDiamond allow null
* @return
*/
List<GuildMemberDiamondStatisticsVo> sumSSGuildMemberDetailList(List<String> cycleDates, Integer guildId, Long uid, Long minDiamond) {
return baseMapper.sumSSGuildMemberDetailList(cycleDates, guildId, uid, minDiamond);
}
}

View File

@@ -1,25 +1,35 @@
package com.accompany.business.service.guild;
import com.accompany.business.constant.activity.ActivitySkipType;
import com.accompany.business.constant.activity.ActivityType;
import com.accompany.business.constant.activity.GuildSSConstant;
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.service.activity.h5.ActivityH5AwardRecordService;
import com.accompany.business.service.activity.h5.ActivityH5LevelAwardService;
import com.accompany.business.service.activity.h5.ActivityH5LevelExpService;
import com.accompany.business.service.activity.h5.ActivityRankRuleService;
import com.accompany.business.service.level.LevelService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.activity.h5.ActivityDiffExpVo;
import com.accompany.business.vo.activity.h5.ActivityExpVo;
import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo;
import com.accompany.business.vo.guild.GuildSSMemberVo;
import com.accompany.business.vo.guild.GuildSSRankDetailVo;
import com.accompany.business.vo.guild.GuildSSRankVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.service.partition.PartitionInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -28,13 +38,11 @@ import java.math.BigDecimal;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.TreeMap;
import java.util.*;
import static com.accompany.common.status.BusiStatus.ACCESS_DENIED;
@Slf4j
@Service
public class SSGuildService {
@@ -47,6 +55,8 @@ public class SSGuildService {
@Autowired
private ActivityH5LevelExpService activityH5LevelExpService;
@Autowired
private ActivityH5LevelAwardService activityH5LevelAwardService;
@Autowired
private ActivityRankRuleService activityRankRuleService;
@Autowired
private GuildMemberService guildMemberService;
@@ -54,6 +64,10 @@ public class SSGuildService {
private GuildService guildService;
@Autowired
private LevelService levelService;
@Autowired
private SsMonthCoinRecordService ssMonthCoinRecordService;
@Autowired
private ActivityH5AwardRecordService activityH5AwardRecordService;
private static final DateTimeFormatter dateFormatters = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN);
@@ -72,66 +86,164 @@ 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)));
List<ActivityExpVo> expVos = activityH5LevelExpService.getLevelList(ActivityType.SS_GUILD);
BigDecimal minDiamondNum = expVos.get(0).getExp();
UserLevelExperience userExper = levelService.getUserExper(uid);
guildSSRankVo.setWealth(userExper.getLevelExperience().getLevelSeq());
guildSSRankVo.setLimitWealth(activityRankRuleService.getCommonLimitWealth());
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, users.getPartitionId(), null, minDiamondNum.longValue(), 30);
guildSSRankVo.setRankList(guildSSRankDetailVos);
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();
}
GuildSSRankDetailVo selfRank = null;
TreeMap<BigDecimal, ActivityExpVo> ssRankExpVos = activityH5LevelExpService.expTreeMap(ActivityType.SS_GUILD);
if (CollectionUtils.isNotEmpty(guildSSRankDetailVos)) {
int rank = 1;
for (GuildSSRankDetailVo guildSSRankDetailVo : guildSSRankDetailVos) {
guildSSRankDetailVo.setRank(rank++);
ActivityDiffExpVo activityDiffExpVo = activityH5LevelExpService.calCurrentOrNextPosition(ssRankExpVos, guildSSRankDetailVo.getDiamondNum().doubleValue());
guildSSRankDetailVo.setMarkScore(activityDiffExpVo.getName());
guildSSRankDetailVo.setSsLevel(activityDiffExpVo.getLevel());
guildSSRankDetailVo.setDiamondNum(null);
if (guildSSRankDetailVo.getRank() > 0) {
result.add(guildSSRankDetailVo);
}
if (guildSSRankDetailVo.getGuildId().equals(guildId)) {
selfRank = guildSSRankDetailVo;
}
}
}
if (guildId != null) {
Guild vaildGuildById = guildService.getVaildGuildById(guildId);
Users guildOwner = usersService.getUsersByUid(vaildGuildById.getOwnerUid());
if (selfRank == null) {
List<GuildSSRankDetailVo> guildSSRankDetailVos1 = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, users.getPartitionId(), guildId, minDiamondNum.longValue(), 1);
if (CollectionUtils.isNotEmpty(guildSSRankDetailVos1)) {
selfRank = guildSSRankDetailVos1.get(0);
ActivityDiffExpVo activityDiffExpVo = activityH5LevelExpService.calCurrentOrNextPosition(ssRankExpVos, selfRank.getDiamondNum().doubleValue());
selfRank.setMarkScore(activityDiffExpVo.getName());
selfRank.setSsLevel(activityDiffExpVo.getLevel());
} else {
selfRank = new GuildSSRankDetailVo();
selfRank.setGuildId(guildId);
selfRank.setGuildName(vaildGuildById.getName());
selfRank.setUid(vaildGuildById.getOwnerUid());
selfRank.setAvatar(guildOwner.getAvatar());
selfRank.setDiamondNum(BigDecimal.valueOf(0));
selfRank.setMarkScore("-");
selfRank.setSsLevel(0);
}
}
GuildSSMemberVo memberVo = GuildSSMemberVo.builder().guildName(selfRank.getGuildName())
.erbanNo(users.getErbanNo())
.nick(users.getNick())
.ssLevel(selfRank.getSsLevel())
.markScore(selfRank.getMarkScore())
.guildId(guildId)
.avatar(users.getAvatar())
.goldNum(0L)
.diamondNum(BigDecimal.valueOf(guildMemberDiamondStatisticsService.ssGuildMemberDetail(cycleDates, guildId, uid))).build();
guildSSRankVo.setMemberVo(memberVo);
}
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.setAvatar(guildOwner.getAvatar());
selfRank.setDiamondNum(BigDecimal.valueOf(0));
selfRank.setMarkScore("-");
selfRank.setSsLevel(0);
}
ActivityType activityType = null;
if (GuildSSConstant.SSMarkEnmu.S.level.equals(selfRank.getSsLevel())) {
activityType = ActivityType.SS_GUILD_S_GOLD_REWARD;
} else if (GuildSSConstant.SSMarkEnmu.SS.level.equals(selfRank.getSsLevel())) {
activityType = ActivityType.SS_GUILD_SS_GOLD_REWARD;
}
Long goldNum = 0L;
Double diamondNum = guildMemberDiamondStatisticsService.sumSSGuildMemberDetail(cycleDates, guildId, uid);
if (activityType != null) {
List<ActivityExpVo> levelList = activityH5LevelExpService.getLevelList(activityType);
TreeMap<BigDecimal, ActivityExpVo> treeMap = activityH5LevelExpService.expTreeMapByList(levelList);
ActivityDiffExpVo activityDiffExpVo = activityH5LevelExpService.calCurrentOrNextPosition(treeMap, diamondNum);
List<ActivityH5LevelAward> activityH5LevelAwards = activityH5LevelAwardService.listByLevel(activityDiffExpVo.getLevel(), activityType.getType());
goldNum = activityH5LevelAwards.get(0).getAwardNum().longValue();
}
GuildSSMemberVo memberVo = GuildSSMemberVo.builder().guildName(selfRank.getGuildName())
.erbanNo(users.getErbanNo())
.nick(users.getNick())
.ssLevel(selfRank.getSsLevel())
.markScore(selfRank.getMarkScore())
.guildId(guildId)
.avatar(users.getAvatar())
.goldNum(goldNum)
.ownerErbanNo(guildOwner.getErbanNo())
.diamondNum(BigDecimal.valueOf(diamondNum)).build();
guildSSRankVo.setMemberVo(memberVo);
return BusiResult.success(guildSSRankVo);
}
public void ssMonthTask(List<String> cycleDates, Integer partitionId) {
try {
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
if (CollectionUtils.isEmpty(guildSSRankDetailVos)) {
log.info("====ssMonthTask============= empty data");
return;
}
ActivityType activityType = null;
for (GuildSSRankDetailVo rankDetailVo : guildSSRankDetailVos) {
if (GuildSSConstant.SSMarkEnmu.S.level.equals(rankDetailVo.getSsLevel())) {
activityType = ActivityType.SS_GUILD_S_GOLD_REWARD;
} else if (GuildSSConstant.SSMarkEnmu.SS.level.equals(rankDetailVo.getSsLevel())) {
activityType = ActivityType.SS_GUILD_SS_GOLD_REWARD;
} else {
continue;
}
List<ActivityExpVo> levelList = activityH5LevelExpService.getLevelList(activityType);
if (CollectionUtils.isEmpty(levelList)) {
return;
}
long minDiamond = levelList.get(0).getExp().longValue();
List<GuildMemberDiamondStatisticsVo> guildMemberDatas =
guildMemberDiamondStatisticsService.sumSSGuildMemberDetailList(cycleDates, rankDetailVo.getGuildId(), null, minDiamond);
if (CollectionUtils.isEmpty(guildMemberDatas)) {
log.info("=====ssMonthTask=====empty guildMemberDataguildId:{}", rankDetailVo.getGuildId());
continue;
}
TreeMap<BigDecimal, ActivityExpVo> treeMap = activityH5LevelExpService.expTreeMapByList(levelList);
for (GuildMemberDiamondStatisticsVo data : guildMemberDatas) {
ActivityDiffExpVo activityDiffExpVo = activityH5LevelExpService.calCurrentOrNextPosition(treeMap, data.getDiamondNum());
if (activityDiffExpVo.getLevel() <= 0) {
continue;
}
List<ActivityH5LevelAward> activityH5LevelAwards = activityH5LevelAwardService.listByLevel(activityDiffExpVo.getLevel(), activityType.getType());
if (CollectionUtils.isEmpty(activityH5LevelAwards)) {
log.info("=====ssMonthTask=====empty guildMemberData GoldguildId:{}", rankDetailVo.getGuildId());
continue;
}
Long rewardGoldNum = activityH5LevelAwards.get(0).getAwardNum().longValue();
Boolean checkExist = ssMonthCoinRecordService.checkExist(rankDetailVo.getGuildId(), data.getUid(), data.getGuildMemberId(), cycleDates.get(0));
if (checkExist) {
continue;
}
ssMonthCoinRecordService.saveRecord(rankDetailVo.getGuildId(), data.getUid(), data.getGuildMemberId(), cycleDates.get(0), rankDetailVo.getDiamondNum(), BigDecimal.valueOf(data.getDiamondNum()), rewardGoldNum);
//不搞自动发,搞手动后台发了
// 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());
}
}
} catch (Exception e) {
log.error("=====ssMonthTask===== error:{}", e.getMessage());
}
}
public void ssTaskByMinutes(List<String> cycleDates, Integer partitionId) {
try {
List<GuildSSRankDetailVo> guildSSRankDetailVos = guildMemberDiamondStatisticsService.ssGuildRankList(cycleDates, partitionId, null);
if (CollectionUtils.isEmpty(guildSSRankDetailVos)) {
log.info("====ssTaskByMinutes============= empty data");
return;
}
List<ActivityExpVo> levelList = activityH5LevelExpService.getLevelList(ActivityType.SS_GUILD_S_GOLD_REWARD);
if (CollectionUtils.isEmpty(levelList)) {
log.info("====ssTaskByMinutes============= empty levelList");
return;
}
long minDiamond = levelList.get(0).getExp().longValue();
for (GuildSSRankDetailVo rankDetailVo : guildSSRankDetailVos) {
if (GuildSSConstant.SSMarkEnmu.S.level.equals(rankDetailVo.getSsLevel())) {
} else if (GuildSSConstant.SSMarkEnmu.SS.level.equals(rankDetailVo.getSsLevel())) {
} else if (GuildSSConstant.SSMarkEnmu.A.level.equals(rankDetailVo.getSsLevel())){
} else {
continue;
}
List<GuildMemberDiamondStatisticsVo> guildMemberDatas =
guildMemberDiamondStatisticsService.sumSSGuildMemberDetailList(cycleDates, rankDetailVo.getGuildId(), null, minDiamond);
if (CollectionUtils.isEmpty(guildMemberDatas)) {
log.info("=====ssTaskByMinutes=====empty guildMemberDataguildId:{}", rankDetailVo.getGuildId());
continue;
}
for (GuildMemberDiamondStatisticsVo data : guildMemberDatas) {
activityH5AwardRecordService.sendAwardCheckSend(ActivityType.SS_GUILD, data.getUid(), rankDetailVo.getSsLevel(), cycleDates.get(0), ActivitySkipType.normal, 60L);
}
}
} catch (Exception e) {
log.error("=====ssTaskByMinutes===== error:{}", e.getMessage());
}
}
}

View File

@@ -0,0 +1,20 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.SsMonthCoinRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
/**
* SS金币发放明细表 服务类
*
* @author
* @since 2024-09-04
*/
public interface SsMonthCoinRecordService extends IService<SsMonthCoinRecord> {
int saveRecord(Integer guildId, Long uid, Long guildMemberId, String cycleDate, BigDecimal guildDiamondNum, BigDecimal diamondNum, Long goldNum);
Boolean checkExist(Integer guildId, Long uid, Long guildMemberId, String cycleDate);
}

View File

@@ -0,0 +1,52 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.SsMonthCoinRecord;
import com.accompany.business.mybatismapper.guild.SsMonthCoinRecordMapper;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
/**
* SS金币发放明细表 服务实现类
*
* @author
* @since 2024-09-04
*/
@Service
public class SsMonthCoinRecordServiceImpl extends ServiceImpl<SsMonthCoinRecordMapper, SsMonthCoinRecord> implements SsMonthCoinRecordService {
@Autowired
private UserPurseService userPurseService;
@Autowired
private BillRecordService billRecordService;
@Override
public int saveRecord(Integer guildId, Long uid, Long guildMemberId, String cycleDate, BigDecimal guildDiamondNum, BigDecimal diamondNum, Long goldNum) {
SsMonthCoinRecord ssMonthCoinRecord = new SsMonthCoinRecord();
ssMonthCoinRecord.setDiamondNum(diamondNum);
ssMonthCoinRecord.setCycleDate(cycleDate);
ssMonthCoinRecord.setGoldNum(goldNum);
ssMonthCoinRecord.setGuildMemberId(guildMemberId);
ssMonthCoinRecord.setUid(uid);
ssMonthCoinRecord.setGuildId(guildId);
ssMonthCoinRecord.setGuildDiamondNum(guildDiamondNum);
ssMonthCoinRecord.setCreateTime(new Date());
return baseMapper.insert(ssMonthCoinRecord);
}
@Override
public Boolean checkExist(Integer guildId, Long uid, Long guildMemberId, String cycleDate) {
LambdaQueryWrapper<SsMonthCoinRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(SsMonthCoinRecord::getGuildMemberId, guildMemberId)
.eq(SsMonthCoinRecord::getUid, uid)
.eq(SsMonthCoinRecord::getGuildId, guildId)
.eq(SsMonthCoinRecord::getCycleDate, cycleDate);
return baseMapper.selectCount(wrapper) > 0;
}
}

View File

@@ -206,6 +206,7 @@ public class BillRecordService extends ServiceImpl<BillRecordMapper, BillRecord>
objTypes.add(BillObjTypeEnum.GAME_PARTNER_GOLD_IN.getValue());
objTypes.add(BillObjTypeEnum.GUILD_USD_EXCHANGE_GOLD_IN.getValue());
objTypes.add(BillObjTypeEnum.GUILD_USD_TO_RECHARGE_USER_IN.getValue());
objTypes.add(BillObjTypeEnum.SS_GUILD_MONTH_MEMBER_DIAMOND.getValue());
break;
case GOLD_OUT:
objTypes.add(BillObjTypeEnum.WITHDRAW.getValue());

View File

@@ -102,11 +102,14 @@
g.name guildName,
g.owner_uid uid,
sum(gd.diamond_num) diamondNum,
u.avatar avatar
u.avatar avatar,
u.erban_no ownerErbanNo,
ifnull(a.memberNum, 0) memberNum
from guild_member_diamond_statistics gd
left join guild_member gm on gm.id = gd.guild_member_id
left join guild g on g.id = gm.guild_id
left join users u on u.uid = g.owner_uid
left join (select guild_id, count(distinct uid) memberNum from guild_member where `enable` = 1 GROUP BY guild_id) a on a.guild_id = g.id
where g.`enable` = 1 and gm.`enable` = 1
<foreach collection="cycleDates" close=")" item="cycleD" open="and gd.cycle_date in(" separator=",">
#{cycleD}
@@ -117,12 +120,35 @@
<if test="guildId != null">
and gd.guild_id = #{guildId}
</if>
group by gd.guild_id having diamondNum &gt;= #{minDiamondNum}
ORDER BY diamondNum desc
limit #{limit}
group by gd.guild_id
ORDER BY diamondNum desc,memberNum desc
</select>
<select id="ssGuildMemberDetail" resultType="java.lang.Double">
<select id="sumSSGuildMemberDetailList" resultType="com.accompany.business.vo.guild.GuildMemberDiamondStatisticsVo">
select
gm.guild_id guildId,
gd.uid uid,
gd.guild_member_id guildMemberId,
ifnull(sum(gd.diamond_num),0) diamondNum
from guild_member_diamond_statistics gd
left join guild_member gm on gm.id = gd.guild_member_id
where gm.`enable` = 1
<foreach collection="cycleDates" close=")" item="cycleD" open="and gd.cycle_date in(" separator=",">
#{cycleD}
</foreach>
<if test="uid != null">
and gm.uid = #{uid}
</if>
<if test="guildId != null">
and gm.guild_id = #{guildId}
</if>
group by gm.guild_id, gm.uid,gd.guild_member_id
<if test="minDiamond != null">
having diamondNum &gt;= #{minDiamond}
</if>
</select>
<select id="sumSSGuildMemberDetail" resultType="java.lang.Double">
select ifnull(sum(gd.diamond_num),0) diamondNum
from guild_member_diamond_statistics gd
left join guild_member gm on gm.id = gd.guild_member_id
@@ -131,10 +157,10 @@
#{cycleD}
</foreach>
<if test="uid != null">
and gd.uid = #{uid}
and gm.uid = #{uid}
</if>
<if test="guildId != null">
and gd.guild_id = #{guildId}
and gm.guild_id = #{guildId}
</if>
</select>
</mapper>

View File

@@ -0,0 +1,5 @@
<?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.SsMonthCoinRecordMapper">
</mapper>

View File

@@ -3,6 +3,7 @@ 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 com.accompany.core.enumeration.PartitionEnum;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
/**
* 每月充值活动
*/
@@ -28,4 +31,15 @@ public class SSGuildController {
return ssGuildService.activitySSGuildMonthlyRank(uid);
}
@GetMapping("/taskMonth")
public BusiResult<Void> taskMonth(String cycleOne, String cycleTwo, Integer partitionId) {
ssGuildService.ssMonthTask(Arrays.asList(cycleOne, cycleTwo), partitionId);
return BusiResult.success();
}
@GetMapping("/ssTaskByMinutes")
public BusiResult<Void> ssTaskByMinutes(String cycleOne, String cycleTwo, Integer partitionId) {
ssGuildService.ssTaskByMinutes(Arrays.asList(cycleOne, cycleTwo), partitionId);
return BusiResult.success();
}
}

View File

@@ -0,0 +1,67 @@
package com.accompany.scheduler.task.guild;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guild.SSGuildService;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.service.partition.PartitionInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class SSGuildTask {
@Autowired
private PartitionInfoService partitionInfoService;
@Autowired
private SSGuildService ssGuildService;
private static final DateTimeFormatter dateFormatters = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN);
/**
* 每3minutes
*/
@Scheduled(cron = "0 0/5 * * * ?")
public void ssTaskByMinutes() {
PartitionInfo byId = partitionInfoService.getById(PartitionEnum.ARAB.getId());
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), byId.getZoneId());
log.info("=-=ssTaskByMinutes=-=:东三区时间:{}", zonedDateTime.format(dateFormatters));
String cycleOne = zonedDateTime.minusMonths(1).withDayOfMonth(1).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
String cycleTwo = zonedDateTime.minusMonths(1).withDayOfMonth(16).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
List<String> cycleDates = Arrays.asList(cycleOne, cycleTwo);
ssGuildService.ssTaskByMinutes(cycleDates, PartitionEnum.ARAB.getId());
log.info("=-=ssTaskByMinutes=-=:cycleOne:{},cycleTwo:{}", cycleOne , cycleTwo);
}
/**
* 每5minutes
*/
@Scheduled(cron = "0 10 0 1 * ?", zone = "Etc/GMT-3")
public void ssMonthTask() {
PartitionInfo byId = partitionInfoService.getById(PartitionEnum.ARAB.getId());
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(new Date(), byId.getZoneId());
log.info("=-=ssMonthTask=-=:东三区时间:{}", zonedDateTime.format(dateFormatters));
String cycleOne = zonedDateTime.withDayOfMonth(1).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
String cycleTwo = zonedDateTime.withDayOfMonth(16).format(DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_PATTERN));
List<String> cycleDates = Arrays.asList(cycleOne, cycleTwo);
log.info("=-=ssMonthTask=-=:cycleOne:{},cycleTwo:{}", cycleOne , cycleTwo);
ssGuildService.ssMonthTask(cycleDates, PartitionEnum.ARAB.getId());
log.info("================ssMonthTask end===============");
ssGuildService.ssTaskByMinutes(cycleDates, PartitionEnum.ARAB.getId());
}
}