diff --git a/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs b/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
index e7d5621..c54c225 100644
--- a/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
+++ b/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
@@ -8,6 +8,7 @@ using CloudGaming.Code.MiddlewareExtend;
using CloudGaming.DtoModel.Account;
using CloudGaming.DtoModel.Account.Login;
using CloudGaming.DtoModel.Account.User;
+using CloudGaming.DtoModel.Account.UserDiamondConsume;
using CloudGaming.GameModel.Db.Db_Ext;
using HuanMeng.DotNetCore.AttributeExtend;
@@ -80,4 +81,29 @@ public class AccountController : CloudGamingControllerBase
AccountBLL account = new AccountBLL(ServiceProvider);
return await account.RealAuthentication(authenticationRequest.UserName, authenticationRequest.IdCard, authenticationRequest.DeviceNumber);
}
+
+ ///
+ /// 资产收入、支出
+ ///
+ /// 0支出,收入
+ ///
+ [HttpGet]
+ [Authorize]
+ public async Task> GetUserDiamondConsumeList([FromQuery] int consumeType)
+ {
+ AccountBLL account = new AccountBLL(ServiceProvider);
+ return await account.GetUserDiamondConsumeList(consumeType);
+ }
+
+ ///
+ /// 修改用户昵称
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> UpdateUserNickName([FromBody] AccountNickNameRequest accountNickNameRequest)
+ {
+ AccountBLL account = new AccountBLL(ServiceProvider);
+ return await account.UpdateUserNickName(accountNickNameRequest.NickName);
+ }
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
index 47f1212..b9a564d 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
@@ -6,6 +6,7 @@ using CloudGaming.Code.Sms;
using CloudGaming.DtoModel.Account;
using CloudGaming.DtoModel.Account.Login;
using CloudGaming.DtoModel.Account.User;
+using CloudGaming.DtoModel.Account.UserDiamondConsume;
using HuanMeng.DotNetCore.JwtInfrastructure;
using HuanMeng.DotNetCore.Redis;
@@ -529,7 +530,7 @@ namespace CloudGaming.Code.Account
UserId = _UserId,
Ip = HttpContextAccessor.HttpContext.GetClientIpAddress()
};
- await this.GetConsumeMoney(UserCurrencyType.钻石).ConsumeMoneyAsync(10);
+ await this.UserConsumeDiamondMoneyAsync(10, "实名认证赠送");
await Dao.DaoUser.Context.T_User_LimitActionLog.AddAsync(limitActionLog);
await Dao.DaoUser.Context.SaveChangesAsync();
return "奖励已经发送,钻石*10";
@@ -602,5 +603,67 @@ namespace CloudGaming.Code.Account
#endregion
+ ///
+ /// 资产收入、支出
+ ///
+ /// 0支出,收入
+ ///
+ public async Task> GetUserDiamondConsumeList(int ConsumeType)
+ {
+ if (_UserId == 0)
+ {
+ return new List();
+ }
+ List userDiamondConsumeDtos = new List();
+ var list = await Dao.DaoUser.Context.T_User_DiamondList.Where(it => it.UserId == _UserId && it.CurrencyType == (int)UserCurrencyType.钻石 && it.ConsumeType == ConsumeType).OrderByDescending(it => it.UpdateAt).Take(200).ToListAsync();
+ list?.ForEach(it =>
+ {
+ UserDiamondConsumeDto userDiamondConsumeDto = new UserDiamondConsumeDto()
+ {
+ Title = it.Title,
+
+ };
+ if (ConsumeType == (int)UserCurrencyConsumeType.收入)
+ {
+ userDiamondConsumeDto.ConsumeDetails = $"+ {it.Consume.ToString("0.##")}{((UserCurrencyType)it.CurrencyType).ToString()}";
+ userDiamondConsumeDto.DatePrompt = $"{it.CreateAt.ToString("yyyy-MM-dd HH:mm:ss")}";
+ }
+ else
+ {
+ userDiamondConsumeDto.ConsumeDetails = $"- {it.Consume.ToString("0.##")}{((UserCurrencyType)it.CurrencyType).ToString()}";
+ userDiamondConsumeDto.DatePrompt = $"{it.CreateAt.ToString("yyyy-MM-dd HH:mm:00")} 至 {it.UpdateAt.ToString("yyyy-MM-dd HH:mm:00")}";
+ }
+ userDiamondConsumeDtos.Add(userDiamondConsumeDto);
+ });
+ return userDiamondConsumeDtos;
+ }
+
+
+ ///
+ /// 修改用户昵称
+ ///
+ ///
+ ///
+ ///
+ public async Task> UpdateUserNickName(string nickName)
+ {
+
+ var user = await Dao.DaoUser.Context.T_User.FirstOrDefaultAsync(it => it.Id == _UserId);
+ if (user == null)
+ {
+ throw new Exception("用户不存在");
+ }
+ user.NickName = nickName;
+ var userPhone = await Dao.DaoUser.Context.T_User_Phone_Account.FirstOrDefaultAsync(it => it.UserId == _UserId);
+ if (userPhone != null)
+ {
+ userPhone.NikeName = nickName;
+ }
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ this.UserInfo.NickName = nickName;
+ await this.SaveUserInfoCacheChangesAsync();
+ return new BaseResponse(ResonseCode.Success, "", true);
+ }
+
}
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
index 5d3e4b2..09b70ac 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
@@ -1,3 +1,5 @@
+using Bogus.DataSets;
+
using CloudGaming.Code.Account.Contract;
using CloudGaming.Code.Account.Login;
using CloudGaming.Code.Account.UserCurrency;
@@ -222,18 +224,148 @@ namespace CloudGaming.Code.Account
}
///
- ///
+ /// 扣除当前用户钻石
///
///
///
///
- public static IUserConsumeMoney GetConsumeMoney(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType)
+ public static IUserConsumeMoney GetCurrentUserConsumeMoney(this CloudGamingBase cloudGamingBase, UserCurrencyType userCurrencyType, T_User_Currency currency = null)
{
if (UserCurrencyType.钻石 == userCurrencyType)
{
- return new DiamondConsumeMoney(cloudGamingBase);
+ return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
}
- return new DiamondConsumeMoney(cloudGamingBase);
+ return new DiamondConsumeMoney(cloudGamingBase.Dao, cloudGamingBase._UserId, userCurrencyType, currency);
+ }
+
+ ///
+ /// 扣除当前用户钻石
+ ///
+ ///
+ ///
+ ///
+ public static IUserConsumeMoney GetCurrentUserConsumeMoney(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 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 4c2a385..a6325a8 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/UserCurrency/DiamondConsumeMoney.cs
@@ -1,4 +1,6 @@
using CloudGaming.Code.Account.Contract;
+using CloudGaming.Code.DataAccess;
+using CloudGaming.DtoModel.Account.User;
using System;
using System.Collections.Generic;
@@ -9,13 +11,72 @@ using System.Threading.Tasks;
namespace CloudGaming.Code.Account.UserCurrency
{
///
- ///
+ /// 扣除或者充值用户钻石
///
- public class DiamondConsumeMoney(CloudGamingBase cloudGamingBase) : IUserConsumeMoney
+ ///
+ ///
+ ///
+ ///
+ public class DiamondConsumeMoney(DAO dao, int userId, UserCurrencyType userCurrencyType, T_User_Currency userCurrency = null) : IUserConsumeMoney
{
- public Task ConsumeMoneyAsync(decimal money)
+ ///
+ /// 用户余额扣除
+ ///
+ ///
+ ///
+ ///
+
+ public async Task ConsumeMoneyAsync(decimal money)
{
- throw new NotImplementedException();
+
+ var currency = await dao.DaoUser.Context.T_User_Currency.Where(it => it.CurrencyType == (int)userCurrencyType && it.UserId == userId).FirstOrDefaultAsync();
+ if (currency == null)
+ {
+ currency = new T_User_Currency()
+ {
+ CreateAt = DateTime.Now,
+ CurrencyMoney = 0,
+ CurrencyName = userCurrencyType.ToString(),
+ CurrencyType = (int)userCurrencyType,
+ UserId = userId,
+ UpdateAt = DateTime.Now,
+ };
+ await dao.DaoUser.Context.T_User_Currency.AddAsync(currency);
+ await dao.DaoUser.Context.SaveChangesAsync();
+ }
+ currency.CurrencyMoney += money;
+ if (currency.CurrencyMoney < 0)
+ {
+ throw new Exception("余额不足");
+ }
+ UserCurrencyConsumeType consumeType = money >= 0 ? UserCurrencyConsumeType.收入 : UserCurrencyConsumeType.消耗;
+ var currency_Log = new T_User_Currency_Log()
+ {
+ Consume = money,
+ ConsumeType = (int)consumeType,
+ CreateAt = DateTime.Now,
+ CurrencyType = (int)userCurrencyType,
+ Remarks = $"于{DateTime.Now:yyyy-MM-dd HH:mm:ss}{consumeType}[{Math.Abs(money)}]{userCurrencyType};",
+ UpdateAt = DateTime.Now,
+ UserId = userId,
+ };
+ await dao.DaoUser.Context.T_User_Currency_Log.AddAsync(currency_Log);
+ await dao.DaoUser.Context.SaveChangesAsync();
+ if (userCurrency != null)
+ {
+ userCurrency.CurrencyMoney = currency.CurrencyMoney;
+ userCurrency.UpdateAt = currency.UpdateAt;
+ userCurrency.Id = currency.Id;
+ userCurrency.CurrencyName = currency.CurrencyName;
+ userCurrency.CreateAt = currency.CreateAt;
+ userCurrency.CurrencyType = currency.CurrencyType;
+ }
+ else
+ {
+ userCurrency = currency;
+ }
+ return true;
+
}
}
}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/AccountNickNameRequest.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/AccountNickNameRequest.cs
new file mode 100644
index 0000000..c60875e
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/AccountNickNameRequest.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.DtoModel.Account.User
+{
+ ///
+ ///
+ ///
+ public class AccountNickNameRequest
+ {
+ ///
+ ///
+ ///
+ public string NickName { get; set; }
+ }
+}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserCurrencyConsumeType.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserCurrencyConsumeType.cs
new file mode 100644
index 0000000..79845e1
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserCurrencyConsumeType.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.DtoModel.Account.User;
+
+///
+/// 用户消费类型
+///
+public enum UserCurrencyConsumeType
+{
+ ///
+ ///
+ ///
+ 消耗 = 0,
+ ///
+ ///
+ ///
+ 收入 = 1
+}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Account/UserDiamondConsume/UserDiamondConsumeDto.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/UserDiamondConsume/UserDiamondConsumeDto.cs
new file mode 100644
index 0000000..adcc35e
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/UserDiamondConsume/UserDiamondConsumeDto.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.DtoModel.Account.UserDiamondConsume
+{
+ ///
+ ///
+ ///
+ public class UserDiamondConsumeDto
+ {
+ ///
+ /// 标题
+ ///
+ public string Title { get; set; } = null!;
+
+ ///
+ /// 详情
+ ///
+ public string ConsumeDetails { get; set; }
+
+ ///
+ /// 创建时间,资产
+ ///
+ public string DatePrompt { get; set; }
+
+ }
+}
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
index b3a314b..58f5671 100644
--- a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
@@ -58,6 +58,11 @@ public partial class CloudGamingUserContext : MultiTenantDbContext//DbContext
///
public virtual DbSet T_User_Data { get; set; }
+ ///
+ /// 资产收入、支出表
+ ///
+ public virtual DbSet T_User_DiamondList { get; set; }
+
///
/// 意向订单表
///
@@ -190,26 +195,11 @@ public partial class CloudGamingUserContext : MultiTenantDbContext//DbContext
.HasComment("创建时间")
.HasColumnType("datetime");
entity.Property(e => e.CurrencyType).HasComment("金额类型");
- entity.Property(e => e.ExpiresAt)
- .HasComment("消耗的结束时间")
- .HasColumnType("datetime");
- entity.Property(e => e.GameId)
- .HasMaxLength(200)
- .HasComment("消耗的游戏Id");
- entity.Property(e => e.IsShow).HasComment("是否显示给用户");
- entity.Property(e => e.OrderId)
- .HasMaxLength(64)
- .HasComment("订单号")
- .UseCollation("Chinese_PRC_CI_AS");
entity.Property(e => e.Remarks)
- .HasMaxLength(200)
+ .HasMaxLength(255)
.HasComment("备注")
.UseCollation("Chinese_PRC_CI_AS");
entity.Property(e => e.TenantId).HasComment("租户");
- entity.Property(e => e.Title)
- .HasMaxLength(200)
- .HasComment("标题")
- .UseCollation("Chinese_PRC_CI_AS");
entity.Property(e => e.UpdateAt)
.HasComment("修改时间")
.HasColumnType("datetime");
@@ -254,6 +244,41 @@ public partial class CloudGamingUserContext : MultiTenantDbContext//DbContext
}
});
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK__T_User_D__3214EC07EF4BDC87");
+
+ entity.ToTable(tb => tb.HasComment("资产收入、支出表"));
+
+ entity.Property(e => e.Id).ValueGeneratedNever();
+ entity.Property(e => e.Consume)
+ .HasComment("金额变化")
+ .HasColumnType("decimal(18, 0)");
+ entity.Property(e => e.ConsumeType).HasComment("收入还是支出");
+ entity.Property(e => e.CreateAt)
+ .HasComment("创建时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.CurrencyType).HasComment("货币类型");
+ entity.Property(e => e.Extend)
+ .HasMaxLength(255)
+ .HasComment("扩展字段");
+ entity.Property(e => e.OrderCode)
+ .HasMaxLength(64)
+ .HasComment("订单编号");
+ entity.Property(e => e.Title)
+ .HasMaxLength(255)
+ .HasComment("标题");
+ entity.Property(e => e.UpdateAt)
+ .HasComment("结束时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.UserId).HasComment("用户Id");
+ //添加全局筛选器
+ if (this.TenantInfo != null)
+ {
+ entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId);
+ }
+ });
+
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__T_User_I__3214EC07D27A8CE9");
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_Currency_Log.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_Currency_Log.cs
index 69cb102..2e4fd7e 100644
--- a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_Currency_Log.cs
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_Currency_Log.cs
@@ -21,11 +21,6 @@ public partial class T_User_Currency_Log: MultiTenantEntity
///
public virtual int UserId { get; set; }
- ///
- /// 标题
- ///
- public virtual string? Title { get; set; }
-
///
/// 金额类型
///
@@ -55,24 +50,4 @@ public partial class T_User_Currency_Log: MultiTenantEntity
/// 修改时间
///
public virtual DateTime UpdateAt { get; set; }
-
- ///
- /// 订单号
- ///
- public virtual string? OrderId { get; set; }
-
- ///
- /// 是否显示给用户
- ///
- public virtual bool IsShow { get; set; }
-
- ///
- /// 消耗的结束时间
- ///
- public virtual DateTime? ExpiresAt { get; set; }
-
- ///
- /// 消耗的游戏Id
- ///
- public virtual string? GameId { get; set; }
}
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs
new file mode 100644
index 0000000..c5ef16d
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs
@@ -0,0 +1,58 @@
+using System;
+
+namespace CloudGaming.Model.DbSqlServer.Db_User;
+
+///
+/// 资产收入、支出表
+///
+public partial class T_User_DiamondList: MultiTenantEntity
+{
+ public T_User_DiamondList() { }
+
+ public virtual int Id { get; set; }
+
+ ///
+ /// 用户Id
+ ///
+ public virtual int UserId { get; set; }
+
+ ///
+ /// 标题
+ ///
+ public virtual string Title { get; set; } = null!;
+
+ ///
+ /// 收入还是支出
+ ///
+ public virtual int ConsumeType { get; set; }
+
+ ///
+ /// 订单编号
+ ///
+ public virtual string? OrderCode { get; set; }
+
+ ///
+ /// 金额变化
+ ///
+ public virtual decimal Consume { get; set; }
+
+ ///
+ /// 货币类型
+ ///
+ public virtual int CurrencyType { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public virtual DateTime CreateAt { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ public virtual DateTime UpdateAt { get; set; }
+
+ ///
+ /// 扩展字段
+ ///
+ public virtual string? Extend { get; set; }
+}