コード例 #1
0
        /// <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
        }
コード例 #2
0
        /// <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
            }
        }