private OnlineOrder PreOrderDetail(OnlineOrder order)
            {
                var result = new OnlineOrder();

                result.OrderHeaderID       = order.OrderHeaderID;
                result.DistributorID       = order.DistributorID;
                result.ReceivedDate        = order.ReceivedDate;
                result.OrderMonth          = order.OrderMonth;
                result.OrderCategory       = MyHerbalife3.Ordering.ServiceProvider.OrderChinaSvc.OrderCategoryType.RSO;
                result.CountryOfProcessing = "CN";
                result.InputMethod         = InputMethodType.Internet;
                result.NTSDate             = order.ReceivedDate;
                result.Shipment            = order.Shipment;
                result.OrderItems          = new OrderItems();
                var orderItem = new OrderItem_V02
                {
                    Quantity    = 1,
                    SKU         = "1316",
                    Description = "F1",
                };

                result.OrderItems.Add(orderItem);

                return(result);
            }
Beispiel #2
0
        public override void Run()
        {
            Trace.WriteLine("Début du traitement des messages");

            // Démarre la pompe de messages et le rappel est appelé pour chaque message reçu, l'appel de Close sur le client arrêtant la pompe.
            Client.OnMessage((receivedMessage) =>
            {
                try
                {
                    // Traitement du message
                    Trace.WriteLine("Traitement du message Service Bus : " + receivedMessage.SequenceNumber.ToString());
                    Trace.WriteLine("Processing", receivedMessage.SequenceNumber.ToString());
                    // View the message as an OnlineOrder.
                    OnlineOrder order = receivedMessage.GetBody <OnlineOrder>();
                    Trace.WriteLine(order.Customer + ": " + order.Product, "ProcessingMessage");
                    receivedMessage.Complete();
                }
                catch
                {
                    // Gérer ici toutes exceptions spécifiques du traitement des messages
                }
            });

            CompletedEvent.WaitOne();
        }
Beispiel #3
0
        public HttpResponseMessage ChangeOrderStatus(JObject jsonBody)
        {
            using (var dbTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    SaleStatus sale = jsonBody.ToObject <SaleStatus>();
                    if (db.OnlineOrders.Count(s => s.OnlineOrderId == sale.OrderId) > 0)
                    {
                        OnlineOrder originalSale = db.OnlineOrders.Find(sale.OrderId);
                        originalSale.OrderStatus     = sale.Status;
                        db.Entry(originalSale).State = EntityState.Modified;
                        db.SaveChanges();

                        // reaching this statement means the db transaction is success
                        dbTransaction.Commit();
                        return(this.Request.CreateResponse(HttpStatusCode.OK, "RTP : Change sale status"));
                    }
                    else
                    {
                        return(this.Request.CreateResponse(HttpStatusCode.NoContent, "RTP : No sale"));
                    }
                }catch (Exception ex) {
                    dbTransaction.Rollback();
                    System.Diagnostics.Trace.WriteLine(ex);

                    return(this.Request.CreateResponse(HttpStatusCode.Conflict, ex));
                }
            }
        }
        public ActionResult Checkout()
        {
            //POSTransactionSummaryViewModel summaryModel = posTransactionService.GetPOSTransactionSummary(this.HttpContext);
            BasketSummaryViewModel summaryModel = basketService.GetBasketSummary(this.HttpContext);

            // customer variable returns one Customer (whose email == current user's email)
            // i.e. the basket created is being assigned to the currently logged-in user
            Customer customer = customers.Collection().FirstOrDefault(c => c.Email == User.Identity.Name);

            if (customer != null)
            {
                OnlineOrder order = new OnlineOrder()
                {
                    CustomerId       = customer.Id,
                    FirstName        = customer.FirstName,
                    LastName         = customer.LastName,
                    CompanyName      = customer.CompanyName,
                    Street           = customer.Street,
                    City             = customer.City,
                    State            = customer.State,
                    ZipCode          = customer.ZipCode,
                    Email            = customer.Email,
                    Phone            = customer.Phone,
                    TotalItemCount   = summaryModel.BasketCount,
                    TotalAmount      = summaryModel.BasketTotal,
                    OnlineOrderItems = summaryModel.OnlineOrderItems
                };
                return(View(order));
            }
            else
            {
                return(RedirectToAction("Error"));
            }
        }
Beispiel #5
0
 /// <summary>
 /// 临停缴费
 /// </summary>
 /// <param name="orderId"></param>
 /// <returns></returns>
 public ActionResult ParkCarPayment(decimal orderId)
 {
     try
     {
         OnlineOrder order = CheckOrder(orderId);
         if (order.OrderType != OnlineOrderType.ParkFee)
         {
             throw new MyException("支付方法不正确");
         }
         if (string.IsNullOrWhiteSpace(order.MWebUrl))
         {
             UnifiedPayModel model = GetUnifiedPayModel(order, string.Format("临停缴费-{0}-{1}", order.PKName, order.PlateNo));
         }
         ViewBag.MaxWaitTime = DateTime.Now.AddMinutes(WXOtherConfigServices.GetTempParkingWeiXinPayTimeOut(order.CompanyID)).ToString("yyyy-MM-dd HH:mm:ss");
         ViewBag.MWeb_Url    = order.MWebUrl;
         return(View(order));
     }
     catch (MyException ex) {
         return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message, returnUrl = "/H5ParkingPayment/Index" }));
     }
     catch (Exception ex)
     {
         TxtLogServices.WriteTxtLogEx("H5WeiXinPayment_Error", string.Format("Message:{0},StackTrace:{1}", ex.Message, ex.StackTrace), LogFrom.WeiXin);
         return(RedirectToAction("Index", "ErrorPrompt", new { message = "支付失败,请重新支付", returnUrl = "/H5ParkingPayment/Index" }));
     }
 }
Beispiel #6
0
 public void LoadOnlinOrder(ListView listView, OnlineOrder order, string action = "show")
 {
     if (action == "show")
     {
         var delivery = order.Delivery == DeliveryTypes.BySelf ? "堂食" : "外送";
         var group    = new ListViewGroup($"单号:{order.TradeCode};配送方式:{delivery}");
         group.Tag = order.TradeCode;
         listView.Groups.Add(group);
         foreach (var item in order.Items)
         {
             var listItem = new ListViewItem(item.Product);
             listItem.SubItems.Add(new ListViewItem.ListViewSubItem(listItem, item.Option));
             listItem.SubItems.Add(new ListViewItem.ListViewSubItem(listItem, (item.Price / 100).ToString("¥0.00元")));
             listItem.SubItems.Add(new ListViewItem.ListViewSubItem(listItem, item.Count.ToString()));
             listItem.SubItems.Add(new ListViewItem.ListViewSubItem(listItem, (item.Money / 100).ToString("¥0.00元")));
             listItem.SubItems.Add(new ListViewItem.ListViewSubItem(listItem, "制作中"));
             listItem.Group = group;
             listView.Items.Add(listItem);
         }
         listView.Groups.Add(group);
     }
     else
     {
         var groups = listView.Groups.Where(o => o.Tag.ToString().Equals(order.TradeCode));
         groups.SelectMany(o => o.Items.Select(t => t)).Remove(listView);
         groups.Remove(listView);
     }
 }
    public OnlineSkiPass(string code)
    {
        cardCode = code;
        DataTable dtOrder = DBHelper.GetDataTable(" select [id] from order_online where type='雪票' and code = '" + code.Trim() + "' ");

        associateOnlineOrder       = new OnlineOrder(int.Parse(dtOrder.Rows[0][0].ToString()));
        associateOnlineOrderDetail = associateOnlineOrder.OrderDetails[0];
        productName   = associateOnlineOrderDetail.productName.Trim();
        count         = associateOnlineOrderDetail.count;
        associateCard = new Card(code);

        owner = new MiniUsers(associateOnlineOrder._fields["open_id"].ToString());

        if (associateCard._fields["type"].Equals("雪票"))
        {
            if (!associateCard._fields["used"].ToString().Equals("0"))
            {
                used = true;
                try
                {
                    useDate = DateTime.Parse(associateCard._fields["use_date"].ToString());
                }
                catch
                {
                }
            }
        }
    }
Beispiel #8
0
        /// <summary>
        /// 临停缴费
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public ActionResult ParkCarPayment(decimal orderId, int source = 0)
        {
            string returnUrl = source == 0 ? "/ParkingPayment/Index" : "/QRCodeParkPayment/QRCodePaySuccess?orderId=" + orderId;

            try
            {
                OnlineOrder order = CheckOrder(orderId);
                if (order.OrderType != OnlineOrderType.ParkFee)
                {
                    throw new MyException("支付方法不正确");
                }
                if (!OnlineOrderServices.UpdateSFMCode(order))
                {
                    throw new MyException("处理订单信息异常【SFM】");
                }

                string             sAttach  = Convert.ToString(Session["SmartSystem_WeiXinTg_personid"]);
                UnifiedPayModel    model    = GetUnifiedPayModel(order, string.Format("临停缴费-{0}", order.PlateNo), sAttach);
                WeiXinPaySignModel payModel = GetWeiXinPaySign(order, model);
                ViewBag.MaxWaitTime = DateTime.Now.AddMinutes(WXOtherConfigServices.GetTempParkingWeiXinPayTimeOut(order.CompanyID)).ToString("yyyy-MM-dd HH:mm:ss");
                ViewBag.PayModel    = payModel;
                ViewBag.ReturnUrl   = returnUrl;
                ViewBag.Source      = source;
                Session["SmartSystem_WeiXinTg_personid"] = null;
                return(View(order));
            }
            catch (MyException ex) {
                return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message, returnUrl = returnUrl }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPayment_Error", string.Format("支付失败 orderId:{0};openId:{1}", orderId, WeiXinOpenId), ex, LogFrom.WeiXin);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = "支付失败,请重新支付", returnUrl = returnUrl }));
            }
        }
Beispiel #9
0
        /// <summary>
        /// APP充值
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public ActionResult BalancePayment(decimal orderId)
        {
            try
            {
                OnlineOrder order = CheckOrder(orderId);
                if (order.OrderType != OnlineOrderType.APPRecharge)
                {
                    throw new MyException("支付方法不正确");
                }

                UnifiedPayModel    model    = GetUnifiedPayModel(order, string.Format("{0}-APP充值", order.PlateNo));
                WeiXinPaySignModel payModel = GetWeiXinPaySign(order, model);
                ViewBag.PayModel = payModel;
                return(View(order));
            }
            catch (MyException ex)
            {
                TxtLogServices.WriteTxtLogEx("WeiXinPayment_Error", "支付失败 orderId:{0};openId:{1}", orderId, WeiXinOpenId, ex, LogFrom.WeiXin);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message, returnUrl = "/PurseData/Index" }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPayment_Error", string.Format("APP充值支付失败 orderId:{0};openId:{1}", orderId, WeiXinOpenId), ex, LogFrom.WeiXin);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = "支付失败,请重新支付", returnUrl = "/PurseData/Index" }));
            }
        }
Beispiel #10
0
        /// <summary>
        /// 订单自动退款处理
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="certpath"></param>
        /// <returns></returns>
        public static bool AutoRefund(decimal orderId, string certpath)
        {
            TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "AutoRefund", "订单退款处理", orderId, "开始订单退款处理");

            bool refundResult = false;

            lock (order_lock)
            {
                TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "进入lock,orderId:{0}", orderId);

                try
                {
                    IOnlineOrder factory = OnlineOrderFactory.GetFactory();
                    OnlineOrder  order   = factory.QueryByOrderId(orderId);
                    if (order.Status == OnlineOrderStatus.SyncPayResultFail && order.SyncResultTimes >= 3)
                    {
                        refundResult = Refund(order, certpath);
                    }
                }
                catch (Exception ex) {
                    TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},Message:{3},StackTrace:{4}", "AutoRefund", "订单退款处理失败", orderId, ex.Message, ex.StackTrace);
                }
                TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "执行完成lock,orderId:{0}", orderId);
            }

            return(refundResult);
        }
Beispiel #11
0
        /// <summary>
        /// 手动退款(退款失败是调用)
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="certpath"></param>
        /// <returns></returns>
        public static bool ManualRefund(decimal orderId, string certpath)
        {
            TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "ManualRefund", "订单退款处理", orderId, "开始订单退款处理");

            bool refundResult = false;

            lock (order_lock)
            {
                try
                {
                    IOnlineOrder factory = OnlineOrderFactory.GetFactory();
                    OnlineOrder  order   = factory.QueryByOrderId(orderId);
                    if (order.Status == OnlineOrderStatus.RefundFail)
                    {
                        refundResult = Refund(order, certpath);
                    }
                    if (refundResult)
                    {
                        OperateLogServices.AddOperateLog(OperateType.Other, string.Format("手动执行退款操作,退款订单号:{0}", orderId));
                    }
                }
                catch (Exception ex)
                {
                    ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", "手动执行退款操作失败", ex, LogFrom.WeiXin);
                }
            }
            return(refundResult);
        }
Beispiel #12
0
        //TODO: too compicated and floated to cache mailing list
        //Use mail group instead
        // public void MailInvalidPOS(OnlineOrder order, string[] emails)
        // {
        //     #region check
        //     if (order == null)
        //     {
        //         throw new ArgumentNullException(nameof(order));
        //     }

        //     if (emails == null)
        //     {
        //         throw new ArgumentException("message", nameof(emails));
        //     }
        //     #endregion
        //     _composer.Reset();
        //     _composer.AppendText("p", $"POS {order.PosCode} is not registered on the system.");
        //     _composer.AppendText("p", "Please assign manually.");
        //     var mail = new MailMessage()
        //     {
        //         From = CreateMailAddress(_options.Username),
        //         IsBodyHtml = true,
        //         Body = _composer.ToString(),
        //         Subject = "POS code is not available"
        //     };
        //     //Always CC
        //     AddOptionsCC(mail);
        //     //Additional CC
        //     AddTo(mail, emails);
        //     _queue.Enqueue(mail);
        // }
        public void MailNewAssign(OnlineOrder order, string assignTo, string[] cc)
        {
            #region check
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            if (string.IsNullOrEmpty(assignTo))
            {
                throw new ArgumentException("message", nameof(assignTo));
            }
            #endregion
            _composer.Reset();
            _composer.AppendText("p", $"New order from: {order.Name} CMND: {order.NatId}");
            _composer.AppendText("p", $"Assigned to: {assignTo}");
            var mail = new MailMessage()
            {
                From       = CreateMailAddress(_options.Username),
                IsBodyHtml = true,
                Body       = _composer.ToString(),
                Subject    = "New online sale case assignment"
            };
            //Always CC
            AddOptionsCC(mail);
            //Additional CC
            AddCC(mail, cc);

            mail.To.Add(CreateMailAddress(assignTo));
            _queue.Enqueue(mail);
        }
Beispiel #13
0
        public static bool UpdateSFMCode(OnlineOrder order)
        {
            if (order.OrderSource == PayOrderSource.SFM)
            {
                SFMResult result = SFMInterfaceProcess.CarOrderPay(order.PayDetailID);
                if (result == null)
                {
                    throw new MyException("提交支付失败【SFM】");
                }
                if (!result.Success)
                {
                    throw new MyException("下单失败【SFM】");
                }
                if (string.IsNullOrWhiteSpace(result.Code))
                {
                    throw new MyException("交易订单号失败【SFM】");
                }

                IOnlineOrder factory      = OnlineOrderFactory.GetFactory();
                bool         updateResult = factory.UpdateSFMCode(result.Code, order.OrderID);
                if (!updateResult)
                {
                    throw new MyException("修改外部订单编号失败【SFM】");
                }
                return(updateResult);
            }
            return(true);
        }
Beispiel #14
0
        private static bool SyncSellerRecharge(OnlineOrder order, OrderPayWay payWay)
        {
            using (DbOperator dbOperator = ConnectionManager.CreateConnection())
            {
                IParkSeller factory = ParkSellerFactory.GetFactory();
                ParkSeller  model   = factory.QueryBySellerId(order.InOutID);
                if (model == null)
                {
                    throw new MyException("商家不存在");
                }

                dbOperator.BeginTransaction();
                try
                {
                    ParkOrder pkOrder = ParkOrderServices.MarkSellerChargeOrder(model, order.Amount, model.SellerID, OrderSource.WeiXin, payWay, dbOperator);
                    if (order == null)
                    {
                        throw new MyException("创建充值订单失败");
                    }

                    bool result = factory.SellerRecharge(model.SellerID, order.Amount, dbOperator);
                    if (!result)
                    {
                        throw new MyException("商家充值失败");
                    }
                    dbOperator.CommitTransaction();
                    return(result);
                }
                catch (Exception ex) {
                    dbOperator.RollbackTransaction();
                    ExceptionsServices.AddExceptions(ex, "商家微信充值通知失败,订单编号:" + order.OrderID);
                    return(false);
                }
            }
        }
Beispiel #15
0
        public void MailNotAssignable(OnlineOrder order, string bdsEmail, string reason, string[] cc)
        {
            #region check
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            if (string.IsNullOrEmpty(bdsEmail))
            {
                throw new ArgumentException("message", nameof(bdsEmail));
            }
            #endregion
            _composer.Reset();
            _composer.AppendText("p", $"Cant assign case from: {order.Name} CMND: {order.NatId}");
            _composer.AppendText("p", "Please assign manually.");
            if (!string.IsNullOrEmpty(reason))
            {
                _composer.AppendText("p", reason);
            }
            var mail = new MailMessage()
            {
                From       = CreateMailAddress(_options.Username),
                IsBodyHtml = true,
                Body       = _composer.ToString(),
                Subject    = "Can not assign online sale case"
            };
            //Always CC
            AddOptionsCC(mail);
            //Additional CC
            AddCC(mail, cc);

            mail.To.Add(CreateMailAddress(bdsEmail));
            _queue.Enqueue(mail);
        }
    public int PlaceOrder(string customerOpenId)
    {
        int productId = 147;
        int orderId = 0;
        double amount = double.Parse(_fields["guarantee_cash"].ToString().Trim());
        OnlineOrderDetail detail = new OnlineOrderDetail();
        Product p = new Product(productId);
        detail.productId = int.Parse(p._fields["id"].ToString());
        detail.productName = p._fields["name"].ToString();
        detail.price = double.Parse(p._fields["sale_price"].ToString());
        detail.count = (int)(amount / detail.price);

        OnlineOrder newOrder = new OnlineOrder();
        newOrder.Type = "押金";
        newOrder.shop = _fields["shop"].ToString().Trim();
        newOrder.AddADetail(detail);
        try
        {
            orderId = newOrder.Place(customerOpenId);
        }
        catch
        {

        }
        DBHelper.UpdateData("expierence_list", new string[,] { { "guarantee_order_id", "int", orderId.ToString() } },
            new string[,] { { "id", "int", _fields["id"].ToString() } }, Util.conStr);
        return orderId;
    }
        public ActionResult Checkout(OnlineOrder order)
        {
            var basketItems = basketService.GetBasketItems(this.HttpContext);

            order.OrderStatus = "Order Created";
            order.Email       = User.Identity.Name;

            bool validatedIfPOSAttendant = !User.IsInRole("POSAttendant") || (User.IsInRole("POSAttendant") && User.IsInRole("Client"));

            if (!validatedIfPOSAttendant)
            {
                return(RedirectToAction("Error"));
            }

            // process payment here
            HttpCookie cookie      = this.HttpContext.Request.Cookies.Get("OnlineOrderPayment");
            string     paymentData = cookie.Value;

            paymentData = paymentData.Replace("_filler_text_", order.Id);
            IPaymentService paymentDataService = new PaymentService();

            paymentDataService.AddPayment(paymentContext, paymentData);
            //
            order.OrderStatus = "Payment Processed";
            orderService.CreateOnlineOrder(order, basketItems);
            basketService.ClearBasket(this.HttpContext);
            //
            return(RedirectToAction("Thankyou", new { orderId = order.Id }));
        }
Beispiel #18
0
        /// <summary>
        /// 临停缴费
        /// </summary>
        /// <returns></returns>
        public ActionResult ParkCarPayment(decimal orderId, int source = 0)
        {
            if (string.IsNullOrWhiteSpace(AliPayUserId))
            {
                return(RedirectToAction("Index", "ErrorPrompt", new { message = "获取用户信息失败" }));
            }
            try
            {
                OnlineOrder order = CheckOrder(orderId);
                if (order.OrderType != OnlineOrderType.ParkFee)
                {
                    throw new MyException("支付方法不正确");
                }

                string tradeNo = MakeAlipayTradeOrder(order);

                OnlineOrderServices.UpdatePrepayIdById(tradeNo, order.OrderID);
                order.PrepayId      = tradeNo;
                ViewBag.MaxWaitTime = DateTime.Now.AddMinutes(WXOtherConfigServices.GetTempParkingWeiXinPayTimeOut(order.CompanyID)).ToString("yyyy-MM-dd HH:mm:ss");
                return(View(order));
            }
            catch (MyException ex)
            {
                return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message, returnUrl = "/QRCodeParkPayment/Index" }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("AliPay_Error", string.Format("支付失败 orderId:{0};AliUserId:{1}", orderId, AliPayUserId), ex, LogFrom.AliPay);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = "支付失败,请重新支付", returnUrl = "/QRCodeParkPayment/Index" }));
            }
        }
Beispiel #19
0
        public ActionResult ComputeParkingFee(string licensePlate, string parkingId)
        {
            licensePlate = licensePlate.ToPlateNo();
            if (!string.IsNullOrWhiteSpace(licensePlate) && licensePlate.Length > 2)
            {
                string firstPlate = HttpUtility.UrlEncode(licensePlate.Substring(0, 2), Encoding.GetEncoding("UTF-8"));
                Response.Cookies.Add(new HttpCookie("SmartSystem_WeiXinUser_DefaultPlate", firstPlate));
            }
            try
            {
                OnlineOrder model = new OnlineOrder();
                model.OrderTime = DateTime.Now;

                TempParkingFeeResult result = RechargeService.WXTempParkingFee(licensePlate, parkingId, LoginAccountID, model.OrderTime);
                if (result.Result == APPResult.NoNeedPay || result.Result == APPResult.RepeatPay)
                {
                    int type = result.Result == APPResult.NoNeedPay ? 0 : 1;
                    return(RedirectToAction("NotNeedPayment", "ParkingPayment", new { licensePlate = licensePlate, type = type, surplusMinutes = result.OutTime, entranceTime = result.EntranceDate }));
                }
                RechargeService.CheckCalculatingTempCost(result.Result);
                if (result.OrderSource == PayOrderSource.Platform)
                {
                    bool testResult = CarService.WXTestClientProxyConnectionByPKID(result.ParkingID);
                    if (!testResult)
                    {
                        throw new MyException("车场网络异常,暂无法缴停车费!");
                    }
                    int interfaceOrderState = InterfaceOrderServices.OrderWhetherEffective(result.Pkorder.OrderNo);
                    if (interfaceOrderState != 1)
                    {
                        string msg = interfaceOrderState == 2 ? "重复支付" : "订单已失效";
                        return(PageAlert("Index", "H5ParkingPayment", new { RemindUserContent = msg }));
                    }
                }
                model.ParkCardNo     = result.CardNo;
                model.PKID           = result.ParkingID;
                model.PKName         = result.ParkName;
                model.InOutID        = result.Pkorder.TagID;
                model.PlateNo        = result.PlateNumber;
                model.EntranceTime   = result.EntranceDate;
                model.ExitTime       = model.OrderTime.AddMinutes(result.OutTime);
                model.Amount         = result.Pkorder.Amount;
                model.PayDetailID    = result.Pkorder.OrderNo;
                model.DiscountAmount = result.Pkorder.DiscountAmount;
                model.OrderSource    = result.OrderSource;
                model.ExternalPKID   = result.ExternalPKID;
                ViewBag.Result       = result.Result;
                ViewBag.PayAmount    = result.Pkorder.PayAmount;
                return(View(model));
            }
            catch (MyException ex)
            {
                return(PageAlert("Index", "H5ParkingPayment", new { RemindUserContent = ex.Message }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("H5ParkingPaymentError", "计算缴费金额失败", ex, LogFrom.WeiXin);
                return(PageAlert("Index", "H5ParkingPayment", new { RemindUserContent = "计算缴费金额失败" }));
            }
        }
Beispiel #20
0
        public static bool SyncPaymentResult(decimal orderId)
        {
            IOnlineOrder factory = OnlineOrderFactory.GetFactory();
            OnlineOrder  order   = factory.QueryByOrderId(orderId);

            if (order.PaymentChannel != PaymentChannel.WeiXinPay && order.PaymentChannel == PaymentChannel.AliPay)
            {
                throw new MyException("目前只能同步微信或支付宝的支付结果");
            }

            if (order.Status != OnlineOrderStatus.WaitPay && order.Status != OnlineOrderStatus.Paying)
            {
                throw new MyException("只有待支付或支付中的订单才能同步");
            }

            switch (order.PaymentChannel)
            {
            case PaymentChannel.WeiXinPay: {
                UnifiedOrderQueryMessage result = PaymentServices.UnifiedOrderQuery(order.CompanyID, order.SerialNumber, order.OrderID.ToString());
                if (result.Success)
                {
                    DateTime payTime = GetConversionWeiXinPayTime(result.Tiem_End);
                    return(PaySuccess(orderId, result.TransactionId, payTime));
                }

                if (result.Return_Code.ToUpper() != "SUCCESS")
                {
                    throw new MyException(string.Format("同步失败:{0}", result.Return_Msg));
                }

                if (result.Result_Code.ToUpper() != "SUCCESS")
                {
                    throw new MyException(string.Format("同步失败:【{0}】{1}", result.Err_Code, result.Err_Code_Des));
                }

                if (result.Trade_State.ToUpper() != "SUCCESS")
                {
                    throw new MyException(string.Format("同步失败:{0}", GetWeiXinPayOrderErrorStateDes(result.Trade_State)));
                }
                break;
            }

            case PaymentChannel.AliPay: {
                DateTime payTime = DateTime.Now;
                bool     result  = AliPayApiServices.QueryPayResult(order.CompanyID, order.OrderID.ToString(), order.PrepayId, out payTime);
                if (result)
                {
                    return(PaySuccess(orderId, order.PrepayId, payTime));
                }
                else
                {
                    throw new MyException("该订单未支付");
                }
            }

            default: throw new MyException("支付通道不正确");
            }

            return(false);
        }
Beispiel #21
0
        /// <summary>
        /// 商家充值
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public ActionResult SellerRechargePayment(decimal orderId)
        {
            try
            {
                OnlineOrder order = CheckOrder(orderId);
                if (order.OrderType != OnlineOrderType.SellerRecharge)
                {
                    throw new MyException("支付方法不正确");
                }

                if (string.IsNullOrWhiteSpace(order.MWebUrl))
                {
                    UnifiedPayModel model = GetUnifiedPayModel(order, string.Format("商家充值-{0}", order.PKName));
                }
                ViewBag.MWeb_Url = order.MWebUrl;
                return(View(order));
            }
            catch (MyException ex)
            {
                TxtLogServices.WriteTxtLogEx("H5WeiXinPayment_Error", "支付失败 orderId:{0};", orderId, ex, LogFrom.WeiXin);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = ex.Message, returnUrl = "/H5Seller/Index" }));
            }
            catch (Exception ex)
            {
                ExceptionsServices.AddExceptionToDbAndTxt("H5WeiXinPayment_Error", string.Format("商家充值支付失败 orderId:{0};", orderId), ex, LogFrom.WeiXin);
                return(RedirectToAction("Index", "ErrorPrompt", new { message = "支付失败,请重新支付", returnUrl = "/H5Seller/Index" }));
            }
        }
Beispiel #22
0
        public HttpResponseMessage AddOrder(JObject jsonBody)
        {
            JObject products = (JObject)jsonBody["ProductsRetailOrder"]; // this variable must be present in the javascript

            jsonBody.Remove("ProductsRetailOrder");

            OnlineOrder retailOrder = jsonBody.ToObject <OnlineOrder>(); // the job card object

            //retailOrder.CustomerId = User.Identity.GetUserId();

            db.OnlineOrders.Add(retailOrder);

            db.SaveChanges();

            int retailOrderId = retailOrder.OnlineOrderId; // the foregin key to be used for the -> proudcts

            JEnumerable <JToken> tokens = (JEnumerable <JToken>)products.Children <JToken>();

            foreach (JToken token in tokens)
            {
                JToken productJson = token.Children().First();
                ProductInOnlineOrder productInstance = productJson.ToObject <ProductInOnlineOrder>();
                productInstance.OnlineOrderId = retailOrderId;
                db.ProductsInOnlineOrders.Add(productInstance);
            }

            db.SaveChanges();
            return(this.Request.CreateResponse(HttpStatusCode.Created, retailOrderId));
        }
Beispiel #23
0
        public IHttpActionResult PutRetailOrder(int id, OnlineOrder retailOrder)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != retailOrder.OnlineOrderId)
            {
                return(BadRequest());
            }

            db.Entry(retailOrder).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RetailOrderExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Beispiel #24
0
        private static bool PrintOrderCode(this OnlineOrder order, string printer)
        {
            var index = 1;
            var count = order.Items.Sum(o => o.Count);

            foreach (var item in order.Items)
            {
                for (int i = 0; i < item.Count; i++)
                {
                    var           memo     = new MemoComponent(order.TradeCode, item.Product, item.Option, index, count);
                    PrintDocument document = new PrintDocument();
                    document.PrinterSettings.PrinterName = printer;
                    document.PrinterSettings.DefaultPageSettings.Margins = new Margins(2, 0, 0, 0);
                    document.PrintPage += (sender, ev) => {
                        foreach (var print in memo.GenernatePrintItems())
                        {
                            ev.Graphics.DrawString(print.Text, print.Font, Brushes.Black, new PointF(print.Point.X, print.Point.Y));
                        }
                    };
                    index++;
                    document.Print();
                }
            }
            return(true);
        }
Beispiel #25
0
    public int PlaceOnlineOrder(string openId)
    {
        try
        {
            int.Parse(_fields["online_order_id"].ToString());
            return(0);
        }
        catch
        {
        }
        string detailJson = _fields["order_detail_json"].ToString().Trim();



        OnlineOrder newOrder   = new OnlineOrder();
        WeixinUser  user       = new WeixinUser(openId);
        string      cellNumber = user.CellNumber.Trim();

        if (cellNumber.Trim().Equals(""))
        {
            cellNumber = _fields["customer_number"].ToString().Trim();
        }
        string[,] insertParam = { { "type",                 "varchar",  _fields["type"].ToString().Trim()       }, { "open_id",        "varchar", openId.Trim()                            },
                                  { "cell_number",          "varchar",  cellNumber.Trim()                       }, { "name",           "varchar", user.Nick.Trim()                         },
                                  { "pay_method",           "varchar",  _fields["pay_method"].ToString().Trim() }, { "pay_state",      "int",     "0"                                      },
                                  { "order_price",          "float",    _fields["market_price"].ToString()      }, { "shop",           "varchar", _fields["shop"].ToString().Trim()        },
                                  { "order_real_pay_price", "float",    _fields["real_paid_price"].ToString()   }, { "memo",           "varchar", _fields["memo"].ToString().Trim()        },
                                  { "pay_time",             "datetime", DateTime.Now.ToString()                 }, { "ticket_amount",  "float",   _fields["ticket_amount"].ToString()      },
                                  { "score_rate",           "float",    _fields["score_rate"].ToString()        }, { "generate_score", "float",   _fields["generate_score"].ToString()     },
                                  { "order_temp_id",        "float",    _fields["id"].ToString()                }, { "ticket_code",    "varchar", _fields["ticket_code"].ToString().Trim() } };
        int i = DBHelper.InsertData("order_online", insertParam);

        if (i == 1)
        {
            i = DBHelper.GetMaxId("order_online");
        }


        try
        {
            Dictionary <string, object>[] detailDicArr = Util.GetObjectArrayFromJsonByKey(detailJson, "order_details");
            foreach (Dictionary <string, object> detail in detailDicArr)
            {
                string[,] detailInsertParam = { { "order_online_id", "int",     i.ToString()                     }, { "product_id",   "int",   "0"                               },
                                                { "product_name",    "varchar", detail["name"].ToString().Trim() }, { "price",        "float", detail["deal_price"].ToString()   },
                                                { "count",           "int",     detail["num"].ToString()         }, { "retail_price", "float", detail["market_price"].ToString() } };
                DBHelper.InsertData("order_online_detail", detailInsertParam);
            }
        }
        catch
        {
        }

        string[,] updateParam = { { "online_order_id", "int", i.ToString() } };
        string[,] keyParam    = { { "id", "int", _fields["id"].ToString() } };
        DBHelper.UpdateData("order_online_temp", updateParam, keyParam, Util.conStr);
        return(i);
    }
Beispiel #26
0
 public bool Create(OnlineOrder model)
 {
     using (DbOperator dbOperator = ConnectionManager.CreateConnection())
     {
         dbOperator.ClearParameters();
         StringBuilder strSql = new StringBuilder();
         strSql.Append("INSERT INTO OnlineOrder(OrderID,PKID,PKName,InOutID,PlateNo,EntranceTime,ExitTime,Amount,PaymentChannel,PayBank");
         strSql.Append(",PayAccount,Payer,PayeeChannel,PayeeBank,PayeeAccount,PayeeUser,PayDetailID,SerialNumber,PrepayId,MonthNum,AccountID");
         strSql.Append(",CardId,SyncResultTimes,LastSyncResultTime,ParkCardNo,Balance,RefundOrderId,Remark,OrderType,Status,OrderTime,RealPayTime");
         strSql.Append(",BookingStartTime,BookingEndTime,BookingAreaID,BookingBitNo,CompanyID,OrderSource,ExternalPKID,TagID)");
         strSql.Append(" values(@OrderID,@PKID,@PKName,@InOutID,@PlateNo,@EntranceTime,@ExitTime,@Amount,@PaymentChannel,@PayBank");
         strSql.Append(",@PayAccount,@Payer,@PayeeChannel,@PayeeBank,@PayeeAccount,@PayeeUser,@PayDetailID,@SerialNumber,@PrepayId,@MonthNum,@AccountID");
         strSql.Append(",@CardId,@SyncResultTimes,@LastSyncResultTime,@ParkCardNo,@Balance,@RefundOrderId,@Remark,@OrderType,@Status,@OrderTime,@RealPayTime");
         strSql.Append(",@BookingStartTime,@BookingEndTime,@BookingAreaID,@BookingBitNo,@CompanyID,@OrderSource,@ExternalPKID,@TagID)");
         dbOperator.AddParameter("OrderID", model.OrderID);
         dbOperator.AddParameter("PKID", model.PKID);
         dbOperator.AddParameter("PKName", model.PKName);
         dbOperator.AddParameter("InOutID", model.InOutID);
         dbOperator.AddParameter("PlateNo", model.PlateNo);
         dbOperator.AddParameter("EntranceTime", model.EntranceTime);
         dbOperator.AddParameter("ExitTime", model.ExitTime);
         dbOperator.AddParameter("Amount", model.Amount);
         dbOperator.AddParameter("PaymentChannel", (int)model.PaymentChannel);
         dbOperator.AddParameter("PayBank", model.PayBank);
         dbOperator.AddParameter("PayAccount", model.PayAccount);
         dbOperator.AddParameter("Payer", model.Payer);
         dbOperator.AddParameter("PayeeChannel", (int)model.PayeeChannel);
         dbOperator.AddParameter("PayeeBank", model.PayeeBank);
         dbOperator.AddParameter("PayeeAccount", model.PayeeAccount);
         dbOperator.AddParameter("PayeeUser", model.PayeeUser);
         dbOperator.AddParameter("PayDetailID", model.PayDetailID);
         dbOperator.AddParameter("SerialNumber", model.SerialNumber);
         dbOperator.AddParameter("PrepayId", model.PrepayId);
         dbOperator.AddParameter("MonthNum", model.MonthNum);
         dbOperator.AddParameter("AccountID", model.AccountID);
         dbOperator.AddParameter("CardId", model.CardId);
         dbOperator.AddParameter("SyncResultTimes", model.SyncResultTimes);
         dbOperator.AddParameter("LastSyncResultTime", model.LastSyncResultTime);
         dbOperator.AddParameter("ParkCardNo", model.ParkCardNo);
         dbOperator.AddParameter("Balance", model.Balance);
         dbOperator.AddParameter("RefundOrderId", model.RefundOrderId);
         dbOperator.AddParameter("Remark", model.Remark);
         dbOperator.AddParameter("OrderType", model.OrderType);
         dbOperator.AddParameter("Status", model.Status);
         dbOperator.AddParameter("OrderTime", model.OrderTime);
         dbOperator.AddParameter("RealPayTime", model.RealPayTime);
         dbOperator.AddParameter("BookingStartTime", model.BookingStartTime);
         dbOperator.AddParameter("BookingEndTime", model.BookingEndTime);
         dbOperator.AddParameter("BookingAreaID", model.BookingAreaID);
         dbOperator.AddParameter("BookingBitNo", model.BookingBitNo);
         dbOperator.AddParameter("CompanyID", model.CompanyID);
         dbOperator.AddParameter("OrderSource", model.OrderSource);
         dbOperator.AddParameter("ExternalPKID", model.ExternalPKID);
         dbOperator.AddParameter("TagID", model.TagID);
         return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0);
     }
 }
Beispiel #27
0
 private void Component_OnlineOrderChanged(object sender, OnlineOrder order)
 {
     if ((order.State & TradeStates.Delivered) == TradeStates.Delivered)
     {
         this.Controls.Remove(sender as OnlineOrderComponent);
         this.InitializeHistoryOnlineOrders();
         this.InitializeHistoryOnlineOrders();
         this.dict.TryRemove(order.TradeId, out order);
     }
 }
Beispiel #28
0
        public ActionResult UpdateOnlineOrder(OnlineOrder updatedOrder, string Id)
        {
            // only allow update for OrderStatus
            OnlineOrder order = orderService.GetOnlineOrder(Id);

            order.OrderStatus = updatedOrder.OrderStatus;
            orderService.UpdateOnlineOrder(order);

            return(RedirectToAction("Index"));
        }
Beispiel #29
0
        public static bool Create(OnlineOrder model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            IOnlineOrder factory = OnlineOrderFactory.GetFactory();

            return(factory.Create(model));
        }
Beispiel #30
0
        public static bool PaySuccess(decimal orderId, string serialNumber, DateTime payTime, string payAccount = "")
        {
            bool result = false;

            lock (order_lock)
            {
                try
                {
                    IOnlineOrder factory = OnlineOrderFactory.GetFactory();

                    OnlineOrder order = factory.QueryByOrderId(orderId);
                    if (order == null)
                    {
                        throw new MyException("订单编号不存在");
                    }

                    if (order.Status != OnlineOrderStatus.WaitPay && order.Status != OnlineOrderStatus.Paying)
                    {
                        string message = string.Format("【{0}】,订单编号:{1},状态:{2}", order.PaymentChannel.GetDescription(), order.OrderID, order.Status.GetDescription());
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "【更改订单状态为已支付失败】订单不是有效状态,备注:{0},支付账号:{1}", message, order.PayAccount);
                        return(false);
                    }

                    if (!string.IsNullOrWhiteSpace(payAccount))
                    {
                        result = factory.PaySuccess(order.OrderID, serialNumber, payAccount, payTime);
                    }
                    else
                    {
                        result = factory.PaySuccess(order.OrderID, serialNumber, payTime);
                    }

                    if (result)
                    {
                        order.Status       = OnlineOrderStatus.PaySuccess;
                        order.SerialNumber = serialNumber;
                        order.RealPayTime  = payTime;
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "PaySuccess", "更改订单状态为已支付", orderId, "更改订单状态为已支付成功");

                        bool   noticeResult = NoticePaymentResult(order);
                        string remark       = noticeResult ? "通知支付结果成功" : "通知支付结果失败";
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "PaySuccess", "更改订单状态为已支付", orderId, remark);
                    }
                    else
                    {
                        TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "【更改订单状态为已支付失败】【{0}】,订单编号:{1},状态:{2}", order.PaymentChannel.GetDescription(), order.OrderID, order.Status.GetDescription());
                    }
                }
                catch (Exception ex) {
                    TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "【更改订单状态为已支付失败】订单编号:{0},Message:{1},StackTrace:{2}", orderId, ex.Message, ex.StackTrace);
                }
                return(result);
            }
        }
Beispiel #31
0
            public ActionResult Submit(OnlineOrder order)
            {
                if (ModelState.IsValid)
                {
                    // Create a message from the order
                    var message = new BrokeredMessage(order);

                    // Submit the order
                    QueueConnector.OrdersQueueClient.Send(message);
                    return RedirectToAction("Submit");
                }
                else
                {
                    return View(order);
                }
            }
        public void NotFailWithNoItemsNotificationNoCreditCard()
        {
            var paymentProcessor = new FakePaymentProcessor();
            var reservationService = new FakeReservationService();
            var notificationService = new FakeNotificationService();
            var cart = new Cart() { CustomerEmail = "*****@*****.**" };
            var paymentDetails = new PaymentDetails() { PaymentMethod = PaymentMethod.CreditCard };
            var order = new OnlineOrder(cart,
                                        paymentDetails,
                                        paymentProcessor,
                                        reservationService,
                                        notificationService);

            order.Checkout();

            // if I got here, I guess it worked...
        }
        public void SendTotalAmountToCreditCardProcessor()
        {
            var paymentProcessor = new FakePaymentProcessor();
            var reservationService = new FakeReservationService();
            var notificationService = new FakeNotificationService();
            var cart = new Cart {TotalAmount = 5.05m};
            var paymentDetails = new PaymentDetails()
            { PaymentMethod = PaymentMethod.CreditCard };
            var order = new OnlineOrder(cart,
                                        paymentDetails,
                                        paymentProcessor,
                                        reservationService,
                                        notificationService);

            order.Checkout();

            Assert.IsTrue(paymentProcessor.WasCalled);
            Assert.AreEqual(cart.TotalAmount, paymentProcessor.AmountPassed);
        }