日常任务-公会活动进度定时任务fixed

This commit is contained in:
2025-09-02 15:16:24 +08:00
parent 0e3615b252
commit c9c35639e7
5 changed files with 65 additions and 24 deletions

View File

@@ -7,6 +7,7 @@ import com.accompany.business.mybatismapper.guild.GuildDiamondStatisticsDayMappe
import com.accompany.business.vo.guild.GuildDiamondStatisticsDayVo;
import com.accompany.business.vo.guild.GuildInfoVo;
import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo;
import com.accompany.core.enumeration.PartitionEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -43,8 +44,10 @@ public class GuildDiamondStatisticsDayServiceImpl extends ServiceImpl<GuildDiamo
public int updateDayDiamondStatistics(String cycleDate, String statDate, GuildMember guildMember, double diamond) {
Date time = new Date();
int updated = baseMapper.updateDayDiamondStatistics(cycleDate, statDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time);
this.guildStatDateDiamondMap(guildMember.getPartitionId(), statDate)
.put(guildMember.getGuildId(), BigDecimal.valueOf(diamond));
if (PartitionEnum.ENGLISH2.getId() == guildMember.getPartitionId()) {
this.guildStatDateDiamondMap(guildMember.getPartitionId(), statDate)
.addAndGet(guildMember.getGuildId(), BigDecimal.valueOf(diamond));
}
return updated;
}

View File

@@ -29,6 +29,7 @@ public class GuildTaskReachRecordService extends ServiceImpl<GuildTaskReachRecor
public List<GuildTaskReachRecord> listByCycle(String cycleDate, Integer partitionId, Integer guildId, String taskKey) {
LambdaQueryWrapper<GuildTaskReachRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId)
.eq(GuildTaskReachRecord::getCycleDate, cycleDate)
.eq(GuildTaskReachRecord::getGuildId, guildId)
.eq(GuildTaskReachRecord::getTaskKey, taskKey);
return baseMapper.selectList(wrapper);

View File

@@ -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<>();

View File

@@ -102,6 +102,6 @@ public class DailyTaskController {
@ApiOperation(value = "每周任务执行", ignoreJsonView = true)
@GetMapping("/executeTaskWeek")
public void executeTaskWeek(String date, Integer partitionId) {
guildTaskService.updateTaskCreateProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId));
guildTaskService.updateWeekTaskProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId));
}
}

View File

@@ -16,7 +16,7 @@ public class GuildCreateTask {
@Autowired
private GuildTaskService guildTaskService;
@Scheduled(cron = "0 0/10 * * * ?")
@Scheduled(cron = "0 0/5 * * * ?")
public void guildCreateTaskByMinutes() {
Date now = new Date();
log.info("GuildCreateTaskByMinutes start");