From b2e29e074d23bbe270321716932527bde32344a3 Mon Sep 17 00:00:00 2001 From: khalil Date: Wed, 30 Jul 2025 17:23:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=9A-=E8=BD=AC=E8=B5=A0=E7=BB=93?= =?UTF-8?q?=E7=AE=97-=E4=BB=A3=E7=90=86-=E6=AF=8F=E6=97=A5=E9=A2=9D?= =?UTF-8?q?=E5=BA=A6=E9=99=90=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/enumeration/I18nAlertEnum.java | 4 ++- .../GuildUsdToRechargeUserLimitConfigDto.java | 2 ++ .../service/guild/GuildUsdOperateService.java | 2 +- .../GuildUsdToRechargeUserLimitService.java | 32 +++++++++++++++++-- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/I18nAlertEnum.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/I18nAlertEnum.java index 9ef1bdc84..2c0b3cea2 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/I18nAlertEnum.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/I18nAlertEnum.java @@ -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; diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/dto/guild/GuildUsdToRechargeUserLimitConfigDto.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/dto/guild/GuildUsdToRechargeUserLimitConfigDto.java index 52468d06e..d697f2e47 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/dto/guild/GuildUsdToRechargeUserLimitConfigDto.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/dto/guild/GuildUsdToRechargeUserLimitConfigDto.java @@ -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 partitionMap = new HashMap<>(); + private BigDecimal dayNumLimit; private List memberEnableDayOfMonth; private List ownerEnableDayOfMonth; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdOperateService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdOperateService.java index 75440d6e5..e0eda4c9a 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdOperateService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdOperateService.java @@ -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; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdToRechargeUserLimitService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdToRechargeUserLimitService.java index a4dcd1959..a4ea1bc9c 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdToRechargeUserLimitService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildUsdToRechargeUserLimitService.java @@ -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(){