主播周奖励-在麦时长-拆分等级内奖励和额外奖励的状态
This commit is contained in:
@@ -28,7 +28,7 @@ public class FamilyMemberWeekLevelRewardStatAdminVo {
|
||||
@ExcelProperty("主播昵称")
|
||||
private String nick;
|
||||
@ExcelProperty("周奖励等级")
|
||||
private Integer level;
|
||||
private String level;
|
||||
@ExcelProperty("钻石流水")
|
||||
private BigDecimal processNum;
|
||||
@ExcelProperty("已获得金币")
|
||||
|
@@ -1,17 +1,11 @@
|
||||
package com.accompany.admin.service;
|
||||
|
||||
import com.accompany.admin.vo.FamilyMemberWeekLevelRewardStatAdminVo;
|
||||
import com.accompany.business.model.family.Family;
|
||||
import com.accompany.business.model.family.FamilyMember;
|
||||
import com.accompany.business.model.family.FamilyMemberWeekLevelReward;
|
||||
import com.accompany.business.model.guild.Guild;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.model.guild.GuildMemberWeekLevelReward;
|
||||
import com.accompany.business.mybatismapper.family.FamilyMapper;
|
||||
import com.accompany.business.mybatismapper.family.FamilyMemberMapper;
|
||||
import com.accompany.business.mybatismapper.guild.GuildMapper;
|
||||
import com.accompany.business.mybatismapper.guild.GuildMemberMapper;
|
||||
import com.accompany.business.service.family.FamilyMemberWeekLevelRewardService;
|
||||
import com.accompany.business.service.guild.GuildMemberWeekLevelRewardService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.common.constant.Constant;
|
||||
@@ -41,12 +35,6 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
|
||||
@Autowired
|
||||
private UsersService usersService;
|
||||
@Autowired
|
||||
private FamilyMemberWeekLevelRewardService familyMemberWeekLevelRewardService;
|
||||
@Autowired
|
||||
private FamilyMemberMapper familyMemberMapper;
|
||||
@Autowired
|
||||
private FamilyMapper familyMapper;
|
||||
@Autowired
|
||||
private GuildMemberWeekLevelRewardService guildMemberWeekLevelRewardService;
|
||||
@Autowired
|
||||
private GuildMemberMapper guildMemberMapper;
|
||||
@@ -60,7 +48,7 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
|
||||
int pageNo, int pageSize) {
|
||||
PartitionInfo partitionInfo = partitionInfoService.getById(partitionId);
|
||||
if (null == partitionInfo
|
||||
|| (!Constant.ClanMode.FAMILY.equals(partitionInfo.getClanMode()) && !Constant.ClanMode.GUILD.equals(partitionInfo.getClanMode())
|
||||
|| (!Constant.ClanMode.GUILD.equals(partitionInfo.getClanMode())
|
||||
&& !Constant.ClanMode.GUILD_POLICY2.equals(partitionInfo.getClanMode()))){
|
||||
throw new AdminServiceException(BusiStatus.PARAMERROR);
|
||||
} else if (!StringUtils.hasText(cycleDate)) {
|
||||
@@ -78,191 +66,97 @@ public class FamilyMemberWeekLevelRewardRecordAdminService {
|
||||
uid = u.getUid();
|
||||
}
|
||||
|
||||
if (Constant.ClanMode.FAMILY.equals(partitionInfo.getClanMode())){
|
||||
Page<FamilyMember> poPage = new Page<>(pageNo, pageSize);
|
||||
LambdaQueryWrapper<FamilyMember> queryWrapper = Wrappers.<FamilyMember>lambdaQuery()
|
||||
.eq(null != uid, FamilyMember::getUid, uid);
|
||||
familyMemberMapper.selectPage(poPage, queryWrapper);
|
||||
Page<GuildMember> poPage = new Page<>(pageNo, pageSize);
|
||||
LambdaQueryWrapper<GuildMember> queryWrapper = Wrappers.<GuildMember>lambdaQuery()
|
||||
.eq(null != uid, GuildMember::getUid, uid);
|
||||
guildMemberMapper.selectPage(poPage, queryWrapper);
|
||||
|
||||
if (CollectionUtils.isEmpty(poPage.getRecords())){
|
||||
return voPage;
|
||||
}
|
||||
|
||||
Set<Long> uidSet = poPage.getRecords().stream().map(FamilyMember::getUid).collect(Collectors.toSet());
|
||||
List<Long> familyMemberIdList = poPage.getRecords().stream().map(FamilyMember::getId).collect(Collectors.toList());
|
||||
Map<Long, FamilyMember> familyMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(FamilyMember::getId, f->f));
|
||||
List<Integer> familyIdList = familyMemberMap.values().stream().map(FamilyMember::getFamilyId).distinct().collect(Collectors.toList());
|
||||
Map<Integer, Family> familyMap = familyMapper.selectByIds(familyIdList).stream().collect(Collectors.toMap(Family::getId, f->f));
|
||||
List<Long> familyOwnerUid = familyMap.values().stream().map(Family::getOwnerUid).distinct().collect(Collectors.toList());
|
||||
|
||||
List<FamilyMemberWeekLevelReward> weekLevelRewardList = familyMemberWeekLevelRewardService.lambdaQuery()
|
||||
.orderByAsc(FamilyMemberWeekLevelReward::getLevel)
|
||||
.list();
|
||||
Set<String> mapKeySet = familyMemberIdList.stream().map(familyMemberId->{
|
||||
List<String> keyList = new ArrayList<>();
|
||||
for (FamilyMemberWeekLevelReward levelReward: weekLevelRewardList){
|
||||
keyList.add(String.join("_", familyMemberId.toString(), levelReward.getLevel().toString()));
|
||||
}
|
||||
keyList.add(String.join("_", familyMemberId.toString(), "process"));
|
||||
return keyList;
|
||||
}).flatMap(List::stream).collect(Collectors.toSet());
|
||||
Map<String, Number> weekMap = familyMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
|
||||
|
||||
uidSet.addAll(familyOwnerUid);
|
||||
|
||||
Map<Long, Users> usersMap = usersService.getUsersMapByUids(new ArrayList<>(uidSet));
|
||||
|
||||
List<FamilyMemberWeekLevelRewardStatAdminVo> voList = poPage.getRecords().stream().map(po -> {
|
||||
FamilyMemberWeekLevelRewardStatAdminVo vo = new FamilyMemberWeekLevelRewardStatAdminVo();
|
||||
vo.setCycleDate(cycleDate);
|
||||
vo.setFamilyMemberId(po.getId());
|
||||
|
||||
String processKey = String.join("_", po.getId().toString(), "process");
|
||||
vo.setProcessNum(BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue()));
|
||||
|
||||
int level = 0;
|
||||
BigDecimal rewardNum = BigDecimal.ZERO;
|
||||
BigDecimal receiverdNum = BigDecimal.ZERO;
|
||||
for (FamilyMemberWeekLevelReward rewardItem: weekLevelRewardList){
|
||||
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
|
||||
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
|
||||
if (Constant.status.valid.equals(status)){
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
} else if (Constant.status.invalid.equals(status)) {
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
receiverdNum = receiverdNum.add(rewardItem.getRewardNum());
|
||||
}
|
||||
}
|
||||
|
||||
vo.setLevel(level);
|
||||
vo.setRewardNum(rewardNum);
|
||||
vo.setReceivedNum(receiverdNum);
|
||||
|
||||
vo.setUid(po.getUid());
|
||||
|
||||
Users u = usersMap.get(po.getUid());
|
||||
if (null != u){
|
||||
vo.setErbanNo(u.getErbanNo());
|
||||
vo.setNick(u.getNick());
|
||||
}
|
||||
|
||||
FamilyMember familyMember = familyMemberMap.get(po.getId());
|
||||
if (null != familyMember){
|
||||
vo.setFamilyId(familyMember.getFamilyId());
|
||||
|
||||
Family family = familyMap.get(familyMember.getFamilyId());
|
||||
if (null != family){
|
||||
vo.setFamilyName(family.getName());
|
||||
|
||||
Users owner = usersMap.get(family.getOwnerUid());
|
||||
if (null != owner){
|
||||
vo.setFamilyOwnerId(owner.getErbanNo());
|
||||
vo.setFamilyOwnerNick(owner.getNick());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
voPage.setRecords(voList);
|
||||
voPage.setTotal(poPage.getTotal());
|
||||
|
||||
} else {
|
||||
Page<GuildMember> poPage = new Page<>(pageNo, pageSize);
|
||||
LambdaQueryWrapper<GuildMember> queryWrapper = Wrappers.<GuildMember>lambdaQuery()
|
||||
.eq(null != uid, GuildMember::getUid, uid);
|
||||
guildMemberMapper.selectPage(poPage, queryWrapper);
|
||||
|
||||
if (CollectionUtils.isEmpty(poPage.getRecords())){
|
||||
return voPage;
|
||||
}
|
||||
|
||||
Set<Long> uidSet = poPage.getRecords().stream().map(GuildMember::getUid).collect(Collectors.toSet());
|
||||
List<Long> guildMemberIdList = poPage.getRecords().stream().map(GuildMember::getId).collect(Collectors.toList());
|
||||
Map<Long, GuildMember> guildMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(GuildMember::getId, f->f));
|
||||
List<Integer> guildIdList = guildMemberMap.values().stream().map(GuildMember::getGuildId).distinct().collect(Collectors.toList());
|
||||
Map<Integer, Guild> guildMap = guildMapper.selectByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, f->f));
|
||||
List<Long> guildOwnerUid = guildMap.values().stream().map(Guild::getOwnerUid).distinct().collect(Collectors.toList());
|
||||
|
||||
List<GuildMemberWeekLevelReward> weekLevelRewardList = guildMemberWeekLevelRewardService.lambdaQuery()
|
||||
.orderByAsc(GuildMemberWeekLevelReward::getLevel)
|
||||
.list();
|
||||
Set<String> mapKeySet = guildMemberIdList.stream().map(guildMemberId->{
|
||||
List<String> keyList = new ArrayList<>();
|
||||
for (GuildMemberWeekLevelReward levelReward: weekLevelRewardList){
|
||||
keyList.add(String.join("_", guildMemberId.toString(), levelReward.getLevel().toString()));
|
||||
}
|
||||
keyList.add(String.join("_", guildMemberId.toString(), "process"));
|
||||
return keyList;
|
||||
}).flatMap(List::stream).collect(Collectors.toSet());
|
||||
Map<String, Number> weekMap = guildMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
|
||||
|
||||
uidSet.addAll(guildOwnerUid);
|
||||
|
||||
Map<Long, Users> usersMap = usersService.getUsersMapByUids(new ArrayList<>(uidSet));
|
||||
|
||||
List<FamilyMemberWeekLevelRewardStatAdminVo> voList = poPage.getRecords().stream().map(po -> {
|
||||
FamilyMemberWeekLevelRewardStatAdminVo vo = new FamilyMemberWeekLevelRewardStatAdminVo();
|
||||
vo.setCycleDate(cycleDate);
|
||||
vo.setFamilyMemberId(po.getId());
|
||||
|
||||
String processKey = String.join("_", po.getId().toString(), "process");
|
||||
vo.setProcessNum(BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue()));
|
||||
|
||||
int level = 0;
|
||||
BigDecimal rewardNum = BigDecimal.ZERO;
|
||||
BigDecimal receiverdNum = BigDecimal.ZERO;
|
||||
for (GuildMemberWeekLevelReward rewardItem: weekLevelRewardList){
|
||||
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
|
||||
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
|
||||
if (Constant.status.valid.equals(status)){
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
} else if (Constant.status.invalid.equals(status)) {
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
receiverdNum = receiverdNum.add(rewardItem.getRewardNum());
|
||||
}
|
||||
}
|
||||
|
||||
vo.setLevel(level);
|
||||
vo.setRewardNum(rewardNum);
|
||||
vo.setReceivedNum(receiverdNum);
|
||||
|
||||
vo.setUid(po.getUid());
|
||||
|
||||
Users u = usersMap.get(po.getUid());
|
||||
if (null != u){
|
||||
vo.setErbanNo(u.getErbanNo());
|
||||
vo.setNick(u.getNick());
|
||||
}
|
||||
|
||||
GuildMember guildMember = guildMemberMap.get(po.getId());
|
||||
if (null != guildMember){
|
||||
vo.setFamilyId(guildMember.getGuildId());
|
||||
|
||||
Guild guild = guildMap.get(guildMember.getGuildId());
|
||||
if (null != guild){
|
||||
vo.setFamilyName(guild.getName());
|
||||
|
||||
Users owner = usersMap.get(guild.getOwnerUid());
|
||||
if (null != owner){
|
||||
vo.setFamilyOwnerId(owner.getErbanNo());
|
||||
vo.setFamilyOwnerNick(owner.getNick());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
voPage.setRecords(voList);
|
||||
voPage.setTotal(poPage.getTotal());
|
||||
if (CollectionUtils.isEmpty(poPage.getRecords())){
|
||||
return voPage;
|
||||
}
|
||||
|
||||
Set<Long> uidSet = poPage.getRecords().stream().map(GuildMember::getUid).collect(Collectors.toSet());
|
||||
List<Long> guildMemberIdList = poPage.getRecords().stream().map(GuildMember::getId).collect(Collectors.toList());
|
||||
Map<Long, GuildMember> guildMemberMap = poPage.getRecords().stream().collect(Collectors.toMap(GuildMember::getId, f->f));
|
||||
List<Integer> guildIdList = guildMemberMap.values().stream().map(GuildMember::getGuildId).distinct().collect(Collectors.toList());
|
||||
Map<Integer, Guild> guildMap = guildMapper.selectByIds(guildIdList).stream().collect(Collectors.toMap(Guild::getId, f->f));
|
||||
List<Long> guildOwnerUid = guildMap.values().stream().map(Guild::getOwnerUid).distinct().collect(Collectors.toList());
|
||||
|
||||
List<GuildMemberWeekLevelReward> weekLevelRewardList = guildMemberWeekLevelRewardService.lambdaQuery()
|
||||
.orderByAsc(GuildMemberWeekLevelReward::getLevel)
|
||||
.list();
|
||||
Set<String> mapKeySet = guildMemberIdList.stream().map(guildMemberId->{
|
||||
List<String> keyList = new ArrayList<>();
|
||||
for (GuildMemberWeekLevelReward levelReward: weekLevelRewardList){
|
||||
keyList.add(String.join("_", guildMemberId.toString(), levelReward.getLevel().toString()));
|
||||
}
|
||||
keyList.add(String.join("_", guildMemberId.toString(), "process"));
|
||||
return keyList;
|
||||
}).flatMap(List::stream).collect(Collectors.toSet());
|
||||
Map<String, Number> weekMap = guildMemberWeekLevelRewardService.getWeekMap(cycleDate, partitionId).getAll(mapKeySet);
|
||||
|
||||
uidSet.addAll(guildOwnerUid);
|
||||
|
||||
Map<Long, Users> usersMap = usersService.getUsersMapByUids(new ArrayList<>(uidSet));
|
||||
|
||||
List<FamilyMemberWeekLevelRewardStatAdminVo> voList = poPage.getRecords().stream().map(po -> {
|
||||
FamilyMemberWeekLevelRewardStatAdminVo vo = new FamilyMemberWeekLevelRewardStatAdminVo();
|
||||
vo.setCycleDate(cycleDate);
|
||||
vo.setFamilyMemberId(po.getId());
|
||||
|
||||
String processKey = String.join("_", po.getId().toString(), "process");
|
||||
vo.setProcessNum(BigDecimal.valueOf(weekMap.getOrDefault(processKey, 0d).doubleValue()));
|
||||
|
||||
String level = null;
|
||||
BigDecimal rewardNum = BigDecimal.ZERO;
|
||||
BigDecimal receiverdNum = BigDecimal.ZERO;
|
||||
for (GuildMemberWeekLevelReward rewardItem: weekLevelRewardList){
|
||||
String key = String.join("_", po.getId().toString(), rewardItem.getLevel().toString());
|
||||
Byte status = weekMap.getOrDefault(key, Constant.status.delete).byteValue();
|
||||
if (Constant.status.valid.equals(status)){
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
} else if (Constant.status.invalid.equals(status)) {
|
||||
level = rewardItem.getLevel();
|
||||
rewardNum = rewardNum.add(rewardItem.getRewardNum());
|
||||
receiverdNum = receiverdNum.add(rewardItem.getRewardNum());
|
||||
}
|
||||
}
|
||||
|
||||
vo.setLevel(level);
|
||||
vo.setRewardNum(rewardNum);
|
||||
vo.setReceivedNum(receiverdNum);
|
||||
|
||||
vo.setUid(po.getUid());
|
||||
|
||||
Users u = usersMap.get(po.getUid());
|
||||
if (null != u){
|
||||
vo.setErbanNo(u.getErbanNo());
|
||||
vo.setNick(u.getNick());
|
||||
}
|
||||
|
||||
GuildMember guildMember = guildMemberMap.get(po.getId());
|
||||
if (null != guildMember){
|
||||
vo.setFamilyId(guildMember.getGuildId());
|
||||
|
||||
Guild guild = guildMap.get(guildMember.getGuildId());
|
||||
if (null != guild){
|
||||
vo.setFamilyName(guild.getName());
|
||||
|
||||
Users owner = usersMap.get(guild.getOwnerUid());
|
||||
if (null != owner){
|
||||
vo.setFamilyOwnerId(owner.getErbanNo());
|
||||
vo.setFamilyOwnerNick(owner.getNick());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
voPage.setRecords(voList);
|
||||
voPage.setTotal(poPage.getTotal());
|
||||
|
||||
return voPage;
|
||||
}
|
||||
|
||||
|
@@ -63,6 +63,7 @@ public class DateTimeUtil {
|
||||
public static final DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN);
|
||||
public static final DateTimeFormatter dateHourFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATE_MINUTE_PATTERN);
|
||||
public static final DateTimeFormatter hoursFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DATE_HOUR_PATTERN);
|
||||
public static final DateTimeFormatter monthWithoutZeroDateFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN);
|
||||
|
||||
public static final DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
|
||||
|
@@ -7,11 +7,11 @@ import java.math.BigDecimal;
|
||||
@Data
|
||||
public class GuildMemberWeekLevelReward {
|
||||
|
||||
private Integer level;
|
||||
private String level;
|
||||
private Integer partitionId;
|
||||
private BigDecimal processNum;
|
||||
private BigDecimal rewardNum;
|
||||
private Integer micDurationDay;
|
||||
private BigDecimal micDurationBonus;
|
||||
private Integer micValidDay;
|
||||
private BigDecimal bonusNum;
|
||||
|
||||
}
|
||||
|
@@ -12,7 +12,7 @@ public class GuildMemberWeekLevelRewardRecord {
|
||||
private Integer partitionId;
|
||||
private Long uid;
|
||||
private String monday;
|
||||
private Integer level;
|
||||
private String level;
|
||||
private BigDecimal processNum;
|
||||
private BigDecimal rewardNum;
|
||||
private Date createTime;
|
||||
|
@@ -13,7 +13,10 @@ public class GuildMemberWeekLevelRewardItemVo {
|
||||
@ApiModelProperty("id")
|
||||
private String id;
|
||||
@ApiModelProperty("等级")
|
||||
private Integer level;
|
||||
private String level;
|
||||
@ApiModelProperty("上一级等级")
|
||||
private String preLevel;
|
||||
|
||||
@ApiModelProperty("进度")
|
||||
private BigDecimal processNum;
|
||||
@ApiModelProperty("长度")
|
||||
@@ -22,15 +25,15 @@ public class GuildMemberWeekLevelRewardItemVo {
|
||||
private BigDecimal preMaxNum;
|
||||
@ApiModelProperty("奖励")
|
||||
private BigDecimal rewardNum;
|
||||
|
||||
@ApiModelProperty("在麦时长进度")
|
||||
private Integer micDurationProcessNum;
|
||||
@ApiModelProperty("在麦时长上限")
|
||||
private Integer micDurationMaxNum;
|
||||
@ApiModelProperty("在麦时长奖励")
|
||||
private BigDecimal micDurationBonus;
|
||||
|
||||
@ApiModelProperty("状态012")
|
||||
private Byte status;
|
||||
|
||||
@ApiModelProperty("在麦时长进度")
|
||||
private Integer bonusProcessNum;
|
||||
@ApiModelProperty("在麦时长上限")
|
||||
private Integer bonusMaxNum;
|
||||
@ApiModelProperty("在麦时长奖励")
|
||||
private BigDecimal bonusRewardNum;
|
||||
@ApiModelProperty("状态012")
|
||||
private Byte bonusStatus;
|
||||
}
|
||||
|
@@ -13,8 +13,27 @@ public class GuildMemberWeekLevelRewardVo {
|
||||
|
||||
@ApiModelProperty("日期范围")
|
||||
private String dateRange;
|
||||
@ApiModelProperty("最多奖励")
|
||||
private BigDecimal totalReward = BigDecimal.ZERO;
|
||||
|
||||
@ApiModelProperty("倒计时秒")
|
||||
private Long countDownSecond;
|
||||
|
||||
@ApiModelProperty
|
||||
private String curLevel;
|
||||
@ApiModelProperty("当前周进度")
|
||||
private BigDecimal processNum;
|
||||
@ApiModelProperty("当前周进度上限")
|
||||
private BigDecimal maxNum;
|
||||
|
||||
@ApiModelProperty("当前周进度上限")
|
||||
private String preLevel;
|
||||
@ApiModelProperty("当前周进度上一级上限")
|
||||
private BigDecimal preMaxNum;
|
||||
|
||||
@ApiModelProperty("当前周额外奖励进度")
|
||||
private Integer bonusProcessNum;
|
||||
@ApiModelProperty("当前周额外奖励进度")
|
||||
private Integer bonusMaxNum;
|
||||
|
||||
@ApiModelProperty("每级奖励")
|
||||
private List<GuildMemberWeekLevelRewardItemVo> itemList;
|
||||
|
||||
|
@@ -23,7 +23,7 @@ public class GuildMemberRoomMicDayDurationService {
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||
ZonedDateTime upTimeZdt = DateTimeUtil.convertWithZoneId(upTime, partitionEnum.getZoneId());
|
||||
ZonedDateTime downTimeZdt = DateTimeUtil.convertWithZoneId(downTime, partitionEnum.getZoneId());
|
||||
addSecondsGroupByDate(uid, partitionId, upTimeZdt, downTimeZdt);
|
||||
addSecondsGroupByDate(uid, partitionId, upTimeZdt, downTimeZdt);
|
||||
}
|
||||
|
||||
public void add(String monday, Integer partitionId, String date, Long uid, Integer seconds) {
|
||||
@@ -36,14 +36,13 @@ public class GuildMemberRoomMicDayDurationService {
|
||||
countMap.expireAsync(Duration.ofDays(14));
|
||||
}
|
||||
|
||||
|
||||
public String getCacheKey(String monday, Integer partitionId){
|
||||
return RedisKey.guild_member_room_mic_day_duration.getKey(monday, partitionId.toString());
|
||||
}
|
||||
|
||||
public Map<String, Integer> getWeekMicDurationMap(String monday, Integer partitionId, Set<String> keySet){
|
||||
RMap<String, Integer> countMap = redissonClient.getMap(getCacheKey(monday, partitionId));
|
||||
return countMap.getAll(keySet);
|
||||
public Map<String, Integer> getWeekMicDurationMap(String mondayDateStr, Integer partitionId, Set<String> micKeySet) {
|
||||
RMap<String, Integer> countMap = redissonClient.getMap(getCacheKey(mondayDateStr, partitionId));
|
||||
return countMap.getAll(micKeySet);
|
||||
}
|
||||
|
||||
public void addSecondsGroupByDate(Long uid, Integer partitionId, ZonedDateTime upTimeZdt, ZonedDateTime downTimeZdt) {
|
||||
|
@@ -21,14 +21,17 @@ import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import io.swagger.models.auth.In;
|
||||
import org.redisson.api.RMap;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -67,50 +70,69 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
return null;
|
||||
}
|
||||
|
||||
Date zoneTime = DateTimeUtil.withZoneSameInstant(new Date(), partitionEnum.getZoneId());
|
||||
Date mondayTime = DateTimeUtil.getMondayDate(zoneTime);
|
||||
return getVo(uid, partitionId, mondayTime, levelRewardList, true, false);
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(partitionEnum.getZoneId());
|
||||
return getVo(uid, partitionId, zdt, levelRewardList, true, false);
|
||||
}
|
||||
|
||||
private GuildMemberWeekLevelRewardVo getVo(Long uid, Integer partitionId, Date mondayTime,
|
||||
private GuildMemberWeekLevelRewardVo getVo(Long uid, Integer partitionId, ZonedDateTime zdt,
|
||||
List<GuildMemberWeekLevelReward> levelRewardList, boolean needFilter, boolean thisWeek) {
|
||||
|
||||
GuildMemberWeekLevelRewardVo vo = new GuildMemberWeekLevelRewardVo();
|
||||
vo.setCurLevel("-");
|
||||
vo.setPreLevel("-");
|
||||
vo.setPreMaxNum(BigDecimal.ZERO);
|
||||
vo.setProcessNum(BigDecimal.ZERO);
|
||||
vo.setMaxNum(BigDecimal.ZERO);
|
||||
|
||||
Date sundayTime = DateTimeUtil.addDays(mondayTime, 6);
|
||||
ZonedDateTime mondayTime = zdt.with(DayOfWeek.MONDAY).withHour(0).withMinute(0).withSecond(0);
|
||||
ZonedDateTime sundayTime = zdt.with(DayOfWeek.SUNDAY).withHour(23).withMinute(59).withSecond(59);
|
||||
String dateRange = String.join("-",
|
||||
DateTimeUtil.convertDate(mondayTime, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN),
|
||||
DateTimeUtil.convertDate(sundayTime, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN));
|
||||
mondayTime.format(DateTimeUtil.monthWithoutZeroDateFormatter),
|
||||
sundayTime.format(DateTimeUtil.monthWithoutZeroDateFormatter));
|
||||
vo.setDateRange(dateRange);
|
||||
|
||||
BigDecimal totalRewardNum = levelRewardList.stream()
|
||||
.map(GuildMemberWeekLevelReward::getRewardNum)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
vo.setTotalReward(totalRewardNum);
|
||||
// 如果是本周,计算当前时间到本周日结束时间之间的秒数差
|
||||
if (thisWeek) {
|
||||
long secondsDiff = Duration.between(zdt, sundayTime).getSeconds();
|
||||
vo.setCountDownSecond(secondsDiff);
|
||||
}
|
||||
|
||||
String key = String.join("_", uid.toString(), "process");
|
||||
Set<String> keySet = levelRewardList.stream()
|
||||
.map(GuildMemberWeekLevelReward::getLevel)
|
||||
.map(level->String.join("_", uid.toString(), level.toString()))
|
||||
.map(level->String.join("_", uid.toString(), level))
|
||||
.collect(Collectors.toSet());
|
||||
keySet.add(key);
|
||||
String monday = DateTimeUtil.convertDate(mondayTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
Map<String, Number> userProcessMap = getWeekMap(monday, partitionId).getAll(keySet);
|
||||
Set<String> bonusKeySet = levelRewardList.stream()
|
||||
.map(GuildMemberWeekLevelReward::getLevel)
|
||||
.map(level->String.join("_", uid.toString(), level, "bonus"))
|
||||
.collect(Collectors.toSet());
|
||||
keySet.addAll(bonusKeySet);
|
||||
|
||||
String mondayDateStr = mondayTime.format(DateTimeUtil.dateFormatter);
|
||||
Map<String, Number> userProcessMap = getWeekMap(mondayDateStr, partitionId).getAll(keySet);
|
||||
BigDecimal userProcess = new BigDecimal(userProcessMap.getOrDefault(key, BigDecimal.ZERO).toString());
|
||||
|
||||
Set<String> micKeySet = IntStream.rangeClosed(0, 6)
|
||||
.mapToObj(i->{
|
||||
String dateStr = DateTimeUtil.convertDate(DateTimeUtil.addDays(mondayTime, i), DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
String dateStr = mondayTime.plusDays(i).format(DateTimeUtil.dateFormatter);
|
||||
return String.join("_", uid.toString(), dateStr);
|
||||
})
|
||||
.collect(Collectors.toSet());
|
||||
Map<String, Integer> userMicDurationMap = micDayDurationService.getWeekMicDurationMap(monday, partitionId, micKeySet);
|
||||
Integer micValidDay = (int) userMicDurationMap.values().stream().filter(seconds->seconds > 120 * 60).count();
|
||||
Map<String, Integer> userMicDurationMap = micDayDurationService.getWeekMicDurationMap(mondayDateStr, partitionId, micKeySet);
|
||||
int micValidDay = (int) userMicDurationMap.values().stream().filter(seconds->seconds > validDaySeconds).count();
|
||||
if (micValidDay >= micDurationDayMax){
|
||||
micValidDay = micDurationDayMax;
|
||||
}
|
||||
vo.setBonusProcessNum(micValidDay);
|
||||
vo.setBonusMaxNum(micDurationDayMax);
|
||||
|
||||
List<GuildMemberWeekLevelRewardItemVo> itemVoList = new ArrayList<>();
|
||||
vo.setItemList(itemVoList);
|
||||
|
||||
String curLevel = "", preLevel = "-";
|
||||
BigDecimal preProcessNum = BigDecimal.ZERO;
|
||||
|
||||
for (GuildMemberWeekLevelReward levelReward: levelRewardList) {
|
||||
BigDecimal totalProcessNum = preProcessNum.add(levelReward.getProcessNum());
|
||||
|
||||
@@ -118,8 +140,8 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
break;
|
||||
}
|
||||
|
||||
String id = String.join("_", uid.toString(), monday, levelReward.getLevel().toString());
|
||||
String processId = String.join("_", uid.toString(), levelReward.getLevel().toString());
|
||||
String id = String.join("_", uid.toString(), mondayDateStr, levelReward.getLevel());
|
||||
String processId = String.join("_", uid.toString(), levelReward.getLevel());
|
||||
BigDecimal thisLevelProcessNum = userProcess.subtract(totalProcessNum);
|
||||
BigDecimal processNum = thisLevelProcessNum.compareTo(BigDecimal.ZERO) >= 0?
|
||||
levelReward.getProcessNum() :
|
||||
@@ -129,6 +151,12 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
userProcessMap.get(processId).byteValue():
|
||||
processNum.compareTo(levelReward.getProcessNum()) >= 0? Constant.status.valid: Constant.status.delete;
|
||||
|
||||
String bonusStatusId = String.join("_", uid.toString(), levelReward.getLevel(), "bonus");
|
||||
Byte bonusStatus = userProcessMap.containsKey(bonusStatusId)?
|
||||
userProcessMap.get(bonusStatusId).byteValue():
|
||||
micValidDay >= levelReward.getMicValidDay() && !status.equals(Constant.status.delete)?
|
||||
Constant.status.valid: Constant.status.delete;
|
||||
|
||||
if (!needFilter && !thisWeek
|
||||
&& !CollectionUtils.isEmpty(itemVoList)
|
||||
&& !Constant.status.valid.equals(status)
|
||||
@@ -139,18 +167,26 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
GuildMemberWeekLevelRewardItemVo itemVo = new GuildMemberWeekLevelRewardItemVo();
|
||||
itemVo.setId(id);
|
||||
itemVo.setLevel(levelReward.getLevel());
|
||||
itemVo.setPreLevel(preLevel);
|
||||
itemVo.setProcessNum(processNum);
|
||||
itemVo.setMaxNum(totalProcessNum);
|
||||
itemVo.setPreMaxNum(preProcessNum);
|
||||
itemVo.setRewardNum(levelReward.getRewardNum());
|
||||
|
||||
itemVo.setMicDurationProcessNum(micValidDay);
|
||||
itemVo.setMicDurationMaxNum(micDurationDayMax);
|
||||
itemVo.setMicDurationBonus(levelReward.getMicDurationBonus());
|
||||
itemVo.setStatus(status);
|
||||
|
||||
itemVo.setBonusProcessNum(micValidDay);
|
||||
itemVo.setBonusMaxNum(levelReward.getMicValidDay());
|
||||
itemVo.setBonusRewardNum(levelReward.getBonusNum());
|
||||
itemVo.setBonusStatus(bonusStatus);
|
||||
|
||||
itemVoList.add(itemVo);
|
||||
|
||||
if (thisLevelProcessNum.compareTo(BigDecimal.ZERO) >= 0){
|
||||
curLevel = levelReward.getLevel();
|
||||
}
|
||||
|
||||
preLevel = levelReward.getLevel();
|
||||
|
||||
preProcessNum = totalProcessNum;
|
||||
}
|
||||
|
||||
@@ -158,6 +194,33 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
vo.setItemList(List.of(itemVoList.get(itemVoList.size() - 1)));
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(vo.getItemList())){
|
||||
return vo;
|
||||
}
|
||||
|
||||
GuildMemberWeekLevelRewardItemVo curLevelReward = null;
|
||||
if (StringUtils.hasText(curLevel)){
|
||||
vo.setCurLevel(curLevel);
|
||||
|
||||
for (GuildMemberWeekLevelRewardItemVo voItem: vo.getItemList()){
|
||||
if (!voItem.getLevel().equals(curLevel)){
|
||||
continue;
|
||||
}
|
||||
|
||||
curLevelReward = voItem;
|
||||
}
|
||||
}
|
||||
|
||||
if (null == curLevelReward){
|
||||
curLevelReward = itemVoList.get(0);
|
||||
}
|
||||
|
||||
vo.setPreLevel(curLevelReward.getPreLevel());
|
||||
vo.setPreMaxNum(curLevelReward.getPreMaxNum());
|
||||
vo.setCurLevel(curLevelReward.getLevel());
|
||||
vo.setProcessNum(curLevelReward.getProcessNum());
|
||||
vo.setMaxNum(curLevelReward.getMaxNum());
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
@@ -184,7 +247,7 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
String userProcessKey = String.join("_", guildMemberId.toString(), "process");
|
||||
String processId = String.join("_", guildMemberId.toString(), levelReward.getLevel().toString());
|
||||
String processId = String.join("_", guildMemberId.toString(), levelReward.getLevel());
|
||||
Set<String> keySet = Set.of(userProcessKey,processId);
|
||||
|
||||
RMap<String, Number> processMap = getWeekMap(monday, partitionId);
|
||||
@@ -217,7 +280,7 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
processMap.expireAsync(30L, TimeUnit.DAYS);
|
||||
}
|
||||
|
||||
public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId, String zoneId) {
|
||||
public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId) {
|
||||
|
||||
List<GuildMemberWeekLevelReward> levelRewardList = lambdaQuery()
|
||||
.eq(GuildMemberWeekLevelReward::getPartitionId, partitionId)
|
||||
@@ -227,28 +290,27 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
|
||||
return null;
|
||||
}
|
||||
|
||||
Date time = new Date();
|
||||
Date zoneTime = DateTimeUtil.withZoneSameInstant(time, zoneId);
|
||||
Date thisMonday = DateTimeUtil.getMondayDate(zoneTime);
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||
ZonedDateTime zdt = DateTimeUtil.getDateTimeByZoneId(partitionEnum.getZoneId());
|
||||
|
||||
List<String> dateRangeList = new ArrayList<>();
|
||||
List<Date> mondayList = new ArrayList<>();
|
||||
List<ZonedDateTime> timeList = new ArrayList<>();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
Date t = DateTimeUtil.addDays(zoneTime, -i*7);
|
||||
Date mondayTime = DateTimeUtil.getMondayDate(t);
|
||||
String monday = DateTimeUtil.convertDate(mondayTime, DateTimeUtil.DEFAULT_DATE_PATTERN);
|
||||
ZonedDateTime t = zdt.minusWeeks(i);
|
||||
timeList.add(t);
|
||||
|
||||
String monday = t.with(DayOfWeek.MONDAY).format(DateTimeUtil.monthWithoutZeroDateFormatter);
|
||||
if (monday.compareTo(startMonday) < 0){
|
||||
continue;
|
||||
}
|
||||
mondayList.add(mondayTime);
|
||||
Date sundayTime = DateTimeUtil.addDays(mondayTime, 6);
|
||||
String dateRange = String.join("-",
|
||||
DateTimeUtil.convertDate(mondayTime, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN),
|
||||
DateTimeUtil.convertDate(sundayTime, DateTimeUtil.MONTH_WITHOUT_ZERO_DATE_PATTERN));
|
||||
|
||||
String sunday = t.with(DayOfWeek.SUNDAY).format(DateTimeUtil.monthWithoutZeroDateFormatter);
|
||||
String dateRange = String.join("-", monday, sunday);
|
||||
dateRangeList.add(dateRange);
|
||||
}
|
||||
|
||||
Map<String, GuildMemberWeekLevelRewardVo> map = mondayList.parallelStream().map(monday->
|
||||
getVo(familyMemberId, partitionId, monday, levelRewardList, false, monday.equals(thisMonday)))
|
||||
Map<String, GuildMemberWeekLevelRewardVo> map = timeList.parallelStream().map(t->
|
||||
getVo(familyMemberId, partitionId, t, levelRewardList, false, t.equals(zdt)))
|
||||
.collect(Collectors.toMap(GuildMemberWeekLevelRewardVo::getDateRange, t->t));
|
||||
|
||||
return dateRangeList.stream()
|
||||
|
@@ -49,8 +49,7 @@ public class GuildMemberWeekLevelRewardController {
|
||||
throw new ServiceException(BusiStatus.FAMILY_PERMISSION_DENIED);
|
||||
}
|
||||
|
||||
List<GuildMemberWeekLevelRewardVo> list = guildMemberWeekLevelRewardService.listHistory(guildMember.getId(), u.getPartitionId(),
|
||||
PartitionEnum.getByPartitionId(u.getPartitionId()).getZoneId());
|
||||
List<GuildMemberWeekLevelRewardVo> list = guildMemberWeekLevelRewardService.listHistory(guildMember.getId(), u.getPartitionId());
|
||||
return BusiResult.success(list);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user