日常任务-上麦奖励fixed+英语2区统计上麦
This commit is contained in:
@@ -281,7 +281,7 @@ public enum BillObjTypeEnum {
|
||||
|
||||
OFFICIAL_PLUS_GUILD_CRYSTAL( 186, "官方增加公会紫晶", BillTypeEnum.IN, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2),
|
||||
OFFICIAL_MIUNS_GUILD_CRYSTAL( 187, "官方扣除公会紫晶", BillTypeEnum.OUT, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2),
|
||||
DAILY_TASK_UP_MIC_COIN( 188, "日任务上麦奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.DAILY_TASK),
|
||||
DAILY_TASK_COIN( 188, "日任务奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.DAILY_TASK),
|
||||
;
|
||||
|
||||
BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) {
|
||||
|
@@ -29,4 +29,6 @@ public interface GuildMicStatisticsPolicy2Mapper extends BaseMapper<GuildMicStat
|
||||
|
||||
|
||||
List<GuildPolicy2PersonalVo> listPersonalMicData(@Param("cycleDate")String cycleDate, @Param("guildMemberId")Long guildMemberId);
|
||||
|
||||
Integer getMinutes(@Param("partitionId") Integer partitionId, @Param("guildMemberId") Long guildMemberId, @Param("statDate") String statDate);
|
||||
}
|
||||
|
@@ -5,8 +5,11 @@ 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.model.dailytask.DailyTaskReward;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.service.guild.GuildMemberService;
|
||||
import com.accompany.business.service.user.UserGoldBeanService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.RewardUtil;
|
||||
import com.accompany.business.vo.dailytask.DailyProgressContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskVo;
|
||||
@@ -29,6 +32,7 @@ import java.util.Date;
|
||||
|
||||
import static com.accompany.business.constant.dailytask.DailyTaskConstant.RedisKey.task_receive_status;
|
||||
import static com.accompany.business.constant.dailytask.DailyTaskConstant.RedisKey.task_status;
|
||||
import static com.accompany.core.enumeration.BillObjTypeEnum.DAILY_TASK_COIN;
|
||||
|
||||
public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
|
||||
@Autowired
|
||||
@@ -39,6 +43,12 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
|
||||
private UserGoldBeanService userGoldBeanService;
|
||||
@Autowired
|
||||
protected DailyTaskConfigService dailyTaskConfigService;
|
||||
@Autowired
|
||||
private GuildMemberService guildMemberService;
|
||||
@Autowired
|
||||
private DailyTaskRewardRecordService dailyTaskRewardRecordService;
|
||||
@Autowired
|
||||
private RewardUtil rewardUtil;
|
||||
|
||||
|
||||
protected final int EXPIRE_DAY = 1;
|
||||
@@ -108,11 +118,25 @@ public abstract class AbstractDailyTaskHandler implements DailyTaskHandler {
|
||||
if (CollectionUtils.isEmpty(dailyTaskVo.getConfigRewards())) {
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
for (DailyTaskReward dailyTaskReward : dailyTaskVo.getConfigRewards()) {
|
||||
if (RewardTypeEnum.GOLDBEAN.getType().equals(dailyTaskReward.getAwardType())) {
|
||||
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(dailyTaskReward.getAwardNum()), GoldBeanBillType.TASK_GAIN,
|
||||
|
||||
Long guildMemberId = 0L;
|
||||
Integer guildId = 0;
|
||||
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
|
||||
if (guildMember != null) {
|
||||
guildMemberId = guildMember.getId();
|
||||
guildId = guildMember.getGuildId();
|
||||
}
|
||||
for (DailyTaskReward configReward : dailyTaskVo.getConfigRewards()) {
|
||||
dailyTaskRewardRecordService.addRecord(configReward.getTaskConfigId(), dailyTaskVo.getTaskType().name(),
|
||||
uid, users.getPartitionId(), guildId, guildMemberId, configReward.getAwardType(),
|
||||
configReward.getAwardId(), configReward.getAwardNum(), receiveDate);
|
||||
if (RewardTypeEnum.GOLDBEAN.getType().equals(configReward.getAwardType())) {
|
||||
userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(configReward.getAwardNum()), GoldBeanBillType.TASK_GAIN,
|
||||
String.valueOf(dailyTaskTypeEnum.ordinal()), 1, dailyTaskVo.getTaskType().name(),
|
||||
dailyTaskVo.getReachNum(), dailyTaskVo.getStandardValue(), receiveDate);
|
||||
} else {
|
||||
rewardUtil.sendRewardByType(uid, RewardTypeEnum.getByRewardType(configReward.getAwardType()), configReward.getAwardId().intValue(),
|
||||
configReward.getAwardNum().intValue(), dailyTaskVo.getTaskType().name(), Boolean.FALSE, DAILY_TASK_COIN);
|
||||
}
|
||||
}
|
||||
return BusiResult.success();
|
||||
|
@@ -1,16 +1,10 @@
|
||||
package com.accompany.business.service.dailytask.handler;
|
||||
|
||||
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.model.dailytask.DailyTaskReward;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.service.dailytask.AbstractDailyTaskHandler;
|
||||
import com.accompany.business.service.dailytask.DailyTaskRewardRecordService;
|
||||
import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType;
|
||||
import com.accompany.business.service.guild.GuildMemberService;
|
||||
import com.accompany.business.service.room.RoomMicService;
|
||||
import com.accompany.business.util.RewardUtil;
|
||||
import com.accompany.business.service.guildpolicy2.GuildMicStatisticsPolicy2Service;
|
||||
import com.accompany.business.vo.dailytask.DailyProgressContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskContext;
|
||||
import com.accompany.business.vo.dailytask.DailyTaskVo;
|
||||
@@ -19,8 +13,6 @@ import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import org.redisson.api.RAtomicLong;
|
||||
import org.redisson.api.RBucket;
|
||||
import org.redisson.api.RMap;
|
||||
import org.redisson.codec.TypedJsonJacksonCodec;
|
||||
@@ -31,27 +23,17 @@ 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.List;
|
||||
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;
|
||||
import static com.accompany.core.enumeration.BillObjTypeEnum.DAILY_TASK_UP_MIC_COIN;
|
||||
|
||||
@Component
|
||||
@DailyTaskHandlerType(DailyTaskTypeEnum.UP_MIC_COIN)
|
||||
public class UpMicCoinHandler extends AbstractDailyTaskHandler {
|
||||
|
||||
@Autowired
|
||||
private RoomMicService roomMicService;
|
||||
@Autowired
|
||||
private DailyTaskRewardRecordService dailyTaskRewardRecordService;
|
||||
@Autowired
|
||||
private GuildMemberService guildMemberService;
|
||||
@Autowired
|
||||
private RewardUtil rewardUtil;
|
||||
private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -67,21 +49,17 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
|
||||
|
||||
String mondayDate = context.getTodayDate();
|
||||
String nowDate = getNowDate(context.getPartitionId(), new Date());
|
||||
RAtomicLong userDayUpMicDuration = roomMicService.userDayUpMicDuration(nowDate, uid);
|
||||
long totalDuration = userDayUpMicDuration.get();
|
||||
RBucket<Long> longRBucket = roomMicService.userUpMicTime(uid);
|
||||
Long upMicTime = longRBucket.get();
|
||||
DailyTaskTypeEnum taskType = dailyTaskVo.getTaskType();
|
||||
if (longRBucket.isExists()) {
|
||||
Map<String, Integer> upMicDuration = roomMicService.calUserUpMicDuration(upMicTime, Calendar.getInstance().getTimeInMillis(), context.getPartitionId());
|
||||
if (!upMicDuration.isEmpty()) {
|
||||
totalDuration += upMicDuration.getOrDefault(nowDate, 0);
|
||||
RBucket<Integer> taskStatus = taskStatus(uid, mondayDate, taskType);
|
||||
long totalDuration;
|
||||
if (!taskStatus.isExists()) { //达标之后不再统计上麦时长
|
||||
totalDuration = guildMicStatisticsPolicy2Service.getMinutes(context.getPartitionId(), uid, nowDate);
|
||||
} else {
|
||||
totalDuration = dailyTaskVo.getStandardValue();
|
||||
}
|
||||
}
|
||||
|
||||
dailyTaskVo.setTodayDate(mondayDate);
|
||||
if (totalDuration >= dailyTaskVo.getStandardValue()) {
|
||||
taskStatus(uid, mondayDate, taskType).set(1, Duration.ofDays(1));
|
||||
taskStatus.set(1, Duration.ofDays(1));
|
||||
}
|
||||
dailyTaskVo.setReachNum(totalDuration);
|
||||
DailyTaskConstant.ReceiveStatus receiveStatus = computeReceiveStatus(uid, mondayDate, taskType);
|
||||
@@ -112,18 +90,6 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
|
||||
}
|
||||
|
||||
super.receive(uid, receiveDate, dailyTaskVo, deviceId, realIpAddress);
|
||||
Users users = usersService.getUsersByUid(uid);
|
||||
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
|
||||
List<DailyTaskReward> configRewards = dailyTaskVo.getConfigRewards();
|
||||
for (DailyTaskReward configReward : configRewards) {
|
||||
dailyTaskRewardRecordService.addRecord(configReward.getTaskConfigId(), dailyTaskVo.getTaskType().name(),
|
||||
uid, users.getPartitionId(), guildMember.getGuildId(), guildMember.getId(), configReward.getAwardType(),
|
||||
configReward.getAwardId(), configReward.getAwardNum(), receiveDate);
|
||||
}
|
||||
for (DailyTaskReward configReward : configRewards) {
|
||||
rewardUtil.sendRewardByType(uid, RewardTypeEnum.getByRewardType(configReward.getAwardType()), configReward.getAwardId().intValue(),
|
||||
configReward.getAwardNum().intValue(), dailyTaskVo.getTaskType().name(), Boolean.FALSE, DAILY_TASK_UP_MIC_COIN);
|
||||
}
|
||||
|
||||
RMap<String, Long> deveiceCache = getDeveiceCache(receiveDate);
|
||||
deveiceCache.put(deviceId, uid);
|
||||
@@ -132,7 +98,6 @@ public class UpMicCoinHandler extends AbstractDailyTaskHandler {
|
||||
deveiceCache.expire(Duration.ofDays(7));
|
||||
ipCache.expire(Duration.ofDays(7));
|
||||
|
||||
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
|
@@ -55,4 +55,9 @@ public class GuildMicStatisticsPolicy2Service extends ServiceImpl<GuildMicStatis
|
||||
public List<GuildPolicy2PersonalVo> listPersonalMicData(String cycleDate, Long guildMemberId) {
|
||||
return baseMapper.listPersonalMicData(cycleDate, guildMemberId);
|
||||
}
|
||||
|
||||
public Integer getMinutes(Integer partitionId, Long guildMemberId, String statDate) {
|
||||
Integer minutes = baseMapper.getMinutes(partitionId, guildMemberId, statDate);
|
||||
return minutes == null ? 0 : minutes;
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@ import com.accompany.business.service.guild.GuildMemberService;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.room.RoomMicService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.business.util.CycleTimeUtil;
|
||||
import com.accompany.business.util.FullMonthCycleTimeUtil;
|
||||
import com.accompany.business.vo.guild.CycleDateVo;
|
||||
import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo;
|
||||
@@ -174,14 +175,20 @@ public class GuildPolicy2Service {
|
||||
return;
|
||||
}
|
||||
Map<String, Integer> durationMap = roomMicService.calUserUpMicDuration(entreTimestamp, timestamp, guildMember.getPartitionId());
|
||||
if (durationMap.size() > 0) {
|
||||
if (durationMap.size() <= 0) {
|
||||
return;
|
||||
}
|
||||
for (Map.Entry<String, Integer> entry : durationMap.entrySet()) {
|
||||
Integer micMinutes = entry.getValue();
|
||||
String statDate = entry.getKey();
|
||||
Date beginOfMonth = DateUtil.beginOfMonth(DateUtil.parseDate(statDate));
|
||||
String cycleDate = DateUtil.formatDate(beginOfMonth);
|
||||
guildMicStatisticsPolicy2Service.updateDayMicStatistics(cycleDate, statDate, guildMember, micMinutes);
|
||||
Date date = DateUtil.parseDate(statDate);
|
||||
String cycleDate;
|
||||
if (PartitionEnum.getByPartitionId(guildMember.getPartitionId()).getClanMode().equals(Constant.ClanMode.GUILD)) {
|
||||
cycleDate = CycleTimeUtil.getAgencyCycleBeginDateStr(date);
|
||||
} else {
|
||||
cycleDate = FullMonthCycleTimeUtil.getAgencyCycleBeginDateStr(date);
|
||||
}
|
||||
guildMicStatisticsPolicy2Service.updateDayMicStatistics(cycleDate, statDate, guildMember, micMinutes);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -75,15 +75,15 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl<GuildMemberRoom
|
||||
return;
|
||||
}
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(guildMember.getPartitionId());
|
||||
boolean guildPolicy2 = GUILD_POLICY2.equals(partitionEnum.getClanMode());
|
||||
if (!guildPolicy2 && guildMember.getPartitionId() == PartitionEnum.ARAB.getId()) {
|
||||
boolean statMicMinutes = GUILD_POLICY2.equals(partitionEnum.getClanMode()) || guildMember.getPartitionId() == PartitionEnum.ENGLISH2.getId();
|
||||
if (!statMicMinutes && guildMember.getPartitionId() == PartitionEnum.ARAB.getId()) {
|
||||
return;
|
||||
}
|
||||
|
||||
JSONArray keysJsonArray = new JSONArray(micQueueParam.getKeys());
|
||||
for (int i = 0; i < keysJsonArray.length(); i++) {
|
||||
int pos = keysJsonArray.getInt(i);
|
||||
record(qEvent, timestamp, guildMember, roomUid, roomId, pos, guildPolicy2);
|
||||
record(qEvent, timestamp, guildMember, roomUid, roomId, pos, statMicMinutes);
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -104,22 +104,22 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl<GuildMemberRoom
|
||||
return;
|
||||
}
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(guildMember.getPartitionId());
|
||||
boolean guildPolicy2 = GUILD_POLICY2.equals(partitionEnum.getClanMode());
|
||||
if (!guildPolicy2 && guildMember.getPartitionId() == PartitionEnum.ARAB.getId()) {
|
||||
boolean statMicMinutes = GUILD_POLICY2.equals(partitionEnum.getClanMode()) || guildMember.getPartitionId() == PartitionEnum.ENGLISH2.getId();
|
||||
if (!statMicMinutes && guildMember.getPartitionId() == PartitionEnum.ARAB.getId()) {
|
||||
return;
|
||||
}
|
||||
|
||||
record(qEvent, timestamp, guildMember, roomUid, roomId, pos, guildPolicy2);
|
||||
record(qEvent, timestamp, guildMember, roomUid, roomId, pos, statMicMinutes);
|
||||
}
|
||||
}
|
||||
|
||||
public void record(Integer qEvent, Long timestamp, GuildMember guildMember, Long roomUid, Long roomId, Integer pos, boolean guildPolicy2) {
|
||||
public void record(Integer qEvent, Long timestamp, GuildMember guildMember, Long roomUid, Long roomId, Integer pos, boolean statMicMinutes) {
|
||||
Long uid = guildMember.getUid();
|
||||
RSet<Long> micSet = redissonClient.getSet(RedisKey.guild_member_room_mic_record.getKey(uid.toString(), roomId.toString(), pos.toString()));
|
||||
if (isUpMicAction(qEvent)) {
|
||||
micSet.add(timestamp);
|
||||
micSet.expire(48, TimeUnit.HOURS);
|
||||
if (guildPolicy2) {
|
||||
if (statMicMinutes) {
|
||||
this.getMicRecordMap().put(uid, MicRecordVo.builder().guildMemberId(guildMember.getId())
|
||||
.uid(uid)
|
||||
.roomId(roomId)
|
||||
@@ -167,7 +167,7 @@ public class GuildMemberRoomMicRecordService extends ServiceImpl<GuildMemberRoom
|
||||
record.setDownTime(new Date(timestamp));
|
||||
record.setRemainTime(remainMillisecond);
|
||||
save(record);
|
||||
if (guildPolicy2) {
|
||||
if (statMicMinutes) {
|
||||
Long beginTime = entreTimestamp;
|
||||
MicRecordVo micRecordVo = this.getMicRecordMap().get(uid);
|
||||
if (null != micRecordVo && micRecordVo.getRoomId().equals(roomId)
|
||||
|
@@ -143,4 +143,9 @@ public class CycleTimeUtil {
|
||||
}
|
||||
return DateTimeUtil.addMonth(beginOfMonth,1);
|
||||
}
|
||||
|
||||
public static String getAgencyCycleBeginDateStr(Date now) {
|
||||
Date cycleBeginDate = getAgencyCycleBeginDate(now);
|
||||
return DateUtil.formatDate(cycleBeginDate);
|
||||
}
|
||||
}
|
||||
|
@@ -121,6 +121,10 @@ public class FullMonthCycleTimeUtil {
|
||||
return DateUtil.beginOfMonth(now);
|
||||
}
|
||||
|
||||
public static String getAgencyCycleBeginDateStr(Date now) {
|
||||
return DateUtil.formatDate(DateUtil.beginOfMonth(now));
|
||||
}
|
||||
|
||||
public static Date getAgencyCycleEndDate(Date now) {
|
||||
Date beginOfMonth = DateUtil.beginOfMonth(now);
|
||||
return DateTimeUtil.addMonth(beginOfMonth,1);
|
||||
|
@@ -52,5 +52,11 @@
|
||||
and gm.`enable` = 1
|
||||
group by gmp.stat_date
|
||||
</select>
|
||||
<select id="getMinutes" resultType="java.lang.Integer">
|
||||
select sum(mic_minutes) from guild_mic_statistics_policy2
|
||||
where stat_date = #{statDate}
|
||||
and partition_id = #{partitionId}
|
||||
and guild_member_id = #{guildMemberId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
Reference in New Issue
Block a user