日常任务-公会活动进度定时任务fixed
This commit is contained in:
@@ -7,6 +7,7 @@ import com.accompany.business.mybatismapper.guild.GuildDiamondStatisticsDayMappe
|
|||||||
import com.accompany.business.vo.guild.GuildDiamondStatisticsDayVo;
|
import com.accompany.business.vo.guild.GuildDiamondStatisticsDayVo;
|
||||||
import com.accompany.business.vo.guild.GuildInfoVo;
|
import com.accompany.business.vo.guild.GuildInfoVo;
|
||||||
import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo;
|
import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo;
|
||||||
|
import com.accompany.core.enumeration.PartitionEnum;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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) {
|
public int updateDayDiamondStatistics(String cycleDate, String statDate, GuildMember guildMember, double diamond) {
|
||||||
Date time = new Date();
|
Date time = new Date();
|
||||||
int updated = baseMapper.updateDayDiamondStatistics(cycleDate, statDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time);
|
int updated = baseMapper.updateDayDiamondStatistics(cycleDate, statDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time);
|
||||||
this.guildStatDateDiamondMap(guildMember.getPartitionId(), statDate)
|
if (PartitionEnum.ENGLISH2.getId() == guildMember.getPartitionId()) {
|
||||||
.put(guildMember.getGuildId(), BigDecimal.valueOf(diamond));
|
this.guildStatDateDiamondMap(guildMember.getPartitionId(), statDate)
|
||||||
|
.addAndGet(guildMember.getGuildId(), BigDecimal.valueOf(diamond));
|
||||||
|
}
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ public class GuildTaskReachRecordService extends ServiceImpl<GuildTaskReachRecor
|
|||||||
public List<GuildTaskReachRecord> listByCycle(String cycleDate, Integer partitionId, Integer guildId, String taskKey) {
|
public List<GuildTaskReachRecord> listByCycle(String cycleDate, Integer partitionId, Integer guildId, String taskKey) {
|
||||||
LambdaQueryWrapper<GuildTaskReachRecord> wrapper = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<GuildTaskReachRecord> wrapper = Wrappers.lambdaQuery();
|
||||||
wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId)
|
wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId)
|
||||||
|
.eq(GuildTaskReachRecord::getCycleDate, cycleDate)
|
||||||
.eq(GuildTaskReachRecord::getGuildId, guildId)
|
.eq(GuildTaskReachRecord::getGuildId, guildId)
|
||||||
.eq(GuildTaskReachRecord::getTaskKey, taskKey);
|
.eq(GuildTaskReachRecord::getTaskKey, taskKey);
|
||||||
return baseMapper.selectList(wrapper);
|
return baseMapper.selectList(wrapper);
|
||||||
|
@@ -81,7 +81,7 @@ public class GuildTaskService {
|
|||||||
List<GuildTaskReachRecord> existRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey);
|
List<GuildTaskReachRecord> existRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey);
|
||||||
String cycleDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId())
|
String cycleDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId())
|
||||||
.format(DateTimeUtil.dateFormatter);
|
.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);
|
guildMemberNumMap, diamondMap, reachAnchorNumMap, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,15 +90,18 @@ public class GuildTaskService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos,
|
private void calCreateProgress(PartitionEnum partitionEnum, Guild guild, List<GuildTaskLevelInfo> taskLevelInfos,
|
||||||
List<GuildTaskReachRecord> existRecords, List<GuildTaskReachRecord> resultList,
|
List<GuildTaskReachRecord> existRecords, List<GuildTaskReachRecord> resultList,
|
||||||
String cycleDate, String statDate, Map<Integer, Long> guildMemberNumMap,
|
String cycleDate, String statDate, Map<Integer, Long> guildMemberNumMap,
|
||||||
Map<Integer, BigDecimal> diamondMap, Map<Integer, Integer> reachAnchorNumMap, Date now) {
|
Map<Integer, BigDecimal> diamondMap, Map<Integer, Integer> reachAnchorNumMap, Date now) {
|
||||||
Integer guildId = guild.getId();
|
Integer guildId = guild.getId();
|
||||||
int partitionId = partitionEnum.getId();
|
int partitionId = partitionEnum.getId();
|
||||||
BigDecimal diamond = diamondMap.getOrDefault(guildId, BigDecimal.ZERO);
|
BigDecimal diamond = diamondMap.getOrDefault(guildId, BigDecimal.ZERO);
|
||||||
Integer anchorReachNum = reachAnchorNumMap.getOrDefault(guildId, 0);
|
Integer anchorReachNum = reachAnchorNumMap.getOrDefault(guildId, 0);
|
||||||
Long memberNum = guildMemberNumMap.getOrDefault(guildId, 0L);
|
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) {
|
for (GuildTaskLevelInfo levelInfo : taskLevelInfos) {
|
||||||
if (CollectionUtils.isEmpty(existRecords)) {
|
if (CollectionUtils.isEmpty(existRecords)) {
|
||||||
boolean calNext = this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId,
|
boolean calNext = this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId,
|
||||||
@@ -107,28 +110,25 @@ public class GuildTaskService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Map<Integer, GuildTaskReachRecord> existRecordMap = existRecords.stream()
|
|
||||||
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
|
|
||||||
|
|
||||||
GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel());
|
GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel());
|
||||||
if (existOne != null) {
|
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,
|
this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId, statDate,
|
||||||
diamond, anchorReachNum, memberNum.intValue());
|
diamond, anchorReachNum, memberNum.intValue());
|
||||||
} else if (statDate.equals(existOne.getStatDate())) {
|
} else if (statDate.equals(existOne.getStatDate())) {
|
||||||
existOne.setDiamondNum(levelInfo.getDiamondNum());
|
existOne.setDiamondNum(diamond);
|
||||||
existOne.setAnchorNum(levelInfo.getAnchorNum());
|
existOne.setAnchorNum(memberNum.intValue());
|
||||||
existOne.setAnchorMicReachNum(levelInfo.getAnchorMicReachNum());
|
existOne.setAnchorMicReachNum(anchorReachNum);
|
||||||
existOne.setLevel(levelInfo.getLevel());
|
existOne.setLevel(levelInfo.getLevel());
|
||||||
existOne.setGuildTaskId(levelInfo.getGuildTaskId());
|
existOne.setGuildTaskId(levelInfo.getGuildTaskId());
|
||||||
boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
boolean reachStatus = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
||||||
&& memberNum >= levelInfo.getAnchorNum()
|
&& memberNum >= levelInfo.getAnchorNum()
|
||||||
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
||||||
existOne.setReachStatus(calNext ? 1 : 0);
|
existOne.setReachStatus(reachStatus ? 1 : 0);
|
||||||
existOne.setUpdateTime(now);
|
existOne.setUpdateTime(now);
|
||||||
resultList.add(existOne);
|
resultList.add(existOne);
|
||||||
if (!calNext) {
|
if (!reachStatus) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,13 +157,13 @@ public class GuildTaskService {
|
|||||||
reachRecord.setDiamondNum(diamond);
|
reachRecord.setDiamondNum(diamond);
|
||||||
reachRecord.setAnchorNum(memberNum);
|
reachRecord.setAnchorNum(memberNum);
|
||||||
reachRecord.setAnchorMicReachNum(anchorReachNum);
|
reachRecord.setAnchorMicReachNum(anchorReachNum);
|
||||||
boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
boolean reachStatus = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue()
|
||||||
&& memberNum >= levelInfo.getAnchorNum()
|
&& memberNum >= levelInfo.getAnchorNum()
|
||||||
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
&& anchorReachNum >= levelInfo.getAnchorMicReachNum();
|
||||||
reachRecord.setReachStatus(calNext ? 1 : 0);
|
reachRecord.setReachStatus(reachStatus ? 1 : 0);
|
||||||
reachRecord.setCreateTime(new Date());
|
reachRecord.setCreateTime(new Date());
|
||||||
resultList.add(reachRecord);
|
resultList.add(reachRecord);
|
||||||
if (!calNext) { //当前登记未达到,不再计算下一登记
|
if (!reachStatus) { //当前登记未达到,不再计算下一登记
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -186,7 +186,7 @@ public class GuildTaskService {
|
|||||||
String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter);
|
String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter);
|
||||||
|
|
||||||
ZonedDateTime weekBegin = nowzonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
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);
|
List<Guild> guilds = guildService.listVaildGuildByPartitionId(partitionId);
|
||||||
if (CollectionUtils.isEmpty(guilds)) {
|
if (CollectionUtils.isEmpty(guilds)) {
|
||||||
@@ -214,7 +214,7 @@ public class GuildTaskService {
|
|||||||
for (Guild guild : guilds) {
|
for (Guild guild : guilds) {
|
||||||
Integer guildId = guild.getId();
|
Integer guildId = guild.getId();
|
||||||
List<GuildTaskReachRecord> existRecords = guildTaskReachRecordService.listByCycle(cycleDate, partitionId, guildId, taskKey);
|
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);
|
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) {
|
public List<GuildTaskLevelInfoVo> getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) {
|
||||||
List<GuildTaskLevelInfoVo> resultList = new ArrayList<>();
|
List<GuildTaskLevelInfoVo> resultList = new ArrayList<>();
|
||||||
|
@@ -102,6 +102,6 @@ public class DailyTaskController {
|
|||||||
@ApiOperation(value = "每周任务执行", ignoreJsonView = true)
|
@ApiOperation(value = "每周任务执行", ignoreJsonView = true)
|
||||||
@GetMapping("/executeTaskWeek")
|
@GetMapping("/executeTaskWeek")
|
||||||
public void executeTaskWeek(String date, Integer partitionId) {
|
public void executeTaskWeek(String date, Integer partitionId) {
|
||||||
guildTaskService.updateTaskCreateProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId));
|
guildTaskService.updateWeekTaskProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,7 +16,7 @@ public class GuildCreateTask {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private GuildTaskService guildTaskService;
|
private GuildTaskService guildTaskService;
|
||||||
|
|
||||||
@Scheduled(cron = "0 0/10 * * * ?")
|
@Scheduled(cron = "0 0/5 * * * ?")
|
||||||
public void guildCreateTaskByMinutes() {
|
public void guildCreateTaskByMinutes() {
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
log.info("GuildCreateTaskByMinutes start");
|
log.info("GuildCreateTaskByMinutes start");
|
||||||
|
Reference in New Issue
Block a user