公会开业任务定时任务优化
This commit is contained in:
@@ -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<>();
|
||||
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user