From ffe68945d671c06a9aab7b1572e75076d72a0dff Mon Sep 17 00:00:00 2001 From: zpc Date: Wed, 28 Aug 2024 22:46:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Cache/Special/ProductEntityCache.cs | 2 +- .../HuanMeng.MiaoYu.Code/Mall/ProductBLL.cs | 27 +++++- .../HuanMeng.MiaoYu.Code/Order/OrderBLL.cs | 75 +++++++++++++++++ .../HuanMeng.MiaoYu.Code/Users/UserBLL.cs | 83 +++++++++++++++++++ .../Users/UserCurrencyBLL.cs | 68 +++++++++++++-- .../HuanMeng.MiaoYu.Code/Users/UserInfoBLL.cs | 36 ++++---- .../DbSqlServer/Db_MiaoYu/MiaoYuContext.cs | 1 + .../Db_MiaoYu/T_User_MemoryCard.cs | 2 + .../Dto/Order/BuyProductRequest.cs | 23 +++++ .../Dto/Shop/ShopInfoDto.cs | 15 ++++ .../EnumModel/User/UserCurrencyType.cs | 13 ++- .../EnumModel/UserCurrencyConsumeType.cs | 2 +- .../Controllers/AccountController.cs | 13 ++- .../Controllers/ChatController.cs | 18 +++- .../Controllers/PaymentController.cs | 12 +++ 15 files changed, 355 insertions(+), 35 deletions(-) create mode 100644 src/0-core/HuanMeng.MiaoYu.Model/Dto/Order/BuyProductRequest.cs diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/ProductEntityCache.cs b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/ProductEntityCache.cs index e698aeb..6acd329 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/ProductEntityCache.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Cache/Special/ProductEntityCache.cs @@ -123,7 +123,7 @@ namespace HuanMeng.MiaoYu.Code.Cache.Special var imgUrl = product.ProductImg; var price = product.Price; - if (product.IsFirstCharge && userOrderBy.ContainsKey(product.ProductId)) + if (product.IsFirstCharge && !userOrderBy.ContainsKey(product.ProductId)) { imgUrl = product.FirstChargeImg; diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Mall/ProductBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Mall/ProductBLL.cs index 9a98cfe..1c344e4 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Mall/ProductBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Mall/ProductBLL.cs @@ -45,17 +45,40 @@ namespace HuanMeng.MiaoYu.Code.Mall } /// - /// + /// 商城 /// /// public async Task> GetShopInfoListAsync() { ShopInfoDto myAccountInfoDto = new ShopInfoDto(); UserInfoBLL user = new UserInfoBLL(Dao, _UserId); + Dictionary orderDictionary = new Dictionary(); + if (_UserId > 0) + { + orderDictionary = Dao.daoDbMiaoYu.context.T_Order + .Where(it => it.UserId == _UserId) + .GroupBy(it => it.OrderId) + .ToDictionary(it => it.Key, it => it.Count()); + } ProductEntityCache productEntityCache = new ProductEntityCache(this); - var list = productEntityCache.GetMallItemDto(null); + var list = productEntityCache.GetMallItemDto(orderDictionary); myAccountInfoDto.Mall = list; + var cardList = await Dao.daoDbMiaoYu.context.T_User_MemoryCard.Where(it => it.UserId == _UserId && it.CharacterId == 0).ToListAsync(); myAccountInfoDto.Purchased = new List(); + cardList?.ForEach(it => + { + PurchasedItemDto purchasedItemDto = new PurchasedItemDto() + { + ProductId = it.PopId, + BuyingTime = it.CreateTime, + ImgUrl = it.Image, + ProductName = it.Name, + PropName = it.Name, + PriceType = 0, + PropType = (int)ProductType.记忆卡 + }; + myAccountInfoDto.Purchased.Add(purchasedItemDto); + }); return new BaseResponse(ResonseCode.Success, "", myAccountInfoDto); } diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs index 7fe61e1..d8471d5 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs @@ -1,12 +1,18 @@ +using HuanMeng.MiaoYu.Code.AppExtend; using HuanMeng.MiaoYu.Code.Cache.Special; using HuanMeng.MiaoYu.Code.DataAccess; using HuanMeng.MiaoYu.Code.Payment; using HuanMeng.MiaoYu.Code.Users; using HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; using HuanMeng.MiaoYu.Model.Dto.Order; +using HuanMeng.MiaoYu.Model.EnumModel.User; + +using Microsoft.Extensions.Logging; using Newtonsoft.Json; +using StackExchange.Redis; + using System; using System.Collections.Generic; using System.Linq; @@ -104,6 +110,75 @@ namespace HuanMeng.MiaoYu.Code.Order } return new BaseResponse(ResonseCode.Success, tips, true); } + + /// + /// 购买产品 + /// + /// + /// + /// + /// + public async Task> BuyProduct(string productId, int buyCount = 1) + { + if (buyCount < 1) + { + buyCount = 1; + } + var product = await Dao.daoDbMiaoYu.context.T_Products.Where(it => it.ProductId == productId && it.ProductType == 1).FirstOrDefaultAsync(); + if (product == null) + { + + throw new Exception("未找到产品"); + } + var image = product.ProductImgId.GetImageUrl(this); + var user = await Dao.daoDbMiaoYu.context.T_User.FirstOrDefaultAsync(it => it.Id == _UserId); + if (user == null) + { + throw new Exception("用户不存在"); + } + var baseKey = $"pay:lock:{_UserId}:{productId}"; + + if (!RedisCache.StringSetLock(baseKey, "", 10)) + { + throw new Exception("正在购买中"); + } + using (IDbContextTransaction transaction = Dao.daoDbMiaoYu.context.Database.BeginTransaction()) + { + try + { + var price = (((int)product.Price) * buyCount); + user.ConsumeMoneyNoWork(UserCurrencyType.语珠, -price, Dao, title: $"购买{product.ProductName}消耗{price}{UserCurrencyType.语珠}"); + for (int i = 0; i < buyCount; i++) + { + + var productReward = await Dao.daoDbMiaoYu.context.T_Products_Reward.Where(it => it.ProductId == product.ProductId).ToListAsync(); + + if (productReward != null && productReward.Count > 0) + { + List tips = new List(); + foreach (var reward in productReward) + { + var money = reward.Money; + var currency = (UserCurrencyType)reward.CurrencyType; + var userCurrency = new T_User_Currency(); + user.ConsumeMoneyNoWork(currency, money, Dao, userCurrency, productId: productId, imageUrl: image); + } + } + + } + await transaction.CommitAsync(); + } + catch (Exception ex) + { + + await transaction.RollbackAsync(); + RedisCache.KeyDelete(baseKey); + throw ex; + } + } + RedisCache.KeyDelete(baseKey); + return new BaseResponse(ResonseCode.Success, $"购买成功,获得{product.ProductName}*{buyCount}", true) { }; + } } /// diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserBLL.cs index e6140b0..9010945 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserBLL.cs @@ -6,11 +6,15 @@ using HuanMeng.MiaoYu.Code.Users.UserAccount.PhoneAccount; using HuanMeng.MiaoYu.Model.Dto; using HuanMeng.MiaoYu.Model.Dto.Account; using HuanMeng.MiaoYu.Model.Dto.Character; +using HuanMeng.MiaoYu.Model.Dto.Shop; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; +using Newtonsoft.Json; + using System; using System.Collections.Generic; using System.Linq; @@ -154,6 +158,85 @@ namespace HuanMeng.MiaoYu.Code.Users }); } + /// + /// 交易记录 + /// + /// + public async Task>> GetTransactionRecords() + { + if (_UserId == 0) + { + return new BaseResponse>(ResonseCode.Success, "", new List()); + } + var logs = await Dao.daoDbMiaoYu.context.T_User_Currency_Log.Where(it => it.UserId == _UserId && !(it.CurrencyType == (int)UserCurrencyType.聊天次数 && it.ConsumeType == 0)).OrderByDescending(it => it.Id).Take(50).ToListAsync(); + List list = new List(); + foreach (var item in logs) + { + TransactionDto transactionDto = new TransactionDto(); + transactionDto.TransactionType = 0; + transactionDto.TransactionTime = item.CreateTime; + transactionDto.CurrencyType = item.CurrencyType; + transactionDto.TransactionContent = item.Title; + transactionDto.TransactionAmount = item.Consume; + list.Add(transactionDto); + } + //var obj = JsonConvert.DeserializeObject>("[{\"TransactionContent\":\"购买记忆提升道具卡\",\"TransactionTime\":\"2024-07-18 12:58:52.963\",\"TransactionAmount\":\"-10\",\"TransactionType\":0,\"CurrencyType\":0},{\"TransactionContent\":\"充值语珠\",\"TransactionTime\":\"2024-07-17 12:58:52.963\",\"TransactionAmount\":\"+100\",\"TransactionType\":0,\"CurrencyType\":0},{\"TransactionContent\":\"充值语珠\",\"TransactionTime\":\"2024-07-16 12:58:52.963\",\"TransactionAmount\":\"+200\",\"TransactionType\":0,\"CurrencyType\":0}]"); + return new BaseResponse>(ResonseCode.Success, "", list); + } + /// + /// 获取未使用的记忆卡列表 + /// + /// + public async Task>> GetMemoryCardInfo() + { + var list = await Dao.daoDbMiaoYu.context.T_User_MemoryCard.Where(it => it.UserId == _UserId && it.CharacterId == 0).ToListAsync(); + List p = new List(); + foreach (var item in list) + { + PropInfoDto propInfoDto = new PropInfoDto() + { + PropId = item.Id, + ImgUrl = item.Image, + PropName = item.Name, + }; + p.Add(propInfoDto); + } + + return new BaseResponse>(ResonseCode.Success, "", p); + } + + /// + /// 使用记忆卡 + /// + /// + /// + /// + public async Task> UseMemoryCard(MemoryCardRequest memoryCardRequest) + { + if (memoryCardRequest.PropId == 0) + { + throw new Exception("道具id不对"); + } + var memory = await Dao.daoDbMiaoYu.context.T_User_MemoryCard.Where(it => it.UserId == _UserId && it.Id == memoryCardRequest.PropId).FirstOrDefaultAsync(); + if (memory == null) + { + throw new Exception("道具不存在"); + } + if (memory.CharacterId != 0) + { + throw new Exception("记忆卡已经被使用"); + } + var key = $"Memory:lock:{_UserId}:{memoryCardRequest.CharacterId}:{memoryCardRequest.PropId}"; + if (!RedisCache.StringSetLock(key, "", 10)) + { + throw new Exception("记忆卡重复使用"); + } + memory.CharacterId = memoryCardRequest.CharacterId; + memory.Remark = $"记忆卡使用时间{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"; + await Dao.daoDbMiaoYu.context.SaveChangesAsync(); + RedisCache.KeyDelete(key); + return new BaseResponse(ResonseCode.Success, "使用成功", true); + } /// /// 账号注销 /// diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs index 5cbf269..12d9d38 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using static System.Net.Mime.MediaTypeNames; using static System.Runtime.InteropServices.JavaScript.JSType; namespace HuanMeng.MiaoYu.Code.Users @@ -109,14 +110,14 @@ namespace HuanMeng.MiaoYu.Code.Users /// /// /// - public static bool ConsumeMoneyNoWork(this T_User user, UserCurrencyType userCurrencyType, decimal money, DAO dao, T_User_Currency? _currency = null, string orderId = "", string title = "") + public static bool ConsumeMoneyNoWork(this T_User user, UserCurrencyType userCurrencyType, decimal money, DAO dao, T_User_Currency? _currency = null, string orderId = "", string title = "", string productId = "", string imageUrl = "") { if (user == null || user.Id == 0) { throw new ArgumentNullException("用户不能为空"); } int userId = user.Id; - return ConsumeMoneyNoWork(userId, userCurrencyType, money, dao, _currency, orderId: orderId, title: title); + return ConsumeMoneyNoWork(userId, userCurrencyType, money, dao, _currency, orderId: orderId, title: title, productId: productId, imageUrl: imageUrl); } /// /// 扣除或者充值货币 @@ -162,6 +163,32 @@ namespace HuanMeng.MiaoYu.Code.Users } + public static UserCurrencyType[] MUserCurrencyType = new UserCurrencyType[] { + UserCurrencyType.高级记忆卡, + UserCurrencyType.中级记忆卡, + UserCurrencyType.初级记忆卡 + }; + /// + /// + /// + /// + /// + public static UserMemoryCardType GetUserMemoryCardType(this UserCurrencyType userCurrency) + { + if (UserCurrencyType.高级记忆卡 == userCurrency) + { + return UserMemoryCardType.高级记忆卡; + } + if (UserCurrencyType.中级记忆卡 == userCurrency) + { + return UserMemoryCardType.中级记忆卡; + } + if (UserCurrencyType.初级记忆卡 == userCurrency) + { + return UserMemoryCardType.初级记忆卡; + } + return UserMemoryCardType.记忆卡; + } /// /// 扣除或者充值货币,没有事务 /// > @@ -169,10 +196,39 @@ namespace HuanMeng.MiaoYu.Code.Users /// 货币类型 /// 扣除金额(负数扣除,正数添加) /// 数据库 + /// + /// + /// + /// + /// + /// /// /// - public static bool ConsumeMoneyNoWork(int userId, UserCurrencyType userCurrencyType, decimal money, DAO dao, T_User_Currency? _currency = null, string remarks = "", string title = "", string orderId = "") + public static bool ConsumeMoneyNoWork(int userId, UserCurrencyType userCurrencyType, decimal money, DAO dao, T_User_Currency? _currency = null, string remarks = "", string title = "", string orderId = "", string productId = "", string imageUrl = "") { + //记忆卡特殊处理 + if (MUserCurrencyType.Contains(userCurrencyType) && money > 0) + { + var memoryCardType = userCurrencyType.GetUserMemoryCardType(); + T_User_MemoryCard t_User_MemoryCard = new T_User_MemoryCard() + { + RemainingCount = (int)money, + CharacterId = 0, + MemoryCardToken = memoryCardType.GetUserMemoryCardTypeToken(), + CreateTime = DateTime.Now, + MemoryCardType = (int)memoryCardType, + UseCount = 0, + Name = userCurrencyType.ToString(), + PopId = productId, + Remark = remarks, + TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, + UpdateTime = DateTime.Now, + UserId = userId, + Image = imageUrl + }; + dao.daoDbMiaoYu.context.T_User_MemoryCard.Add(t_User_MemoryCard); + money = 1; + } var userCurrency = dao.daoDbMiaoYu.context.T_User_Currency.FirstOrDefault(it => it.UserId == userId && it.CurrencyType == (int)userCurrencyType); if (userCurrency == null) { @@ -189,17 +245,19 @@ namespace HuanMeng.MiaoYu.Code.Users dao.daoDbMiaoYu.context.Add(userCurrency); dao.daoDbMiaoYu.context.SaveChanges(); } + userCurrency.CurrencyMoney += money; if (userCurrency.CurrencyMoney < 0) { //余额不足 throw new Exception("余额不足"); } + T_User_Currency_Log? log = null; UserCurrencyConsumeType userCurrencyConsumeType = UserCurrencyConsumeType.消耗; if (money >= 0) { - userCurrencyConsumeType = UserCurrencyConsumeType.充值; + userCurrencyConsumeType = UserCurrencyConsumeType.购买; } if (userCurrencyType == UserCurrencyType.聊天次数 && userCurrencyConsumeType == UserCurrencyConsumeType.消耗) @@ -361,7 +419,7 @@ namespace HuanMeng.MiaoYu.Code.Users UserCurrencyConsumeType userCurrencyConsumeType = UserCurrencyConsumeType.消耗; if (money >= 0) { - userCurrencyConsumeType = UserCurrencyConsumeType.充值; + userCurrencyConsumeType = UserCurrencyConsumeType.购买; } if (userCurrencyType == UserCurrencyType.聊天次数 && userCurrencyConsumeType == UserCurrencyConsumeType.消耗) diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserInfoBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserInfoBLL.cs index 43a1b1f..29d2258 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserInfoBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserInfoBLL.cs @@ -98,7 +98,7 @@ namespace HuanMeng.MiaoYu.Code.Users /// /// 记忆卡 /// - public Dictionary>? UserMemoryCard { get; set; } + public Dictionary>>? UserMemoryCard { get; set; } /// /// 获取记忆卡 /// @@ -113,10 +113,10 @@ namespace HuanMeng.MiaoYu.Code.Users if (UserMemoryCard == null) { string key = $"{dao.daoDbMiaoYu.context.TenantInfo.TenantId}:User:{userId}:MemoryCard"; - UserMemoryCard = MemoryCacheHelper.GetCache>>(key); + UserMemoryCard = MemoryCacheHelper.GetCache>>>(key); if (UserMemoryCard == null) { - UserMemoryCard = new Dictionary>(); + UserMemoryCard = new Dictionary>>(); //获取当前用户所有的记忆卡 var _currencuys = dao.daoDbMiaoYu.context.T_User_MemoryCard.AsNoTracking().Where(it => it.UserId == userId && it.RemainingCount > 0).ToList(); if (_currencuys != null) @@ -124,10 +124,16 @@ namespace HuanMeng.MiaoYu.Code.Users var characterIds = _currencuys.Select(it => it.CharacterId).Distinct().ToList(); foreach (var _characterId in characterIds) { - var _temp = new Dictionary(); + var _temp = new Dictionary>(); + foreach (var item in _currencuys) { - _temp.Add((UserMemoryCardType)item.MemoryCardType, item); + var k = (UserMemoryCardType)item.MemoryCardType; + if (_temp.ContainsKey(k)) + { + _temp.Add((UserMemoryCardType)item.MemoryCardType, new List()); + } + _temp[k].Add(item); } UserMemoryCard.Add(_characterId, _temp); } @@ -135,36 +141,36 @@ namespace HuanMeng.MiaoYu.Code.Users MemoryCacheHelper.SetCache(key, UserMemoryCard, 60 * 5); } } - T_User_MemoryCard? _memoryCard = null; + List? _memoryCards = null; if (UserMemoryCard.TryGetValue(characterId, out var _m)) { if (userMemoryCardType == UserMemoryCardType.记忆卡) { - if (_m.TryGetValue(UserMemoryCardType.高级记忆卡, out _memoryCard)) + if (_m.TryGetValue(UserMemoryCardType.高级记忆卡, out _memoryCards)) { - return _memoryCard; + return _memoryCards[0]; } - if (_m.TryGetValue(UserMemoryCardType.中级记忆卡, out _memoryCard)) + if (_m.TryGetValue(UserMemoryCardType.中级记忆卡, out _memoryCards)) { - return _memoryCard; + return _memoryCards[0]; } - if (_m.TryGetValue(UserMemoryCardType.初级记忆卡, out _memoryCard)) + if (_m.TryGetValue(UserMemoryCardType.初级记忆卡, out _memoryCards)) { - return _memoryCard; + return _memoryCards[0]; } } else { - if (_m.TryGetValue(userMemoryCardType, out _memoryCard)) + if (_m.TryGetValue(userMemoryCardType, out _memoryCards)) { - return _memoryCard; + return _memoryCards[0]; } } } - return _memoryCard; + return null; } } diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs index 337f935..01bbdeb 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs @@ -1221,6 +1221,7 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext entity.Property(e => e.CreateTime) .HasComment("创建时间") .HasColumnType("datetime"); + entity.Property(e => e.Image).HasMaxLength(200); entity.Property(e => e.MemoryCardToken).HasComment("记忆卡提升的token"); entity.Property(e => e.MemoryCardType).HasComment("记忆卡类型,0初级,1中级,2高级"); entity.Property(e => e.Name) diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_User_MemoryCard.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_User_MemoryCard.cs index 3183301..9ba681a 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_User_MemoryCard.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_User_MemoryCard.cs @@ -65,4 +65,6 @@ public partial class T_User_MemoryCard: MultiTenantEntity /// 计费产品Id /// public virtual string PopId { get; set; } = null!; + + public virtual string? Image { get; set; } } diff --git a/src/0-core/HuanMeng.MiaoYu.Model/Dto/Order/BuyProductRequest.cs b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Order/BuyProductRequest.cs new file mode 100644 index 0000000..b874c77 --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Order/BuyProductRequest.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HuanMeng.MiaoYu.Model.Dto.Order +{ + /// + /// + /// + public class BuyProductRequest + { + /// + /// 产品编号 + /// + public string ProductId { get; set; } + /// + /// 购买数量 + /// + public int? BuyCount { get; set; } = 1; + } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/Dto/Shop/ShopInfoDto.cs b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Shop/ShopInfoDto.cs index d6662f7..577ad83 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/Dto/Shop/ShopInfoDto.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/Dto/Shop/ShopInfoDto.cs @@ -105,4 +105,19 @@ namespace HuanMeng.MiaoYu.Model.Dto.Shop /// public string ImgUrl { get; set; } } + + /// + /// 使用记忆卡 + /// + public class MemoryCardRequest + { + /// + /// 记忆卡Id + /// + public int PropId { get; set; } + /// + /// 角色Id + /// + public int CharacterId { get; set; } + } } diff --git a/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs b/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs index ace48c1..ade3b93 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs @@ -29,6 +29,17 @@ namespace HuanMeng.MiaoYu.Model.EnumModel.User /// 记忆卡 = 3, - + /// + /// 初级记忆卡 + /// + 初级记忆卡 = 301, + /// + /// 中级记忆卡 + /// + 中级记忆卡 = 302, + /// + /// 高级记忆卡 + /// + 高级记忆卡 = 303 } } diff --git a/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/UserCurrencyConsumeType.cs b/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/UserCurrencyConsumeType.cs index 6cb9c41..6886ee5 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/UserCurrencyConsumeType.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/UserCurrencyConsumeType.cs @@ -18,6 +18,6 @@ namespace HuanMeng.MiaoYu.Model.EnumModel /// /// /// - 充值 = 1 + 购买 = 1 } } diff --git a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/AccountController.cs b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/AccountController.cs index 8bde8c2..6f66dfe 100644 --- a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/AccountController.cs +++ b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/AccountController.cs @@ -84,10 +84,9 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers [HttpGet] public async Task> GetMyAccount() { - ProductBLL productBLL= new ProductBLL(ServiceProvider); + ProductBLL productBLL = new ProductBLL(ServiceProvider); return await productBLL.GetMyAccountInfoList(); - //var obj = JsonConvert.DeserializeObject("{\"Currency\":1,\"CurrencyRechargeList\":[{\"Id\":0,\"CurrencyCount\":100,\"Price\":10,\"Discount\":\" 0%\",\"CurrencyType\":0,\"ImgUrl\":\"\"},{\"Id\":1,\"CurrencyCount\":200,\"Price\":20,\"Discount\":\" -10%\",\"CurrencyType\":0,\"ImgUrl\":\"\"}]}"); - //return new BaseResponse(ResonseCode.Success, "", obj); + } /// @@ -97,10 +96,12 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers [HttpGet] public async Task>> GetTransactionRecords() { - var obj = JsonConvert.DeserializeObject>("[{\"TransactionContent\":\"购买记忆提升道具卡\",\"TransactionTime\":\"2024-07-18 12:58:52.963\",\"TransactionAmount\":\"-10\",\"TransactionType\":0,\"CurrencyType\":0},{\"TransactionContent\":\"充值语珠\",\"TransactionTime\":\"2024-07-17 12:58:52.963\",\"TransactionAmount\":\"+100\",\"TransactionType\":0,\"CurrencyType\":0},{\"TransactionContent\":\"充值语珠\",\"TransactionTime\":\"2024-07-16 12:58:52.963\",\"TransactionAmount\":\"+200\",\"TransactionType\":0,\"CurrencyType\":0}]"); - return new BaseResponse>(ResonseCode.Success, "", obj); + UserBLL userBLL = new UserBLL(ServiceProvider); + return await userBLL.GetTransactionRecords(); + } + /// /// 商城 - 获取商城商品 Mall /// @@ -111,8 +112,6 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers { ProductBLL productBLL = new ProductBLL(ServiceProvider); return await productBLL.GetShopInfoListAsync(); - //var obj = JsonConvert.DeserializeObject("{\"Mall\":[{\"PropId\":1,\"PropName\":\"记忆卡1\",\"PropCount\":100,\"PropType\":0,\"Price\":10,\"PriceType\":0,\"ImgUrl\":\"https://cos.shhuanmeng.com/image/20240718110512.png\"},{\"PropId\":2,\"PropName\":\"记忆卡2\",\"PropCount\":100,\"PropType\":0,\"Price\":20,\"PriceType\":0,\"ImgUrl\":\"https://cos.shhuanmeng.com/image/20240718110518.png\"}],\"Purchased\":[{\"PropId\":2,\"PropName\":\"记忆卡2\",\"PropCount\":100,\"PropType\":0,\"Price\":20,\"PriceType\":0,\"ImgUrl\":\"https://cos.shhuanmeng.com/image/20240718110518.png\",\"BuyingTime\":\"2024-07-09 03:33:09.563\"}]}"); - //return new BaseResponse(ResonseCode.Success, "", obj); } /// diff --git a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs index 05b7677..3adca51 100644 --- a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs +++ b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs @@ -2,6 +2,7 @@ using HuanMeng.DotNetCore.Base; using HuanMeng.MiaoYu.Code.Cache; using HuanMeng.MiaoYu.Code.Character; using HuanMeng.MiaoYu.Code.Chat; +using HuanMeng.MiaoYu.Code.Users; using HuanMeng.MiaoYu.Model.Dto.Character; using HuanMeng.MiaoYu.Model.Dto.Chat; using HuanMeng.MiaoYu.Model.Dto.Shop; @@ -139,11 +140,22 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers /// /// [HttpGet] - [AllowAnonymous] public async Task>> GetMemoryCardInfo() { - var obj = JsonConvert.DeserializeObject>("[{\"PropId\":\"1\",\"PropName\":\"记忆卡1\",\"ImgUrl\":\"\"},{\"PropId\":\"2\",\"PropName\":\"记忆卡2\",\"ImgUrl\":\"\"}]"); - return new BaseResponse>(ResonseCode.Success, "", obj); + UserBLL userBLL = new UserBLL(ServiceProvider); + return await userBLL.GetMemoryCardInfo(); + } + + /// + /// 使用道具卡 + /// + /// + /// + [HttpPost] + public async Task> UseMemoryCard([FromBody] MemoryCardRequest memoryCardRequest) + { + UserBLL userBLL = new UserBLL(ServiceProvider); + return await userBLL.UseMemoryCard(memoryCardRequest); } } } diff --git a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/PaymentController.cs b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/PaymentController.cs index 498c8af..0cd3084 100644 --- a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/PaymentController.cs +++ b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/PaymentController.cs @@ -45,5 +45,17 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers OrderBLL orderBLL = new OrderBLL(ServiceProvider); return await orderBLL.GetOrderRewardsInfo(orderId); } + /// + /// 购买商城物品 + /// + /// + /// + [HttpPost] + public async Task> BuyProduct([FromBody] BuyProductRequest buyProductRequest) + { + OrderBLL orderBLL = new OrderBLL(ServiceProvider); + return await orderBLL.BuyProduct(buyProductRequest.ProductId, buyProductRequest.BuyCount ?? 1); + } + } }