日常任务-公会活动奖励领取
This commit is contained in:
@@ -32,6 +32,7 @@ public enum BillDomainTypeEnum {
|
||||
GAME_USD(25, "游戏薪资"),
|
||||
GUILD_POLICY2(26, "土耳其公会政策2"),
|
||||
DAILY_TASK(27, "日任务奖励"),
|
||||
GUILD_TASK(28, "公会开业奖励"),
|
||||
;
|
||||
|
||||
private int value;
|
||||
|
@@ -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) {
|
||||
|
@@ -5,6 +5,7 @@ import com.accompany.common.redis.BaseRedisKey;
|
||||
public interface DailyTaskConstant {
|
||||
|
||||
enum ReceiveStatus {
|
||||
NOTYETOPEN,
|
||||
UNCOMPLETED,
|
||||
AVAILABLE,
|
||||
RECEIVED,
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
/**
|
||||
* 奖励状态
|
||||
*/
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user