日常任务-公会活动设备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 * 公户开业仪式配置ID
*/ */
private Integer guildTaskId; private Integer guildTaskId;
private String taskKey;
/** /**
* 等级 * 等级
*/ */
@@ -56,14 +55,6 @@ public class GuildTaskLevelRewardRecord implements Serializable {
* 奖品数量 * 奖品数量
*/ */
private Long awardNum; private Long awardNum;
/**
* 登录ip
*/
private String loginIp;
/**
* 设备号
*/
private String deviceId;
/** /**
* 创建时间 * 创建时间
*/ */

View File

@@ -63,6 +63,14 @@ public class GuildTaskReachRecord implements Serializable {
* 达标状态0-未领取1-已领取 * 达标状态0-未领取1-已领取
*/ */
private Integer receiveStatus; 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.AbstractDailyTaskHandler;
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType; import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
import com.accompany.business.service.guild.GuildService; 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.service.guildtask.GuildTaskService;
import com.accompany.business.vo.dailytask.DailyProgressContext; import com.accompany.business.vo.dailytask.DailyProgressContext;
import com.accompany.business.vo.dailytask.DailyTaskContext; 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.business.vo.guild.GuildTaskLevelInfoVo;
import com.accompany.common.utils.DateTimeUtil; import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum; import com.accompany.core.enumeration.PartitionEnum;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -20,6 +22,7 @@ import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Set;
@Component @Component
@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC) @DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC)
@@ -29,6 +32,8 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
private GuildService guildService; private GuildService guildService;
@Autowired @Autowired
private GuildTaskService guildTaskService; private GuildTaskService guildTaskService;
@Autowired
private GuildTaskReachRecordService guildTaskReachRecordService;
@Override @Override
public DailyTaskVo doHandle(DailyTaskContext context) { public DailyTaskVo doHandle(DailyTaskContext context) {
@@ -36,6 +41,7 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
if (guild == null) { if (guild == null) {
return null; return null;
} }
Date now = new Date(); Date now = new Date();
Integer partitionId = context.getPartitionId(); Integer partitionId = context.getPartitionId();
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
@@ -43,6 +49,19 @@ public class GuildMicHandler extends AbstractDailyTaskHandler {
String taskDate = context.getTodayDate(); String taskDate = context.getTodayDate();
ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter); 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()); List<GuildTaskLevelInfoVo> guildWeekTaskList = guildTaskService.getGuildWeekTaskList(cycleDate, dailyTaskTypeEnum.getHandlerType(), taskDate, partitionId, guild.getId());
DailyTaskVo dailyTaskVo = new DailyTaskVo(); DailyTaskVo dailyTaskVo = new DailyTaskVo();
dailyTaskVo.setGuildTaskVos(guildWeekTaskList); 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.model.guildtask.GuildTaskLevelRewardRecord;
import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardRecordMapper; 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date; 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 class GuildTaskLevelRewardRecordService extends ServiceImpl<GuildTaskLevelRewardRecordMapper, GuildTaskLevelRewardRecord> {
public GuildTaskLevelRewardRecord calRecord(Integer partitionId, Long uid, Integer guildId, Long guildMemberId, Integer guildTaskId, Integer level, 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(); GuildTaskLevelRewardRecord rewardRecord = new GuildTaskLevelRewardRecord();
rewardRecord.setPartitionId(partitionId); rewardRecord.setPartitionId(partitionId);
rewardRecord.setUid(uid); rewardRecord.setUid(uid);
rewardRecord.setGuildId(guildId); rewardRecord.setGuildId(guildId);
rewardRecord.setGuildMemberId(guildMemberId); rewardRecord.setGuildMemberId(guildMemberId);
rewardRecord.setGuildTaskId(guildTaskId); rewardRecord.setGuildTaskId(guildTaskId);
rewardRecord.setTaskKey(taskKey);
rewardRecord.setLevel(level); rewardRecord.setLevel(level);
rewardRecord.setCycleDate(cycleDate); rewardRecord.setCycleDate(cycleDate);
rewardRecord.setStatDate(statDate); rewardRecord.setStatDate(statDate);
rewardRecord.setAwardType(awardType); rewardRecord.setAwardType(awardType);
rewardRecord.setAwardId(awardId); rewardRecord.setAwardId(awardId);
rewardRecord.setAwardNum(awardNum); rewardRecord.setAwardNum(awardNum);
rewardRecord.setLoginIp(loginIp);
rewardRecord.setDeviceId(deviceId);
rewardRecord.setCreateTime(new Date()); rewardRecord.setCreateTime(new Date());
rewardRecord.setUpdateTime(new Date()); rewardRecord.setUpdateTime(new Date());
return rewardRecord; 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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; 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); guildTaskReachRecord.setReceiveStatus(receiveStatus);
return baseMapper.updateById(guildTaskReachRecord); 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.setReceiveStatus(1);
reachRecord.setUpdateTime(now); reachRecord.setUpdateTime(now);
reachRecord.setLoginIp(loginIp);
reachRecord.setDeviceId(deviceId);
boolean received = guildTaskReachRecordService.updateById(reachRecord); boolean received = guildTaskReachRecordService.updateById(reachRecord);
if (!received) { if (!received) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END); 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(), GuildTaskLevelRewardRecord rewardRecord = guildTaskLevelRewardRecordService.calRecord(partitionId, guildMember.getUid(), guildId, guildMember.getId(),
reachRecord.getGuildTaskId(), reachRecord.getLevel(), reachRecord.getCycleDate(), reachRecord.getGuildTaskId(), reachRecord.getLevel(), reachRecord.getCycleDate(),
reachRecord.getStatDate(), configReward.getAwardType(), configReward.getAwardId(), reachRecord.getStatDate(), configReward.getAwardType(), configReward.getAwardId(),
configReward.getAwardNum(), loginIp, deviceId, dailyTaskTypeEnum.name()); configReward.getAwardNum());
if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励 if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励
if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) { if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) {
rewardRecords.add(rewardRecord); rewardRecords.add(rewardRecord);