公会-转赠结算-代理-每日额度限额

This commit is contained in:
khalil
2025-07-30 17:23:48 +08:00
committed by hokli
parent 4add84f2fe
commit b2e29e074d
4 changed files with 36 additions and 4 deletions

View File

@@ -312,10 +312,12 @@ public enum I18nAlertEnum {
FIRST_CHARGE_REWARD_SYS("你已经通过首充活动充值了{0}USD,获得了{1}金币,及其额外的奖励物料。快去查看吧~!"),
ACCOUNT_CANCEL_TOAST("ACCOUNT CANCEL SUCCESS"),
GUILD_USD_TO_RECHARGE_USER_DAY_OF_MONTH_LIMIT("该功能仅在本月的【{0}】号可以操作"),
PACK_SEND_SYS("【{0}】给你赠送了【{1}】*【{2}】快去礼包中心查看使用吧!"),
PACK_USE_SELF_SYS("你已经使用了【{0}】,对应的奖励已经放入你的背包啦!记得查收~"),
PACK_SYS_SEND_SYS("恭喜你,系统给你赠送了{0}*{1}快去礼包中心查看使用吧!"),
GUILD_USD_TO_RECHARGE_USER_DAY_OF_MONTH_LIMIT("该功能仅在本月的【{0}】号可以操作"),
GUILD_USD_TO_RECHARGE_USER_DAY_NUM_LIMIT("你今日已达上限,明天在试试吧!"),
;
private final String defaultStr;

View File

@@ -2,6 +2,7 @@ package com.accompany.business.dto.guild;
import lombok.Data;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -11,6 +12,7 @@ public class GuildUsdToRechargeUserLimitConfigDto {
private Map<Integer, GuildUsdToRechargeUserLimitConfigDto> partitionMap = new HashMap<>();
private BigDecimal dayNumLimit;
private List<Integer> memberEnableDayOfMonth;
private List<Integer> ownerEnableDayOfMonth;

View File

@@ -153,7 +153,7 @@ public class GuildUsdOperateService {
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
}
} else if (GuildUsdOperateTypeEnum.USD_TO_RECHARGE_USER.equals(typeEnum)) {
guildUsdToRechargeUserLimitService.valid(guildMember, targetUid);
guildUsdToRechargeUserLimitService.valid(guildMember, targetUid, guildUsdNum);
}
Long finalTargetUid = targetUid;

View File

@@ -1,15 +1,16 @@
package com.accompany.business.service.guild;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.constant.guild.GuildUsdOperateTypeEnum;
import com.accompany.business.dto.guild.GuildUsdToRechargeUserLimitConfigDto;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.mybatismapper.guild.GuildUsdBillRecordMapper;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Users;
import com.accompany.core.service.SysConfService;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.accompany.payment.service.RechargeUserService;
@@ -19,7 +20,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -30,6 +34,8 @@ public class GuildUsdToRechargeUserLimitService {
private SysConfService sysConfService;
@Autowired
private RechargeUserService rechargeUserService;
@Autowired
private GuildUsdBillRecordMapper guildUsdBillRecordMapper;
public String getLimitTIp(GuildMember guildMember) {
GuildUsdToRechargeUserLimitConfigDto configDto = getConfig().getByPartitionId(guildMember.getPartitionId());
@@ -51,7 +57,7 @@ public class GuildUsdToRechargeUserLimitService {
return I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_TO_RECHARGE_USER_DAY_OF_MONTH_LIMIT, new Object[]{enableDayOfMonthStr}, guildMember.getPartitionId());
}
public void valid(GuildMember guildMember, Long targetUid) {
public void valid(GuildMember guildMember, Long targetUid, BigDecimal guildUsdNum) {
if (null == targetUid || !rechargeUserService.isRechargeUser(targetUid)){
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
}
@@ -73,6 +79,28 @@ public class GuildUsdToRechargeUserLimitService {
String errorMsg = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_TO_RECHARGE_USER_DAY_OF_MONTH_LIMIT, new Object[]{enableDayOfMonthStr}, guildMember.getPartitionId());
throw new ServiceException(errorMsg);
}
if (null == configDto.getDayNumLimit() || BigDecimal.ZERO.compareTo(configDto.getDayNumLimit()) <= 0){
return;
}
ZonedDateTime todayStartTime = zdt.withHour(0).withMinute(0).withSecond(0).withNano(0);
Date systemStartTime = DateTimeUtil.converLocalDateTimeToDate(todayStartTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
String systemStartTimeStr = DateTimeUtil.convertDateTime(systemStartTime);
ZonedDateTime todayEndTime = zdt.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
Date systemEndTime = DateTimeUtil.converLocalDateTimeToDate(todayEndTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
String systemEndTimeStr = DateTimeUtil.convertDateTime(systemEndTime);
Double todayNum = guildUsdBillRecordMapper.sum(guildMember.getPartitionId(), guildMember.getUid(), null,
systemStartTimeStr, systemEndTimeStr, GuildUsdOperateTypeEnum.USD_TO_RECHARGE_USER.getType());
BigDecimal todayNumB = null == todayNum? BigDecimal.ZERO: BigDecimal.valueOf(todayNum);
BigDecimal judgeNum = todayNumB.add(guildUsdNum);
if (judgeNum.compareTo(configDto.getDayNumLimit()) > 0){
String errorMsg = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_TO_RECHARGE_USER_DAY_NUM_LIMIT, null, guildMember.getPartitionId());
throw new ServiceException(errorMsg);
}
}
public GuildUsdToRechargeUserLimitConfigDto getConfig(){