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

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,//游戏种类
recv_gold_num,//收礼金币
task_config,//任务配置
up_mic_coin_ip_limit,//主播上麦领取ip限制
up_mic_coin_uid_limit,//主播上麦领取ip限制
up_mic_coin_device_limit,//主播上麦领取设备限制
;
@Override

View File

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

View File

@@ -8,10 +8,14 @@ public class DailyTaskContext {
private final DailyTaskVo dailyTaskVo;
private String todayDate;
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.dailyTaskVo = dailyTaskVo;
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.DailyTaskTypeEnum;
import com.accompany.business.model.dailytask.DailyTaskReward;
import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardItemVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@@ -33,4 +34,5 @@ public class DailyTaskVo {
private List<DailyTaskReward> configRewards;
@ApiModelProperty("房间流水奖励")
private DailyTaskRoomDiamondVo diamondVo;
private List<GuildMemberWeekLevelRewardItemVo> guildWeekRewardItems;
}

View File

@@ -87,10 +87,10 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
* @return
*/
@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);
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);
if (!dailyTaskVo.getTodayDate().equals(receiveDate)) {

View File

@@ -18,7 +18,7 @@ public interface DailyTaskHandler {
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);
}

View File

@@ -30,8 +30,6 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.accompany.business.constant.dailytask.DailyTaskTypeEnum.GUILD_WEEK_REWARD;
@Slf4j
@Service
@@ -57,9 +55,9 @@ public class DailyTaskService {
@Autowired
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());
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, partitionId);
DailyTaskContext dailyTaskContext = new DailyTaskContext(uid, dailyTaskVo, partitionId, deviceId, realIpAddress);
return handler.handle(dailyTaskContext);
}
@@ -81,14 +79,14 @@ public class DailyTaskService {
* @param todayDate
* @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);
DailyTaskTypeEnum taskType = dailyTaskVo.getTaskType();
DailyTaskHandler handler = taskHandlerRegistry.getHandler(taskType.getHandlerType());
if (handler == null || StringUtils.isEmpty(todayDate) || uid == null) {
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) {
@@ -118,7 +116,7 @@ public class DailyTaskService {
* @param uid
* @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);
List<Byte> taskRole = Stream.of((byte)0)
.collect(Collectors.toList());
@@ -149,14 +147,15 @@ public class DailyTaskService {
return dailyTaskVos;
}
List<DailyTaskVo> executeDailyTaskList = new ArrayList<>();
dailyTaskVos.stream().forEach(dailyTaskVo -> {
if (GUILD_WEEK_REWARD.equals(dailyTaskVo.getTaskType())) {
return;
DailyTaskVo taskVo = executeDailyTask(dailyTaskVo, uid, partitionId, deviceId, realIpAddress);
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) {

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
public void doExecuteProgress(DailyProgressContext progressContext) {
Long uid = progressContext.getUid();
Integer partitionId = progressContext.getPartitionId();
String todayDate = getTodayDate(partitionId, progressContext.getCreateTime());
}
@Override
@@ -58,7 +55,7 @@ public class RoomDayDiamondHandler extends AbstractDailyTaskHandler {
dailyTaskRoomDiamondVo.setLevelVos(rewardList);
List<RoomDayDiamondReward> roomDayDiamondRewards = roomDayDiamondRewardService.listByPartitionIdAsc(partitionId);
if (CollectionUtils.isEmpty(roomDayDiamondRewards)) {
return dailyTaskVo;
return null;
}
Map<String, RoomDayDiamondRewardRecvRecord> levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, todayDate);
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.DailyTaskVo;
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.RBucket;
import org.redisson.api.RList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
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
@DailyTaskHandlerType(DailyTaskTypeEnum.UP_MIC_COIN)
public class UpMicCoinHandler extends AbstractDailyTaskHandler {
@@ -36,6 +46,9 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
public DailyTaskVo doHandle(DailyTaskContext context) {
Long uid = context.getUid();
DailyTaskVo dailyTaskVo = context.getDailyTaskVo();
String deviceId = context.getDeviceId();
String realIpAddress = context.getRealIpAddress();
String todayDate = context.getTodayDate();
RAtomicLong userDayUpMicDuration = roomMicService.userDayUpMicDuration(todayDate, uid);
long totalDuration = userDayUpMicDuration.get();
@@ -50,6 +63,8 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
}
if (totalDuration >= dailyTaskVo.getStandardValue()) {
taskStatus(uid, todayDate, taskType).set(1, Duration.ofDays(1));
getIpCache(todayDate).add(deviceId);
getIpCache(todayDate).add(realIpAddress);
}
dailyTaskVo.setReachNum(totalDuration);
dailyTaskVo.setReceiveStatus(computeReceiveStatus(uid, todayDate, taskType));
@@ -57,9 +72,24 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
}
@Override
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo) {
super.receive(uid, receiveDate, dailyTaskVo);
public BusiResult receive(Long uid, String receiveDate, DailyTaskVo dailyTaskVo, String deviceId, String realIpAddress) {
super.receive(uid, receiveDate, dailyTaskVo, deviceId, realIpAddress);
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) {
return listHistory(familyMemberId, partitionId, zoneId, 4);
}
public List<GuildMemberWeekLevelRewardVo> listHistory(Long familyMemberId, Integer partitionId, String zoneId, int weekSize) {
List<GuildMemberWeekLevelReward> levelRewardList = lambdaQuery()
.eq(GuildMemberWeekLevelReward::getPartitionId, partitionId)
@@ -212,7 +216,7 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl<GuildMemberWe
Date thisMonday = DateTimeUtil.getMondayDate(zoneTime);
List<String> dateRangeList = 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 mondayTime = DateTimeUtil.getMondayDate(t);
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.UserGoldBeanBillVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.utils.IPUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -14,8 +15,10 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.DEVICE_ID;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID;
@Api(tags = "日常任务",value = "日常任务")
@@ -37,8 +40,10 @@ public class DailyTaskController {
@ApiOperation(value = "任务列表", httpMethod = "GET")
@GetMapping("/tasks")
public BusiResult<List<DailyTaskVo>> tasks(@RequestHeader(PUB_UID) Long uid,
@RequestParam(defaultValue = "1") Integer taskTabType) {
List<DailyTaskVo> tasks = dailyTaskService.tasks(uid, taskTabType);
@RequestParam(defaultValue = "1") Integer 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);
}
@@ -48,8 +53,10 @@ public class DailyTaskController {
@ApiImplicitParam(name = "taskConfigId", value = "列表有传对应字段", required = true, dataType = "string", paramType = "query"),
})
@PostMapping("/recv")
public BusiResult<List<DailyTaskVo>> recv(@RequestHeader(PUB_UID) Long uid, String todayDate, Integer taskConfigId) {
return dailyTaskService.executeReceive(taskConfigId, uid, todayDate);
public BusiResult<List<DailyTaskVo>> recv(@RequestHeader(PUB_UID) Long uid, String todayDate, Integer taskConfigId,
@RequestHeader(DEVICE_ID)String deviceId, HttpServletRequest request) {
String realIpAddress = IPUtils.getRealIpAddress(request);
return dailyTaskService.executeReceive(taskConfigId, uid, todayDate, deviceId, realIpAddress);
}
@ApiOperation(value = "兑换中心", httpMethod = "GET")