添加英语2区分区,公会长提现的的日期是每周一次

This commit is contained in:
2025-03-27 14:17:34 +08:00
parent d8e9a5809f
commit 9a76a1b62c
4 changed files with 52 additions and 10 deletions

View File

@@ -897,6 +897,8 @@ public enum BusiStatus {
GUILD_USD_WITHDRAW_NOT_IN_TIME(405, "Withdrawal channels are only available on the 1st and 2nd of each month"),
GUILD_USD_WITHDRAW_LIMIT_TIME(405, "你在本周内已经提交过提现了,请下周再试。"),
VIP_AUTH_OPEN_PREVENT_FOLLOW(500, "關注失敗,用戶已設定不被關注。"),
VIP_AUTH_OPEN_PRIVATE_CHAT_LIMIT(500, "發送訊息失敗,該用戶無法被打擾。"),

View File

@@ -1447,6 +1447,7 @@ public enum RedisKey {
bravo_robot_push_msg,
bravo_status, // 礼物消息的状态
lock_bravo_message, // 消费送礼物消息锁
gusd_withdraw_limit,//公会长提现次数限制
;
public String getKey() {

View File

@@ -18,6 +18,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
@@ -60,6 +61,8 @@ public class DateTimeUtil {
public static final DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DEFAULT_DATETIME_PATTERN);
public static final DateTimeFormatter hoursFormatter = DateTimeFormatter.ofPattern(DateTimeUtil.DATE_HOUR_PATTERN);
public static final DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");
public static Date getLastDay(Date date, int day) {
Calendar cl = Calendar.getInstance();
cl.setTime(date);
@@ -1113,4 +1116,17 @@ public class DateTimeUtil {
return previousHourKey + "-" + currentHourKey;
}
/**
* 获取当周开始时间
* @param now
* @return
*/
public static ZonedDateTime getWeekBegin(ZonedDateTime now) {
return now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
}
}

View File

@@ -17,11 +17,13 @@ import com.accompany.business.vo.guild.GuildUsdProdChannelVo;
import com.accompany.common.config.SystemConfig;
import com.accompany.common.constant.AppEnum;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.EnvComponent;
import com.accompany.common.utils.UUIDUtil;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users;
@@ -29,16 +31,24 @@ import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.core.util.I18NMessageSourceUtil;
import com.accompany.payment.service.RechargeUserService;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.IntegerCodec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.Optional;
import static com.accompany.common.redis.RedisKey.gusd_withdraw_limit;
@Service
public class GuildUsdOperateService {
@@ -64,6 +74,8 @@ public class GuildUsdOperateService {
private PartitionInfoService partitionInfoService;
@Autowired
private EnvComponent envComponent;
@Autowired
private RedissonClient redissonClient;
public void withdrawDiamond(Long uid, BigDecimal guildUsdNum) {
GuildMemberDiamondWithdrawVo vo = guildUsdChannelService.getDiamondWithDrawVo(uid);
@@ -105,16 +117,26 @@ public class GuildUsdOperateService {
if (!typeEnum.getRoleTypeSet().contains(guildMember.getRoleType())){
throw new ServiceException(BusiStatus.FAMILY_PERMISSION_DENIED);
}
Users u = usersService.getNotNullUsersByUid(uid);
PartitionInfo partitionInfo = partitionInfoService.getById(u.getPartitionId());
RBucket<Integer> guildUsdWithdrawLimit = null;
if (GuildUsdOperateTypeEnum.USD_WITHDRAW.equals(typeEnum)){
Users u = usersService.getNotNullUsersByUid(uid);
PartitionInfo partitionInfo = partitionInfoService.getById(u.getPartitionId());
Integer dayOfMonth = ZonedDateTime.now(ZoneId.of(partitionInfo.getZoneId())).getDayOfMonth();
if (null!= GuildUsdOperateTypeEnum.USD_WITHDRAW.getDayOfMonthSet()
&& !GuildUsdOperateTypeEnum.USD_WITHDRAW.getDayOfMonthSet().contains(dayOfMonth)){
throw new ServiceException(BusiStatus.GUILD_USD_WITHDRAW_NOT_IN_TIME);
ZonedDateTime now = ZonedDateTime.now(ZoneId.of(partitionInfo.getZoneId()));
if (PartitionEnum.ENGLISH2.getId() == partitionInfo.getId()) {
ZonedDateTime weekBegin = DateTimeUtil.getWeekBegin(now);
String format = weekBegin.format(DateTimeUtil.yyyyMMdd);
guildUsdWithdrawLimit = redissonClient.getBucket(gusd_withdraw_limit.getKey(uid.toString(), format), IntegerCodec.INSTANCE);
if (guildUsdWithdrawLimit.isExists()) {
throw new ServiceException(BusiStatus.GUILD_USD_WITHDRAW_LIMIT_TIME);
}
} else {
Integer dayOfMonth = now.getDayOfMonth();
if (null!= GuildUsdOperateTypeEnum.USD_WITHDRAW.getDayOfMonthSet()
&& !GuildUsdOperateTypeEnum.USD_WITHDRAW.getDayOfMonthSet().contains(dayOfMonth)){
throw new ServiceException(BusiStatus.GUILD_USD_WITHDRAW_NOT_IN_TIME);
}
}
}
GuildUsdProdChannelVo channelVo = guildUsdChannelService.buildProdChannelByType(guildMember.getPartitionId(), typeEnum);
@@ -181,14 +203,15 @@ public class GuildUsdOperateService {
if (GuildUsdOperateTypeEnum.USD_TO_GUILD_OWNER.equals(typeEnum) || GuildUsdOperateTypeEnum.USD_TO_RECHARGE_USER.equals(typeEnum)) {
//小秘书
Users u = usersService.getNotNullUsersByUid(uid);
String content = I18NMessageSourceUtil.getMessage(I18nAlertEnum.GUILD_USD_TO_RECHARGE_USER_TIP, new Object[]{u.getNick(), u.getErbanNo(), guildUsdNum.toPlainString()}, targetUid);
String skipUrl = String.format("%s://%s%s", envComponent.getDevOrNativeEnv()? "http": "https", AppEnum.getCurApp().getH5Domain(),
GuildUsdOperateTypeEnum.USD_TO_GUILD_OWNER.equals(typeEnum)?
GuildConstant.SkipUrl.BILL_RECORD_URL: GuildConstant.SkipUrl.RECHARGE_USER_RECORD_URL);
sendSysMsgService.sendPersonTextMsgWithSkipUrl(SystemConfig.secretaryUid, targetUid, content, skipUrl);
}
if (PartitionEnum.ENGLISH2.getId() == partitionInfo.getId() && guildUsdWithdrawLimit != null) {
guildUsdWithdrawLimit.set(1, Duration.ofDays(1));
}
return buildBillRecordVo(billRecord);
}