日常任务-优化代码

This commit is contained in:
2025-08-27 15:00:16 +08:00
parent 8bab25c084
commit 0165dd10ee
4 changed files with 36 additions and 18 deletions

View File

@@ -55,9 +55,10 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
@Override
public DailyTaskVo handle(DailyTaskContext context){
String todayDate = this.getTodayDate(context.getPartitionId(), new Date());
String todayDate = this.getTaskDate(context.getPartitionId(), new Date());
context.setTodayDate(todayDate);
context.getDailyTaskVo().setTodayDate(todayDate);
context.getDailyTaskVo().setPartitionId(context.getPartitionId());
return this.doHandle(context);
}
@@ -98,11 +99,11 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
*/
@Override
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress) {
Users users = usersService.getUsersByUid(uid);
DailyTaskTypeEnum dailyTaskTypeEnum = dailyTaskVo.getTaskType();
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, users.getPartitionId(), deviceId, realIpAddress);
this.handle(dailyTaskContext);
Integer partitionId = dailyTaskVo.getPartitionId();
if (dailyTaskVo == null) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
if (!dailyTaskVo.getTodayDate().equals(receiveDate)) {
throw new ServiceException(BusiStatus.DAILY_RECEIVE_EXPIRE);
}
@@ -111,7 +112,7 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
throw new ServiceException(BusiStatus.DAILY_TASK_UNCOMPLETED);
}
Integer receiveStatus = receiveStatus(uid, receiveDate, dailyTaskTypeEnum)
.getAndSet(1, Duration.ofDays(EXPIRE_DAY));
.getAndSet(1, Duration.ofDays(getReceiveExpireDay()));
if (receiveStatus != null) {
throw new ServiceException(BusiStatus.DAILY_RECEIVE_EXIST);
}
@@ -126,9 +127,12 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
guildMemberId = guildMember.getId();
guildId = guildMember.getGuildId();
}
if (dailyTaskTypeEnum.equals(DailyTaskTypeEnum.UP_MIC_COIN)) { //上麦领金币的日期为周期
receiveDate = getNowDate(partitionId, new Date());
}
for (DailyTaskReward configReward : dailyTaskVo.getConfigRewards()) {
dailyTaskRewardRecordService.addRecord(configReward.getTaskConfigId(), dailyTaskVo.getTaskType().name(),
uid, users.getPartitionId(), guildId, guildMemberId, configReward.getAwardType(),
uid, partitionId, guildId, guildMemberId, configReward.getAwardType(),
configReward.getAwardId(), configReward.getAwardNum(), receiveDate);
if (RewardTypeEnum.GOLDBEAN.getType().equals(configReward.getAwardType())) {
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(configReward.getAwardNum()), GoldBeanBillType.TASK_GAIN,
@@ -143,7 +147,13 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
}
@Override
public String getTodayDate(Integer partitionId, Date date) {
public String getTaskDate(Integer partitionId, Date date) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
return zonedDateTime.format(DateTimeUtil.dateFormatter);
}
protected String getNowDate(Integer partitionId, Date date) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
return zonedDateTime.format(DateTimeUtil.dateFormatter);
@@ -181,4 +191,8 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
return redissonClient.getBucket(task_status.getKey(uid.toString(), dailyTaskTypeEnum.name(),
todayDate.replaceAll("-", "")), IntegerCodec.INSTANCE);
}
protected Integer getReceiveExpireDay() {
return EXPIRE_DAY;
}
}

View File

@@ -20,5 +20,5 @@ public interface DailyTaskHandler {
BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress);
String getTodayDate(Integer partitionId, Date date);
String getTaskDate(Integer partitionId, Date date);
}

View File

@@ -86,6 +86,8 @@ public class DailyTaskService {
if (handler == null || StringUtils.isEmpty(todayDate) || uid == null) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, dailyTaskVo.getPartitionId(), deviceId, realIpAddress);
dailyTaskVo = handler.handle(dailyTaskContext);
return handler.receive(uid, todayDate, dailyTaskVo, deviceId, realIpAddress);
}
@@ -177,6 +179,7 @@ public class DailyTaskService {
taskConfigId(dailyTaskConfig.getTaskConfigId()).
taskType(DailyTaskTypeEnum.valueOf(dailyTaskConfig.getTaskKey())).
standardValue(dailyTaskConfig.getReachNum())
.partitionId(dailyTaskConfig.getPartitionId())
.build();
resultList.add(dailyTaskVo);
} catch (Exception e) {
@@ -224,6 +227,7 @@ public class DailyTaskService {
taskConfigId(dailyTaskConfig.getTaskConfigId()).
taskType(DailyTaskTypeEnum.valueOf(dailyTaskConfig.getTaskKey())).
standardValue(dailyTaskConfig.getReachNum())
.partitionId(dailyTaskConfig.getPartitionId())
.build();
Map<Integer, List<DailyTaskReward>> taskRewardMap = dailyTaskRewardService.mapByTaskConfigId(Arrays.asList(taskConfigId));

View File

@@ -75,7 +75,7 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
}
dailyTaskVo.setTodayDate(mondayDate);
if (totalDuration != null && totalDuration >= dailyTaskVo.getStandardValue()) {
taskStatus.set(totalDuration, Duration.ofDays(1));
taskStatus.set(totalDuration, Duration.ofDays(getReceiveExpireDay()));
}
DailyTaskConstant.ReceiveStatus receiveStatus = computeReceiveStatus(uid, mondayDate, taskType);
dailyTaskVo.setReceiveStatus(receiveStatus);
@@ -103,24 +103,19 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
deveiceCache.put(deviceId, uid);
RMap<String, Long> ipCache = getIpCache(receiveDate);
ipCache.put(realIpAddress, uid);
deveiceCache.expire(Duration.ofDays(7));
ipCache.expire(Duration.ofDays(7));
deveiceCache.expire(Duration.ofDays(getReceiveExpireDay()));
ipCache.expire(Duration.ofDays(getReceiveExpireDay()));
return BusiResult.success();
}
@Override
public String getTodayDate(Integer partitionId, Date date) {
public String getTaskDate(Integer partitionId, Date date) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
return zonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
}
private String getNowDate(Integer partitionId, Date date) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
return zonedDateTime.format(DateTimeUtil.dateFormatter);
}
private RMap<String, Long> getIpCache(String monday) {
return redissonClient.getMap(up_mic_coin_ip_limit.getKey(monday), new TypedJsonJacksonCodec(String.class, Long.class));
@@ -129,5 +124,10 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
private RMap<String, Long> getDeveiceCache(String monday) {
return redissonClient.getMap(up_mic_coin_device_limit.getKey(monday), new TypedJsonJacksonCodec(String.class, Long.class));
}
@Override
protected Integer getReceiveExpireDay() {
return 7;
}
}