/// <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("不在狀態內"); }
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); }
public PayResult() { orderId = string.Empty; amount = 0; subject = string.Empty; body = string.Empty; tradeStatus = Pay.PayStatus.UnKnow; customParameters = new Dictionary<string, string>(); }
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(); } } } } } }
public override string SetStatus(PayStatus s) { string result = string.Empty; if (s == PayStatus.Init) { result = "訂單成功請勿修改"; } return(result); }
public override string SetStatus(PayStatus status) { string result = ""; if (status == PayStatus.Init) { result = "請勿重新建立訂單"; } else { _gate.CurrentStatus = status; } return(result); }
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); }
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); }
/// <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); }
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(); }
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); }
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("支付类型错误!"); } }
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))); }
/// <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))); }
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)); }
public PaymentContext(Product p) { _Item = p; _status = PayStatus.Init; }
public bool ChangePayStatus(string orderId,PayStatus pstatus) { return dal.ChangePayStatus(orderId,pstatus); }
public string GetPayStatusText() { return(PayStatus.ToString()); }