修复问题

This commit is contained in:
zpc 2024-11-24 13:28:29 +08:00
parent 83234ca339
commit 8841099e26
4 changed files with 228 additions and 221 deletions

View File

@ -241,174 +241,7 @@ namespace CloudGaming.Code.Account
return userInfo;
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static IUserConsumeMoney GetCurrentUserConsumeMoney(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, T_User_Currency currency = null)
{
if (UserCurrencyType. == userCurrencyType)
{
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static IUserConsumeMoney CurrentUserConsumeMoney(this UserInfoCache userInfo, CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, T_User_Currency currency = null)
{
if (UserCurrencyType. == userCurrencyType)
{
return new DiamondConsumeMoney(cloudGamingBase.Dao, userInfo.UserId, userCurrencyType, currency);
}
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money"></param>
/// <param name="userDoamondAction"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, Action<T_User_DiamondList>? userDoamondAction = null)
{
T_User_Currency currency = new T_User_Currency();
var userConsumeMoney = new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase.UserInfo.UserId, UserCurrencyType., currency);
try
{
var isSuccess = await userConsumeMoney.ConsumeMoneyAsync(money);
if (!isSuccess)
{
return false;
}
cloudGamingBase.UserInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType. : UserCurrencyConsumeType.;
T_User_DiamondList userDiamondList = new T_User_DiamondList()
{
CreateAt = DateTime.Now,
Consume = money,
ConsumeType = (int)consumeType,
CurrencyType = (int)UserCurrencyType.,
OrderCode = "",
Title = "",
UpdateAt = DateTime.Now,
UserId = cloudGamingBase.UserInfo.UserId,
};
if (userDoamondAction != null)
{
userDoamondAction(userDiamondList);
}
await cloudGamingBase.Dao.DaoUser.Context.AddAsync(userDiamondList);
await cloudGamingBase.Dao.DaoUser.Context.SaveChangesAsync();
}
catch (Exception ex)
{
return false;
}
return true;
}
/// <summary>
///
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="title">资产支出标题</param>
/// <param name="orderId">订单号</param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, string title = "", string orderId = "")
{
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
/// <summary>
///
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="title">资产支出标题</param>
/// <param name="orderId">订单号</param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, decimal money, string title = "", string orderId = "")
{
if (userCurrencyType == UserCurrencyType.)
{
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
/// <summary>
/// 用户玩游戏消耗钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="currencyLogId">资产记录日志id</param>
/// <param name="gameName">游戏名称</param>
/// <param name="diamondListId">资产收入支出记录id</param>
/// <param name="gameXiaoHao">游戏每分钟消耗多少钻石</param>
/// <returns></returns>
public static async Task<(bool, int, int)> UserPlayGameDiamondConsumeMoney(this CloudGamingBase cloudGamingBase, decimal money, string gameName, int currencyLogId,int diamondListId, string gameXiaoHao)
{
bool issuccess = false;
int _currencyLogId = currencyLogId;
try
{
var currency = new T_User_Currency();
GameDiamondConsumeMoney gameDiamondConsumeMoney = new GameDiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, UserCurrencyType., currency);
(issuccess, _currencyLogId) = await gameDiamondConsumeMoney.ConsumeMoneyAsync(money, currencyLogId);
if (issuccess)
{
cloudGamingBase.UserInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType. : UserCurrencyConsumeType.;
T_User_DiamondList userDiamondList = null;
if (diamondListId > 0)
{
userDiamondList = await cloudGamingBase.Dao.DaoUser.Context.T_User_DiamondList.FirstOrDefaultAsync(it => it.Id == diamondListId);
}
if (userDiamondList == null)
{
userDiamondList = new T_User_DiamondList()
{
CreateAt = DateTime.Now,
Consume = 0,
ConsumeType = (int)consumeType,
CurrencyType = (int)UserCurrencyType.,
OrderCode = "",
Title = $"游玩《{gameName}》",
UpdateAt = DateTime.Now,
UserId = cloudGamingBase.UserInfo.UserId,
Extend = gameXiaoHao,
};
await cloudGamingBase.Dao.DaoUser.Context.AddAsync(userDiamondList);
diamondListId = userDiamondList.Id;
}
userDiamondList.Consume += money;
userDiamondList.UpdateAt = DateTime.Now;
await cloudGamingBase.Dao.DaoUser.Context.SaveChangesAsync();
}
}
catch (Exception ex)
{
return (false, _currencyLogId, diamondListId); ;
}
return (issuccess, _currencyLogId, diamondListId);
}
/// <summary>
/// 发送消息
@ -441,58 +274,7 @@ namespace CloudGaming.Code.Account
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeMoneyAsync(this CloudGamingBase cloudGamingBase, int userId, decimal money)
{
bool isSuccess = await UserConsumeDiamondMoneyAsync(userId, money, cloudGamingBase);
if (isSuccess)
{
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
}
return isSuccess;
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(int userId, decimal money, CloudGamingBase cloudGamingBase)
{
T_User_Currency currency = new T_User_Currency();
var userConsumeMoney = new DiamondConsumeMoney(cloudGamingBase.Dao, userId, UserCurrencyType., currency);
try
{
var isSuccess = await userConsumeMoney.ConsumeMoneyAsync(money);
if (!isSuccess)
{
return false;
}
//清除缓存
string key = GetUserInfoRedisKey(userId);
var userInfo = await cloudGamingBase.RedisCache.StringGetAsync<UserInfoCache>(key);
if (userInfo != null)
{
userInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.RedisCache.StringSetAsync(key, userInfo, TimeSpan.FromMinutes(30));
}
}
catch (Exception ex)
{
return false;
}
return true;
}
/// <summary>
/// 获取用户购买过的产品
/// </summary>

View File

@ -30,7 +30,7 @@ public class DiamondConsumeMoney(DAO dao, int userId, UserCurrencyType userCurre
public async Task<bool> ConsumeMoneyAsync(decimal money)
{
T_User_Currency? currency = await AddUserCurrencyAsync(dao, userId, userCurrencyType, money);
T_User_Currency? currency = await AddUserCurrencyAsync(money);
UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType. : UserCurrencyConsumeType.;
var currency_Log = new T_User_Currency_Log()
{

View File

@ -1,3 +1,5 @@
using CloudGaming.Code.Account.Contract;
using CloudGaming.Code.Account.UserCurrency;
using CloudGaming.Code.DataAccess;
using CloudGaming.DtoModel.Account.User;
@ -92,5 +94,225 @@ namespace CloudGaming.Code.Account
return true;
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static IUserConsumeMoney GetCurrentUserConsumeMoney(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, T_User_Currency currency = null)
{
if (UserCurrencyType. == userCurrencyType)
{
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static IUserConsumeMoney CurrentUserConsumeMoney(this UserInfoCache userInfo, CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, T_User_Currency currency = null)
{
if (UserCurrencyType. == userCurrencyType)
{
return new DiamondConsumeMoney(cloudGamingBase.Dao, userInfo.UserId, userCurrencyType, currency);
}
return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money"></param>
/// <param name="userDoamondAction"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, Action<T_User_DiamondList>? userDoamondAction = null)
{
T_User_Currency currency = new T_User_Currency();
var userConsumeMoney = new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase.UserInfo.UserId, UserCurrencyType., currency);
try
{
var isSuccess = await userConsumeMoney.ConsumeMoneyAsync(money);
if (!isSuccess)
{
return false;
}
cloudGamingBase.UserInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType. : UserCurrencyConsumeType.;
T_User_DiamondList userDiamondList = new T_User_DiamondList()
{
CreateAt = DateTime.Now,
Consume = money,
ConsumeType = (int)consumeType,
CurrencyType = (int)UserCurrencyType.,
OrderCode = "",
Title = "",
UpdateAt = DateTime.Now,
UserId = cloudGamingBase.UserInfo.UserId,
};
if (userDoamondAction != null)
{
userDoamondAction(userDiamondList);
}
await cloudGamingBase.Dao.DaoUser.Context.AddAsync(userDiamondList);
await cloudGamingBase.Dao.DaoUser.Context.SaveChangesAsync();
}
catch (Exception ex)
{
return false;
}
return true;
}
/// <summary>
///
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="title">资产支出标题</param>
/// <param name="orderId">订单号</param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, string title = "", string orderId = "")
{
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
/// <summary>
///
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="title">资产支出标题</param>
/// <param name="orderId">订单号</param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, decimal money, string title = "", string orderId = "")
{
if (userCurrencyType == UserCurrencyType.)
{
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; });
}
/// <summary>
/// 用户玩游戏消耗钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="money">金额</param>
/// <param name="currencyLogId">资产记录日志id</param>
/// <param name="gameName">游戏名称</param>
/// <param name="diamondListId">资产收入支出记录id</param>
/// <param name="gameXiaoHao">游戏每分钟消耗多少钻石</param>
/// <returns></returns>
public static async Task<(bool, int, int)> UserPlayGameDiamondConsumeMoney(this CloudGamingBase cloudGamingBase, decimal money, string gameName, int currencyLogId, int diamondListId, string gameXiaoHao)
{
bool issuccess = false;
int _currencyLogId = currencyLogId;
try
{
var currency = new T_User_Currency();
GameDiamondConsumeMoney gameDiamondConsumeMoney = new GameDiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, UserCurrencyType., currency);
(issuccess, _currencyLogId) = await gameDiamondConsumeMoney.ConsumeMoneyAsync(money, currencyLogId);
if (issuccess)
{
cloudGamingBase.UserInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType. : UserCurrencyConsumeType.;
T_User_DiamondList userDiamondList = null;
if (diamondListId > 0)
{
userDiamondList = await cloudGamingBase.Dao.DaoUser.Context.T_User_DiamondList.FirstOrDefaultAsync(it => it.Id == diamondListId);
}
if (userDiamondList == null)
{
userDiamondList = new T_User_DiamondList()
{
CreateAt = DateTime.Now,
Consume = 0,
ConsumeType = (int)consumeType,
CurrencyType = (int)UserCurrencyType.,
OrderCode = "",
Title = $"游玩《{gameName}》",
UpdateAt = DateTime.Now,
UserId = cloudGamingBase.UserInfo.UserId,
Extend = gameXiaoHao,
};
await cloudGamingBase.Dao.DaoUser.Context.AddAsync(userDiamondList);
diamondListId = userDiamondList.Id;
}
userDiamondList.Consume += money;
userDiamondList.UpdateAt = DateTime.Now;
await cloudGamingBase.Dao.DaoUser.Context.SaveChangesAsync();
}
}
catch (Exception ex)
{
return (false, _currencyLogId, diamondListId); ;
}
return (issuccess, _currencyLogId, diamondListId);
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeMoneyAsync(this CloudGamingBase cloudGamingBase, int userId, decimal money)
{
bool isSuccess = await UserConsumeDiamondMoneyAsync(userId, money, cloudGamingBase);
if (isSuccess)
{
await cloudGamingBase.SaveUserInfoCacheChangesAsync();
}
return isSuccess;
}
/// <summary>
/// 扣除当前用户钻石
/// </summary>
/// <param name="cloudGamingBase"></param>
/// <param name="userCurrencyType"></param>
/// <returns></returns>
public static async Task<bool> UserConsumeDiamondMoneyAsync(int userId, decimal money, CloudGamingBase cloudGamingBase)
{
T_User_Currency currency = new T_User_Currency();
var userConsumeMoney = new DiamondConsumeMoney(cloudGamingBase.Dao, userId, UserCurrencyType., currency);
try
{
var isSuccess = await userConsumeMoney.ConsumeMoneyAsync(money);
if (!isSuccess)
{
return false;
}
//清除缓存
string key = AccountExtend.GetUserInfoRedisKey(userId);
var userInfo = await cloudGamingBase.RedisCache.StringGetAsync<UserInfoCache>(key);
if (userInfo != null)
{
userInfo.Diamond = (int)currency.CurrencyMoney;
await cloudGamingBase.RedisCache.StringSetAsync(key, userInfo, TimeSpan.FromMinutes(30));
}
}
catch (Exception ex)
{
return false;
}
return true;
}
}
}

View File

@ -31,6 +31,9 @@ using System.Threading.Tasks;
namespace CloudGaming.Code.Game
{
/// <summary>
///
/// </summary>
public class PlayGameBLL : CloudGamingBase
{
private IJYApi JYApi { get; set; }