日常任务-上麦
This commit is contained in:
@@ -980,6 +980,7 @@ public enum BusiStatus {
|
||||
GUILD_H5_INVITE_JOIN_GUILD_NOT_EXIST(33002, "邀请人公会不存在"),
|
||||
DAILY_TASK_LIMIT(500, "ACCESS DENIED"),
|
||||
ROOM_DAY_DIAMOND_REWARD_RECV_RECORD_EXIST(500, "RECEIVED"),
|
||||
DAILY_TASK_RECEIVE_END(500, "RECEIVED EXPIRE"),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user