diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java index 46447901c..68cd39f27 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java @@ -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 diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java index 6bcd6215e..d59be8ccb 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java @@ -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; diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskContext.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskContext.java index 11bc89965..7668a1ae6 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskContext.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskContext.java @@ -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; } } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java index 09547502e..8b29c9a38 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java @@ -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 configRewards; @ApiModelProperty("房间流水奖励") private DailyTaskRoomDiamondVo diamondVo; + private List guildWeekRewardItems; } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/AbstractDailyTaskHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/AbstractDailyTaskHandler.java index 2710fe64b..2df2aa9de 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/AbstractDailyTaskHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/AbstractDailyTaskHandler.java @@ -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)) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskHandler.java index eb7ccb76d..5cf427a46 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskHandler.java @@ -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); } \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskService.java index 73e9d6233..e8db1317a 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskService.java @@ -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> taskTab(Long uid) { @@ -118,7 +116,7 @@ public class DailyTaskService { * @param uid * @return */ - public List tasks(Long uid, Integer taskTabType) { + public List tasks(Long uid, Integer taskTabType, String deviceId, String realIpAddress) { GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid); List taskRole = Stream.of((byte)0) .collect(Collectors.toList()); @@ -149,14 +147,15 @@ public class DailyTaskService { return dailyTaskVos; } + List 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 taskVoList(Integer partitionId, Integer taskTabType, List taskRole, Long uid) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildWeekRewardHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildWeekRewardHandler.java new file mode 100644 index 000000000..a73861e43 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildWeekRewardHandler.java @@ -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 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; + } + +} \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java index dde4b9225..c881a691b 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/RoomDayDiamondHandler.java @@ -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 roomDayDiamondRewards = roomDayDiamondRewardService.listByPartitionIdAsc(partitionId); if (CollectionUtils.isEmpty(roomDayDiamondRewards)) { - return dailyTaskVo; + return null; } Map levelMap = RoomDayDiamondRewardRecvRecordService.getLevelMap(partitionId, uid, todayDate); int size = roomDayDiamondRewards.size(); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/UpMicCoinHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/UpMicCoinHandler.java index 4c8e76c6c..654f0d0f5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/UpMicCoinHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/UpMicCoinHandler.java @@ -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 getIpCache(String monday) { + return redissonClient.getList(up_mic_coin_ip_limit.getKey(monday)); + } + + private RList getDeveiceCache(String monday) { + return redissonClient.getList(up_mic_coin_device_limit.getKey(monday)); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java index cac6cc33d..caa1a3b79 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberWeekLevelRewardService.java @@ -198,6 +198,10 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl listHistory(Long familyMemberId, Integer partitionId, String zoneId) { + return listHistory(familyMemberId, partitionId, zoneId, 4); + } + + public List listHistory(Long familyMemberId, Integer partitionId, String zoneId, int weekSize) { List levelRewardList = lambdaQuery() .eq(GuildMemberWeekLevelReward::getPartitionId, partitionId) @@ -212,7 +216,7 @@ public class GuildMemberWeekLevelRewardService extends ServiceImpl dateRangeList = new ArrayList<>(); List 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); diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java index dea682c0b..4f69ce9ff 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java @@ -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> tasks(@RequestHeader(PUB_UID) Long uid, - @RequestParam(defaultValue = "1") Integer taskTabType) { - List tasks = dailyTaskService.tasks(uid, taskTabType); + @RequestParam(defaultValue = "1") Integer taskTabType, + @RequestHeader(DEVICE_ID)String deviceId, HttpServletRequest request) { + String realIpAddress = IPUtils.getRealIpAddress(request); + List 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> recv(@RequestHeader(PUB_UID) Long uid, String todayDate, Integer taskConfigId) { - return dailyTaskService.executeReceive(taskConfigId, uid, todayDate); + public BusiResult> 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")