日常任务-上麦

This commit is contained in:
2025-08-26 19:06:37 +08:00
parent 5b4f0efe2e
commit a869b3846d
2 changed files with 46 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
package com.accompany.business.service.dailytask.handler;
import com.accompany.business.constant.dailytask.DailyTaskConstant;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
@@ -8,11 +9,14 @@ import com.accompany.business.vo.dailytask.DailyProgressContext;
import com.accompany.business.vo.dailytask.DailyTaskContext;
import com.accompany.business.vo.dailytask.DailyTaskVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RBucket;
import org.redisson.api.RList;
import org.redisson.api.RMap;
import org.redisson.codec.TypedJsonJacksonCodec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -37,9 +41,6 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
@Override
public void doExecuteProgress(DailyProgressContext progressContext) {
// Long uid = progressContext.getUid();
// Integer partitionId = progressContext.getPartitionId();
// String todayDate = getTodayDate(partitionId, progressContext.getCreateTime());
}
@Override
@@ -61,35 +62,65 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
totalDuration += upMicDuration.getOrDefault(todayDate, 0);
}
}
String mondayDate = getMondayDate(context.getPartitionId(), new Date());
dailyTaskVo.setTodayDate(mondayDate);
if (totalDuration >= dailyTaskVo.getStandardValue()) {
taskStatus(uid, todayDate, taskType).set(1, Duration.ofDays(1));
getIpCache(todayDate).add(deviceId);
getIpCache(todayDate).add(realIpAddress);
taskStatus(uid, mondayDate, taskType).set(1, Duration.ofDays(1));
}
dailyTaskVo.setReachNum(totalDuration);
dailyTaskVo.setReceiveStatus(computeReceiveStatus(uid, todayDate, taskType));
DailyTaskConstant.ReceiveStatus receiveStatus = computeReceiveStatus(uid, mondayDate, taskType);
dailyTaskVo.setReceiveStatus(receiveStatus);
if (receiveStatus == DailyTaskConstant.ReceiveStatus.RECEIVED) {
return dailyTaskVo;
}
Long receivUid = getIpCache(mondayDate).getOrDefault(realIpAddress, 0L);
if (receivUid > 0 && !receivUid.equals(uid)) {
return null;
}
receivUid = getDeveiceCache(mondayDate).getOrDefault(deviceId, 0L);
if (receivUid > 0 && !receivUid.equals(uid)) {
return null;
}
return dailyTaskVo;
}
@Override
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress) {
Long receivUid = getIpCache(receiveDate).getOrDefault(realIpAddress, 0L);
if (receivUid > 0 && !receivUid.equals(uid)) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
receivUid = getDeveiceCache(receiveDate).getOrDefault(deviceId, 0L);
if (receivUid > 0 && !receivUid.equals(uid)) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
super.receive(uid, receiveDate, dailyTaskVo, deviceId, realIpAddress);
RMap<String, Long> deveiceCache = getDeveiceCache(receiveDate);
deveiceCache.put(deviceId, uid);
RMap<String, Long> ipCache = getIpCache(receiveDate);
ipCache.put(realIpAddress, uid);
deveiceCache.expire(Duration.ofDays(7));
ipCache.expire(Duration.ofDays(7));
return BusiResult.success();
}
@Override
public String getTodayDate(Integer partitionId, Date date) {
private String getMondayDate(Integer partitionId, Date date) {
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
return zonedDateTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
}
private RList<String> getIpCache(String monday) {
return redissonClient.getList(up_mic_coin_ip_limit.getKey(monday));
private RMap<String, Long> getIpCache(String monday) {
return redissonClient.getMap(up_mic_coin_ip_limit.getKey(monday), new TypedJsonJacksonCodec(String.class, Long.class));
}
private RList<String> getDeveiceCache(String monday) {
return redissonClient.getList(up_mic_coin_device_limit.getKey(monday));
private RMap<String, Long> getDeveiceCache(String monday) {
return redissonClient.getMap(up_mic_coin_device_limit.getKey(monday), new TypedJsonJacksonCodec(String.class, Long.class));
}
}