独联体-薪资操作限制
This commit is contained in:
@@ -3,7 +3,6 @@ package com.accompany.admin.service.guild;
|
||||
import com.accompany.business.constant.CountryEnum;
|
||||
import com.accompany.business.constant.guild.GuildConstant;
|
||||
import com.accompany.business.constant.guild.GuildWithdrawAccountTypeEnum;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.model.guild.GuildUsdWithdrawRecord;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.business.service.SendSysMsgService;
|
||||
@@ -12,7 +11,9 @@ import com.accompany.business.service.guild.GuildUsdOperateService;
|
||||
import com.accompany.business.service.guild.GuildUsdWithdrawRecordService;
|
||||
import com.accompany.business.vo.guild.AgencyWithdrawExamineVo;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.I18nAlertEnum;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.model.AccountBlock;
|
||||
import com.accompany.core.model.PartitionInfo;
|
||||
import com.accompany.core.service.partition.PartitionInfoService;
|
||||
@@ -23,6 +24,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -129,6 +132,10 @@ public class GuildUsdWithdrawRecordAdminService {
|
||||
sendSysMsgService.sendPersonTextMsg(record.getUid(), content);
|
||||
|
||||
guildUsdOperateService.withdrawReject(record.getGuildId(), record.getUid(), record.getGuildUsdNum());
|
||||
Date createTime = record.getCreateTime();
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(createTime, PartitionEnum.getByPartitionId(record.getPartitionId()).getZoneId());
|
||||
String cycleDate = zonedDateTime.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||
guildUsdOperateService.withdrawNum(cycleDate, record.getPartitionId()).addAndGet(record.getUid(), -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -988,6 +988,7 @@ public enum BusiStatus {
|
||||
RECHARGE_REGION_GIVE_LIMIT(500,"你暂时还未开启该区域业务"),
|
||||
RECHARGE_REGION_SALARY_LIMIT(500,"该代理暂不代理该区域业务"),
|
||||
ROOM_DAY_DIAMOND_REWARD_DATE_CHECK(500, "TODAY NOT ALLOW RECEIVE"),
|
||||
GUILD_USD_OPT_LIMIT(500, "该交易类型已达到本周交易次数上限"),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
@@ -1467,6 +1467,9 @@ public enum RedisKey {
|
||||
lock_user_pack, //礼包锁
|
||||
|
||||
v5pay_lock, //v5pay支付锁
|
||||
|
||||
guild_usd_withdraw_num, //公会薪资提现次数
|
||||
guild_usd_to_recharge_num,//公会薪资转代理次数
|
||||
;
|
||||
|
||||
public String getKey() {
|
||||
|
@@ -13,6 +13,8 @@ public class GuildUsdToRechargeUserLimitConfigDto {
|
||||
|
||||
private List<Integer> memberEnableDayOfMonth;
|
||||
private List<Integer> ownerEnableDayOfMonth;
|
||||
private Integer limitToRechargeNum;
|
||||
private Integer limitWithdrawNum;
|
||||
|
||||
public GuildUsdToRechargeUserLimitConfigDto getByPartitionId(int partitionId) {
|
||||
return partitionMap.getOrDefault(partitionId, this);
|
||||
|
@@ -2,6 +2,7 @@ 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.UserPurse;
|
||||
import com.accompany.business.model.guild.GuildMember;
|
||||
import com.accompany.business.model.guild.GuildUsdBillRecord;
|
||||
@@ -17,6 +18,7 @@ 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;
|
||||
@@ -33,18 +35,26 @@ import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.accompany.payment.service.RechargeUserService;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.redisson.api.RBucket;
|
||||
import org.redisson.api.RMap;
|
||||
import org.redisson.api.RedissonClient;
|
||||
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.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.accompany.common.constant.Constant.ClanMode.GUILD_POLICY2;
|
||||
import static com.accompany.common.redis.RedisKey.guild_usd_to_recharge_num;
|
||||
import static com.accompany.common.redis.RedisKey.guild_usd_withdraw_num;
|
||||
import static com.accompany.common.constant.Constant.GLOBAL_CODE;
|
||||
|
||||
@Service
|
||||
@@ -73,6 +83,8 @@ public class GuildUsdOperateService {
|
||||
@Autowired
|
||||
private EnvComponent envComponent;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private RechargeUserService rechargeUserService;
|
||||
@Autowired
|
||||
private RegionInfoService regionInfoService;
|
||||
@@ -173,6 +185,8 @@ public class GuildUsdOperateService {
|
||||
|
||||
//代储校验
|
||||
GuildMember targetMember = null;
|
||||
Date now = new Date();
|
||||
GuildUsdToRechargeUserLimitConfigDto config = guildUsdToRechargeUserLimitService.getConfig();
|
||||
if (GuildUsdOperateTypeEnum.USD_TO_PLATFORM.equals(typeEnum)){
|
||||
targetMember = guildMember;
|
||||
} else if (GuildUsdOperateTypeEnum.USD_TO_GUILD_OWNER.equals(typeEnum)) {
|
||||
@@ -185,7 +199,32 @@ 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, config);
|
||||
Integer limitToRechargeNum = config.getLimitToRechargeNum();
|
||||
if (limitToRechargeNum != null) {
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionInfo.getZoneId());
|
||||
String cycleDate = zonedDateTime.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||
RMap<Long, Integer> usdToRechargeMap = usdToRechargeNum(cycleDate, partitionInfo.getId());
|
||||
Integer toRechargeNum = usdToRechargeMap.get(uid);
|
||||
if (toRechargeNum != null && toRechargeNum > limitToRechargeNum) {
|
||||
throw new ServiceException(BusiStatus.GUILD_USD_OPT_LIMIT);
|
||||
}
|
||||
usdToRechargeMap.addAndGet(uid, 1);
|
||||
usdToRechargeMap.expire(Duration.ofDays(7));
|
||||
}
|
||||
} else if (GuildUsdOperateTypeEnum.MEMBER_USD_WITHDRAW.equals(typeEnum) || GuildUsdOperateTypeEnum.OWNER_USD_WITHDRAW.equals(typeEnum)) {
|
||||
Integer limitWithdrawNum = config.getLimitWithdrawNum();
|
||||
if (limitWithdrawNum != null) {
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionInfo.getZoneId());
|
||||
String cycleDate = zonedDateTime.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||
RMap<Long, Integer> withdrawNumMap = withdrawNum(cycleDate, partitionInfo.getId());
|
||||
Integer withdrawNum = withdrawNumMap.addAndGet(uid, 1);
|
||||
if (withdrawNum > limitWithdrawNum) {
|
||||
throw new ServiceException(BusiStatus.GUILD_USD_OPT_LIMIT);
|
||||
}
|
||||
withdrawNumMap.addAndGet(uid, 1);
|
||||
withdrawNumMap.expire(Duration.ofDays(7));
|
||||
}
|
||||
}
|
||||
|
||||
Long finalTargetUid = targetUid;
|
||||
@@ -270,4 +309,12 @@ public class GuildUsdOperateService {
|
||||
guildUsdBillRecordService.insert(objId, guildMember.getPartitionId(), null, guildId, null, guildMember.getId(), uid, GuildUsdOperateTypeEnum.USD_WITHDRAW_REJECT,
|
||||
null, before, guildUsdNum, null, null, null);
|
||||
}
|
||||
|
||||
public RMap<Long, Integer> withdrawNum(String cycleDate, Integer partitionId) {
|
||||
return redissonClient.getMap(guild_usd_withdraw_num.getKey(cycleDate, partitionId.toString()));
|
||||
}
|
||||
|
||||
public RMap<Long, Integer> usdToRechargeNum(String cycleDate, Integer partitionId) {
|
||||
return redissonClient.getMap(guild_usd_to_recharge_num.getKey(cycleDate, partitionId.toString()));
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,6 @@ 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;
|
||||
@@ -51,11 +50,10 @@ 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, GuildUsdToRechargeUserLimitConfigDto configDto) {
|
||||
if (null == targetUid || !rechargeUserService.isRechargeUser(targetUid)){
|
||||
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
|
||||
}
|
||||
GuildUsdToRechargeUserLimitConfigDto configDto = getConfig().getByPartitionId(guildMember.getPartitionId());
|
||||
if (null == configDto){
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user