游戏薪资后台操作

This commit is contained in:
2025-08-04 19:11:31 +08:00
parent a7a9d0ed1c
commit 54bb413d0e
6 changed files with 110 additions and 6 deletions

View File

@@ -13,4 +13,6 @@ public class UsersVo extends Users {
private double diamondsNum;
private double guildUsdNum;
private double gameUsdNum;
}

View File

@@ -12,12 +12,14 @@ import com.accompany.admin.vo.OfficialGoldAllRecordVo;
import com.accompany.admin.vo.OfficialGoldRecordVo;
import com.accompany.business.constant.OfficalSendTypeEnum;
import com.accompany.business.constant.guild.GuildUsdOperateTypeEnum;
import com.accompany.business.constant.guildgame.GameUsdOperateTypeEnum;
import com.accompany.business.model.OfficialGoldBusType;
import com.accompany.business.model.UserPurse;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.WebConfigService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.guild.GuildUsdBillRecordService;
import com.accompany.business.service.guildgame.GameUsdBillRecordService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.business.service.user.UsersService;
@@ -96,6 +98,8 @@ public class OfficialGoldRecordService extends BaseService {
private GuildMemberService guildMemberService;
@Autowired
private GuildUsdBillRecordService guildUsdBillRecordService;
@Autowired
private GameUsdBillRecordService gameUsdBillRecordService;
public List<Map<String, Object>> listType(int adminId){
boolean hasLimit = officialGoldRoleLimitService.hasLimit(adminId);
@@ -156,6 +160,12 @@ public class OfficialGoldRecordService extends BaseService {
case OFFICAL_PLUS_GUILD_USD:
adjustUsd(ernos, type.getValue(), num, adminId, remark, busType, Boolean.TRUE);
break;
case OFFICAL_MINUS_GAME_USD:
adjustGameUsd(ernos, type.getValue(), num, adminId, remark, busType, Boolean.FALSE);
break;
case OFFICAL_PLUS_GAME_USD:
adjustGameUsd(ernos, type.getValue(), num, adminId, remark, busType, Boolean.TRUE);
break;
default:
throw new AdminServiceException(BusiStatus.REQUEST_PARAM_ERROR);
}
@@ -332,7 +342,7 @@ public class OfficialGoldRecordService extends BaseService {
}
/**
* 官方调整薪资(增加或减少)
* 官方调整公会薪资(增加或减少)
* @param ernos 用户耳伴号列表,多个用换行分隔
* @param type 操作类型
* @param num 调整数量
@@ -403,6 +413,78 @@ public class OfficialGoldRecordService extends BaseService {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
/**
* 官方调整游戏薪资(增加或减少)
* @param ernos 用户耳伴号列表,多个用换行分隔
* @param type 操作类型
* @param num 调整数量
* @param optId 操作人ID
* @param remark 备注
* @param busType 业务类型
* @param isPlus 是否为增加操作 true:增加 false:减少
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void adjustGameUsd(String ernos, byte type, BigDecimal num, int optId, String remark, Integer busType, boolean isPlus) {
String lockval = null;
try {
lockval = this.jedisLockService.lock(RedisKey.lock_official_gold_send.getKey(), 3000);
if (StringUtils.isEmpty(lockval)) {
throw new AdminServiceException(BusiStatus.SERVERBUSY);
}
List<String> erbanNos = Arrays.asList(ernos.trim().split("\n"));
Map<Long, GuildMember> guildMemberMap = new HashMap<>();
Map<Long, Users> usersMap = new HashMap<>();
for (String erbanNoStr : erbanNos) {
Long erbanNo = Long.parseLong(erbanNoStr.trim());
if (usersMap.containsKey(erbanNo)) {
continue;
}
Users u = usersService.getUserByErbanNo(erbanNo);
if (u == null) {
throw new AdminServiceException(BusiStatus.USERNOTEXISTS);
}
Long uid = u.getUid();
GuildMember guildMemberByUid = guildMemberService.getVaildGuildMemberByUid(uid);
if (guildMemberByUid == null) {
throw new AdminServiceException("ID:" + erbanNoStr + " but not in guild, not allow operate");
}
guildMemberMap.put(uid, guildMemberByUid);
usersMap.put(uid, u);
}
// 分隔耳伴号,多个耳伴号用换行分隔
for (Users users : usersMap.values()) {
Long recordId = DefaultIdentifierGenerator.getInstance().nextId(null);
Long uid = users.getUid();
GuildMember guildMember = guildMemberMap.get(uid);
// 增加官方赠送活动记录
addGoldRecord(recordId, users, type, Constant.WalletCurrencyType.gameUsd, num, optId, remark, busType, null);
if (isPlus) {
// 增加账户usd数量
UserPurse userPurse = userPurseService.addGameUsd(uid, num.doubleValue(), BillObjTypeEnum.PLUS_GAME_USD,
(up) -> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.PLUS_GAME_USD, num.doubleValue(), up));
gameUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GameUsdOperateTypeEnum.SYSTEM_PLUS_GAME_USD, null, userPurse, num, null, recordId, remark, new Date());
logger.info("plusGameUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}, remark: {}", users.getErbanNo(), type, num, recordId, remark);
} else {
// 减少账户usd数量
UserPurse userPurse = userPurseService.subGameUsd(uid, num, BillObjTypeEnum.MIUNS_GAME_USD, NOT_ENOUGH_GUILD_USD,
(up)-> billRecordService.insertGeneralBillRecord(uid, uid, BillObjTypeEnum.MIUNS_GUILD_USD, num.doubleValue(), up));
gameUsdBillRecordService.insert(UUIDUtil.get(), guildMember.getPartitionId(), guildMember.getId(), guildMember.getGuildId(), uid,
guildMember.getId(), uid, GameUsdOperateTypeEnum.SYSTEM_MIUNS_GAME_USD, userPurse, null, num, null, recordId, remark, new Date());
logger.info("minusGameUsd success, erpan_no: {}, type: {}, num: {}, recordId: {}, remark: {}", users.getErbanNo(), type, num, recordId, remark);
}
}
} finally {
this.jedisLockService.unlock(RedisKey.lock_official_gold_send.getKey(), lockval);
}
}
public long addGoldRecord(Long recordId, Users user, byte type, byte currencyType, BigDecimal num, int optId, String remark, Integer busType, BigDecimal actualAmount) {
Long uid = user.getUid();
@@ -412,7 +494,9 @@ public class OfficialGoldRecordService extends BaseService {
if (Constant.OfficialType.interSendGold.byteValue() == type
|| Constant.OfficialType.clearUserGold.byteValue() == type
|| Constant.OfficialType.plusGuildUsd == type
|| Constant.OfficialType.miunsGuildUsd == type) {
|| Constant.OfficialType.miunsGuildUsd == type
|| Constant.OfficialType.plusGameUsd == type
|| Constant.OfficialType.miunsGameUsd == type) {
diamondNum = num;
} else {
goldNum = num;

View File

@@ -42,11 +42,12 @@
<result column="radish_num" property="radishNum" jdbcType="BIGINT"/>
<result column="diamonds_num" property="diamondsNum" jdbcType="DOUBLE"/>
<result column="guild_usd" property="guildUsdNum" jdbcType="DOUBLE"/>
<result column="game_usd" property="gameUsdNum" jdbcType="DOUBLE"/>
</resultMap>
<select id="selectUserWithGold" parameterType="java.util.Map" resultMap="BaseResultMap">
/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */
select b.erban_no,b.nick,b.avatar,golds as gold_num, diamonds as diamonds_num, crystals as radish_num, guild_usd from
select b.erban_no,b.nick,b.avatar,golds as gold_num, diamonds as diamonds_num, crystals as radish_num, guild_usd, game_usd from
user_purse as a
join users as b on a.uid=b.uid
where b.erban_no in

View File

@@ -46,6 +46,8 @@ public class Constant {
public static Byte interSendGold = 62; // 官方直接送钻石
public static Byte miunsGuildUsd = 63; // 官方直接消除薪资
public static Byte plusGuildUsd = 64; // 官方直接赠送薪资
public static Byte miunsGameUsd = 65; // 官方直接消除薪资
public static Byte plusGameUsd = 66; // 官方直接赠送薪资
}
public static class AppVersion {
@@ -2536,7 +2538,8 @@ public class Constant {
public static final Byte gold = 0; // 金币 现为钻石
public static final Byte radish = 1; // 水晶
public static final Byte diamonds = 2; //钻石 现为金币
public static final Byte usd = 4;
public static final Byte usd = 4;//公会USD
public static final Byte gameUsd = 5;//游戏USD
}
public static class PrizePoolType {

View File

@@ -22,9 +22,13 @@ public enum OfficalSendTypeEnum {
OFFICAL_REDUCE_DIAMONDS(Constant.OfficialType.officalDiamondReduce,"官方金币消除", (byte)2),
OFFICAL_MINUS_GUILD_USD(Constant.OfficialType.miunsGuildUsd, "消除薪资", Constant.WalletCurrencyType.usd),
OFFICAL_MINUS_GUILD_USD(Constant.OfficialType.miunsGuildUsd, "消除公会薪资", Constant.WalletCurrencyType.usd),
OFFICAL_PLUS_GUILD_USD(Constant.OfficialType.plusGuildUsd,"赠送薪资", Constant.WalletCurrencyType.usd),
OFFICAL_PLUS_GUILD_USD(Constant.OfficialType.plusGuildUsd,"赠送公会薪资", Constant.WalletCurrencyType.usd),
OFFICAL_MINUS_GAME_USD(Constant.OfficialType.miunsGameUsd, "消除游戏薪资", Constant.WalletCurrencyType.gameUsd),
OFFICAL_PLUS_GAME_USD(Constant.OfficialType.plusGameUsd,"赠送游戏薪资", Constant.WalletCurrencyType.gameUsd),
;
private byte value;

View File

@@ -55,6 +55,16 @@ public enum GameUsdOperateTypeEnum {
false, CurrencyEnum.GAME_USD, null, null,
BillObjTypeEnum.GAME_USD_TO_PLATFORM_OUT, null),
SYSTEM_PLUS_GAME_USD(9, null, null, null,
false, null, CurrencyEnum.GAME_USD, null,
null, BillObjTypeEnum.PLUS_GAME_USD),
SYSTEM_MIUNS_GAME_USD(10, null, null, null,
false, CurrencyEnum.GAME_USD, null, null,
BillObjTypeEnum.MIUNS_GAME_USD, null),
;
private int type;