Exemple #1
0
        /// <summary>
        /// 跑流程
        /// </summary>
        /// <returns></returns>
        public string RunProcess()
        {
            switch (_status)
            {
            case PayStatus.Init:
                _status = PayStatus.Processing;
                return("交易建立中...");

            case PayStatus.Success:
                return("交易完成");

            case PayStatus.Cancel:
                return("交易取消完成");

            case PayStatus.Processing:
                if (_Item.Price > 300)
                {
                    _status = PayStatus.Cancel;
                    return("物件超過300元 交易取消中");
                }
                _status = PayStatus.Success;
                return("交易中請稍後");
            }
            return("不在狀態內");
        }
Exemple #2
0
        public override IEnumerable <Tuple <string, string> > GetShortInfoList()
        {
            // Информация о текущем состоянии Абонемента. Добавляем всё что должно выводиться для Пользователя
            var result = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("Тип: ", AbonementName),
                new Tuple <string, string>("Доступные Тренировки ", TypeWorkout.ToString()),
                new Tuple <string, string>("Услуги", Spa.ToString()),
                new Tuple <string, string>("Дата Покупки", BuyDate.ToShortDateString()),
                new Tuple <string, string>("Дата Активации", BuyActivationDate.ToShortDateString())
            };

            if (NumPersonalTr > 0)
            {
                result.Add(new Tuple <string, string>("Осталось Персональных", NumPersonalTr.ToString()));
            }
            if (NumAerobicTr > 0)
            {
                result.Add(new Tuple <string, string>("Осталось Аэробных", NumAerobicTr.ToString()));
            }
            if (PayStatus == Pay.Не_Оплачено)
            {
                result.Add(new Tuple <string, string>("Статус Оплаты ", PayStatus.ToString()));
            }

            return(result);
        }
Exemple #3
0
 public PayResult()
 {
     orderId = string.Empty;
     amount = 0;
     subject = string.Empty;
     body = string.Empty;
     tradeStatus = Pay.PayStatus.UnKnow;
     customParameters = new Dictionary<string, string>();
 }
Exemple #4
0
        public void AfterChangePayStatus(Order order, PayStatus oldStatus)
        {
            var systemConfig = _configService.Get <SystemConfig>();

            if (oldStatus != PayStatus.Paid && order.PayStatus == PayStatus.Paid)
            {
                //订单付款减库存
                if (systemConfig.ReduceStock == Config.Models.ReduceStock.AfterPay)
                {
                    ReduceStock(order);
                }

                //增加已付款计数
                using (var dbContext = new MallDbContext())
                {
                    foreach (var orderGoods in order.OrderGoods)
                    {
                        var goods = dbContext.Goods.FirstOrDefault(g => g.Id.Equals(orderGoods.GoodsId));
                        if (goods != null)
                        {
                            goods.PaymentAmount         += 1;
                            dbContext.Entry(goods).State = System.Data.Entity.EntityState.Modified;
                        }
                    }

                    var changeCount = dbContext.SaveChanges();
                    Logger.Operation($"订单{order.OrderNo}付款,修改了{changeCount}个产品的付款计数", MallModule.Instance);
                }
            }

            if (oldStatus == PayStatus.Paid && order.PayStatus == PayStatus.Unpaid)
            {
                //如果存在余额支付,退货余额,并设置订单余额支付为0,累计回未支付总额
                if (order.BalancePay > 0)
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        string error;
                        _walletService.Deposit(order.MemberId, Wallet.Models.WalletType.Cash, order.BalancePay,
                                               $"订单{order.OrderNo}退款", out error);

                        if (string.IsNullOrWhiteSpace(error))
                        {
                            Logger.Operation($"订单{order.OrderNo}退款,用户{order.MemberId}获得{order.BalancePay}元退款", WalletModule.Instance);
                            order.UnpayFee   = order.PayFee;
                            order.BalancePay = 0;
                            if (_currencyService.Update(order))
                            {
                                //提交
                                scope.Complete();
                            }
                        }
                    }
                }
            }
        }
Exemple #5
0
        public override string SetStatus(PayStatus s)
        {
            string result = string.Empty;

            if (s == PayStatus.Init)
            {
                result = "訂單成功請勿修改";
            }
            return(result);
        }
Exemple #6
0
        public override string SetStatus(PayStatus status)
        {
            string result = "";

            if (status == PayStatus.Init)
            {
                result = "請勿重新建立訂單";
            }
            else
            {
                _gate.CurrentStatus = status;
            }

            return(result);
        }
Exemple #7
0
        public override IEnumerable <Tuple <string, string> > GetShortInfoList()
        {
            var numFreezDays    = Freeze?.GetSpentDays() ?? 0; //Продлим на замороженные дни
            var clubCardEndDate = IsActivated ? EndDate.Date.AddDays(numFreezDays).ToString("d") : BuyDate.AddMonths(12).ToString("d");

            // Информация о текущем состоянии Абонемента. Добавляем всё что должно выводиться для Пользователя
            var result = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("Тип: ", AbonementName),
                new Tuple <string, string>("Доступные Тренировки ", TypeWorkout.ToString()),
                new Tuple <string, string>("Время Тренировок ", TimeTraining.ToString()),
                new Tuple <string, string>("Услуги", Spa.ToString()),
                new Tuple <string, string>("Срок Клубной Карты", _numberMonths + "  мес."),
                new Tuple <string, string>("Дата Покупки", BuyDate.ToString("d")),
                new Tuple <string, string>("Дата Активации", BuyActivationDate.ToString("d")),
                new Tuple <string, string>("Дата Окончания", clubCardEndDate),
                new Tuple <string, string>("Осталось Дней", GetRemainderDays().ToString())
            };

            if (NumPersonalTr > 0)
            {
                result.Add(new Tuple <string, string>("Осталось Персональных", NumPersonalTr.ToString()));
            }

            if (NumAerobicTr > 0)
            {
                result.Add(new Tuple <string, string>("Осталось Аэробных", NumAerobicTr.ToString()));
            }

            if (NumMiniGroup > 0)
            {
                result.Add(new Tuple <string, string>("Осталось МиниГрупп", NumMiniGroup.ToString()));
            }

            if (PayStatus == Pay.Не_Оплачено)
            {
                result.Add(new Tuple <string, string>("Статус Оплаты ", PayStatus.ToString()));
            }

            if (Freeze != null)
            {
                result.Add(new Tuple <string, string>("Осталось дней Заморозки", Freeze.GetAvailableDays().ToString()));
            }

            return(result);
        }
        public bool ChangePayStatus(string orderId,PayStatus pstatus)
        {
            Database db = NoName.NetShop.Common.CommDataAccess.DbReader;
            StringBuilder strSql = new StringBuilder();

            if (pstatus == PayStatus.支付成功)
            {
                strSql.Append("update spOrder set changetime=getdate(),paytime=getdate(),paystatus=@paystatus from spOrder ");
            }
            else
            {
                strSql.Append("update spOrder set changetime=getdate(),paystatus=@paystatus from spOrder");
            }
            strSql.Append(" where OrderId=@OrderId and paystatus!=@paystatus");
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());
            db.AddInParameter(dbCommand, "OrderId", DbType.AnsiString, orderId);
            db.AddInParameter(dbCommand, "paystatus", DbType.Int16, (int)pstatus);
            return db.ExecuteNonQuery(dbCommand) > 0;
        }
        public bool ChangePayStatus(string orderId, PayStatus pstatus)
        {
            Database      db     = NoName.NetShop.Common.CommDataAccess.DbReader;
            StringBuilder strSql = new StringBuilder();

            if (pstatus == PayStatus.支付成功)
            {
                strSql.Append("update spOrder set changetime=getdate(),paytime=getdate(),paystatus=@paystatus from spOrder ");
            }
            else
            {
                strSql.Append("update spOrder set changetime=getdate(),paystatus=@paystatus from spOrder");
            }
            strSql.Append(" where OrderId=@OrderId and paystatus!=@paystatus");
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "OrderId", DbType.AnsiString, orderId);
            db.AddInParameter(dbCommand, "paystatus", DbType.Int16, (int)pstatus);
            return(db.ExecuteNonQuery(dbCommand) > 0);
        }
Exemple #10
0
        public override IEnumerable <Tuple <string, string> > GetShortInfoList()
        {
            // Информация о текущем состоянии Абонемента. Добавляем всё что должно выводиться для Пользователя
            var result = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("Тип: ", AbonementName),
                new Tuple <string, string>("Доступные Тренировки ", TypeWorkout.ToString()),
                new Tuple <string, string>("Время Тренировок ", TimeTraining.ToString()),
                new Tuple <string, string>("Осталось Занятий", GetRemainderDays().ToString()),
                new Tuple <string, string>("Услуги", Spa.ToString()),
                new Tuple <string, string>("Дата Покупки", BuyDate.ToString("d")),
                new Tuple <string, string>("Дата Активации", BuyActivationDate.ToString("d")),
                new Tuple <string, string>("Дата Окончания", CalculateEndDate(BuyActivationDate, Options.ValidPeriodInMonth).ToString("d"))
            };

            if (PayStatus == Pay.Не_Оплачено)
            {
                result.Add(new Tuple <string, string>("Статус Оплаты ", PayStatus.ToString()));
            }
            return(result);
        }
Exemple #11
0
        /// <summary>
        /// 設置狀態
        /// </summary>
        /// <param name="status"></param>
        public string SetStatus(PayStatus status)
        {
            string result = $"修改成功{status.ToString()}";

            switch (_status)
            {
            case PayStatus.Init:
                if (status == PayStatus.Init)
                {
                    result = "請勿重新建立訂單";
                }
                else
                {
                    _status = status;
                }
                break;

            case PayStatus.Success:
                result = "訂單成功請勿修改";
                break;

            case PayStatus.Cancel:
                result = "訂單取消請勿修改";
                break;

            case PayStatus.Processing:
                if (status == PayStatus.Init)
                {
                    result = "請勿重新建立訂單";
                }
                else
                {
                    _status = status;
                }
                break;
            }


            return(result);
        }
Exemple #12
0
        static string FormatPayStatus(PayStatus status)
        {
            switch (status)
            {
            case PayStatus.Failed:
                return("Failed");

            case PayStatus.InitiatePay:
                return("Payment Initiated");

            case PayStatus.InitiateRefund:
                return("Initiate Refund");

            case PayStatus.Paid:
                return("Paid");

            case PayStatus.Refunded:
                return("Refunded");
            }

            throw new InvalidOperationException();
        }
Exemple #13
0
 protected virtual bool OnNotify(PayProvider provider, bool success, PaymentResult result)
 {
     if (result.Type == PaymentType.Pay)
     {
         PayResult presult = (PayResult)result;
         if (!string.IsNullOrEmpty(presult.TradeNo))
         {
             DataSource.Begin();
             try
             {
                 M.PayRecord pr = M.PayRecord.GetById(DataSource, presult.TradeNo, presult.Type);
                 if (pr == null)
                 {
                     throw new ArgumentException("订单号错误!");
                 }
                 if (pr.Status >= PayStatus.Paying && pr.Status < PayStatus.PaySuccess)
                 {
                     PayStatus status = pr.Status;
                     pr.PayId = presult.PayTradeNo;
                     if (provider.IsOnlinePay)
                     {
                         pr.Money = presult.TotalFee;
                     }
                     if (success)
                     {
                         pr.Status = PayStatus.PaySuccess;
                     }
                     else
                     {
                         pr.Status = PayStatus.PayFailed;
                     }
                     if (pr.UpdateStatus(DataSource, status) == DataStatus.Success)
                     {
                         if (success && pr.Status == PayStatus.PaySuccess)
                         {
                             if (!OnModifyMoney(provider, pr.PayType, pr.UserId, presult.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId))
                             {
                                 throw new ArgumentException("充值失败!");
                             }
                         }
                     }
                     else
                     {
                         throw new ArgumentException("更细订单失败!");
                     }
                 }
                 else
                 {
                     if (pr.Status != PayStatus.PaySuccess)
                     {
                         throw new ArgumentException("订单号错误!");
                     }
                 }
                 DataSource.Commit();
                 return(true);
             }
             catch (Exception)
             {
                 DataSource.Rollback();
                 //OnNotifyError(provider, ex.Message);
             }
         }
         //else
         //{
         //    OnNotifyError(provider, "订单号为空!");
         //}
     }
     else
     {
         RefundResult rresult = (RefundResult)result;
         if (!string.IsNullOrEmpty(rresult.BatchNo))
         {
             if (rresult.SuccessNum == 1 && rresult.Results.Count == 1)
             {
                 RefundInfo info = rresult.Results[0];
                 DataSource.Begin();
                 try
                 {
                     M.PayRecord pr = M.PayRecord.GetById(DataSource, rresult.BatchNo, rresult.Type);
                     if (pr == null)
                     {
                         throw new ArgumentException("批次号错误!");
                     }
                     if (pr.PayId != info.PayTradeNo)
                     {
                         throw new ArgumentException("订单号错误!");
                     }
                     if (pr.Status == PayStatus.RefundNotifying)
                     {
                         if (provider.IsOnlinePay)
                         {
                             pr.Money = info.TotalFee;
                         }
                         if (success && info.Status)
                         {
                             pr.Status = PayStatus.RefundSuccess;
                         }
                         else
                         {
                             pr.Status = PayStatus.RefundFailed;
                         }
                         if (pr.UpdateStatus(DataSource, PayStatus.RefundNotifying) == DataStatus.Success)
                         {
                             if (success && info.Status && pr.Status == PayStatus.RefundSuccess)
                             {
                                 if (!OnModifyMoney(provider, pr.PayType, pr.UserId, info.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId))
                                 {
                                     throw new ArgumentException("退款失败!");
                                 }
                             }
                         }
                         else
                         {
                             throw new ArgumentException("更新订单失败!");
                         }
                     }
                     else
                     {
                         if (pr.Status != PayStatus.RefundSuccess)
                         {
                             throw new ArgumentException("批次号错误!");
                         }
                     }
                     DataSource.Commit();
                     return(true);
                 }
                 catch (Exception)
                 {
                     DataSource.Rollback();
                     //OnNotifyError(provider, ex.Message);
                 }
             }
             //else
             //{
             //    OnNotifyError(provider, "退款数量错误!");
             //}
         }
         //else
         //{
         //    OnNotifyError(provider, "批次号为空!");
         //}
     }
     return(false);
 }
Exemple #14
0
        protected virtual void OnCallback(PayProvider provider, bool success, PaymentResult result)
        {
            #region Pay
            if (result.Type == PaymentType.Pay)
            {
                PayResult presult = (PayResult)result;
                if (!string.IsNullOrEmpty(presult.TradeNo))
                {
                    DataSource.Begin();
                    try
                    {
                        M.PayRecord pr = M.PayRecord.GetById(DataSource, presult.TradeNo, result.Type);
                        if (pr == null)
                        {
                            throw new ArgumentException("订单号错误!");
                        }
                        if (pr.Status >= PayStatus.Paying && pr.Status < PayStatus.PaySuccess)
                        {
                            PayStatus status = pr.Status;
                            pr.PayId = presult.PayTradeNo;
                            if (provider.IsOnlinePay)
                            {
                                pr.Money = presult.TotalFee;
                            }
                            if (success)
                            {
                                if (provider.IsNeedNotify)
                                {
                                    pr.Status = PayStatus.PayNotifying;
                                }
                                else
                                {
                                    pr.Status = PayStatus.PaySuccess;
                                }
                            }
                            else
                            {
                                if (provider.IsOnlinePay && !provider.IsNeedNotify)
                                {
                                    pr.Status = PayStatus.PayFailed;
                                }
                                else
                                {
                                    if (!provider.IsOnlinePay)
                                    {
                                        throw new Exception("余额不足!");
                                    }
                                }
                            }
                            if (pr.UpdateStatus(DataSource, status) == DataStatus.Success)
                            {
                                if (success && pr.Status == PayStatus.PaySuccess)
                                {
                                    if (!OnModifyMoney(provider, pr.PayType, pr.UserId, presult.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId))
                                    {
                                        throw new ArgumentException("充值失败!");
                                    }
                                }
                            }
                            else
                            {
                                throw new ArgumentException("更新订单失败!");
                            }
                        }
                        DataSource.Commit();
                    }
                    catch (Exception ex)
                    {
                        DataSource.Rollback();
                        OnError(ex.Message);
                    }
                }
                else
                {
                    OnError("订单号为空!");
                }
            }
            #endregion

            #region Refund
            else if (result.Type == PaymentType.Refund)
            {
                //RefundResult presult = (RefundResult)result;
                //if (!string.IsNullOrEmpty(presult.BatchNo))
                //{
                //    DataSource.Begin();
                //    try
                //    {
                //        M.PayRecord pr = M.PayRecord.GetById(DataSource, presult.BatchNo, result.Type);
                //        if (pr == null)
                //            throw new ArgumentException("订单号错误!");
                //        if (pr.Status == PayStatus.RefundNotifying)
                //        {
                //            PayStatus status = pr.Status;
                //            if (provider.IsOnlinePay)
                //                pr.Money = presult.TotalFee;
                //            if (success)
                //            {
                //                if (provider.IsNeedNotify)
                //                    pr.Status = PayStatus.PayNotifying;
                //                else
                //                    pr.Status = PayStatus.PaySuccess;
                //            }
                //            else
                //            {
                //                if (provider.IsOnlinePay && !provider.IsNeedNotify)
                //                {
                //                    pr.Status = PayStatus.PayFailed;
                //                }
                //                else
                //                {
                //                    if (!provider.IsOnlinePay)
                //                        throw new Exception("余额不足!");
                //                }
                //            }
                //            if (pr.UpdateStatus(DataSource, status) == DataStatus.Success)
                //            {
                //                if (success && pr.Status == PayStatus.PaySuccess)
                //                {
                //                    if (!OnModifyMoney(provider, pr.PayType, pr.UserId, presult.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId))
                //                        throw new ArgumentException("充值失败!");
                //                }
                //            }
                //            else
                //            {
                //                throw new ArgumentException("更新订单失败!");
                //            }
                //        }
                //        DataSource.Commit();
                //    }
                //    catch (Exception ex)
                //    {
                //        DataSource.Rollback();
                //        OnError(ex.Message);
                //    }
                //}
                //else
                //{
                //    OnError("订单号为空!");
                //}
            }
            #endregion

            else
            {
                throw new ArgumentException("支付类型错误!");
            }
        }
Exemple #15
0
 public DataStatus UpdateStatus(DataSource ds, PayStatus old)
 {
     return(Update(ds, ColumnMode.Include, Cs("Provider", "PayId", "Money", "Status"), P("PayType", PayType) & WN("Status", old, "Old") & P("Id", Id)));
 }
Exemple #16
0
 /// <summary>
 /// 根据用户查找支付记录
 /// </summary>
 /// <param name="ds"></param>
 /// <param name="userId"></param>
 /// <param name="type"></param>
 /// <param name="status"></param>
 /// <returns></returns>
 public static PayRecord GetByUser(DataSource ds, long userId, PaymentType pType, PayStatus status, int type)
 {
     return(ExecuteSingleRow <PayRecord>(ds,
                                         P("PayType", pType) &
                                         P("Type", type) &
                                         P("Status", status) &
                                         P("UserId", userId)));
 }
Exemple #17
0
 public static PayRecord GetByTypeAndStatusAndUserAndId(DataSource ds, string id, int type, long userid, PayStatus status)
 {
     return(ExecuteSingleRow <PayRecord>(ds, P("Type", type) & P("Id", id) & P("Status", status) & P("UserId", userid)));
 }
 /// <summary>
 /// 設置狀態
 /// </summary>
 /// <param name="status"></param>
 public string SetStatus(PayStatus status)
 {
     return(CurrentProcess.SetStatus(status));
 }
 public abstract string SetStatus(PayStatus s);
 public bool ChangePayStatus(string orderId, PayStatus pstatus)
 {
     return(dal.ChangePayStatus(orderId, pstatus));
 }
Exemple #21
0
 public PaymentContext(Product p)
 {
     _Item   = p;
     _status = PayStatus.Init;
 }
 public bool ChangePayStatus(string orderId,PayStatus pstatus)
 {
     return dal.ChangePayStatus(orderId,pstatus);
 }
Exemple #23
0
 public string GetPayStatusText()
 {
     return(PayStatus.ToString());
 }