日常任务-公会活动设备ip限制

This commit is contained in:
2025-09-02 18:54:54 +08:00
parent e92feb8728
commit 3400ee2e41
6 changed files with 63 additions and 47 deletions

View File

@@ -31,7 +31,6 @@ public class GuildTaskLevelRewardRecord implements Serializable {
* 公户开业仪式配置ID
*/
private Integer guildTaskId;
private String taskKey;
/**
* 等级
*/
@@ -56,14 +55,6 @@ public class GuildTaskLevelRewardRecord implements Serializable {
* 奖品数量
*/
private Long awardNum;
/**
* 登录ip
*/
private String loginIp;
/**
* 设备号
*/
private String deviceId;
/**
* 创建时间
*/

View File

@@ -63,6 +63,14 @@ public class GuildTaskReachRecord implements Serializable {
* 达标状态0-未领取1-已领取
*/
private Integer receiveStatus;
/**
* 登录ip
*/
private String loginIp;
/**
* 设备号
*/
private String deviceId;
/**
* 创建时间
*/

View File

@@ -5,6 +5,7 @@ import com.accompany.business.model.guild.Guild;
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildtask.GuildTaskReachRecordService;
import com.accompany.business.service.guildtask.GuildTaskService;
import com.accompany.business.vo.dailytask.DailyProgressContext;
import com.accompany.business.vo.dailytask.DailyTaskContext;
@@ -12,6 +13,7 @@ import com.accompany.business.vo.dailytask.DailyTaskVo;
import com.accompany.business.vo.guild.GuildTaskLevelInfoVo;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -20,6 +22,7 @@ import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.List;
import java.util.Set;
@Component
@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC)
@@ -29,6 +32,8 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
private GuildService guildService;
@Autowired
private GuildTaskService guildTaskService;
@Autowired
private GuildTaskReachRecordService guildTaskReachRecordService;
@Override
public DailyTaskVo doHandle(DailyTaskContext context) {
@@ -36,6 +41,7 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
if (guild == null) {
return null;
}
Date now = new Date();
Integer partitionId = context.getPartitionId();
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
@@ -43,6 +49,19 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
String taskDate = context.getTodayDate();
ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
if (DailyTaskTypeEnum.GUILD_MIC.equals(dailyTaskTypeEnum)) {
String realIpAddress = context.getRealIpAddress();
String deviceId = context.getDeviceId();
Set<Integer> deviceLimitGuildId = guildTaskReachRecordService.getByDeveceId(cycleDate, dailyTaskTypeEnum.name(), partitionId, deviceId);
if (CollectionUtils.isNotEmpty(deviceLimitGuildId) && !deviceLimitGuildId.contains(guild.getId())) {
return null;
}
Set<Integer> loginLimitGuildId = guildTaskReachRecordService.getByLoginIp(cycleDate, dailyTaskTypeEnum.name(), partitionId, realIpAddress);
if (CollectionUtils.isNotEmpty(loginLimitGuildId) && !loginLimitGuildId.contains(guild.getId())) {
return null;
}
}
List<GuildTaskLevelInfoVo> guildWeekTaskList = guildTaskService.getGuildWeekTaskList(cycleDate, dailyTaskTypeEnum.getHandlerType(), taskDate, partitionId, guild.getId());
DailyTaskVo dailyTaskVo = new DailyTaskVo();
dailyTaskVo.setGuildTaskVos(guildWeekTaskList);

View File

@@ -2,17 +2,10 @@ package com.accompany.business.service.guildtask;
import com.accompany.business.model.guildtask.GuildTaskLevelRewardRecord;
import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardRecordMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 公户开业仪式奖励奖励记录 服务实现类
@@ -24,51 +17,22 @@ import java.util.stream.Collectors;
public class GuildTaskLevelRewardRecordService extends ServiceImpl<GuildTaskLevelRewardRecordMapper, GuildTaskLevelRewardRecord> {
public GuildTaskLevelRewardRecord calRecord(Integer partitionId, Long uid, Integer guildId, Long guildMemberId, Integer guildTaskId, Integer level,
String cycleDate, String statDate, Byte awardType, Long awardId, Long awardNum, String loginIp, String deviceId, String taskKey) {
String cycleDate, String statDate, Byte awardType, Long awardId, Long awardNum) {
GuildTaskLevelRewardRecord rewardRecord = new GuildTaskLevelRewardRecord();
rewardRecord.setPartitionId(partitionId);
rewardRecord.setUid(uid);
rewardRecord.setGuildId(guildId);
rewardRecord.setGuildMemberId(guildMemberId);
rewardRecord.setGuildTaskId(guildTaskId);
rewardRecord.setTaskKey(taskKey);
rewardRecord.setLevel(level);
rewardRecord.setCycleDate(cycleDate);
rewardRecord.setStatDate(statDate);
rewardRecord.setAwardType(awardType);
rewardRecord.setAwardId(awardId);
rewardRecord.setAwardNum(awardNum);
rewardRecord.setLoginIp(loginIp);
rewardRecord.setDeviceId(deviceId);
rewardRecord.setCreateTime(new Date());
rewardRecord.setUpdateTime(new Date());
return rewardRecord;
}
public Set<Integer> getByDeveceId(String cycleDate, String taskKey, Integer partitionId, String deviceId) {
LambdaQueryWrapper<GuildTaskLevelRewardRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildTaskLevelRewardRecord::getTaskKey, taskKey)
.eq(GuildTaskLevelRewardRecord::getPartitionId, partitionId)
.eq(GuildTaskLevelRewardRecord::getCycleDate, cycleDate)
.eq(GuildTaskLevelRewardRecord::getDeviceId, deviceId);
List<GuildTaskLevelRewardRecord> guildTaskLevelRewardRecords = baseMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(guildTaskLevelRewardRecords)) {
return Collections.emptySet();
}
return guildTaskLevelRewardRecords.stream().map(GuildTaskLevelRewardRecord::getLevel).collect(Collectors.toSet());
}
public Set<Integer> getByLoginIp(String cycleDate, String taskKey, Integer partitionId, String loginIp) {
LambdaQueryWrapper<GuildTaskLevelRewardRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildTaskLevelRewardRecord::getTaskKey, taskKey)
.eq(GuildTaskLevelRewardRecord::getPartitionId, partitionId)
.eq(GuildTaskLevelRewardRecord::getCycleDate, cycleDate)
.eq(GuildTaskLevelRewardRecord::getDeviceId, loginIp);
List<GuildTaskLevelRewardRecord> guildTaskLevelRewardRecords = baseMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(guildTaskLevelRewardRecords)) {
return Collections.emptySet();
}
return guildTaskLevelRewardRecords.stream().map(GuildTaskLevelRewardRecord::getLevel).collect(Collectors.toSet());
}
}

View File

@@ -5,10 +5,14 @@ import com.accompany.business.mybatismapper.guildtask.GuildTaskReachRecordMapper
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 新公会达标任务信息表 服务实现类
@@ -43,4 +47,32 @@ public class GuildTaskReachRecordService extends ServiceImpl<GuildTaskReachRecor
guildTaskReachRecord.setReceiveStatus(receiveStatus);
return baseMapper.updateById(guildTaskReachRecord);
}
public Set<Integer> getByDeveceId(String cycleDate, String taskKey, Integer partitionId, String deviceId) {
LambdaQueryWrapper<GuildTaskReachRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildTaskReachRecord::getTaskKey, taskKey)
.eq(GuildTaskReachRecord::getPartitionId, partitionId)
.eq(GuildTaskReachRecord::getCycleDate, cycleDate)
.eq(GuildTaskReachRecord::getDeviceId, deviceId)
.eq(GuildTaskReachRecord::getReceiveStatus, 1);
List<GuildTaskReachRecord> GuildTaskReachRecords = baseMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(GuildTaskReachRecords)) {
return Collections.emptySet();
}
return GuildTaskReachRecords.stream().map(GuildTaskReachRecord::getLevel).collect(Collectors.toSet());
}
public Set<Integer> getByLoginIp(String cycleDate, String taskKey, Integer partitionId, String loginIp) {
LambdaQueryWrapper<GuildTaskReachRecord> wrapper = Wrappers.lambdaQuery();
wrapper.eq(GuildTaskReachRecord::getTaskKey, taskKey)
.eq(GuildTaskReachRecord::getPartitionId, partitionId)
.eq(GuildTaskReachRecord::getCycleDate, cycleDate)
.eq(GuildTaskReachRecord::getDeviceId, loginIp);
List<GuildTaskReachRecord> GuildTaskReachRecords = baseMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(GuildTaskReachRecords)) {
return Collections.emptySet();
}
return GuildTaskReachRecords.stream().map(GuildTaskReachRecord::getLevel).collect(Collectors.toSet());
}
}

View File

@@ -429,6 +429,8 @@ public class GuildTaskService {
}
reachRecord.setReceiveStatus(1);
reachRecord.setUpdateTime(now);
reachRecord.setLoginIp(loginIp);
reachRecord.setDeviceId(deviceId);
boolean received = guildTaskReachRecordService.updateById(reachRecord);
if (!received) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
@@ -447,7 +449,7 @@ public class GuildTaskService {
GuildTaskLevelRewardRecord rewardRecord = guildTaskLevelRewardRecordService.calRecord(partitionId, guildMember.getUid(), guildId, guildMember.getId(),
reachRecord.getGuildTaskId(), reachRecord.getLevel(), reachRecord.getCycleDate(),
reachRecord.getStatDate(), configReward.getAwardType(), configReward.getAwardId(),
configReward.getAwardNum(), loginIp, deviceId, dailyTaskTypeEnum.name());
configReward.getAwardNum());
if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励
if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) {
rewardRecords.add(rewardRecord);