diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs index d8a23db..6a17b5e 100644 --- a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs @@ -210,9 +210,8 @@ namespace Binance.TradeRobot.Business user.ChangeAmount(capitalChangeType, Math.Abs(changeAmount), false); + var updateUser = fsql.Update(user.Id).Set(u => u.TotalAssets, user.TotalAssets); - var updateUser = fsql.Update(user.Id).Set(u => u.CostAmount, user.CostAmount) - .Set(u => u.Profit, user.Profit); updateUserList.Add(updateUser); insertUserAccountProfitLossRecordList.Add(new UserAccountProfitLossRecord() { @@ -226,7 +225,7 @@ namespace Binance.TradeRobot.Business UserId = user.Id, RobotId = robot.Id, DividendRatio = user.DividendRatio, - UserProfit = user.Profit + CumulativeProfitAndLoss = user.CumulativeProfitAndLoss }); } } diff --git a/Binance.TradeRobot.Business/Business/UserBusiness.cs b/Binance.TradeRobot.Business/Business/UserBusiness.cs index 427f38e..0f49d4b 100644 --- a/Binance.TradeRobot.Business/Business/UserBusiness.cs +++ b/Binance.TradeRobot.Business/Business/UserBusiness.cs @@ -60,16 +60,7 @@ namespace Binance.TradeRobot.Business public IList GetUserList(bool multiplyBy100 = true) { - var userList = fsql.Select().ToList(u => new UserResponse() - { - Id = u.Id, - CostAmount = u.CostAmount, - CreateTime = u.CreateTime, - Profit = u.Profit, - UpdateTime = u.UpdateTime, - UserName = u.UserName, - WithdrawAmount = u.WithdrawAmount - }); + var userList = fsql.Select().ToList().Map>(); userList.CalculateRatio(multiplyBy100); return userList; } @@ -95,44 +86,16 @@ namespace Binance.TradeRobot.Business { if (changeUser.TotalAssets < changeAmount) throw new BusinessException("用户资产小于减持资金,不能提现"); - - //获取交易所账户总额(usdt) - //var apiKeyList = stockExchangeAccountBusiness.GetAPIKeyList(null); - //var totalBalance = apiKeyList.Sum(k => k.Balance); - //if (totalBalance < changeAmount) - // throw new BusinessException("交易所总余额小于减持资金,不能提现"); } + changeUser.ChangeAmount(capitalChangeType, changeAmount, true); - //if (capitalChangeType == Enums.CapitalChangeType.Add) - //{ - // changeUser.CostAmount += changeAmount; - //} - //else if (capitalChangeType == Enums.CapitalChangeType.Reduce) - //{ - // if (changeUser.Profit > 0) - // { - // if (changeUser.Profit >= changeAmount) - // changeUser.Profit -= changeAmount; //收益足够提现,只扣收益 - // else - // { - // var lessChangeAmount = changeAmount; //收益不足提现,先扣收益,不足部分再扣本金 - // lessChangeAmount -= changeUser.Profit; - // changeUser.Profit = 0; - // changeUser.CostAmount -= lessChangeAmount; - // } - // } - // else - // { - // changeUser.CostAmount -= changeAmount; - // } - //} fsql.Transaction(() => { fsql.Update(changeUser.Id).Set(u => u.CostAmount, changeUser.CostAmount) - .Set(u => u.Profit, changeUser.Profit) - .SetIf(capitalChangeType == Enums.CapitalChangeType.Reduce, u => u.WithdrawAmount + changeAmount) - .ExecuteAffrows(); + .Set(u => u.TotalAssets, changeUser.TotalAssets) + .Set(u => u.WithdrawAmount, changeUser.WithdrawAmount) + .ExecuteAffrows(); fsql.Insert(new UserAccountFundChangeRecord() { @@ -177,32 +140,20 @@ namespace Binance.TradeRobot.Business if (fromUser.TotalAssets < fundsTransferRequest.ChangeAmount) throw new BusinessException("用户资产小于转移资金,不能转移"); - if (fromUser.Profit > 0) - { - if (fromUser.Profit >= fundsTransferRequest.ChangeAmount) - fromUser.Profit -= fundsTransferRequest.ChangeAmount; //收益足够提现,只扣收益 - else - { - var lessChangeAmount = fundsTransferRequest.ChangeAmount; //收益不足提现,先扣收益,不足部分再扣本金 - lessChangeAmount -= fromUser.Profit; - fromUser.Profit = 0; - fromUser.CostAmount -= lessChangeAmount; - } - } - else - { - fromUser.CostAmount -= fundsTransferRequest.ChangeAmount; - } + fromUser.ChangeAmount(Enums.CapitalChangeType.Reduce, fundsTransferRequest.ChangeAmount, true); + toUser.ChangeAmount(Enums.CapitalChangeType.Add, fundsTransferRequest.ChangeAmount, true); + fsql.Transaction(() => { fsql.Update(fromUser.Id).Set(u => u.CostAmount, fromUser.CostAmount) - .Set(u => u.Profit, fromUser.Profit) - .Set(u => u.WithdrawAmount + fundsTransferRequest.ChangeAmount) - .ExecuteAffrows(); + .Set(u => u.TotalAssets, fromUser.TotalAssets) + .Set(u => u.WithdrawAmount, fromUser.WithdrawAmount) + .ExecuteAffrows(); - fsql.Update(toUser.Id).Set(u => u.CostAmount + fundsTransferRequest.ChangeAmount) - .ExecuteAffrows(); + fsql.Update(toUser.Id).Set(u => u.CostAmount, toUser.CostAmount) + .Set(u => u.TotalAssets, toUser.TotalAssets) + .ExecuteAffrows(); fsql.Insert(new UserAccountFundChangeRecord() { @@ -283,7 +234,7 @@ namespace Binance.TradeRobot.Business Symbol = r.Symbol, UserId = p.UserId, UserName = u.UserName, - UserProfit = p.UserProfit + CumulativeProfitAndLoss = p.CumulativeProfitAndLoss }); return new UserAccountProfitLossRecordListResponse() { diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml index b8cd636..031fbb0 100644 --- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml +++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml @@ -494,19 +494,19 @@ 现货持仓均价 - + - 投资本金 + 用户资产 - + - 收益 + 投资本金 - 提前金额 + 提现金额 @@ -549,9 +549,9 @@ 订单利润 - + - 用户投资收益 + 累计盈亏 @@ -785,9 +785,9 @@ 对端用户名 - + - 总资产(本金+收益) + 累计盈亏 @@ -806,7 +806,7 @@ - true:优先增加本金 false:优先增加利润 + 是否手动操作 diff --git a/Binance.TradeRobot.Model/Db/User/User.cs b/Binance.TradeRobot.Model/Db/User/User.cs index 5ef0740..d0b1de3 100644 --- a/Binance.TradeRobot.Model/Db/User/User.cs +++ b/Binance.TradeRobot.Model/Db/User/User.cs @@ -10,6 +10,12 @@ namespace Binance.TradeRobot.Model.Db [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } + /// + /// 用户资产 + /// + [Column(DbType = "decimal(18,8)")] + public decimal TotalAssets { get; set; } = 0.0M; + /// /// 投资本金 /// @@ -19,11 +25,11 @@ namespace Binance.TradeRobot.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } - /// - /// 收益 - /// - [Column(DbType = "decimal(18,8)")] - public decimal Profit { get; set; } = 0.0M; + ///// + ///// 收益 + ///// + //[Column(DbType = "decimal(18,8)")] + //public decimal Profit { get; set; } = 0.0M; [Column(StringLength = 20)] public string Pwd { get; set; } @@ -35,7 +41,7 @@ namespace Binance.TradeRobot.Model.Db public string UserName { get; set; } /// - /// 提前金额 + /// 提现金额 /// [Column(DbType = "decimal(18,8)")] public decimal WithdrawAmount { get; set; } = 0.0M; diff --git a/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs b/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs index e26ea7d..523c43c 100644 --- a/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs +++ b/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs @@ -49,10 +49,10 @@ namespace Binance.TradeRobot.Model.Db public long UserId { get; set; } /// - /// 用户投资收益 + /// 累计盈亏 /// [Column(DbType = "decimal(18,8)")] - public decimal UserProfit { get; set; } = 0.0M; + public decimal CumulativeProfitAndLoss { get; set; } = 0.0M; [Column(MapType = typeof(int), DbType = "int")] public Enums.Exchange ExchangeId { get; set; } diff --git a/Binance.TradeRobot.Model/Dto/Response/User/UserResponse.cs b/Binance.TradeRobot.Model/Dto/Response/User/UserResponse.cs index 11836ce..31a30bf 100644 --- a/Binance.TradeRobot.Model/Dto/Response/User/UserResponse.cs +++ b/Binance.TradeRobot.Model/Dto/Response/User/UserResponse.cs @@ -5,9 +5,9 @@ namespace Binance.TradeRobot.Model.Dto public class UserResponse : Db.User { /// - /// 总资产(本金+收益) + /// 累计盈亏 /// - public decimal TotalAssets { get { return CostAmount + Profit; } } + public decimal CumulativeProfitAndLoss { get { return TotalAssets - CostAmount; } } /// /// 本金比例 @@ -24,33 +24,25 @@ namespace Binance.TradeRobot.Model.Dto /// /// /// - /// true:优先增加本金 false:优先增加利润 - public void ChangeAmount(Enums.CapitalChangeType capitalChangeType, decimal changeAmount, bool priorityAddCost) + /// 是否手动操作 + public void ChangeAmount(Enums.CapitalChangeType capitalChangeType, decimal changeAmount, bool isManualOperation) { if (capitalChangeType == Enums.CapitalChangeType.Add) { - if (priorityAddCost) + TotalAssets += changeAmount; + if (isManualOperation) CostAmount += changeAmount; - else - Profit += changeAmount; } else if (capitalChangeType == Enums.CapitalChangeType.Reduce) { - if (Profit > 0) - { - if (Profit >= changeAmount) - Profit -= changeAmount; //收益足够提现,只扣收益 - else - { - var lessChangeAmount = changeAmount; //收益不足提现,先扣收益,不足部分再扣本金 - lessChangeAmount -= Profit; - Profit = 0; - CostAmount -= lessChangeAmount; - } - } - else + var cumulativeProfitAndLoss = CumulativeProfitAndLoss; + TotalAssets -= changeAmount; + + if (isManualOperation) { - CostAmount -= changeAmount; + if (cumulativeProfitAndLoss < changeAmount) + CostAmount -= cumulativeProfitAndLoss > 0 ? changeAmount - cumulativeProfitAndLoss : changeAmount; + WithdrawAmount += changeAmount; } } }