日常任务-上麦奖励fixed+英语2区统计上麦

This commit is contained in:
2025-08-27 13:50:25 +08:00
parent 8f572701ab
commit 0180e27f53
10 changed files with 82 additions and 64 deletions

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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>