公会开业任务定时任务优化

This commit is contained in:
2025-09-15 14:11:16 +08:00
parent b6f39a5fbb
commit d9a738ecdc
3 changed files with 33 additions and 51 deletions

View File

@@ -29,6 +29,7 @@ import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.util.I18NMessageSourceUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
@@ -47,6 +48,7 @@ import java.util.stream.Collectors;
import static com.accompany.business.constant.dailytask.DailyTaskConstant.RedisKey.guild_task_receive;
@Slf4j
@Service
public class GuildTaskService {
@Autowired
@@ -74,14 +76,7 @@ public class GuildTaskService {
@Autowired
private RedissonClient redissonClient;
public void updateTaskCreateProgress(Date now, PartitionEnum partitionEnum) {
int partitionId = partitionEnum.getId();
String taskKey = DailyTaskTypeEnum.GUILD_CREATE.name();
List<GuildTaskLevelInfo> taskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey);
if (CollectionUtils.isEmpty(taskLevelInfos)) {
return;
}
public void updateProgress(Date now, PartitionEnum partitionEnum) {
ZonedDateTime nowzonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
if (nowzonedDateTime.getHour() == 0 && nowzonedDateTime.getMinute() == 0) {//0点0分统计前一天的数据
@@ -89,6 +84,30 @@ public class GuildTaskService {
}
String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter);
RMap<Integer, BigDecimal> guildStatDateDiamondMap = guildDiamondStatisticsDayService.guildStatDateDiamondMap(partitionEnum.getId(), statDate);
guildStatDateDiamondMap.expire(Duration.ofDays(1));
Map<Integer, BigDecimal> diamondMap = guildStatDateDiamondMap.readAllMap();
try {
updateTaskCreateProgress(now, partitionEnum, nowzonedDateTime, statDate, diamondMap);
} catch (Exception e) {
log.error("updateTaskCreateProgress error:{}" , e.getMessage(), e);
}
try {
updateWeekTaskProgress(now, partitionEnum, nowzonedDateTime, statDate, diamondMap);
} catch (Exception e) {
log.error("updateWeekTaskProgress error:{}" , e.getMessage(), e);
}
}
public void updateTaskCreateProgress(Date now, PartitionEnum partitionEnum, ZonedDateTime nowzonedDateTime, String statDate, Map<Integer, BigDecimal> diamondMap) {
int partitionId = partitionEnum.getId();
String taskKey = DailyTaskTypeEnum.GUILD_CREATE.name();
List<GuildTaskLevelInfo> taskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey);
if (CollectionUtils.isEmpty(taskLevelInfos)) {
return;
}
ZonedDateTime before14DayBegin = nowzonedDateTime.minusDays(14).withHour(0).withMinute(0).withSecond(0);
Date before14DayBeginEastEightDate = DateTimeUtil.convertToEastEightZone(before14DayBegin
.format(DateTimeUtil.datetimeFormatter), partitionEnum.getZoneId());
@@ -99,10 +118,6 @@ public class GuildTaskService {
}
Set<Integer> guildIds = guilds.stream().map(Guild::getId).collect(Collectors.toSet());
Map<Integer, Long> guildMemberNumMap = guildMemberService.mapGuildMemberNum(guildIds);
RMap<Integer, BigDecimal> guildStatDateDiamondMap = guildDiamondStatisticsDayService.guildStatDateDiamondMap(partitionId, statDate);
guildStatDateDiamondMap.expire(Duration.ofDays(1));
Map<Integer, BigDecimal> diamondMap = guildStatDateDiamondMap
.getAll(guildIds);
List<GuildTaskReachRecord> resultList = new ArrayList<>();
Integer maxReachMinutes = taskLevelInfos.stream().max(Comparator.comparing(GuildTaskLevelInfo::getAnchorMicReachMinutes))
@@ -120,6 +135,7 @@ public class GuildTaskService {
guildTaskReachRecordService.saveOrUpdateBatch(resultList);
}
}
@Async
public void calCreateProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos, List<GuildTaskReachRecord> resultList,
String statDate, Map<Integer, Long> guildMemberNumMap, Map<Integer, BigDecimal> diamondMap,
@@ -174,7 +190,7 @@ public class GuildTaskService {
}
}
public void updateWeekTaskProgress(Date now, PartitionEnum partitionEnum) {
public void updateWeekTaskProgress(Date now, PartitionEnum partitionEnum, ZonedDateTime nowzonedDateTime, String statDate, Map<Integer, BigDecimal> diamondMap) {
int partitionId = partitionEnum.getId();
@@ -184,12 +200,6 @@ public class GuildTaskService {
return;
}
ZonedDateTime nowzonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
if (nowzonedDateTime.getHour() == 0 && nowzonedDateTime.getMinute() == 0) {//0点0分统计前一天的数据
nowzonedDateTime = nowzonedDateTime.minusDays(1);
}
String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter);
ZonedDateTime weekBegin = nowzonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
String cycleDate = weekBegin.format(DateTimeUtil.dateFormatter);
@@ -199,9 +209,6 @@ public class GuildTaskService {
}
Set<Integer> guildIds = guilds.stream().map(Guild::getId).collect(Collectors.toSet());
Map<Integer, Long> guildMemberNumMap = guildMemberService.mapGuildMemberNum(guildIds);
RMap<Integer, BigDecimal> guildStatDateDiamondMap = guildDiamondStatisticsDayService.guildStatDateDiamondMap(partitionId, statDate);
guildStatDateDiamondMap.expire(Duration.ofDays(1));
Map<Integer, BigDecimal> diamondMap = guildStatDateDiamondMap.getAll(guildIds);
List<GuildTaskReachRecord> resultList = new ArrayList<>();

View File

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

View File

@@ -19,27 +19,8 @@ public class GuildCreateTask {
@Scheduled(cron = "0 0/5 * * * ?")
public void guildCreateTaskByMinutes() {
Date now = new Date();
log.info("GuildCreateTaskByMinutes start");
PartitionEnum[] values = PartitionEnum.values();
for (PartitionEnum partitionEnum : values) {
try {
guildTaskService.updateTaskCreateProgress(now, partitionEnum);
} catch (Exception e) {
log.error("GuildCreateTaskByMinutes error:{}" , e.getMessage(), e);
}
}
log.info("GuildCreateTaskByMinutes end");
log.info("GuildWeekTaskByMinutes start");
for (PartitionEnum partitionEnum : values) {
try {
guildTaskService.updateWeekTaskProgress(now, partitionEnum);
} catch (Exception e) {
log.error("GuildWeekTaskByMinutes error:{}" , e.getMessage(), e);
}
}
log.info("GuildWeekTaskByMinutes end");
log.info("GuildTaskByMinutes start");
guildTaskService.updateProgress(now, PartitionEnum.ENGLISH2);
log.info("GuildTaskByMinutes end");
}
}