货币-调整比例

This commit is contained in:
khalil
2025-07-30 11:15:24 +08:00
committed by hokli
parent 79a58aa593
commit 9dbf79820f
12 changed files with 40 additions and 43 deletions

View File

@@ -5,12 +5,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@Mapper
public interface UserRechargeLevelAdminMapper {
Page<UserRechargeLevelAdminVo> page(Page<UserRechargeLevelAdminVo> page,
@Param("uid") Long uid,
@Param("partitionId") Integer partitionId,
@Param("level") String level);
@Param("level") String level,
@Param("currencyRatio")BigDecimal currencyRatio);
}

View File

@@ -7,8 +7,10 @@ import com.accompany.admin.service.charge.ChargeChannelAdminService;
import com.accompany.admin.vo.charge.ChargeChannelAdminVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.redis.RedisKey;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.service.common.JedisService;
import com.accompany.payment.constant.CurrencyTypeEnum;
import com.accompany.payment.mapper.ChargeProdMapper;
import com.accompany.payment.model.ChargeChannel;
import com.accompany.payment.model.ChargeProd;
@@ -207,7 +209,7 @@ public class ChargeChannelAdminServiceImpl implements ChargeChannelAdminService
.multiply(BigDecimal.valueOf(100)
.subtract(handlingRate)
.divide(BigDecimal.valueOf(100), 4, RoundingMode.DOWN))
.multiply(BigDecimal.valueOf(7000))
.multiply(CurrencyEnum.DIAMOND.getExchangeRate())
.setScale(0, RoundingMode.HALF_UP);
}

View File

@@ -4,6 +4,7 @@ import com.accompany.admin.mapper.recharge.UserRechargeLevelAdminMapper;
import com.accompany.admin.vo.recharge.UserRechargeLevelAdminVo;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.model.PageReq;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.model.Users;
import com.accompany.payment.model.UserRechargeLevelConfig;
import com.accompany.payment.service.UserRechargeLevelConfigService;
@@ -34,7 +35,7 @@ public class UserRechargeLevelAdminService {
uid = u.getUid();
}
adminMapper.page(page, uid, partitionId, level);
adminMapper.page(page, uid, partitionId, level, CurrencyEnum.DIAMOND.getExchangeRate());
return page;
}

View File

@@ -7,12 +7,12 @@
u.partition_id, pi.`desc` `partition_desc`,
u.region_id, ri.name `region_desc`,
url.`level`, url.`is_recharge_user`,
round(url.total_gold / 7000, 2) `total_gold`,
round(url.recharge_gold / 7000, 2) `recharge_gold`,
round(url.give_gold / 7000, 2) `give_gold`,
round(url.last_60_total_gold / 7000, 2) `last_60_total_gold`,
round(url.last_60_recharge_gold / 7000, 2) `last_60_recharge_gold`,
round(url.last_60_give_gold / 7000, 2) `last_60_give_gold`,
round(url.total_gold / #{currencyRatio}, 2) `total_gold`,
round(url.recharge_gold / #{currencyRatio}, 2) `recharge_gold`,
round(url.give_gold / #{currencyRatio}, 2) `give_gold`,
round(url.last_60_total_gold / #{currencyRatio}, 2) `last_60_total_gold`,
round(url.last_60_recharge_gold / #{currencyRatio}, 2) `last_60_recharge_gold`,
round(url.last_60_give_gold / #{currencyRatio}, 2) `last_60_give_gold`,
url.update_time
from user_recharge_level url
inner join users u on url.uid = u.uid

View File

@@ -1,5 +1,8 @@
package com.accompany.core.enumeration;
import java.math.BigDecimal;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
@@ -9,16 +12,17 @@ import java.util.Optional;
* @author xiaoyuyou
* @date 2019/6/11 18:32
*/
@Getter
public enum CurrencyEnum {
DIAMOND((byte)1, "金币", 0.00001667),
CRYSTAL((byte)2, "水晶", 0.00001667),
GOLD((byte)3, "钻石", 0.00001667),
GUILD_USD((byte)4, "公会薪资", 1),
GAME_USD((byte)5, "游戏薪资", 1),
DIAMOND((byte)1, "金币", BigDecimal.valueOf(30000)),
CRYSTAL((byte)2, "水晶", BigDecimal.valueOf(30000)),
GOLD((byte)3, "钻石", BigDecimal.valueOf(30000)),
GUILD_USD((byte)4, "公会薪资", BigDecimal.ONE),
GAME_USD((byte)5, "游戏薪资", BigDecimal.ONE),
;
CurrencyEnum(byte value, String desc, double exchangeRate) {
CurrencyEnum(byte value, String desc, BigDecimal exchangeRate) {
this.value = value;
this.desc = desc;
this.exchangeRate = exchangeRate;
@@ -26,23 +30,11 @@ public enum CurrencyEnum {
private byte value;
private String desc;
private double exchangeRate;
public byte getValue() {
return value;
}
public String getDesc() {
return desc;
}
public double getExchangeRate() {
return exchangeRate;
}
private BigDecimal exchangeRate;
public static CurrencyEnum get(byte value) {
Optional<CurrencyEnum> result = Arrays.stream(CurrencyEnum.values()).filter(currencyEnum ->
currencyEnum.value == value).findAny();
return result.isPresent() ? result.get() : null;
return result.orElse(null);
}
}

View File

@@ -1,6 +1,7 @@
package com.accompany.payment.service;
import com.accompany.common.constant.Constant;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.model.Users;
import com.accompany.core.service.user.UsersBaseService;
import com.accompany.payment.mapper.ChargeRecordMapperMgr;
@@ -23,7 +24,7 @@ public class HighRechargeUserService extends ServiceImpl<HighRechargeUserMapper,
@Autowired
private ChargeRecordMapperMgr chargeRecordMapperMgr;
private final BigDecimal GOLD_LOW_LIMIT = new BigDecimal("700000");
private final BigDecimal GOLD_LOW_LIMIT = CurrencyEnum.DIAMOND.getExchangeRate().multiply(Constant.HUNDRED);
public boolean isHighRechargeUser(Long uid) {
HighRechargeUser hru = getBaseMapper().selectById(uid);

View File

@@ -16,6 +16,7 @@ import com.accompany.business.vo.firstcharge.FirstChargeVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.utils.StringUtils;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.model.Users;
import com.accompany.core.service.SysConfService;
import com.accompany.core.util.I18NMessageSourceUtil;
@@ -37,7 +38,6 @@ import java.util.Map;
import java.util.stream.Collectors;
import static com.accompany.business.constant.activity.ActivityType.FIRST_CHARGE;
import static com.accompany.business.service.activity.h5.ActivityOfChargeService.GOLD_TO_USB_DIVISOR;
import static com.accompany.common.constant.Constant.SysConfId.FIRST_CHARGE_BANNER_CONFIG;
import static com.accompany.common.redis.RedisKey.*;
import static com.accompany.core.enumeration.I18nAlertEnum.FIRST_CHARGE_REWARD_SYS;
@@ -199,7 +199,7 @@ public class FirstChargeService {
break;
}
}
BigDecimal usd = BigDecimal.valueOf(totalGoldNum).divide(GOLD_TO_USB_DIVISOR, 2, RoundingMode.DOWN);
BigDecimal usd = BigDecimal.valueOf(totalGoldNum).divide(CurrencyEnum.DIAMOND.getExchangeRate(), 2, RoundingMode.DOWN);
activityRankRuleService.sendLevelRankAwardOnlyLevelWithBill(FIRST_CHARGE, uid, diffExpVo.getLevel(),
"" , partitionId, BillObjTypeEnum.FIRST_CHARGE_REWARD_BILL);
String message = I18NMessageSourceUtil.getMessage(FIRST_CHARGE_REWARD_SYS, new Object[]{usd.doubleValue(), rewardGold}, uid);

View File

@@ -9,6 +9,7 @@ import com.accompany.business.mybatismapper.WeekRechargeAgentPartitionStatMapper
import com.accompany.business.mybatismapper.guild.GuildUsdBillRecordMapper;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.model.Users;
import com.accompany.payment.mapper.RechargeUserMapper;
@@ -45,8 +46,6 @@ public class WeekRechargeAgentPartitionStatService {
@Autowired
private UsersService usersService;
private final BigDecimal usdRate = new BigDecimal("7000");
public void stat(List<PartitionEnum> partitionEnumList) {
for (PartitionEnum partitionEnum: partitionEnumList){
bizExecutor.execute(() -> {
@@ -116,7 +115,7 @@ public class WeekRechargeAgentPartitionStatService {
statDto.setReceiveTotalGuildUsd(guildUsdCountMap.getOrDefault(uid, BigDecimal.ZERO));
statDto.setTransformTotalDiamond(transformDiamondCountMap.getOrDefault(uid, BigDecimal.ZERO));
statDto.setTransformTotalUsd(!transformDiamondCountMap.containsKey(uid)? BigDecimal.ZERO:
transformDiamondCountMap.get(uid).divide(usdRate, 2, RoundingMode.HALF_UP));
transformDiamondCountMap.get(uid).divide(CurrencyEnum.DIAMOND.getExchangeRate(), 2, RoundingMode.HALF_UP));
statDto.setRemainUsd(statDto.getTransformTotalUsd().subtract(statDto.getReceiveTotalGuildUsd()));
return statDto;

View File

@@ -12,6 +12,7 @@ import com.accompany.common.push.MarkdownMessage;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.EnvComponent;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
@@ -75,8 +76,6 @@ public class ActivityOfChargeService {
*/
private final int expire = 60;
public static final BigDecimal GOLD_TO_USB_DIVISOR = BigDecimal.valueOf(7000D);
private final long QYWX_SEND_AMOUNT = 300L;
@@ -104,7 +103,7 @@ public class ActivityOfChargeService {
ZonedDateTime zdt = DateTimeUtil.convertWithZoneId(date, null != partitionInfo ? partitionInfo.getZoneId() : ZoneId.systemDefault().getId());
String currentDate = getCurrentDate(zdt);
BigDecimal totalNum = BigDecimal.valueOf(goldNum).divide(GOLD_TO_USB_DIVISOR, 2, RoundingMode.HALF_UP);
BigDecimal totalNum = BigDecimal.valueOf(goldNum).divide(CurrencyEnum.DIAMOND.getExchangeRate(), 2, RoundingMode.HALF_UP);
log.info("ActivityOfChargeService.addTotalNum:uid:{},totalNum:{}", uid, totalNum.toString());
//添加总值
String totalNumKey = getTotalNumKey(currentDate, partitionId);

View File

@@ -49,8 +49,6 @@ public class GuildIncomeService {
@Autowired
private GuildUsdBillRecordService guildUsdBillRecordService;
@Autowired
private GuildDiamondWageService guildDiamondWageService;
@Autowired
private GuildMemberDiamondStatisticsService guildMemberDiamondStatisticsService;
@Autowired
private GuildMemberRoomMicRecordService guildMemberRoomMicRecordService;

View File

@@ -9,6 +9,7 @@ import com.accompany.common.constant.Constant;
import com.accompany.common.constant.RankConstant;
import com.accompany.common.redis.RedisKey;
import com.accompany.core.base.SpringContextHolder;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.model.Room;
import com.accompany.core.service.common.JedisService;
import org.springframework.beans.BeanUtils;
@@ -120,7 +121,7 @@ public enum HomeRoomSorterEnum {
if (null == score) {
score = 0d;
}
BigDecimal roomSerial = BigDecimal.valueOf(score).divide(BigDecimal.valueOf(7000L), 2, RoundingMode.HALF_UP);
BigDecimal roomSerial = BigDecimal.valueOf(score).divide(CurrencyEnum.DIAMOND.getExchangeRate(), 2, RoundingMode.HALF_UP);
BigDecimal roomOnlineValue = BigDecimal.valueOf(vo.getOnlineNum()).multiply(BigDecimal.valueOf(2.75d));
vo.setHotValue(roomSerial.add(roomOnlineValue));

View File

@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -73,7 +74,7 @@ public class BillRecordService extends ServiceImpl<BillRecordMapper, BillRecord>
*/
public void insertGiftSendBillRecord(Long uid, Long targetUid, Long roomUid, String objId, BillObjTypeEnum eventEnum,
Double amount, Integer giftId, Integer giftNum, Long giftTotalGoldNum, Date createTime, UserPurse after) {
Double rmbAmount = DoubleUtil.mul(amount, eventEnum.getCurrency().getExchangeRate());
Double rmbAmount = BigDecimal.valueOf(amount).divide(eventEnum.getCurrency().getExchangeRate(), 2, RoundingMode.HALF_UP).doubleValue();
insertBillRecordV2(uid, targetUid, roomUid, objId, eventEnum, amount, rmbAmount, giftId, giftNum, giftTotalGoldNum, createTime, after);
}
@@ -90,7 +91,7 @@ public class BillRecordService extends ServiceImpl<BillRecordMapper, BillRecord>
}
public void insertGeneralBillRecord(Long uid, Long targetUid, Long roomUid, String objId, BillObjTypeEnum eventEnum, Double amount, UserPurse afterPurse) {
Double rmbAmount = amount * eventEnum.getCurrency().getExchangeRate();
Double rmbAmount = BigDecimal.valueOf(amount).divide(eventEnum.getCurrency().getExchangeRate(), 2, RoundingMode.HALF_UP).doubleValue();
insertBillRecord(uid, targetUid, roomUid, objId, eventEnum, amount, rmbAmount, afterPurse);
}