From 8841099e265d603020237933fa4c2d139cc80417 Mon Sep 17 00:00:00 2001 From: zpc Date: Sun, 24 Nov 2024 13:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CloudGaming.Code/Account/AccountExtend.cs | 222 +----------------- .../UserCurrency/DiamondConsumeMoney.cs | 2 +- .../Account/UserCurrencyExtend.cs | 222 ++++++++++++++++++ .../Code/CloudGaming.Code/Game/PlayGameBLL.cs | 3 + 4 files changed, 228 insertions(+), 221 deletions(-) diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs index 2c5841e..9ecd4b6 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs @@ -241,174 +241,7 @@ namespace CloudGaming.Code.Account return userInfo; } - /// - /// 扣除当前用户钻石 - /// - /// - /// - /// - 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); - } - - /// - /// 扣除当前用户钻石 - /// - /// - /// - /// - 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); - } - - /// - /// 扣除当前用户钻石 - /// - /// - /// - /// - /// - public static async Task UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, Action? 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; - } - - /// - /// - /// - /// - /// 金额 - /// 资产支出标题 - /// 订单号 - /// - - public static async Task UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, string title = "", string orderId = "") - { - return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; }); - } - - /// - /// - /// - /// - /// 金额 - /// 资产支出标题 - /// 订单号 - /// - - public static async Task 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; }); - } - /// - /// 用户玩游戏消耗钻石 - /// - /// - /// 金额 - /// 资产记录日志id - /// 游戏名称 - /// 资产收入支出记录id - /// 游戏每分钟消耗多少钻石 - /// - 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); - - } - + /// /// 发送消息 @@ -441,58 +274,7 @@ namespace CloudGaming.Code.Account } - /// - /// 扣除当前用户钻石 - /// - /// - /// - /// - public static async Task UserConsumeMoneyAsync(this CloudGamingBase cloudGamingBase, int userId, decimal money) - { - bool isSuccess = await UserConsumeDiamondMoneyAsync(userId, money, cloudGamingBase); - if (isSuccess) - { - await cloudGamingBase.SaveUserInfoCacheChangesAsync(); - } - return isSuccess; - } - - - /// - /// 扣除当前用户钻石 - /// - /// - /// - /// - public static async Task 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(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; - } - + /// /// 获取用户购买过的产品 /// diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs index ee3b0d1..3ae8747 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs @@ -30,7 +30,7 @@ public class DiamondConsumeMoney(DAO dao, int userId, UserCurrencyType userCurre public async Task 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() { diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrencyExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrencyExtend.cs index 89416f6..89909c5 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrencyExtend.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrencyExtend.cs @@ -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; } + + /// + /// 扣除当前用户钻石 + /// + /// + /// + /// + 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); + } + + /// + /// 扣除当前用户钻石 + /// + /// + /// + /// + 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); + } + + /// + /// 扣除当前用户钻石 + /// + /// + /// + /// + /// + public static async Task UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, Action? 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; + } + + /// + /// + /// + /// + /// 金额 + /// 资产支出标题 + /// 订单号 + /// + + public static async Task UserConsumeDiamondMoneyAsync(this CloudGamingBase cloudGamingBase, decimal money, string title = "", string orderId = "") + { + return await UserConsumeDiamondMoneyAsync(cloudGamingBase, money, it => { it.Title = title; it.OrderCode = orderId; }); + } + + /// + /// + /// + /// + /// 金额 + /// 资产支出标题 + /// 订单号 + /// + + public static async Task 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; }); + } + /// + /// 用户玩游戏消耗钻石 + /// + /// + /// 金额 + /// 资产记录日志id + /// 游戏名称 + /// 资产收入支出记录id + /// 游戏每分钟消耗多少钻石 + /// + 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); + + } + /// + /// 扣除当前用户钻石 + /// + /// + /// + /// + public static async Task UserConsumeMoneyAsync(this CloudGamingBase cloudGamingBase, int userId, decimal money) + { + bool isSuccess = await UserConsumeDiamondMoneyAsync(userId, money, cloudGamingBase); + if (isSuccess) + { + await cloudGamingBase.SaveUserInfoCacheChangesAsync(); + } + return isSuccess; + } + + + /// + /// 扣除当前用户钻石 + /// + /// + /// + /// + public static async Task 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(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; + } + } } diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs index 2d947e2..461d801 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs @@ -31,6 +31,9 @@ using System.Threading.Tasks; namespace CloudGaming.Code.Game { + /// + /// + /// public class PlayGameBLL : CloudGamingBase { private IJYApi JYApi { get; set; }