|
|
|
@@ -81,7 +81,7 @@ public class GuildTaskService {
|
|
|
|
|
List<GuildTaskReachRecord> existRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey);
|
|
|
|
|
String cycleDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId())
|
|
|
|
|
.format(DateTimeUtil.dateFormatter);
|
|
|
|
|
this.calProgress(partitionEnum, guild, taskLevelInfos, existRecords, resultList, cycleDate, statDate,
|
|
|
|
|
this.calCreateProgress(partitionEnum, guild, taskLevelInfos, existRecords, resultList, cycleDate, statDate,
|
|
|
|
|
guildMemberNumMap, diamondMap, reachAnchorNumMap, now);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -90,15 +90,18 @@ public class GuildTaskService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void calProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos,
|
|
|
|
|
List<GuildTaskReachRecord> existRecords, List<GuildTaskReachRecord> resultList,
|
|
|
|
|
String cycleDate, String statDate, Map<Integer, Long> guildMemberNumMap,
|
|
|
|
|
Map<Integer, BigDecimal> diamondMap, Map<Integer, Integer> reachAnchorNumMap, Date now) {
|
|
|
|
|
private void calCreateProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos,
|
|
|
|
|
List<GuildTaskReachRecord> existRecords, List<GuildTaskReachRecord> resultList,
|
|
|
|
|
String cycleDate, String statDate, Map<Integer, Long> guildMemberNumMap,
|
|
|
|
|
Map<Integer, BigDecimal> diamondMap, Map<Integer, Integer> reachAnchorNumMap, Date now) {
|
|
|
|
|
Integer guildId = guild.getId();
|
|
|
|
|
int partitionId = partitionEnum.getId();
|
|
|
|
|
BigDecimal diamond = diamondMap.getOrDefault(guildId, BigDecimal.ZERO);
|
|
|
|
|
Integer anchorReachNum = reachAnchorNumMap.getOrDefault(guildId, 0);
|
|
|
|
|
Long memberNum = guildMemberNumMap.getOrDefault(guildId, 0L);
|
|
|
|
|
Map<Integer, GuildTaskReachRecord> existRecordMap = existRecords.stream()
|
|
|
|
|
.filter(x -> x.getStatDate().equals(statDate) || x.getReachStatus() > 0)
|
|
|
|
|
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
|
|
|
|
|
for (GuildTaskLevelInfo levelInfo : taskLevelInfos) {
|
|
|
|
|
if (CollectionUtils.isEmpty(existRecords)) {
|
|
|
|
|
boolean calNext = this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId,
|
|
|
|
@@ -107,28 +110,25 @@ public class GuildTaskService {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Map<Integer, GuildTaskReachRecord> existRecordMap = existRecords.stream()
|
|
|
|
|
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
|
|
|
|
|
|
|
|
|
|
GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel());
|
|
|
|
|
if (existOne != null) {
|
|
|
|
|
//不是当天并且等级已经达标,计算下一级
|
|
|
|
|
if (!statDate.equals(existOne.getStatDate()) && existOne.getReachStatus() <= 0){
|
|
|
|
|
if (!statDate.equals(existOne.getStatDate()) && existOne.getReachStatus() <= 0) {
|
|
|
|
|
this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId, statDate,
|
|
|
|
|
diamond, anchorReachNum, memberNum.intValue());
|
|
|
|
|
} else if (statDate.equals(existOne.getStatDate())) {
|
|
|
|
|
existOne.setDiamondNum(levelInfo.getDiamondNum());
|
|
|
|
|
existOne.setAnchorNum(levelInfo.getAnchorNum());
|
|
|
|
|
existOne.setAnchorMicReachNum(levelInfo.getAnchorMicReachNum());
|
|
|
|
|
existOne.setDiamondNum(diamond);
|
|
|
|
|
existOne.setAnchorNum(memberNum.intValue());
|
|
|
|
|
existOne.setAnchorMicReachNum(anchorReachNum);
|
|
|
|
|
existOne.setLevel(levelInfo.getLevel());
|
|
|
|
|
existOne.setGuildTaskId(levelInfo.getGuildTaskId());
|
|
|
|
|
boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
|
|
|
|
boolean reachStatus = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
|
|
|
|
&& memberNum >= levelInfo.getAnchorNum()
|
|
|
|
|
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
|
|
|
|
existOne.setReachStatus(calNext ? 1 : 0);
|
|
|
|
|
existOne.setReachStatus(reachStatus ? 1 : 0);
|
|
|
|
|
existOne.setUpdateTime(now);
|
|
|
|
|
resultList.add(existOne);
|
|
|
|
|
if (!calNext) {
|
|
|
|
|
if (!reachStatus) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -157,13 +157,13 @@ public class GuildTaskService {
|
|
|
|
|
reachRecord.setDiamondNum(diamond);
|
|
|
|
|
reachRecord.setAnchorNum(memberNum);
|
|
|
|
|
reachRecord.setAnchorMicReachNum(anchorReachNum);
|
|
|
|
|
boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
|
|
|
|
boolean reachStatus = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
|
|
|
|
&& memberNum >= levelInfo.getAnchorNum()
|
|
|
|
|
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
|
|
|
|
reachRecord.setReachStatus(calNext ? 1 : 0);
|
|
|
|
|
reachRecord.setReachStatus(reachStatus ? 1 : 0);
|
|
|
|
|
reachRecord.setCreateTime(new Date());
|
|
|
|
|
resultList.add(reachRecord);
|
|
|
|
|
if (!calNext) { //当前登记未达到,不再计算下一登记
|
|
|
|
|
if (!reachStatus) { //当前登记未达到,不再计算下一登记
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
@@ -186,7 +186,7 @@ public class GuildTaskService {
|
|
|
|
|
String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter);
|
|
|
|
|
|
|
|
|
|
ZonedDateTime weekBegin = nowzonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
|
|
String cycleDate = weekBegin.format(DateTimeUtil.datetimeFormatter);
|
|
|
|
|
String cycleDate = weekBegin.format(DateTimeUtil.dateFormatter);
|
|
|
|
|
|
|
|
|
|
List<Guild> guilds = guildService.listVaildGuildByPartitionId(partitionId);
|
|
|
|
|
if (CollectionUtils.isEmpty(guilds)) {
|
|
|
|
@@ -214,7 +214,7 @@ public class GuildTaskService {
|
|
|
|
|
for (Guild guild : guilds) {
|
|
|
|
|
Integer guildId = guild.getId();
|
|
|
|
|
List<GuildTaskReachRecord> existRecords = guildTaskReachRecordService.listByCycle(cycleDate, partitionId, guildId, taskKey);
|
|
|
|
|
this.calProgress(partitionEnum, guild, taskLevelInfos, existRecords, resultList, cycleDate, statDate,
|
|
|
|
|
this.calWeekProgress(partitionEnum, guild, levelInfos, existRecords, resultList, cycleDate, statDate,
|
|
|
|
|
guildMemberNumMap, diamondMap, reachAnchorNumMap, now);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -223,6 +223,43 @@ public class GuildTaskService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void calWeekProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos,
|
|
|
|
|
List<GuildTaskReachRecord> existRecords, List<GuildTaskReachRecord> resultList,
|
|
|
|
|
String cycleDate, String statDate, Map<Integer, Long> guildMemberNumMap,
|
|
|
|
|
Map<Integer, BigDecimal> diamondMap, Map<Integer, Integer> reachAnchorNumMap, Date now) {
|
|
|
|
|
Integer guildId = guild.getId();
|
|
|
|
|
int partitionId = partitionEnum.getId();
|
|
|
|
|
BigDecimal diamond = diamondMap.getOrDefault(guildId, BigDecimal.ZERO);
|
|
|
|
|
Integer anchorReachNum = reachAnchorNumMap.getOrDefault(guildId, 0);
|
|
|
|
|
Long memberNum = guildMemberNumMap.getOrDefault(guildId, 0L);
|
|
|
|
|
Map<Integer, GuildTaskReachRecord> existRecordMap = existRecords.stream()
|
|
|
|
|
.filter(x -> x.getStatDate().equals(statDate) || x.getReachStatus() > 0)
|
|
|
|
|
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
|
|
|
|
|
for (GuildTaskLevelInfo levelInfo : taskLevelInfos) {
|
|
|
|
|
GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel());
|
|
|
|
|
if (CollectionUtils.isEmpty(existRecords) || existOne == null) {
|
|
|
|
|
this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId,
|
|
|
|
|
statDate, diamond, anchorReachNum, memberNum.intValue());
|
|
|
|
|
break;
|
|
|
|
|
} else if (statDate.equals(existOne.getStatDate()) && existOne.getReachStatus() <= 0) {
|
|
|
|
|
existOne.setDiamondNum(diamond);
|
|
|
|
|
existOne.setAnchorNum(memberNum.intValue());
|
|
|
|
|
existOne.setAnchorMicReachNum(anchorReachNum);
|
|
|
|
|
existOne.setLevel(levelInfo.getLevel());
|
|
|
|
|
existOne.setGuildTaskId(levelInfo.getGuildTaskId());
|
|
|
|
|
boolean reachStatus = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
|
|
|
|
&& memberNum >= levelInfo.getAnchorNum()
|
|
|
|
|
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
|
|
|
|
existOne.setReachStatus(reachStatus ? 1 : 0);
|
|
|
|
|
existOne.setUpdateTime(now);
|
|
|
|
|
resultList.add(existOne);
|
|
|
|
|
break;
|
|
|
|
|
} else if (statDate.equals(existOne.getStatDate()) && existOne.getReachStatus() > 0) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<GuildTaskLevelInfoVo> getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) {
|
|
|
|
|
List<GuildTaskLevelInfoVo> resultList = new ArrayList<>();
|
|
|
|
|