diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java index c5d9057a1..5a7b33ca8 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java @@ -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 listByCycle(String cycleDate, Integer partitionId, Integer guildId, String taskKey) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId) + .eq(GuildTaskReachRecord::getCycleDate, cycleDate) .eq(GuildTaskReachRecord::getGuildId, guildId) .eq(GuildTaskReachRecord::getTaskKey, taskKey); return baseMapper.selectList(wrapper); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java index c4c16bbb9..ed8d1af4c 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java @@ -81,7 +81,7 @@ public class GuildTaskService { List 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 taskLevelInfos, - List existRecords, List resultList, - String cycleDate, String statDate, Map guildMemberNumMap, - Map diamondMap, Map reachAnchorNumMap, Date now) { + private void calCreateProgress(PartitionEnum partitionEnum, Guild guild, List taskLevelInfos, + List existRecords, List resultList, + String cycleDate, String statDate, Map guildMemberNumMap, + Map diamondMap, Map 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 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 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 guilds = guildService.listVaildGuildByPartitionId(partitionId); if (CollectionUtils.isEmpty(guilds)) { @@ -214,7 +214,7 @@ public class GuildTaskService { for (Guild guild : guilds) { Integer guildId = guild.getId(); List 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 taskLevelInfos, + List existRecords, List resultList, + String cycleDate, String statDate, Map guildMemberNumMap, + Map diamondMap, Map 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 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 getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) { List resultList = new ArrayList<>(); diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java index ef7dd6b56..03a1b311a 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java @@ -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)); } } diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java index 27120b5bf..db764f7e5 100644 --- a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java @@ -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");