From 9f298b5f00e50676138a2e3f331475932255cd1b Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 27 Sep 2024 16:13:27 +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 --- .../HuanMeng.MiaoYu.Code/Music/MusicBLL.cs | 6 +- .../HuanMeng.MiaoYu.Code/Order/OrderBLL.cs | 2 +- .../Users/UserCurrencyBLL.cs | 128 ++++++++++++------ .../DbSqlServer/Db_MiaoYu/M_SongVIP.cs | 43 ++++++ .../DbSqlServer/Db_MiaoYu/MiaoYuContext.cs | 33 +++++ .../EnumModel/User/UserCurrencyType.cs | 6 +- .../Controllers/MusicController.cs | 1 + 7 files changed, 174 insertions(+), 45 deletions(-) create mode 100644 src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/M_SongVIP.cs diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Music/MusicBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Music/MusicBLL.cs index fd69547..a1087fa 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Music/MusicBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Music/MusicBLL.cs @@ -64,7 +64,7 @@ namespace HuanMeng.MiaoYu.Code.Music } //获取用户余额 UserInfoBLL userInfoBLL = new UserInfoBLL(Dao, _UserId); - var Currency = userInfoBLL[UserCurrencyType.生成音乐点数]?.CurrencyMoney; + var Currency = userInfoBLL[UserCurrencyType.音乐点数]?.CurrencyMoney; string sqlString = $@"select isnull(sum(PlayCount),0) PlayCount,isnull(sum(LikeCount),0) LikeCount,isnull(sum(DownloadCount),0) DownloadCount from M_Songs where AuthorId={_UserId}"; var info = Dao.daoDbMiaoYu.context.Database.SqlQueryRaw(sqlString).FirstOrDefault(); @@ -204,7 +204,7 @@ namespace HuanMeng.MiaoYu.Code.Music throw new Exception("请先登录"); } UserInfoBLL userInfoBLL = new UserInfoBLL(Dao, _UserId); - if (!userInfoBLL.IsCheckingSufficient(UserCurrencyType.生成音乐点数, 10)) + if (!userInfoBLL.IsCheckingSufficient(UserCurrencyType.音乐点数, 10)) { throw new Exception("音乐点数不足"); } @@ -274,7 +274,7 @@ namespace HuanMeng.MiaoYu.Code.Music Dao.daoDbMiaoYu.context.Add(song2); } //扣除货币 - userInfoBLL[UserCurrencyType.生成音乐点数].ConsumeMoneyNoWork(-10, Dao); + userInfoBLL[UserCurrencyType.音乐点数].ConsumeMoneyNoWork(-10, Dao); Dao.daoDbMiaoYu.context.SaveChanges(); return new BaseResponse(ResonseCode.Success, "音乐正在生成", m_SongInfo.Id) { }; } diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs index 1bb37b1..5193ee1 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Order/OrderBLL.cs @@ -174,7 +174,7 @@ namespace HuanMeng.MiaoYu.Code.Order if (currencyTransactionParams.Log != null) { currencyTransactionParams.Log.IsHide = true; - + } } Dao.daoDbMiaoYu.context.SaveChanges(); diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs index baea70f..77efbc2 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Users/UserCurrencyBLL.cs @@ -7,6 +7,8 @@ using HuanMeng.MiaoYu.Model.EnumModel.User; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.Logging; +using StackExchange.Redis; + using System; using System.Collections.Generic; using System.Linq; @@ -253,49 +255,95 @@ namespace HuanMeng.MiaoYu.Code.Users public static bool ConsumeMoneyNoWork(CurrencyTransactionParams transactionParams, DAO dao) { bool isMemoryCardTransaction = false; - - // 记忆卡交易的特殊处理 - if (MUserCurrencyType.Contains(transactionParams.UserCurrencyType) && transactionParams.Money > 0) + if (transactionParams.Money > 0) { - isMemoryCardTransaction = true; - var memoryCardType = transactionParams.UserCurrencyType.GetUserMemoryCardType(); - T_User_MemoryCard memoryCard = new T_User_MemoryCard() + if (transactionParams.UserCurrencyType == UserCurrencyType.音乐VIP) { - RemainingCount = (int)transactionParams.Money, - CharacterId = 0, - MemoryCardToken = memoryCardType.GetUserMemoryCardTypeToken(), - CreateTime = DateTime.Now, - MemoryCardType = (int)memoryCardType, - UseCount = 0, - Name = transactionParams.Products?.ProductName ?? transactionParams.UserCurrencyType.ToString(), - PopId = transactionParams.Products?.ProductId ?? transactionParams.ProductId, - Remark = transactionParams.Remarks, - TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, - UpdateTime = DateTime.Now, - UserId = transactionParams.UserId, - Image = transactionParams.ImageUrl - }; - dao.daoDbMiaoYu.context.T_User_MemoryCard.Add(memoryCard); - var mlog = new T_User_Currency_Log() + var songVip = dao.daoDbMiaoYu.context.M_SongVIP.FirstOrDefault(it => it.UserId == transactionParams.UserId && it.Vip == 1); + if (songVip == null) + { + songVip = new M_SongVIP() + { + UserId = transactionParams.UserId, + CreateAt = DateTime.Now, + ExpirationAt = DateTime.MinValue, + UpdateAt = DateTime.Now, + Vip = 1, + Notes = transactionParams.Products?.ToString() + "_" + transactionParams.OrderId, + TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, + }; + dao.daoDbMiaoYu.context.M_SongVIP.Add(songVip); + } + if (songVip.ExpirationAt < DateTime.Now) + { + songVip.ExpirationAt = DateTime.Now; + } + songVip.ExpirationAt.AddHours((int)transactionParams.Money); + + var mlog = new T_User_Currency_Log() + { + Consume = 1, + ConsumeType = (int)UserCurrencyConsumeType.购买, + CreateTime = DateTime.Now, + CurrencyType = (int)transactionParams.UserCurrencyType, + TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, + UpdateTime = DateTime.Now, + UserId = transactionParams.UserId, + Remarks = transactionParams.Remarks, + Title = $"{transactionParams.UserCurrencyType}", + OrderId = transactionParams.OrderId, + IsHide = false + }; + mlog.Remarks += $"于{DateTime.Now:yyyy-MM-dd HH:mm:ss}购买[{transactionParams.UserCurrencyType}][{Math.Abs(transactionParams.Money)}]"; + dao.daoDbMiaoYu.context.T_User_Currency_Log.Add(mlog); + transactionParams.Log = mlog; + dao.daoDbMiaoYu.context.SaveChanges(); + return true; + } + + // 记忆卡交易的特殊处理 + if (MUserCurrencyType.Contains(transactionParams.UserCurrencyType)) { - Consume = 1, - ConsumeType = (int)UserCurrencyConsumeType.购买, - CreateTime = DateTime.Now, - CurrencyType = (int)transactionParams.UserCurrencyType, - TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, - UpdateTime = DateTime.Now, - UserId = transactionParams.UserId, - Remarks = transactionParams.Remarks, - Title = $"{transactionParams.UserCurrencyType}", - OrderId = transactionParams.OrderId, - IsHide = false - }; - mlog.Remarks += $"于{DateTime.Now:yyyy-MM-dd HH:mm:ss}购买[{transactionParams.UserCurrencyType}][{Math.Abs(transactionParams.Money)}]"; - dao.daoDbMiaoYu.context.T_User_Currency_Log.Add(mlog); - transactionParams.Log = mlog; - dao.daoDbMiaoYu.context.SaveChanges(); - return true; - //transactionParams.Money = 1; + isMemoryCardTransaction = true; + var memoryCardType = transactionParams.UserCurrencyType.GetUserMemoryCardType(); + T_User_MemoryCard memoryCard = new T_User_MemoryCard() + { + RemainingCount = (int)transactionParams.Money, + CharacterId = 0, + MemoryCardToken = memoryCardType.GetUserMemoryCardTypeToken(), + CreateTime = DateTime.Now, + MemoryCardType = (int)memoryCardType, + UseCount = 0, + Name = transactionParams.Products?.ProductName ?? transactionParams.UserCurrencyType.ToString(), + PopId = transactionParams.Products?.ProductId ?? transactionParams.ProductId, + Remark = transactionParams.Remarks, + TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, + UpdateTime = DateTime.Now, + UserId = transactionParams.UserId, + Image = transactionParams.ImageUrl + }; + dao.daoDbMiaoYu.context.T_User_MemoryCard.Add(memoryCard); + var mlog = new T_User_Currency_Log() + { + Consume = 1, + ConsumeType = (int)UserCurrencyConsumeType.购买, + CreateTime = DateTime.Now, + CurrencyType = (int)transactionParams.UserCurrencyType, + TenantId = dao.daoDbMiaoYu.context.TenantInfo.TenantId, + UpdateTime = DateTime.Now, + UserId = transactionParams.UserId, + Remarks = transactionParams.Remarks, + Title = $"{transactionParams.UserCurrencyType}", + OrderId = transactionParams.OrderId, + IsHide = false + }; + mlog.Remarks += $"于{DateTime.Now:yyyy-MM-dd HH:mm:ss}购买[{transactionParams.UserCurrencyType}][{Math.Abs(transactionParams.Money)}]"; + dao.daoDbMiaoYu.context.T_User_Currency_Log.Add(mlog); + transactionParams.Log = mlog; + dao.daoDbMiaoYu.context.SaveChanges(); + return true; + //transactionParams.Money = 1; + } } var userCurrency = dao.daoDbMiaoYu.context.T_User_Currency.FirstOrDefault(it => it.UserId == transactionParams.UserId && it.CurrencyType == (int)transactionParams.UserCurrencyType); if (userCurrency == null) diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/M_SongVIP.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/M_SongVIP.cs new file mode 100644 index 0000000..6dd0d09 --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/M_SongVIP.cs @@ -0,0 +1,43 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 音乐VIP等级 +/// +public partial class M_SongVIP: MultiTenantEntity +{ + public virtual int Id { get; set; } + + /// + /// vip等级 + /// + public virtual int Vip { get; set; } + + /// + /// 创建时间 + /// + public virtual DateTime CreateAt { get; set; } + + /// + /// 过期时间 + /// + public virtual DateTime ExpirationAt { get; set; } + + /// + /// 修改时间 + /// + public virtual DateTime UpdateAt { get; set; } + + /// + /// 备注 + /// + public virtual string? Notes { get; set; } + + /// + /// 用户Id + /// + public virtual int UserId { get; set; } + + public override Guid TenantId { get; set; } + } 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 2ae940e..73615a4 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 @@ -78,6 +78,11 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext /// public virtual DbSet M_SongInfo { get; set; } + /// + /// 音乐VIP等级 + /// + public virtual DbSet M_SongVIP { get; set; } + /// /// 存储所有生成的歌曲的信息 /// @@ -417,6 +422,34 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext } }); + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__M_SongVI__3214EC07B0ECE451"); + + entity.ToTable(tb => tb.HasComment("音乐VIP等级")); + + entity.Property(e => e.CreateAt) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.ExpirationAt) + .HasComment("过期时间") + .HasColumnType("datetime"); + entity.Property(e => e.Notes) + .HasMaxLength(200) + .HasComment("备注"); + entity.Property(e => e.TenantId).HasComment("租户"); + entity.Property(e => e.UpdateAt) + .HasComment("修改时间") + .HasColumnType("datetime"); + entity.Property(e => e.UserId).HasComment("用户Id"); + entity.Property(e => e.Vip).HasComment("vip等级"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__Songs__3214EC0728D42B46"); 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 2070f9c..14c3be3 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/EnumModel/User/UserCurrencyType.cs @@ -32,7 +32,11 @@ namespace HuanMeng.MiaoYu.Model.EnumModel.User /// /// 生成音乐次数 /// - 生成音乐点数 = 4, + 音乐点数 = 4, + /// + /// 音乐VIP + /// + 音乐VIP = 5, /// /// 初级记忆卡 /// diff --git a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/MusicController.cs b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/MusicController.cs index 6c1fbdd..5f493ed 100644 --- a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/MusicController.cs +++ b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/MusicController.cs @@ -176,6 +176,7 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers /// /// [HttpGet] + [AllowAnonymous] public async Task> GetShopInfoList() { MusicBLL musicBLL = new MusicBLL(ServiceProvider);