日常任务-公会周奖励数据

This commit is contained in:
2025-08-26 18:43:04 +08:00
parent 3eb4c280b0
commit 5b4f0efe2e
12 changed files with 129 additions and 27 deletions

View File

@@ -18,6 +18,9 @@ public interface DailyTaskConstant {
play_game,//游戏种类 play_game,//游戏种类
recv_gold_num,//收礼金币 recv_gold_num,//收礼金币
task_config,//任务配置 task_config,//任务配置
up_mic_coin_ip_limit,//主播上麦领取ip限制
up_mic_coin_uid_limit,//主播上麦领取ip限制
up_mic_coin_device_limit,//主播上麦领取设备限制
; ;
@Override @Override

View File

@@ -15,7 +15,7 @@ public enum DailyTaskTypeEnum {
RECV_NOMAL_GIFT_GOLD("RECV_NOMAL_GIFT_GOLD"),//收到礼物(价值超过2w金币) RECV_NOMAL_GIFT_GOLD("RECV_NOMAL_GIFT_GOLD"),//收到礼物(价值超过2w金币)
UP_MIC_COIN("UP_MIC_COIN"),//上麦聊天(获得金币) UP_MIC_COIN("UP_MIC_COIN"),//上麦聊天(获得金币)
ROOM_DAY_DIAMOND("ROOM_DAY_DIAMOND"),//房间日流水奖励 ROOM_DAY_DIAMOND("ROOM_DAY_DIAMOND"),//房间日流水奖励
GUILD_WEEK_REWARD(""),//公会周奖励 GUILD_WEEK_REWARD("GUILD_WEEK_REWARD"),//公会周奖励
; ;
private String handlerType; private String handlerType;

View File

@@ -8,10 +8,14 @@ public class DailyTaskContext {
private final DailyTaskVo dailyTaskVo; private final DailyTaskVo dailyTaskVo;
private String todayDate; private String todayDate;
private Integer partitionId; private Integer partitionId;
private String deviceId;
private String realIpAddress;
public DailyTaskContext(Long uid, DailyTaskVo dailyTaskVo, Integer partitionId) { public DailyTaskContext(Long uid, DailyTaskVo dailyTaskVo, Integer partitionId, String deviceId, String realIpAddress) {
this.uid = uid; this.uid = uid;
this.dailyTaskVo = dailyTaskVo; this.dailyTaskVo = dailyTaskVo;
this.partitionId = partitionId; this.partitionId = partitionId;
this.deviceId = deviceId;
this.realIpAddress = realIpAddress;
} }
} }

View File

@@ -3,6 +3,7 @@ package com.accompany.business.vo.dailytask;
import com.accompany.business.constant.dailytask.DailyTaskConstant; import com.accompany.business.constant.dailytask.DailyTaskConstant;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.model.dailytask.DailyTaskReward; import com.accompany.business.model.dailytask.DailyTaskReward;
import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardItemVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -33,4 +34,5 @@ public class DailyTaskVo {
private List<DailyTaskReward> configRewards; private List<DailyTaskReward> configRewards;
@ApiModelProperty("房间流水奖励") @ApiModelProperty("房间流水奖励")
private DailyTaskRoomDiamondVo diamondVo; private DailyTaskRoomDiamondVo diamondVo;
private List<GuildMemberWeekLevelRewardItemVo> guildWeekRewardItems;
} }

View File

@@ -87,10 +87,10 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
* @return * @return
*/ */
@Override @Override
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo) { public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress) {
Users users = usersService.getUsersByUid(uid); Users users = usersService.getUsersByUid(uid);
DailyTaskTypeEnum dailyTaskTypeEnum = dailyTaskVo.getTaskType(); DailyTaskTypeEnum dailyTaskTypeEnum = dailyTaskVo.getTaskType();
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, users.getPartitionId()); DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, users.getPartitionId(), deviceId, realIpAddress);
this.handle(dailyTaskContext); this.handle(dailyTaskContext);
if (!dailyTaskVo.getTodayDate().equals(receiveDate)) { if (!dailyTaskVo.getTodayDate().equals(receiveDate)) {

View File

@@ -18,7 +18,7 @@ public interface DailyTaskHandler {
DailyTaskVo doHandle(DailyTaskContext context); DailyTaskVo doHandle(DailyTaskContext context);
BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo); BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress);
String getTodayDate(Integer partitionId, Date date); String getTodayDate(Integer partitionId, Date date);
} }

View File

@@ -30,8 +30,6 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import static com.accompany.business.constant.dailytask.DailyTaskTypeEnum.GUILD_WEEK_REWARD;
@Slf4j @Slf4j
@Service @Service
@@ -57,9 +55,9 @@ public class DailyTaskService {
@Autowired @Autowired
private UsersService usersService; private UsersService usersService;
public DailyTaskVo executeDailyTask(DailyTaskVo dailyTaskVo, Long uid, Integer partitionId) { public DailyTaskVo executeDailyTask(DailyTaskVo dailyTaskVo, Long uid, Integer partitionId, String deviceId, String realIpAddress) {
DailyTaskHandler handler = taskHandlerRegistry.getHandler(dailyTaskVo.getTaskType().getHandlerType()); DailyTaskHandler handler = taskHandlerRegistry.getHandler(dailyTaskVo.getTaskType().getHandlerType());
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, partitionId); DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, partitionId, deviceId, realIpAddress);
return handler.handle(dailyTaskContext); return handler.handle(dailyTaskContext);
} }
@@ -81,14 +79,14 @@ public class DailyTaskService {
* @param todayDate * @param todayDate
* @return * @return
*/ */
public BusiResult executeReceive(Integer taskConfigId, Long uid, String todayDate) { public BusiResult executeReceive(Integer taskConfigId, Long uid, String todayDate, String deviceId, String realIpAddress) {
DailyTaskVo dailyTaskVo = this.taskVo(taskConfigId, uid); DailyTaskVo dailyTaskVo = this.taskVo(taskConfigId, uid);
DailyTaskTypeEnum taskType = dailyTaskVo.getTaskType(); DailyTaskTypeEnum taskType = dailyTaskVo.getTaskType();
DailyTaskHandler handler = taskHandlerRegistry.getHandler(taskType.getHandlerType()); DailyTaskHandler handler = taskHandlerRegistry.getHandler(taskType.getHandlerType());
if (handler == null || StringUtils.isEmpty(todayDate) || uid == null) { if (handler == null || StringUtils.isEmpty(todayDate) || uid == null) {
throw new ServiceException(BusiStatus.PARAMERROR); throw new ServiceException(BusiStatus.PARAMERROR);
} }
return handler.receive(uid, todayDate, dailyTaskVo); return handler.receive(uid, todayDate, dailyTaskVo, deviceId, realIpAddress);
} }
public BusiResult<List<DailyTaskTabVo>> taskTab(Long uid) { public BusiResult<List<DailyTaskTabVo>> taskTab(Long uid) {
@@ -118,7 +116,7 @@ public class DailyTaskService {
* @param uid * @param uid
* @return * @return
*/ */
public List<DailyTaskVo> tasks(Long uid, Integer taskTabType) { public List<DailyTaskVo> tasks(Long uid, Integer taskTabType, String deviceId, String realIpAddress) {
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid); GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
List<Byte> taskRole = Stream.of((byte)0) List<Byte> taskRole = Stream.of((byte)0)
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -149,14 +147,15 @@ public class DailyTaskService {
return dailyTaskVos; return dailyTaskVos;
} }
List<DailyTaskVo> executeDailyTaskList = new ArrayList<>();
dailyTaskVos.stream().forEach(dailyTaskVo -> { dailyTaskVos.stream().forEach(dailyTaskVo -> {
if (GUILD_WEEK_REWARD.equals(dailyTaskVo.getTaskType())) { DailyTaskVo taskVo = executeDailyTask(dailyTaskVo, uid, partitionId, deviceId, realIpAddress);
return; if (taskVo != null) {
executeDailyTaskList.add(taskVo);
} }
executeDailyTask(dailyTaskVo, uid, partitionId);
}); });
return dailyTaskVos; return executeDailyTaskList;
} }
public List<DailyTaskVo> taskVoList(Integer partitionId, Integer taskTabType, List<Byte> taskRole, Long uid) { public List<DailyTaskVo> taskVoList(Integer partitionId, Integer taskTabType, List<Byte> taskRole, Long uid) {

View File

@@ -0,0 +1,56 @@
package com.accompany.business.service.dailytask.handler;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildMemberWeekLevelRewardService;
import com.accompany.business.vo.dailytask.DailyProgressContext;
import com.accompany.business.vo.dailytask.DailyTaskContext;
import com.accompany.business.vo.dailytask.DailyTaskVo;
import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardVo;
import com.accompany.core.enumeration.PartitionEnum;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
@Component
@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_WEEK_REWARD)
public class GuildWeekRewardHandler extends AbstractDailyTaskHandler {
@Autowired
private GuildMemberWeekLevelRewardService guildMemberWeekLevelRewardService;
@Autowired
private GuildMemberService guildMemberService;
@Override
public void doExecuteProgress(DailyProgressContext progressContext) {
}
@Override
public DailyTaskVo doHandle(DailyTaskContext context) {
DailyTaskVo dailyTaskVo = context.getDailyTaskVo();
Integer partitionId = context.getPartitionId();
Long uid = context.getUid();
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
if (guildMember == null) {
dailyTaskVo.setGuildWeekRewardItems(Collections.emptyList());
return null;
}
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
List<GuildMemberWeekLevelRewardVo> guildMemberWeekLevelRewardVos =
guildMemberWeekLevelRewardService.listHistory(guildMember.getId(), partitionId, partitionEnum.getZoneId(), 1);
if (CollectionUtils.isEmpty(guildMemberWeekLevelRewardVos)) {
dailyTaskVo.setGuildWeekRewardItems(Collections.emptyList());
return null;
}
dailyTaskVo.setGuildWeekRewardItems(guildMemberWeekLevelRewardVos.get(0).getItemList());
return dailyTaskVo;
}
}

View File

@@ -35,9 +35,6 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
@Override @Override
public void doExecuteProgress(DailyProgressContext progressContext) { public void doExecuteProgress(DailyProgressContext progressContext) {
Long uid = progressContext.getUid();
Integer partitionId = progressContext.getPartitionId();
String todayDate = getTodayDate(partitionId, progressContext.getCreateTime());
} }
@Override @Override
@@ -58,7 +55,7 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
dailyTaskRoomDiamondVo.setLevelVos(rewardList); dailyTaskRoomDiamondVo.setLevelVos(rewardList);
List<RoomDayDiamondReward> roomDayDiamondRewards = roomDayDiamondRewardService.listByPartitionIdAsc(partitionId); List<RoomDayDiamondReward> roomDayDiamondRewards = roomDayDiamondRewardService.listByPartitionIdAsc(partitionId);
if (CollectionUtils.isEmpty(roomDayDiamondRewards)) { if (CollectionUtils.isEmpty(roomDayDiamondRewards)) {
return dailyTaskVo; return null;
} }
Map<String, RoomDayDiamondRewardRecvRecord> levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, todayDate); Map<String, RoomDayDiamondRewardRecvRecord> levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, todayDate);
int size = roomDayDiamondRewards.size(); int size = roomDayDiamondRewards.size();

View File

@@ -8,15 +8,25 @@ import com.accompany.business.vo.dailytask.DailyProgressContext;
import com.accompany.business.vo.dailytask.DailyTaskContext; import com.accompany.business.vo.dailytask.DailyTaskContext;
import com.accompany.business.vo.dailytask.DailyTaskVo; import com.accompany.business.vo.dailytask.DailyTaskVo;
import com.accompany.common.result.BusiResult; import com.accompany.common.result.BusiResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import org.redisson.api.RAtomicLong; import org.redisson.api.RAtomicLong;
import org.redisson.api.RBucket; import org.redisson.api.RBucket;
import org.redisson.api.RList;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.DayOfWeek;
import java.time.Duration; import java.time.Duration;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.Map; import java.util.Map;
import static com.accompany.business.constant.dailytask.DailyTaskConstant.RedisKey.up_mic_coin_device_limit;
import static com.accompany.business.constant.dailytask.DailyTaskConstant.RedisKey.up_mic_coin_ip_limit;
@Component @Component
@DailyTaskHandlerType(DailyTaskTypeEnum.UP_MIC_COIN) @DailyTaskHandlerType(DailyTaskTypeEnum.UP_MIC_COIN)
public class UpMicCoinHandler extends AbstractDailyTaskHandler { public class UpMicCoinHandler extends AbstractDailyTaskHandler {
@@ -36,6 +46,9 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
public DailyTaskVo doHandle(DailyTaskContext context) { public DailyTaskVo doHandle(DailyTaskContext context) {
Long uid = context.getUid(); Long uid = context.getUid();
DailyTaskVo dailyTaskVo = context.getDailyTaskVo(); DailyTaskVo dailyTaskVo = context.getDailyTaskVo();
String deviceId = context.getDeviceId();
String realIpAddress = context.getRealIpAddress();
String todayDate = context.getTodayDate(); String todayDate = context.getTodayDate();
RAtomicLong userDayUpMicDuration = roomMicService.userDayUpMicDuration(todayDate, uid); RAtomicLong userDayUpMicDuration = roomMicService.userDayUpMicDuration(todayDate, uid);
long totalDuration = userDayUpMicDuration.get(); long totalDuration = userDayUpMicDuration.get();
@@ -50,6 +63,8 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
} }
if (totalDuration >= dailyTaskVo.getStandardValue()) { if (totalDuration >= dailyTaskVo.getStandardValue()) {
taskStatus(uid, todayDate, taskType).set(1, Duration.ofDays(1)); taskStatus(uid, todayDate, taskType).set(1, Duration.ofDays(1));
getIpCache(todayDate).add(deviceId);
getIpCache(todayDate).add(realIpAddress);
} }
dailyTaskVo.setReachNum(totalDuration); dailyTaskVo.setReachNum(totalDuration);
dailyTaskVo.setReceiveStatus(computeReceiveStatus(uid, todayDate, taskType)); dailyTaskVo.setReceiveStatus(computeReceiveStatus(uid, todayDate, taskType));
@@ -57,9 +72,24 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
} }
@Override @Override
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo) { public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress) {
super.receive(uid, receiveDate, dailyTaskVo); super.receive(uid, receiveDate, dailyTaskVo, deviceId, realIpAddress);
return BusiResult.success(); return BusiResult.success();
} }
@Override
public String getTodayDate(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 RList<String> getDeveiceCache(String monday) {
return redissonClient.getList(up_mic_coin_device_limit.getKey(monday));
}
} }

View File

@@ -198,6 +198,10 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
} }
public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId, String zoneId) { public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId, String zoneId) {
return listHistory(familyMemberId, partitionId, zoneId, 4);
}
public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId, String zoneId, int weekSize) {
List<GuildMemberWeekLevelReward> levelRewardList = lambdaQuery() List<GuildMemberWeekLevelReward> levelRewardList = lambdaQuery()
.eq(GuildMemberWeekLevelReward::getPartitionId, partitionId) .eq(GuildMemberWeekLevelReward::getPartitionId, partitionId)
@@ -212,7 +216,7 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
Date thisMonday = DateTimeUtil.getMondayDate(zoneTime); Date thisMonday = DateTimeUtil.getMondayDate(zoneTime);
List<String> dateRangeList = new ArrayList<>(); List<String> dateRangeList = new ArrayList<>();
List<Date> mondayList = new ArrayList<>(); List<Date> mondayList = new ArrayList<>();
for (int i = 0; i < 4; i++) { for (int i = 0; i < weekSize; i++) {
Date t = DateTimeUtil.addDays(zoneTime, -i*7); Date t = DateTimeUtil.addDays(zoneTime, -i*7);
Date mondayTime = DateTimeUtil.getMondayDate(t); Date mondayTime = DateTimeUtil.getMondayDate(t);
String monday = DateTimeUtil.convertDate(mondayTime, DateTimeUtil.DEFAULT_DATE_PATTERN); String monday = DateTimeUtil.convertDate(mondayTime, DateTimeUtil.DEFAULT_DATE_PATTERN);

View File

@@ -7,6 +7,7 @@ import com.accompany.business.vo.dailytask.DailyTaskTabVo;
import com.accompany.business.vo.dailytask.DailyTaskVo; import com.accompany.business.vo.dailytask.DailyTaskVo;
import com.accompany.business.vo.dailytask.UserGoldBeanBillVo; import com.accompany.business.vo.dailytask.UserGoldBeanBillVo;
import com.accompany.common.result.BusiResult; import com.accompany.common.result.BusiResult;
import com.accompany.common.utils.IPUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
@@ -14,8 +15,10 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.DEVICE_ID;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID; import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID;
@Api(tags = "日常任务",value = "日常任务") @Api(tags = "日常任务",value = "日常任务")
@@ -37,8 +40,10 @@ public class DailyTaskController {
@ApiOperation(value = "任务列表", httpMethod = "GET") @ApiOperation(value = "任务列表", httpMethod = "GET")
@GetMapping("/tasks") @GetMapping("/tasks")
public BusiResult<List<DailyTaskVo>> tasks(@RequestHeader(PUB_UID) Long uid, public BusiResult<List<DailyTaskVo>> tasks(@RequestHeader(PUB_UID) Long uid,
@RequestParam(defaultValue = "1") Integer taskTabType) { @RequestParam(defaultValue = "1") Integer taskTabType,
List<DailyTaskVo> tasks = dailyTaskService.tasks(uid, taskTabType); @RequestHeader(DEVICE_ID)String deviceId, HttpServletRequest request) {
String realIpAddress = IPUtils.getRealIpAddress(request);
List<DailyTaskVo> tasks = dailyTaskService.tasks(uid, taskTabType, deviceId, realIpAddress);
return BusiResult.success(tasks); return BusiResult.success(tasks);
} }
@@ -48,8 +53,10 @@ public class DailyTaskController {
@ApiImplicitParam(name = "taskConfigId", value = "列表有传对应字段", required = true, dataType = "string", paramType = "query"), @ApiImplicitParam(name = "taskConfigId", value = "列表有传对应字段", required = true, dataType = "string", paramType = "query"),
}) })
@PostMapping("/recv") @PostMapping("/recv")
public BusiResult<List<DailyTaskVo>> recv(@RequestHeader(PUB_UID) Long uid, String todayDate, Integer taskConfigId) { public BusiResult<List<DailyTaskVo>> recv(@RequestHeader(PUB_UID) Long uid, String todayDate, Integer taskConfigId,
return dailyTaskService.executeReceive(taskConfigId, uid, todayDate); @RequestHeader(DEVICE_ID)String deviceId, HttpServletRequest request) {
String realIpAddress = IPUtils.getRealIpAddress(request);
return dailyTaskService.executeReceive(taskConfigId, uid, todayDate, deviceId, realIpAddress);
} }
@ApiOperation(value = "兑换中心", httpMethod = "GET") @ApiOperation(value = "兑换中心", httpMethod = "GET")