日常任务-公会活动奖励领取

This commit is contained in:
2025-09-02 18:27:16 +08:00
parent c9c35639e7
commit 1205ba59a3
17 changed files with 429 additions and 33 deletions

View File

@@ -32,6 +32,7 @@ public enum BillDomainTypeEnum {
GAME_USD(25, "游戏薪资"),
GUILD_POLICY2(26, "土耳其公会政策2"),
DAILY_TASK(27, "日任务奖励"),
GUILD_TASK(28, "公会开业奖励"),
;
private int value;

View File

@@ -283,6 +283,8 @@ public enum BillObjTypeEnum {
OFFICIAL_MIUNS_GUILD_CRYSTAL( 187, "官方扣除公会紫晶", BillTypeEnum.OUT, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2),
DAILY_TASK_DIAMOND( 188, "日任务奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.DAILY_TASK),
DAILY_TASK_GOLD( 189, "日任务奖励钻石", BillTypeEnum.IN, CurrencyEnum.GOLD, BillDomainTypeEnum.DAILY_TASK),
GUILD_TASK_DIAMOND( 190, "公会任务奖励金币", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.GUILD_TASK),
GUILD_TASK_GOLD( 191, "公会任务奖励钻石", BillTypeEnum.IN, CurrencyEnum.GOLD, BillDomainTypeEnum.DAILY_TASK),
;
BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) {

View File

@@ -5,6 +5,7 @@ import com.accompany.common.redis.BaseRedisKey;
public interface DailyTaskConstant {
enum ReceiveStatus {
NOTYETOPEN,
UNCOMPLETED,
AVAILABLE,
RECEIVED,

View File

@@ -2,10 +2,4 @@ package com.accompany.business.constant.guild;
public class GuildTaskConstant {
public static class TaskStatus {
public static final byte UNCOMPLETED = 0;
public static final byte AVAILABLE = 1;
public static final byte RECEIVED = 2;
public static final byte EXPIRE = 3;
}
}

View File

@@ -31,7 +31,7 @@ public class GuildTaskLevelReward implements Serializable {
/**
* 奖品类型8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 13.金豆,根据RewardTypeEnum来的
*/
private Integer awardType;
private Byte awardType;
/**
* 奖品id这里指对应表的主键id
*/
@@ -47,7 +47,7 @@ public class GuildTaskLevelReward implements Serializable {
/**
* 奖励对象1-公会长3-主播
*/
private Integer awardRole;
private Byte awardRole;
/**
* 奖励状态
*/

View File

@@ -46,7 +46,7 @@ public class GuildTaskLevelRewardRecord implements Serializable {
/**
* 奖品类型8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 ,根据RewardTypeEnum来的
*/
private Integer awardType;
private Byte awardType;
/**
* 奖品id
*/
@@ -69,5 +69,4 @@ public class GuildTaskLevelRewardRecord implements Serializable {
private Date createTime;
private Date updateTime;
}

View File

@@ -5,6 +5,7 @@ import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.model.dailytask.DailyTaskReward;
import com.accompany.business.vo.guild.GuildCycleDiamondWageLevelVo;
import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardItemVo;
import com.accompany.business.vo.guild.GuildTaskLevelInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@@ -42,4 +43,6 @@ public class DailyTaskVo {
private GuildCycleDiamondWageLevelVo cycleDiamondWageLevelVo;
@ApiModelProperty("任务剩余秒数")
private Long expireSecond;
@ApiModelProperty("公会开业仪式")
private List<GuildTaskLevelInfoVo> guildTaskVos;
}

View File

@@ -1,19 +1,26 @@
package com.accompany.business.vo.guild;
import com.accompany.business.constant.dailytask.DailyTaskConstant;
import com.accompany.business.vo.dailytask.DailyTaskRewardVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class GuildTaskLevelInfoVo {
@ApiModelProperty("达标ID领取奖励的时候传")
private Long reachId;
private Integer guildTaskId;
@ApiModelProperty("达标时间")
private String reachStatDate;
/**
* 分区id
*/
private Integer partitionId;
@ApiModelProperty("1-公会开业, 2-麦上活跃1,3-麦上活跃2")
private Byte type;
private String taskKey;
@ApiModelProperty("等级")
private Integer level;
@ApiModelProperty("等级描述")
@@ -32,4 +39,8 @@ public class GuildTaskLevelInfoVo {
private Integer curAnchorMicReachNum;
@ApiModelProperty("档位-主播上麦达标人数")
private Integer anchorMicReachNum;
@ApiModelProperty("未开启-NOTYETOPEN,UNCOMPLETED-未完成, AVAILABLE-可领取RECEIVED-已领取,EXPIRE-已过期")
private DailyTaskConstant.ReceiveStatus receiveStatus;
@ApiModelProperty("奖励列表")
private List<DailyTaskRewardVo> rewardVos;
}

View File

@@ -1,33 +1,36 @@
package com.accompany.business.service.dailytask.handler;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.dailytask.DailyTaskConstant;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
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.GuildMemberService;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildtask.GuildTaskLevelInfoService;
import com.accompany.business.service.guildtask.GuildTaskService;
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.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;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
@Component
@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_CREATE)
public class GuildCreateHandler extends AbstractDailyTaskHandler {
@Autowired
private GuildMemberService guildMemberService;
@Autowired
private GuildService guildService;
@Autowired
private GuildTaskLevelInfoService guildTaskLevelInfoService;
private GuildTaskService guildTaskService;
@Override
public DailyTaskVo doHandle(DailyTaskContext context) {
@@ -36,19 +39,38 @@ public class GuildCreateHandler extends AbstractDailyTaskHandler {
return null;
}
Date now = new Date();
Integer partitionId = context.getPartitionId();
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
DailyTaskTypeEnum dailyTaskTypeEnum = context.getDailyTaskTypeEnum();
String taskDate = context.getTodayDate();
DailyTaskVo dailyTaskVo = new DailyTaskVo();
Date createAfter14Day = DateUtil.offsetDay(guild.getCreateTime(), 14);
if (now.after(createAfter14Day)) {
dailyTaskVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE);
return dailyTaskVo;
List<GuildTaskLevelInfoVo> guildCreateTaskList = guildTaskService.getGuildCreateTaskList(dailyTaskTypeEnum.name(), taskDate, partitionId, guild.getId());
if (CollectionUtils.isEmpty(guildCreateTaskList)) {
return null;
}
return null;
dailyTaskVo.setGuildTaskVos(guildCreateTaskList);
ZonedDateTime guildCreateDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId());
ZonedDateTime createAfter14Day = guildCreateDate.plusDays(14).withHour(23).withMinute(59).withSecond(59);
ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
ZonedDateTime nowZonedEndDateTime = nowZoneDateTime.withHour(23).withMinute(59).withSecond(59);
Boolean expire = nowZonedEndDateTime.isAfter(createAfter14Day);
if (expire) {
dailyTaskVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE);
for (GuildTaskLevelInfoVo infoVo : guildCreateTaskList) {
if (infoVo.getReceiveStatus().equals(DailyTaskConstant.ReceiveStatus.UNCOMPLETED)) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE);
}
}
dailyTaskVo.setExpireSecond(0L);
} else {
Duration duration = Duration.between(createAfter14Day, nowZoneDateTime);
dailyTaskVo.setExpireSecond(duration.getSeconds());
}
return dailyTaskVo;
}
@Override
public void doExecuteProgress(DailyProgressContext progressContext) {
}
}

View File

@@ -1,19 +1,54 @@
package com.accompany.business.service.dailytask.handler;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
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.GuildTaskService;
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.GuildTaskLevelInfoVo;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.DayOfWeek;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.List;
@Component
@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC)
public class GuildMicHandler extends AbstractDailyTaskHandler {
@Autowired
private GuildService guildService;
@Autowired
private GuildTaskService guildTaskService;
@Override
public DailyTaskVo doHandle(DailyTaskContext context) {
return null;
Guild guild = guildService.getVaildGuildByOwnerUid(context.getUid());
if (guild == null) {
return null;
}
Date now = new Date();
Integer partitionId = context.getPartitionId();
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
DailyTaskTypeEnum dailyTaskTypeEnum = context.getDailyTaskTypeEnum();
String taskDate = context.getTodayDate();
ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
List<GuildTaskLevelInfoVo> guildWeekTaskList = guildTaskService.getGuildWeekTaskList(cycleDate, dailyTaskTypeEnum.getHandlerType(), taskDate, partitionId, guild.getId());
DailyTaskVo dailyTaskVo = new DailyTaskVo();
dailyTaskVo.setGuildTaskVos(guildWeekTaskList);
ZonedDateTime weekEndTime = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)).withMinute(59).withHour(23).withSecond(59);
dailyTaskVo.setExpireSecond((long)weekEndTime.getSecond() - nowZonedDateTime.getSecond());
return dailyTaskVo;
}
@Override

View File

@@ -87,7 +87,6 @@ public class GuildMemberService extends ServiceImpl<GuildMemberMapper, GuildMemb
}
return guildMembers.stream().map(GuildMember::getUid).collect(Collectors.toList());
}
public List<GuildMember> listGuildOwnerByPartitionIdRegionId(int partitionId, int regionId) {
return this.baseMapper.listGuildOwnerByPartitionIdRegionId(partitionId, regionId);
}
@@ -117,4 +116,15 @@ public class GuildMemberService extends ServiceImpl<GuildMemberMapper, GuildMemb
}
return guildMembers.stream().collect(Collectors.toMap(GuildMember::getId, x -> x));
}
public List<GuildMember> listVaildAllGuildMember(Integer guildId) {
List<GuildMember> guildMembers = this.lambdaQuery()
.eq(GuildMember::getGuildId, guildId)
.eq(GuildMember::getEnable, Boolean.TRUE)
.list();
if (CollectionUtils.isEmpty(guildMembers)) {
return Collections.EMPTY_LIST;
}
return guildMembers;
}
}

View File

@@ -5,6 +5,8 @@ import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardRecord
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 公户开业仪式奖励奖励记录 服务实现类
*
@@ -14,5 +16,25 @@ import org.springframework.stereotype.Service;
@Service
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) {
GuildTaskLevelRewardRecord rewardRecord = new GuildTaskLevelRewardRecord();
rewardRecord.setPartitionId(partitionId);
rewardRecord.setUid(uid);
rewardRecord.setGuildId(guildId);
rewardRecord.setGuildMemberId(guildMemberId);
rewardRecord.setGuildTaskId(guildTaskId);
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;
}
}

View File

@@ -1,18 +1,62 @@
package com.accompany.business.service.guildtask;
import com.accompany.business.common.constant.RewardTypeEnum;
import com.accompany.business.common.vo.RewardVo;
import com.accompany.business.model.guildtask.GuildTaskLevelReward;
import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardMapper;
import com.accompany.business.service.activity.h5.ActivityH5LevelAwardService;
import com.accompany.business.vo.dailytask.DailyTaskRewardVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 公户开业仪式奖励配置 服务实现类
*
* @author
* @author
* @since 2025-09-01
*/
@Service
public class GuildTaskLevelRewardService extends ServiceImpl<GuildTaskLevelRewardMapper, GuildTaskLevelReward> {
@Autowired
private ActivityH5LevelAwardService activityH5LevelAwardService;
public Map<Integer, List<DailyTaskRewardVo>> mapByGuildTaskIds(List<Integer> guildTaskIds, Integer partitionId) {
LambdaQueryWrapper<GuildTaskLevelReward> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(GuildTaskLevelReward::getGuildTaskId, guildTaskIds);
queryWrapper.eq(GuildTaskLevelReward::getAwardStatus, 1);
List<GuildTaskLevelReward> guildTaskLevelRewards = baseMapper.selectList(queryWrapper);
Map<Integer, List<DailyTaskRewardVo>> resultMap = new HashMap<>();
if (CollectionUtils.isEmpty(guildTaskLevelRewards)) {
return resultMap;
}
for (GuildTaskLevelReward reward : guildTaskLevelRewards) {
List<DailyTaskRewardVo> resultList = resultMap.getOrDefault(reward.getGuildTaskId(), new ArrayList<>());
RewardVo rewardVo = activityH5LevelAwardService.covertI18nRewardInfo(RewardTypeEnum.getByRewardType(reward.getAwardType()), reward.getAwardId().intValue(), partitionId);
resultList.add(DailyTaskRewardVo.builder()
.awardName(rewardVo.getName())
.unit(rewardVo.getUnit())
.awardNum(reward.getAwardNum())
.awardPic(rewardVo.getPic())
.build());
resultMap.put(reward.getGuildTaskId(), resultList);
}
return resultMap;
}
public List<GuildTaskLevelReward> listByGuildTaskId(Integer guildTaskId) {
LambdaQueryWrapper<GuildTaskLevelReward> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GuildTaskLevelReward::getGuildTaskId, guildTaskId);
queryWrapper.eq(GuildTaskLevelReward::getAwardStatus, 1);
return baseMapper.selectList(queryWrapper);
}
}

View File

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
@@ -34,4 +35,12 @@ public class GuildTaskReachRecordService extends ServiceImpl<GuildTaskReachRecor
.eq(GuildTaskReachRecord::getTaskKey, taskKey);
return baseMapper.selectList(wrapper);
}
public int updateReceiveStatus(Long reachId, Integer receiveStatus) {
GuildTaskReachRecord guildTaskReachRecord = new GuildTaskReachRecord();
guildTaskReachRecord.setId(reachId);
guildTaskReachRecord.setUpdateTime(new Date());
guildTaskReachRecord.setReceiveStatus(receiveStatus);
return baseMapper.updateById(guildTaskReachRecord);
}
}

View File

@@ -1,16 +1,30 @@
package com.accompany.business.service.guildtask;
import com.accompany.business.common.constant.RewardTypeEnum;
import com.accompany.business.constant.dailytask.DailyTaskConstant;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.constant.dailytask.GoldBeanBillType;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guildtask.GuildTaskLevelInfo;
import com.accompany.business.model.guildtask.GuildTaskLevelReward;
import com.accompany.business.model.guildtask.GuildTaskLevelRewardRecord;
import com.accompany.business.model.guildtask.GuildTaskReachRecord;
import com.accompany.business.service.guild.GuildDiamondStatisticsDayService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.guildpolicy2.GuildMicStatisticsPolicy2Service;
import com.accompany.business.service.user.UserGoldBeanService;
import com.accompany.business.util.RewardUtil;
import com.accompany.business.vo.dailytask.DailyTaskRewardVo;
import com.accompany.business.vo.guild.GuildTaskLevelInfoVo;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RMap;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +38,9 @@ import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import static com.accompany.core.enumeration.BillObjTypeEnum.GUILD_TASK_DIAMOND;
import static com.accompany.core.enumeration.BillObjTypeEnum.GUILD_TASK_GOLD;
@Service
public class GuildTaskService {
@Autowired
@@ -31,6 +48,10 @@ public class GuildTaskService {
@Autowired
private GuildTaskReachRecordService guildTaskReachRecordService;
@Autowired
private GuildTaskLevelRewardService guildTaskLevelRewardService;
@Autowired
private GuildTaskLevelRewardRecordService guildTaskLevelRewardRecordService;
@Autowired
private GuildService guildService;
@Autowired
private GuildMemberService guildMemberService;
@@ -38,6 +59,10 @@ public class GuildTaskService {
private GuildDiamondStatisticsDayService guildDiamondStatisticsDayService;
@Autowired
private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service;
@Autowired
private UserGoldBeanService userGoldBeanService;
@Autowired
private RewardUtil rewardUtil;
public void updateTaskCreateProgress(Date now, PartitionEnum partitionEnum) {
int partitionId = partitionEnum.getId();
@@ -261,13 +286,197 @@ public class GuildTaskService {
}
public List<GuildTaskLevelInfoVo> getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) {
public List<GuildTaskLevelInfoVo> getGuildCreateTaskList(String taskKey, String statDate, Integer partitionId, Integer guildId) {
List<GuildTaskLevelInfoVo> resultList = new ArrayList<>();
// List<GuildTaskLevelInfo> guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTasks(partitionId, type);
// if (CollectionUtils.isEmpty(guildTaskLevelInfos)) {
// return resultList;
// }
List<GuildTaskLevelInfo> guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey);
if (CollectionUtils.isEmpty(guildTaskLevelInfos)) {
return resultList;
}
List<GuildTaskReachRecord> reachRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey);
Map<Integer, GuildTaskReachRecord> reachRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(reachRecords)) {
reachRecordMap = reachRecords.stream().filter(x -> x.getReachStatus() > 0 || statDate.equals(x.getStatDate()))
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
}
List<Integer> guildTaskIds = guildTaskLevelInfos.stream().map(GuildTaskLevelInfo::getGuildTaskId).collect(Collectors.toList());
Map<Integer, List<DailyTaskRewardVo>> rewardMap = guildTaskLevelRewardService.mapByGuildTaskIds(guildTaskIds, partitionId);
for (GuildTaskLevelInfo guildTaskLevelInfo : guildTaskLevelInfos) {
GuildTaskLevelInfoVo infoVo = new GuildTaskLevelInfoVo();
infoVo.setLevel(guildTaskLevelInfo.getLevel());
infoVo.setGuildTaskId(guildTaskLevelInfo.getGuildTaskId());
infoVo.setName(guildTaskLevelInfo.getName());
infoVo.setTaskKey(guildTaskLevelInfo.getTaskKey());
infoVo.setPartitionId(partitionId);
infoVo.setAnchorNum(guildTaskLevelInfo.getAnchorNum());
infoVo.setDiamondNum(guildTaskLevelInfo.getDiamondNum());
infoVo.setRewardVos(rewardMap.getOrDefault(guildTaskLevelInfo.getGuildTaskId(), Collections.emptyList()));
GuildTaskReachRecord guildTaskReachRecord = reachRecordMap.get(guildTaskLevelInfo.getLevel());
if (guildTaskReachRecord == null) {
infoVo.setCurAnchorNum(0);
infoVo.setCurDiamondNum(BigDecimal.ZERO);
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED);
} else {
infoVo.setCurAnchorNum(guildTaskReachRecord.getAnchorNum());
infoVo.setCurDiamondNum(guildTaskReachRecord.getDiamondNum());
infoVo.setReachStatDate(guildTaskReachRecord.getStatDate());
infoVo.setReachId(guildTaskReachRecord.getId());
if (guildTaskReachRecord.getReceiveStatus() > 0) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.RECEIVED);
} else if (guildTaskReachRecord.getReachStatus() > 0) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.AVAILABLE);
} else {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED);
}
}
resultList.add(infoVo);
}
return resultList;
}
public List<GuildTaskLevelInfoVo> getGuildWeekTaskList(String cycleDate, String taskKey, String statDate, Integer partitionId, Integer guildId) {
List<GuildTaskLevelInfoVo> resultList = new ArrayList<>();
List<GuildTaskLevelInfo> guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey);
if (CollectionUtils.isEmpty(guildTaskLevelInfos)) {
return resultList;
}
List<GuildTaskReachRecord> reachRecords = guildTaskReachRecordService.listByCycle(cycleDate, partitionId, guildId, taskKey);
Map<Integer, GuildTaskReachRecord> reachRecordMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(reachRecords)) {
reachRecordMap = reachRecords.stream().filter(x -> x.getReachStatus() > 0 || statDate.equals(x.getStatDate()))
.collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x));
}
List<Integer> guildTaskIds = guildTaskLevelInfos.stream().map(GuildTaskLevelInfo::getGuildTaskId).collect(Collectors.toList());
Map<Integer, List<DailyTaskRewardVo>> rewardMap = guildTaskLevelRewardService.mapByGuildTaskIds(guildTaskIds, partitionId);
for (GuildTaskLevelInfo guildTaskLevelInfo : guildTaskLevelInfos) {
GuildTaskLevelInfoVo infoVo = new GuildTaskLevelInfoVo();
infoVo.setLevel(guildTaskLevelInfo.getLevel());
infoVo.setGuildTaskId(guildTaskLevelInfo.getGuildTaskId());
infoVo.setName(guildTaskLevelInfo.getName());
infoVo.setTaskKey(guildTaskLevelInfo.getTaskKey());
infoVo.setPartitionId(partitionId);
infoVo.setAnchorNum(guildTaskLevelInfo.getAnchorNum());
infoVo.setDiamondNum(guildTaskLevelInfo.getDiamondNum());
infoVo.setAnchorMicReachMinutes(guildTaskLevelInfo.getAnchorMicReachMinutes());
infoVo.setAnchorMicReachNum(guildTaskLevelInfo.getAnchorMicReachNum());
infoVo.setRewardVos(rewardMap.getOrDefault(guildTaskLevelInfo.getGuildTaskId(), Collections.emptyList()));
GuildTaskReachRecord guildTaskReachRecord = reachRecordMap.get(guildTaskLevelInfo.getLevel());
if (guildTaskReachRecord == null) {
infoVo.setCurAnchorNum(0);
infoVo.setCurDiamondNum(BigDecimal.ZERO);
infoVo.setCurAnchorMicReachNum(0);
if (statDate.equals(cycleDate)) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED);
} else {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.NOTYETOPEN);
}
} else {
infoVo.setCurAnchorNum(guildTaskReachRecord.getAnchorNum());
infoVo.setCurDiamondNum(guildTaskReachRecord.getDiamondNum());
infoVo.setCurAnchorMicReachNum(guildTaskReachRecord.getAnchorMicReachNum());
infoVo.setReachStatDate(guildTaskReachRecord.getStatDate());
infoVo.setReachId(guildTaskReachRecord.getId());
if (guildTaskReachRecord.getReceiveStatus() > 0) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.RECEIVED);
} else if (guildTaskReachRecord.getReachStatus() > 0) {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.AVAILABLE);
} else {
infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED);
}
}
resultList.add(infoVo);
}
return resultList;
}
public BusiResult<Void> receive(Long reachId, Long uid, String loginIp, String deviceId) {
GuildTaskReachRecord reachRecord = guildTaskReachRecordService.getById(reachId);
if (reachRecord == null) {
throw new ServiceException(BusiStatus.SERVERBUSY);
}
if (reachRecord.getReceiveStatus() > 0) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
Integer guildId = reachRecord.getGuildId();
Guild guild = guildService.getVaildGuildById(guildId);
if (guild == null) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
if (!guild.getOwnerUid().equals(uid)) {
throw new ServiceException(BusiStatus.HALL_PERMISSION_DENIED);
}
Date now = new Date();
Integer partitionId = guild.getPartitionId();
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
boolean expired = true;
DailyTaskTypeEnum dailyTaskTypeEnum = DailyTaskTypeEnum.valueOf(reachRecord.getTaskKey());
if (dailyTaskTypeEnum.equals(DailyTaskTypeEnum.GUILD_MIC)) {
ZonedDateTime guildCreateDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId());
ZonedDateTime createAfter14Day = guildCreateDate.plusDays(14).withHour(23).withMinute(59).withSecond(59);
ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
ZonedDateTime nowZonedEndDateTime = nowZoneDateTime.withHour(23).withMinute(59).withSecond(59);
expired = nowZonedEndDateTime.isAfter(createAfter14Day);
} else {
String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
if (cycleDate.equals(reachRecord.getCycleDate())) {
expired = false;
}
}
if (expired) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
reachRecord.setReceiveStatus(1);
reachRecord.setUpdateTime(now);
boolean received = guildTaskReachRecordService.updateById(reachRecord);
if (!received) {
throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END);
}
List<GuildTaskLevelReward> levelRewards = guildTaskLevelRewardService.listByGuildTaskId(reachRecord.getGuildTaskId());
if (CollectionUtils.isEmpty(levelRewards)) {
throw new ServiceException(BusiStatus.DAILY_TASK_REWARD_ERROR);
}
List<GuildMember> guildMembers = guildMemberService.listVaildAllGuildMember(guildId);
if (CollectionUtils.isEmpty(guildMembers)) {
throw new ServiceException(BusiStatus.SERVERERROR);
}
List<GuildTaskLevelRewardRecord> rewardRecords = new ArrayList<>();
for (GuildTaskLevelReward configReward : levelRewards) {
for (GuildMember guildMember : guildMembers) {
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);
if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励
if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) {
rewardRecords.add(rewardRecord);
}
} else {
rewardRecords.add(rewardRecord);
}
}
}
boolean saveBatch = guildTaskLevelRewardRecordService.saveBatch(rewardRecords);
if (!saveBatch) {
throw new ServiceException(BusiStatus.SERVERERROR);
}
for (GuildTaskLevelRewardRecord configReward : rewardRecords) {
if (RewardTypeEnum.GOLDBEAN.getType().equals(configReward.getAwardType())) {
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(configReward.getAwardNum()), GoldBeanBillType.TASK_GAIN,
String.valueOf(configReward.getId()), 1, dailyTaskTypeEnum.name(), 1L, 1L,
nowZonedDateTime.format(DateTimeUtil.dateFormatter));
}
BillObjTypeEnum goldBillObjTypeEnum = null;
if (RewardTypeEnum.GOLD.getType().equals(configReward.getAwardType())) {
goldBillObjTypeEnum = GUILD_TASK_GOLD;
} else if (RewardTypeEnum.DIAMOND.getType().equals(configReward.getAwardType())) {
goldBillObjTypeEnum = GUILD_TASK_DIAMOND;
}
rewardUtil.sendRewardByType(uid, RewardTypeEnum.getByRewardType(configReward.getAwardType()), configReward.getAwardId().intValue(),
configReward.getAwardNum().intValue(), dailyTaskTypeEnum.name(), Boolean.FALSE, goldBillObjTypeEnum);
}
return BusiResult.success();
}
}

View File

@@ -348,7 +348,7 @@ public class RewardUtil {
}
bizExecutor.execute(() -> {
try {
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(num), GoldBeanBillType.ROOM_BOOM_RANDOM, null, 1, null, null, null,null);
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(num), GoldBeanBillType.ROOM_BOOM_RANDOM, null, 1, null, null, 1L,null);
} catch (Exception e) {
log.error("[RewardUtil] {} {} {} {} {} 发奖异常", uid, typeEnum, refId, num, remark, e);
}

View File

@@ -0,0 +1,34 @@
package com.accompany.business.controller.activity.dailytask;
import com.accompany.business.service.guildtask.GuildTaskService;
import com.accompany.common.result.BusiResult;
import com.accompany.common.utils.IPUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.DEVICE_ID;
import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID;
@Api(tags = "公会开业",value = "公会开业")
@RestController
@RequestMapping("/guildtask")
public class GuildTaskController {
@Autowired
private GuildTaskService guildTaskService;
@ApiOperation(value = "领取", httpMethod = "POST")
@PostMapping("/recv")
public BusiResult<Void> receive(@RequestHeader(PUB_UID) Long uid,@RequestHeader(DEVICE_ID)String deviceId,
HttpServletRequest request, Long reachId) {
String loginIp = IPUtils.getRealIpAddress(request);
return guildTaskService.receive(reachId, uid, loginIp, deviceId);
}
}