日常任务-fixed

This commit is contained in:
2025-09-04 14:53:32 +08:00
parent d3677bb8c4
commit 800b0cf1dd
4 changed files with 53 additions and 35 deletions

View File

@@ -318,6 +318,7 @@ public enum I18nAlertEnum {
PACK_SYS_SEND_SYS("恭喜你,系统给你赠送了{0}*{1}快去礼包中心查看使用吧!"),
GOLD_BEAN_NAME("Gold Bean"),
DIAMOND_NAME("DIAMOND"),
GUILD_CREATE_TASK_MSG("你在公会的卓越表现,获得了精美奖励。快去背包看看吧!"),
;
private final String defaultStr;

View File

@@ -1,7 +1,6 @@
package com.accompany.business.service.guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guild.GuildMemberWeekLevelReward;
import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardVo;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.enumeration.PartitionEnum;
@@ -47,16 +46,6 @@ public class GuildMemberWeekLevelRewardSelectService {
}
}
public void sendReward(Long uid, GuildMemberWeekLevelReward levelReward){
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid);
Integer partitionId = guildMember.getPartitionId();
if (PartitionEnum.ENGLISH2.getId() == partitionId) {
guildMemberWeekLevelRewardV2Service.sendReward(uid, levelReward, true);
} else {
guildMemberWeekLevelRewardService.sendReward(uid, levelReward);
}
}
public void addProcess(Long uid, Integer partitionId, String monday, Number totalNum) {
if (PartitionEnum.ENGLISH2.getId() == partitionId) {
guildMemberWeekLevelRewardV2Service.addProcess(uid, partitionId, monday, totalNum);

View File

@@ -25,6 +25,7 @@ import com.accompany.core.exception.ServiceException;
import com.accompany.core.service.SysConfService;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.redisson.api.RMap;
@@ -295,13 +296,12 @@ public class GuildMemberWeekLevelRewardV2Service extends ServiceImpl<GuildMember
}
}
this.sendReward(uid, levelReward, isBonus);
boolean isInsert = false;
GuildMemberWeekLevelRewardRecord record = recordMapper.selectOne(Wrappers.<GuildMemberWeekLevelRewardRecord>lambdaQuery()
LambdaQueryWrapper<GuildMemberWeekLevelRewardRecord> wrapper = Wrappers.<GuildMemberWeekLevelRewardRecord>lambdaQuery()
.eq(GuildMemberWeekLevelRewardRecord::getGuildMemberId, guildMemberId)
.eq(GuildMemberWeekLevelRewardRecord::getMonday, monday)
.eq(GuildMemberWeekLevelRewardRecord::getLevel, levelReward.getLevel()));
.eq(GuildMemberWeekLevelRewardRecord::getLevel, levelReward.getLevel());
GuildMemberWeekLevelRewardRecord record = recordMapper.selectOne(wrapper);
if (null == record) {
record = new GuildMemberWeekLevelRewardRecord();
record.setGuildMemberId(guildMemberId);
@@ -315,29 +315,40 @@ public class GuildMemberWeekLevelRewardV2Service extends ServiceImpl<GuildMember
isInsert = true;
}
BigDecimal rewardNum;
if (isBonus) {
record.setMicValidDay(levelReward.getMicValidDay());
record.setBonusNum(levelReward.getBonusNum());
rewardNum = levelReward.getBonusNum();
wrapper.le(GuildMemberWeekLevelRewardRecord::getBonusNum, 0);
} else {
record.setProcessNum(levelReward.getProcessNum());
record.setRewardNum(levelReward.getRewardNum());
rewardNum = levelReward.getRewardNum();
wrapper.le(GuildMemberWeekLevelRewardRecord::getRewardNum, 0);
}
if (isInsert) {
record.setCreateTime(new Date());
recordMapper.insert(record);
} else {
recordMapper.update(record, Wrappers.<GuildMemberWeekLevelRewardRecord>lambdaUpdate()
.eq(GuildMemberWeekLevelRewardRecord::getGuildMemberId, guildMemberId)
.eq(GuildMemberWeekLevelRewardRecord::getMonday, monday)
.eq(GuildMemberWeekLevelRewardRecord::getLevel, levelReward.getLevel()));
}
if (levelReward.getLevel() == 0) {
processMap.put(levelRField, guildMemberId);
int update = recordMapper.update(record, wrapper);
if (update <= 0) {
throw new ServiceException(BusiStatus.CHARGE_RECEICVE_REPEAT);
}
}
this.sendReward(uid, level, rewardNum.doubleValue(), isBonus);
String tip = I18NMessageSourceUtil.getMessage(I18nAlertEnum.FAMILY_MEMBER_WEEK_LEVEL_REWARD,
new Object[]{levelReward.getLevel(), levelReward.getRewardNum()}, partitionId);
if (levelReward.getLevel() == 0) {
processMap.put(levelRField, guildMemberId);
tip = I18NMessageSourceUtil.getMessage(I18nAlertEnum.FAMILY_MEMBER_WEEK_LEVEL_REWARD,
new Object[]{levelReward.getLevelName(), levelReward.getRewardNum()}, partitionId);
}
sendSysMsgService.sendPersonTextMsg(uid, tip);
processMap.expireAsync(30L, TimeUnit.DAYS);
@@ -381,10 +392,9 @@ public class GuildMemberWeekLevelRewardV2Service extends ServiceImpl<GuildMember
.map(map::get).collect(Collectors.toList());
}
public void sendReward(Long uid, GuildMemberWeekLevelReward levelReward, Boolean isBonus) {
double rewardNum = !isBonus ? levelReward.getRewardNum().doubleValue() : levelReward.getBonusNum().doubleValue();
String objId = !isBonus ? levelReward.getLevel().toString() : String.join("_" , levelReward.getLevel().toString(), "bonus");
userPurseService.addDiamond(uid, levelReward.getRewardNum().doubleValue(), BillObjTypeEnum.GUILD_MEMBER_WEEK_LEVEL_REWARD,
public void sendReward(Long uid, Integer level, Double rewardNum, Boolean isBonus) {
String objId = !isBonus ? level.toString() : String.join("_" , level.toString(), "bonus");
userPurseService.addDiamond(uid, rewardNum, BillObjTypeEnum.GUILD_MEMBER_WEEK_LEVEL_REWARD,
(userPurse -> billRecordService.insertGeneralBillRecord(uid, objId, BillObjTypeEnum.GUILD_MEMBER_WEEK_LEVEL_REWARD, rewardNum, userPurse)));
}

View File

@@ -11,6 +11,7 @@ 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.BaseSendService;
import com.accompany.business.service.guild.GuildDiamondStatisticsDayService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildService;
@@ -23,19 +24,23 @@ 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.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.util.I18NMessageSourceUtil;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
import static com.accompany.core.enumeration.BillObjTypeEnum.GUILD_TASK_DIAMOND;
@@ -63,6 +68,10 @@ public class GuildTaskService {
private UserGoldBeanService userGoldBeanService;
@Autowired
private RewardUtil rewardUtil;
@Resource(name = "bizExecutor")
private ThreadPoolExecutor bizExecutor;
@Autowired
private BaseSendService baseSendService;
public void updateTaskCreateProgress(Date now, PartitionEnum partitionEnum) {
int partitionId = partitionEnum.getId();
@@ -412,12 +421,14 @@ public class GuildTaskService {
ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId());
boolean expired = true;
DailyTaskTypeEnum dailyTaskTypeEnum = DailyTaskTypeEnum.valueOf(reachRecord.getTaskKey());
Boolean needSendMessage = false;
if (dailyTaskTypeEnum.equals(DailyTaskTypeEnum.GUILD_CREATE)) {
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);
needSendMessage = true;
} else {
String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter);
if (cycleDate.equals(reachRecord.getCycleDate())) {
@@ -446,15 +457,13 @@ public class GuildTaskService {
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());
if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励
if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) {
rewardRecords.add(rewardRecord);
}
} else {
boolean isOwnerRewardOnly = configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER);
boolean isOwner = guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER);
if (!isOwnerRewardOnly || isOwner) {
GuildTaskLevelRewardRecord rewardRecord = guildTaskLevelRewardRecordService.calRecord(partitionId, guildMember.getUid(), guildId, guildMember.getId(),
reachRecord.getGuildTaskId(), reachRecord.getLevel(), reachRecord.getCycleDate(),
reachRecord.getStatDate(), configReward.getAwardType(), configReward.getAwardId(),
configReward.getAwardNum());
rewardRecords.add(rewardRecord);
}
}
@@ -481,6 +490,15 @@ public class GuildTaskService {
configReward.getAwardId().intValue(), configReward.getAwardNum().intValue(),
dailyTaskTypeEnum.name(), Boolean.FALSE, goldBillObjTypeEnum);
}
if (needSendMessage) {
String tip = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_CREATE_TASK_MSG, partitionId);
for (GuildTaskLevelRewardRecord rewardRecord : rewardRecords) {
bizExecutor.execute(()->{
baseSendService.sendSystemMsg(rewardRecord.getUid().toString(), tip);
});
}
}
return BusiResult.success();
}
}