/// <summary> /// 个人服务者支付给用户 /// </summary> /// <param name="error"></param> void WorkerPaymentToUser() { #region //1、个人工作人员货款从冻结金额中结算 if (_worker.FreezeMoney < _settlementAmount) { _errorMessage = "呼叫程序猿,个人服务者钱跑哪去了?冻结资金结算不了当前订单!"; return; } _worker.FreezeMoney -= _settlementAmount; #endregion #region //2、获取个人服务者支付时的交易记录信息(从中获取平台交易流水号) var _workerTradeRecord = _context.Worker_TradeRecords.Where(p => p.DataID == _order.OrderID).FirstOrDefault(); string mainTransCode = null != _workerTradeRecord ? _workerTradeRecord.PlatformTransactionCode : string.Empty; if (!string.IsNullOrWhiteSpace(mainTransCode) && mainTransCode.Length == 24) { mainTransCode = mainTransCode.Remove(23, 1); } if (mainTransCode.Length != 23) { mainTransCode = IDCreater.Instance.GetPlatformTransactionCode(PlatformTransactionType.SaleProduct, _order.AreaID); } //业务序号 int transIndex = 0; #endregion #region //3、用户获得服务中的货款并记录 string userGetSaleTransCode = mainTransCode + (++transIndex); _user.Balance += _settlementAmount; //写入个人服务用户交易记录 var userGetTrandsRecords = new User_TradeRecords { Amount = _settlementAmount, CounterpartyId = _order.WorkerID, CounterpartyIdentity = (int)CounterpartyIdentity.Worker, CreateTime = DateTime.Now, DataID = _order.OrderID, LastBalance = _user.Balance, UserID = _user.UserID, PaymentType = (int)OnlinePaymentType.Balance, PlatformTransactionCode = userGetSaleTransCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = string.Format("在上门服务中收款,订单编号:{0}", _order.OrderCode), TradeNo = string.Empty, TradeType = (int)UserTransType.Proceeds }; _context.User_TradeRecords.Add(userGetTrandsRecords); //写入平台资金流水 _context.Platform_MoneyTransaction.Add(new Platform_MoneyTransaction { Amount = userGetTrandsRecords.Amount, AreaID = _order.AreaID, CustomAccountID = userGetTrandsRecords.UserID, CustomIdentity = (int)CounterpartyIdentity.User, CustomName = _user.Username, IsMainTransaction = false, LastBalance = userGetTrandsRecords.LastBalance, Remark = string.Format("在上门服务中收款,订单编号:{0}", _order.OrderCode), ThirdTransactionCode = string.Empty, TransactionCode = userGetSaleTransCode, TransactionTime = DateTime.Now, TransactionType = (int)PlatformTransactionType.SaleProduct }); #endregion }
/// <summary> /// 用户支付给个人服务者 /// </summary> /// <param name="error"></param> void UserPaymentToWorker() { #region//1、用户货款从冻结金额中结算 if (_user.FreezeMoney < _settlementAmount) { _errorMessage = "呼叫程序猿,用户钱跑哪去了?冻结资金结算不了当前订单!"; return; } _user.FreezeMoney -= _settlementAmount; #endregion #region //2、获取用户支付时的交易记录信息(从中获取平台交易流水号) var userTradeRecord = _context.User_TradeRecords.Where(p => p.DataID == _order.OrderID).FirstOrDefault(); string mainTransCode = null != userTradeRecord ? userTradeRecord.PlatformTransactionCode : string.Empty; if (!string.IsNullOrWhiteSpace(mainTransCode) && mainTransCode.Length == 24) { mainTransCode = mainTransCode.Remove(23, 1); } if (mainTransCode.Length != 23) { mainTransCode = IDCreater.Instance.GetPlatformTransactionCode(PlatformTransactionType.BuyService, _order.AreaID); } //业务序号 int transIndex = 0; #endregion #region //3、个人工作人员获得货款并记录 string workerGetSaleTransCode = mainTransCode + (++transIndex); _worker.Balance = _worker.Balance + _settlementAmount; //写入个人服务用户交易记录 var workerSaleTrandsRecords = new User_TradeRecords { Amount = _settlementAmount, CounterpartyId = _order.UserID, CounterpartyIdentity = (int)CounterpartyIdentity.User, CreateTime = DateTime.Now, DataID = _order.OrderID, LastBalance = _worker.Balance, UserID = _worker.UserID, PaymentType = (int)OnlinePaymentType.Balance, PlatformTransactionCode = workerGetSaleTransCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = string.Format("提供上门服务,订单编号:{0}", _order.OrderCode), TradeNo = string.Empty, TradeType = (int)UserTransType.GetWorkCommission }; _context.User_TradeRecords.Add(workerSaleTrandsRecords); //同步到工作交易记录 _context.Worker_TradeRecords.Add(new Worker_TradeRecords { Amount = workerSaleTrandsRecords.Amount, CounterpartyId = workerSaleTrandsRecords.CounterpartyId, CounterpartyIdentity = workerSaleTrandsRecords.CounterpartyIdentity, CreateTime = workerSaleTrandsRecords.CreateTime, DataID = workerSaleTrandsRecords.DataID, LastBalance = workerSaleTrandsRecords.LastBalance, UserID = workerSaleTrandsRecords.UserID, PaymentType = workerSaleTrandsRecords.PaymentType, PlatformTransactionCode = workerSaleTrandsRecords.PlatformTransactionCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = workerSaleTrandsRecords.TradeInfo, TradeNo = workerSaleTrandsRecords.TradeNo, TradeType = (int)WorkerTransType.ServiceSales }); //写入平台资金流水 _context.Platform_MoneyTransaction.Add(new Platform_MoneyTransaction { Amount = workerSaleTrandsRecords.Amount, AreaID = _order.AreaID, CustomAccountID = workerSaleTrandsRecords.UserID, CustomIdentity = (int)CounterpartyIdentity.Worker, CustomName = _worker.Username, IsMainTransaction = false, LastBalance = workerSaleTrandsRecords.LastBalance, Remark = string.Format("提供上门服务,订单编号:{0}", _order.OrderCode), ThirdTransactionCode = string.Empty, TransactionCode = workerGetSaleTransCode, TransactionTime = DateTime.Now, TransactionType = (int)PlatformTransactionType.SaleService }); #endregion //总抽成(指商家被抽) decimal totalCommissionMoney = new AreaForWorkerCommissionCalculator(_order.AreaID, _order.WorkerID, AreaWorkerCommissionOption.WorkerServiceOrder, _settlementAmount).CommissionMoney; if (totalCommissionMoney > 0) { #region //4、区域运营商抽成 #region //个人服务者返佣给运营商 _worker.Balance -= totalCommissionMoney; string workerReturnTransCode = mainTransCode + (++transIndex); //写入个人服务者返佣记录 var workerReturnTrandsRecords = new User_TradeRecords { Amount = -totalCommissionMoney, CounterpartyId = _operator.OperatorID, CounterpartyIdentity = (int)CounterpartyIdentity.AreaOperator, CreateTime = DateTime.Now, DataID = _order.OrderID, LastBalance = _worker.Balance, UserID = _order.WorkerID, PaymentType = (int)OnlinePaymentType.Balance, PlatformTransactionCode = workerReturnTransCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = string.Format("上门服务返佣金给运营商,订单编号:{0}", _order.OrderCode), TradeNo = string.Empty, TradeType = (int)UserTransType.ReturnCommission }; _context.User_TradeRecords.Add(workerReturnTrandsRecords); //同步到工作交易记录 _context.Worker_TradeRecords.Add(new Worker_TradeRecords { Amount = workerReturnTrandsRecords.Amount, CounterpartyId = workerReturnTrandsRecords.CounterpartyId, CounterpartyIdentity = workerReturnTrandsRecords.CounterpartyIdentity, CreateTime = workerReturnTrandsRecords.CreateTime, DataID = workerReturnTrandsRecords.DataID, LastBalance = workerReturnTrandsRecords.LastBalance, UserID = workerReturnTrandsRecords.UserID, PaymentType = workerReturnTrandsRecords.PaymentType, PlatformTransactionCode = workerReturnTrandsRecords.PlatformTransactionCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = workerReturnTrandsRecords.TradeInfo, TradeNo = workerReturnTrandsRecords.TradeNo, TradeType = (int)WorkerTransType.ReturnCommission }); //写入平台资金流水 _context.Platform_MoneyTransaction.Add(new Platform_MoneyTransaction { Amount = workerReturnTrandsRecords.Amount, AreaID = _order.AreaID, CustomAccountID = workerReturnTrandsRecords.UserID, CustomIdentity = (int)CounterpartyIdentity.Worker, CustomName = _worker.Username, IsMainTransaction = false, LastBalance = workerReturnTrandsRecords.LastBalance, Remark = string.Format("上门服务返佣金给运营商,订单编号:{0}", _order.OrderCode), ThirdTransactionCode = string.Empty, TransactionCode = workerReturnTransCode, TransactionTime = DateTime.Now, TransactionType = (int)PlatformTransactionType.PayCommission }); #endregion #region//运营商接收个人服务者返佣 _operator.Balance += totalCommissionMoney; string operatorGetReturnCommissionTransCode = mainTransCode + (++transIndex); //写入运营商交易记录 var operatorGetReturnCommissionTrandsRecords = new AreaOperator_TradeRecords { Amount = totalCommissionMoney, CounterpartyId = _order.WorkerID, CounterpartyIdentity = (int)CounterpartyIdentity.Worker, CreateTime = DateTime.Now, DataID = _order.OrderID, LastBalance = _operator.Balance, OpeartorID = _operator.OperatorID, PaymentType = (int)OnlinePaymentType.Balance, PlatformTransactionCode = operatorGetReturnCommissionTransCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = string.Format("从个人服务者上门服务中抽成,订单编号:{0}", _order.OrderCode), TradeNo = string.Empty, TradeType = (int)OperatorTradeType.CommissionGet }; _context.AreaOperator_TradeRecords.Add(operatorGetReturnCommissionTrandsRecords); //写入平台资金流水 _context.Platform_MoneyTransaction.Add(new Platform_MoneyTransaction { Amount = operatorGetReturnCommissionTrandsRecords.Amount, AreaID = _order.AreaID, CustomAccountID = operatorGetReturnCommissionTrandsRecords.OpeartorID, CustomIdentity = (int)CounterpartyIdentity.AreaOperator, CustomName = _operatorProfile?.CompanyName, IsMainTransaction = false, LastBalance = operatorGetReturnCommissionTrandsRecords.LastBalance, Remark = string.Format("从个人服务者上门服务中抽成,订单编号:{0}", _order.OrderCode), ThirdTransactionCode = string.Empty, TransactionCode = operatorGetReturnCommissionTransCode, TransactionTime = DateTime.Now, TransactionType = (int)PlatformTransactionType.CommissionGet }); #endregion #endregion #region//5、运营商返佣金给平台(平台抽成) //平台应抽成金额 decimal platformCommissionMoney = new PlatformCommissionCalculator(_order.AreaID, PlatformCommissionOption.AreaCommissionByWorkerOrder, totalCommissionMoney).CommissionMoney; //需要抽佣时(抽佣金额>0)才进入 if (platformCommissionMoney > 0) { //从余额中支付佣金给平台 _operator.Balance = _operator.Balance - platformCommissionMoney; //本次流水号 string operatorPayCommissionTransCode = mainTransCode + (++transIndex); //记录本次操作,写入运营商交易记录 var operatorPayCommissionTrandsRecords = new AreaOperator_TradeRecords { Amount = -platformCommissionMoney, CounterpartyId = 0, CounterpartyIdentity = (int)CounterpartyIdentity.Platform, CreateTime = DateTime.Now, DataID = _order.OrderID, LastBalance = _operator.Balance, OpeartorID = _operator.OperatorID, PaymentType = (int)OnlinePaymentType.Balance, PlatformTransactionCode = operatorPayCommissionTransCode, TradeID = IDCreater.Instance.GetID(), TradeInfo = string.Format("从个人服务者上门服务订单抽成后返佣金给平台,订单编号:{0}", _order.OrderCode), TradeNo = string.Empty, TradeType = (int)OperatorTradeType.PayCommission }; _context.AreaOperator_TradeRecords.Add(operatorPayCommissionTrandsRecords); //写入平台资金流水 _context.Platform_MoneyTransaction.Add(new Platform_MoneyTransaction { Amount = operatorPayCommissionTrandsRecords.Amount, AreaID = _order.AreaID, CustomAccountID = _operator.OperatorID, CustomIdentity = (int)CounterpartyIdentity.AreaOperator, CustomName = _operatorProfile?.CompanyName, IsMainTransaction = false, LastBalance = operatorPayCommissionTrandsRecords.LastBalance, Remark = string.Format("从个人服务者上门服务订单抽成后返佣金给平台,订单编号:{0}", _order.OrderCode), ThirdTransactionCode = string.Empty, TransactionCode = operatorPayCommissionTransCode, TransactionTime = DateTime.Now, TransactionType = (int)PlatformTransactionType.PayCommission }); } #endregion } }