Пример #1
0
        public void ProcessRequest(HttpContext context)
        {
            M_UserInfo mu = buser.GetLogin();

            retMod.retcode = M_APIResult.Failed;
            string cartCookID = GetCartCookID(context);

            //retMod.callback = CallBack;//暂不开放JsonP
            try
            {
                switch (Action)
                {
                case "deladdress":
                {
                    B_UserRecei receBll = new B_UserRecei();
                    int         id      = DataConverter.CLng(Req("id"));
                    if (mu == null || mu.UserID == 0 || id < 1)
                    {
                        OldRep("-1");
                    }
                    else
                    {
                        receBll.U_DelByID(id, mu.UserID); OldRep("1");
                    }
                }
                break;

                case "setnum":    //ID,数量,Cookies,可不登录,数量不能小于1
                {
                    int id     = DataConverter.CLng(Req("mid"));
                    int pronum = DataConverter.CLng(Req("pronum"));
                    if (id < 1 || pronum < 1 || string.IsNullOrEmpty(cartCookID))
                    {
                        OldRep("-1");
                    }
                    else
                    {
                        cartBll.UpdateProNum(cartCookID, mu.UserID, id, pronum);
                        OldRep("1");
                    }
                }
                break;

                case "arrive":
                {
                    B_Arrive avBll = new B_Arrive();
                    string   flow  = Req("flow");
                    double   money = double.Parse(Req("money"));
                    string   err   = "";
                    M_Arrive avMod = avBll.SelModelByFlow(flow, mu.UserID);
                    if (avBll.U_CheckArrive(avMod, mu.UserID, ref money, ref err))
                    {
                        retMod.retcode = M_APIResult.Success;
                        //已优惠金额,优惠后金额
                        retMod.result = "{\"amount\":\"" + avMod.Amount + "\",\"money\":\"" + money + "\"}";
                    }
                    else
                    {
                        retMod.retmsg = err;
                    }
                }
                break;

                default:
                    retMod.retmsg = "[" + Action + "]接口不存在";
                    break;
                }
            }
            catch (Exception ex) { retMod.retmsg = ex.Message; }
            RepToClient(retMod);
        }
Пример #2
0
        public ContentResult OrderCom()
        {
            M_APIResult retMod = new M_APIResult(M_APIResult.Failed);

            switch (action)
            {
            case "cart_del":
            {
                cartBll.DelByIDS(CartCookID, buser.GetLogin().UserName, ids);
                retMod.retcode = M_APIResult.Success;
            }
            break;

            case "setnum":      //兼容
            case "cart_setnum": //ID,数量,Cookies,可不登录,数量不能小于1
            {
                int id     = DataConverter.CLng(GetParam("id"));
                int pronum = DataConverter.CLng(GetParam("pronum"));
                if (id < 1 || pronum < 1)
                {
                    retMod.retmsg = "商品ID与数量不能小于1";
                }
                else if (string.IsNullOrEmpty(CartCookID))
                {
                    retMod.retmsg = "CartCookID不存在";
                }
                else
                {
                    cartBll.UpdateProNum(CartCookID, mu.UserID, id, pronum);
                    retMod.retcode = M_APIResult.Success;
                }
            }
            break;

            case "deladdress":
            {
                int id = DataConverter.CLng(GetParam("id"));
                if (mu == null || mu.UserID == 0 || id < 1)
                {
                    return(Content(Failed.ToString()));
                }
                else
                {
                    receBll.U_DelByID(id, mu.UserID); return(Content(Success.ToString()));
                }
            }

            case "arrive":
            {
                string    flow   = GetParam("flow");
                double    money  = double.Parse(GetParam("money"));
                DataTable cartdt = cartBll.SelByCartID(CartCookID, mu.UserID, -100, ids);
                if (cartdt.Rows.Count < 1)
                {
                    retMod.retmsg = "购物车为空"; return(Content(retMod.ToString()));
                }
                M_Arrive        avMod  = avBll.SelModelByFlow(flow, mu.UserID);
                M_Arrive_Result arrMod = avBll.U_CheckArrive(avMod, mu.UserID, cartdt, money);
                if (arrMod.enabled)
                {
                    retMod.retcode = M_APIResult.Success;
                    //已优惠金额,优惠后金额
                    retMod.result = Newtonsoft.Json.JsonConvert.SerializeObject(arrMod);
                }
                else
                {
                    retMod.retmsg = arrMod.err;
                }
            }
            break;

            default:
                retMod.retmsg = "[" + action + "]接口不存在";
                break;
            }
            return(Content(retMod.ToString()));
        }
Пример #3
0
        //提交订单
        protected void AddOrder_Btn_Click(object sender, EventArgs e)
        {
            if (Address_Div.Visible && DataConvert.CLng(Request.Form["address_rad"]) < 1)
            {
                function.WriteErrMsg("尚未选定收货地址");
            }
            //1,生成订单,2,关联购物车中商品为已绑定订单
            M_UserInfo  mu      = buser.GetLogin(false);
            M_UserRecei receMod = receBll.GetSelect(Convert.ToInt32(Request.Form["address_rad"]), mu.UserID);
            DataTable   cartDT  = cartBll.SelByCartID(B_Cart.GetCartID(), mu.UserID, ProClass, ids);//需要购买的商品

            if (cartDT.Rows.Count < 1)
            {
                function.WriteErrMsg("你尚未选择商品,<a href='/User/Order/OrderList'>查看我的订单</a>");
            }
            //------生成订单前检测区
            foreach (DataRow dr in cartDT.Rows)
            {
                if (!HasStock(dr["Allowed"], DataConvert.CLng(dr["stock"]), Convert.ToInt32(dr["Pronum"])))
                {
                    function.WriteErrMsg("购买失败," + dr["proname"] + "的库存数量不足");
                }
            }
            //------检测End
            //按店铺生成订单,统一存ZL_Orderinfo
            DataTable          storeDT   = cartDT.DefaultView.ToTable(true, "StoreID");
            List <M_OrderList> orderList = new List <M_OrderList>();//用于生成临时订单,统计计算(Disuse)

            foreach (DataRow dr in storeDT.Rows)
            {
                #region 暂不使用字段
                //Odata.province = this.DropDownList1.SelectedValue;
                //Odata.city = this.DropDownList2.SelectedValue;//将地址省份与市ID存入,XML数据源
                //Odata.Guojia = "";//国家
                //Odata.Chengshi = DropDownList2.SelectedItem.Text;//城市
                //Odata.Diqu = DropDownList3.SelectedItem.Text;//地区
                //Odata.Delivery = DataConverter.CLng(Request.Form["Delivery"]);
                //Odata.Deliverytime = DataConverter.CLng(this.Deliverytime.Text);
                //Odata.Mobile = receMod.MobileNum;
                #endregion
                M_OrderList Odata = new M_OrderList();
                Odata.Ordertype = OrderHelper.GetOrderType(ProClass);
                Odata.OrderNo   = B_OrderList.CreateOrderNo((M_OrderList.OrderEnum)Odata.Ordertype);
                Odata.StoreID   = Convert.ToInt32(dr["StoreID"]);
                cartDT.DefaultView.RowFilter = "StoreID=" + Odata.StoreID;
                DataTable storeCartDT = cartDT.DefaultView.ToTable();
                switch (ProClass)//旅游机票等,以联系人信息为地址
                {
                case 7:
                case 8:
                    M_Cart_Travel   model = JsonConvert.DeserializeObject <M_Cart_Travel>(storeCartDT.Rows[0]["Additional"].ToString());
                    M_Cart_Contract user  = model.Contract[0];
                    Odata.Receiver  = user.Name;
                    Odata.Reuser    = user.Name;
                    Odata.Phone     = user.Mobile;
                    Odata.MobileNum = user.Mobile;
                    Odata.Email     = user.Email;
                    break;

                default:
                    if (Address_Div.Visible)
                    {
                        Odata.Receiver  = receMod.ReceivName;
                        Odata.Reuser    = receMod.ReceivName;
                        Odata.Phone     = receMod.phone;
                        Odata.MobileNum = receMod.MobileNum;
                        Odata.Email     = receMod.Email;
                        Odata.Shengfen  = receMod.Provinces;
                        Odata.Jiedao    = receMod.Street;
                        Odata.ZipCode   = receMod.Zipcode;
                    }
                    break;
                }
                Odata.Invoiceneeds    = DataConverter.CLng(Request.Form["invoice_rad"]);//是否需开发票
                Odata.Invoice         = Odata.Invoiceneeds == 0 ? "" : InvoTitle_T.Text + "||" + Invoice_T.Text;
                Odata.Rename          = mu.UserName;
                Odata.Outstock        = 0;              //缺货处理
                Odata.Ordermessage    = ORemind_T.Text; //订货留言
                Odata.Merchandiser    = "";             //跟单员
                Odata.Internalrecords = "";             //内部记录
                Odata.IsCount         = false;
                //-----金额计算
                Odata.Balance_price     = GetTotalMoney(storeCartDT);
                Odata.Freight           = GetFarePrice(storeCartDT, Odata.StoreID); //运费计算
                Odata.Ordersamount      = Odata.Balance_price + Odata.Freight;      //订单金额
                Odata.AllMoney_Json     = orderCom.GetTotalJson(storeCartDT);       //附加需要的虚拟币
                Odata.Specifiedprice    = Odata.Ordersamount;                       //订单金额;
                Odata.Receivablesamount = 0;                                        //收款金额
                Odata.Developedvotes    = 0;
                Odata.OrderStatus       = (int)M_OrderList.StatusEnum.Normal;       //订单状态
                Odata.Paymentstatus     = (int)M_OrderList.PayEnum.NoPay;           //付款状态
                Odata.StateLogistics    = 0;                                        //物流状态
                Odata.Signed            = 0;                                        //签收
                Odata.Settle            = 0;                                        //结清
                Odata.Aside             = 0;                                        //作废
                Odata.Suspended         = 0;                                        //暂停
                Odata.AddUser           = mu.UserName;;
                Odata.Userid            = mu.UserID;
                Odata.Integral          = DataConverter.CLng(Request.QueryString["jifen"]);
                Odata.Freight_remark    = " ";
                Odata.Balance_remark    = "";
                Odata.Promoter          = 0;
                Odata.id = orderBll.Adds(Odata);
                cartProBll.CopyToCartPro(mu, storeCartDT, Odata.id);
                orderList.Add(Odata);
                orderCom.SendMessage(Odata, null, "ordered");
            }
            cartBll.DelByids(ids);
            //-----------------订单生成后处理
            //进行减库存等操作
            foreach (DataRow dr in cartDT.Rows)
            {
                M_Product model = proBll.GetproductByid(Convert.ToInt32(dr["Proid"]));
                model.Stock = model.Stock - DataConvert.CLng(dr["Pronum"]);
                SqlHelper.ExecuteSql("Update ZL_Commodities Set Stock=" + model.Stock + " Where ID=" + model.ID);
            }
            //生成支付单,处理优惠券,并进入付款步骤
            M_Payment payMod = payBll.CreateByOrder(orderList);
            //优惠券
            if (!string.IsNullOrEmpty(Arrive_Hid.Value))
            {
                M_Arrive avMod  = avBll.SelModelByFlow(Arrive_Hid.Value, mu.UserID);
                double   money  = payMod.MoneyPay;
                string   err    = "";
                string   remind = "支付单抵扣[" + payMod.PayNo + "]";
                if (avBll.U_UseArrive(avMod, mu.UserID, ref money, ref err, remind))
                {
                    payMod.MoneyPay     = money;
                    payMod.ArriveMoney  = avMod.Amount;
                    payMod.ArriveDetail = avMod.ID.ToString();
                }
                else
                {
                    payMod.ArriveDetail = "优惠券[" + avMod.ID + "]异常 :" + err;
                }
            }
            //积分处理
            if (point_body.Visible && DataConvert.CLng(Point_T.Text) > 0)
            {
                int point    = DataConvert.CLng(Point_T.Text);
                int maxPoint = (int)((SiteConfig.ShopConfig.PointRatiot * 0.01) * (double)payMod.MoneyPay / SiteConfig.ShopConfig.PointRate);
                //if (point <= 0) { function.WriteErrMsg("积分数值不正确"); }
                if (point > mu.UserExp)
                {
                    function.WriteErrMsg("您的积分不足!");
                }
                if (point > maxPoint)
                {
                    function.WriteErrMsg("积分不能大于可兑换金额!");
                }
                //生成支付单时扣除用户积分
                buser.ChangeVirtualMoney(mu.UserID, new M_UserExpHis()
                {
                    ScoreType = (int)M_UserExpHis.SType.Point, score = -point, detail = "积分抵扣,支付单号:" + payMod.PayNo
                });
                payMod.MoneyPay = payMod.MoneyPay - (point * SiteConfig.ShopConfig.PointRate);
                payMod.UsePoint = point;
            }
            if (payMod.MoneyPay <= 0)
            {
                payMod.MoneyPay = 0.01;
            }
            payMod.Remark    = cartDT.Rows.Count > 1 ? "[" + cartDT.Rows[0]["ProName"] as string + "]等" : cartDT.Rows[0]["ProName"] as string;
            payMod.PaymentID = payBll.Add(payMod);
            Response.Redirect("/PayOnline/Orderpay.aspx?PayNo=" + payMod.PayNo);
        }
Пример #4
0
        protected void AddOrder_Btn_Click(object sender, EventArgs e)
        {
            //1,生成订单,2,关联购物车中商品为已绑定订单
            M_UserInfo mu     = buser.GetLogin(false);
            DataTable  cartDT = cartBll.SelByCartID(B_Cart.GetCartID(), mu.UserID, ProClass, ids);//需要购买的商品

            if (cartDT.Rows.Count < 1)
            {
                function.WriteErrMsg("你尚未选择商品,<a href='/User/Order/OrderList'>查看我的订单</a>");
            }
            #region 检测缓存中的值与数据库中是否匹配
            string refreshTip = ",请点击<a href='" + Request.RawUrl + "'>刷新页面</a>";
            if (VerifyDT == null || VerifyDT.Rows.Count < 1 || VerifyDT.Rows.Count != cartDT.Rows.Count)
            {
                function.WriteErrMsg("验证失效" + refreshTip, Request.RawUrl);
            }
            for (int i = 0; i < VerifyDT.Rows.Count; i++)
            {
                //检测每一个商品,是否发生了ID/金额/数量/价格/总金额上面的差异或缺少
                DataRow verifyDR = VerifyDT.Rows[i];
                DataRow cartDR   = GetDRFromDT(cartDT, Convert.ToInt32(verifyDR["ID"]));
                if (cartDR == null)
                {
                    function.WriteErrMsg("购物车信息不匹配" + refreshTip, Request.RawUrl);
                }
                foreach (string field in verifyFields)
                {
                    double verifyVal = DataConvert.CDouble(verifyDR[field]);
                    double cartVal   = DataConvert.CDouble(cartDR[field]);
                    if (verifyVal != cartVal)
                    {
                        function.WriteErrMsg("购物车的[" + field + "]不匹配" + refreshTip, Request.RawUrl);
                    }
                }
            }
            #endregion
            //------生成订单前检测区
            foreach (DataRow dr in cartDT.Rows)
            {
                if (!HasStock(dr["Allowed"], DataConvert.CLng(dr["stock"]), Convert.ToInt32(dr["Pronum"])))
                {
                    function.WriteErrMsg("购买失败," + dr["proname"] + "的库存数量不足");
                }
            }
            //------检测End
            //按店铺生成订单
            DataTable          storeDT   = cartDT.DefaultView.ToTable(true, "StoreID");
            List <M_OrderList> orderList = new List <M_OrderList>();//用于生成临时订单,统计计算(Disuse)
            foreach (DataRow dr in storeDT.Rows)
            {
                #region 暂不使用字段
                //Odata.province = this.DropDownList1.SelectedValue;
                //Odata.city = this.DropDownList2.SelectedValue;//将地址省份与市ID存入,XML数据源
                //Odata.Guojia = "";//国家
                //Odata.Chengshi = DropDownList2.SelectedItem.Text;//城市
                //Odata.Diqu = DropDownList3.SelectedItem.Text;//地区
                //Odata.Delivery = DataConverter.CLng(Request.Form["Delivery"]);
                //Odata.Deliverytime = DataConverter.CLng(this.Deliverytime.Text);
                //Odata.Mobile = receMod.MobileNum;
                #endregion
                M_OrderList Odata = new M_OrderList();
                Odata.Ordertype = OrderHelper.GetOrderType(ProClass);
                Odata.OrderNo   = B_OrderList.CreateOrderNo((M_OrderList.OrderEnum)Odata.Ordertype);
                Odata.StoreID   = Convert.ToInt32(dr["StoreID"]);
                cartDT.DefaultView.RowFilter = "StoreID=" + Odata.StoreID;
                DataTable storeCartDT = cartDT.DefaultView.ToTable();
                switch (ProClass)//旅游机票等,以联系人信息为地址
                {
                case 7:
                case 8:
                    M_Cart_Travel   model = JsonConvert.DeserializeObject <M_Cart_Travel>(storeCartDT.Rows[0]["Additional"].ToString());
                    M_Cart_Contract user  = model.Contract[0];
                    Odata.Receiver  = user.Name;
                    Odata.Phone     = user.Mobile;
                    Odata.MobileNum = user.Mobile;
                    Odata.Email     = user.Email;
                    break;

                default:
                    if (Address_Div.Visible)
                    {
                        int    arsID  = DataConvert.CLng(Request.Form["address_rad"]);
                        string arsChk = Request.Form["ars_chk"];
                        if (!string.IsNullOrEmpty(arsChk))
                        {
                            #region 自提或微信共享地址
                            switch (arsChk)
                            {
                            case "self":
                            {
                                Odata.Receiver  = "[用户自提]" + Request.Form["arsInfo_name"];           //用户上门购买,然后自提取商品
                                Odata.MobileNum = Request.Form["arsInfo_mobile"];
                            }
                            break;

                            case "wechat":
                            {
                                Odata.Receiver  = Request.Form["wxad_name"];
                                Odata.MobileNum = Request.Form["wxad_mobile"];
                                Odata.Shengfen  = Request.Form["wxad_city"];
                                Odata.Jiedao    = Request.Form["address"];
                            }
                            break;
                            }
                            #endregion
                        }
                        else
                        {
                            M_UserRecei receMod = receBll.GetSelect(arsID, mu.UserID);
                            if (receMod == null)
                            {
                                function.WriteErrMsg("用户尚未选择送货地址,或地址不存在");
                            }
                            Odata.Receiver  = receMod.ReceivName;
                            Odata.Phone     = receMod.phone;
                            Odata.MobileNum = receMod.MobileNum;
                            Odata.Email     = receMod.Email;
                            Odata.Shengfen  = receMod.Provinces;
                            Odata.Jiedao    = receMod.Street;
                            Odata.ZipCode   = receMod.Zipcode;
                        }
                    }
                    break;
                }
                Odata.Invoiceneeds = DataConverter.CLng(Request.Form["invoice_rad"]);//是否需开发票
                Odata.Rename       = mu.UserName;
                Odata.AddUser      = mu.UserName;;
                Odata.Userid       = mu.UserID;
                Odata.Ordermessage = ORemind_T.Text;//订货留言
                //-----金额计算
                Odata.Balance_price  = GetTotalMoney(storeCartDT);
                Odata.Freight        = GetFarePrice(storeCartDT, Odata.StoreID); //运费计算
                Odata.Ordersamount   = Odata.Balance_price + Odata.Freight;      //订单金额
                Odata.AllMoney_Json  = orderCom.GetTotalJson(storeCartDT);       //附加需要的虚拟币
                Odata.Specifiedprice = Odata.Ordersamount;                       //订单金额;
                Odata.OrderStatus    = (int)M_OrderList.StatusEnum.Normal;       //订单状态
                Odata.Paymentstatus  = (int)M_OrderList.PayEnum.NoPay;           //付款状态
                //Odata.Integral = DataConverter.CLng(Request.QueryString["jifen"]);
                Odata.ExpTime = exptime_hid.Value;
                Odata.id      = orderBll.insert(Odata);
                //是否需要开发票
                if (Odata.Invoiceneeds == 1)
                {
                    M_Order_Invoice invMod = new M_Order_Invoice();
                    invMod.OrderID    = Odata.id;
                    invMod.InvHead    = Request.Form["InvoTitle_T"].Trim(',');
                    invMod.UserCode   = Request.Form["InvoUserCode_T"].Trim(',');
                    invMod.InvClass   = Request.Form["invUseType_rad"];
                    invMod.InvContent = Request.Form["Invoice_T"].Trim(',');
                    invMod.UserID     = Odata.Userid;
                    invBll.Insert(invMod);
                    new B_Order_InvTlp().Sync(invMod);
                }
                cartProBll.CopyToCartPro(mu, storeCartDT, Odata.id);
                orderList.Add(Odata);
                orderCom.SendMessage(Odata, null, "ordered");
            }
            cartBll.DelByids(ids);
            //-----------------订单生成后处理
            //进行减库存等操作
            foreach (DataRow dr in cartDT.Rows)
            {
                M_Product model = proBll.GetproductByid(Convert.ToInt32(dr["Proid"]));
                model.Stock = model.Stock - DataConvert.CLng(dr["Pronum"]);
                SqlHelper.ExecuteSql("Update ZL_Commodities Set Stock=" + model.Stock + " Where ID=" + model.ID);
            }
            //生成支付单,处理优惠券,并进入付款步骤
            M_Payment payMod = payBll.CreateByOrder(orderList);
            //优惠券
            if (!string.IsNullOrEmpty(Request.Form["Arrive_Hid"]))
            {
                M_Arrive        avMod  = avBll.SelModelByFlow(Request.Form["Arrive_Hid"], mu.UserID);
                double          money  = payMod.MoneyPay;
                string          remind = "支付单抵扣[" + payMod.PayNo + "]";
                M_Arrive_Result retMod = avBll.U_UseArrive(avMod, mu.UserID, cartDT, money, remind);
                if (retMod.enabled)
                {
                    payMod.MoneyPay     = retMod.money;
                    payMod.ArriveMoney  = retMod.amount;
                    payMod.ArriveDetail = avMod.ID.ToString();
                }
                else
                {
                    payMod.ArriveDetail = "优惠券[" + avMod.ID + "]异常 :" + retMod.err;
                }
            }
            //积分处理
            if (point_body.Visible && DataConvert.CLng(Point_T.Text) > 0)
            {
                int point = DataConvert.CLng(Point_T.Text);
                //此处需咨询,上限额度是否要扣减掉优惠券

                int maxPoint = Point_CanBeUse(payMod.MoneyPay + payMod.ArriveMoney);
                //if (point <= 0) { function.WriteErrMsg("积分数值不正确"); }
                if (point > mu.UserExp)
                {
                    function.WriteErrMsg("您的积分不足!");
                }
                if (point > maxPoint)
                {
                    function.WriteErrMsg("积分不能大于可兑换金额[" + maxPoint + "]!");
                }
                //生成支付单时扣除用户积分
                buser.ChangeVirtualMoney(mu.UserID, new M_UserExpHis()
                {
                    ScoreType = (int)M_UserExpHis.SType.Point, score = -point, detail = "积分抵扣,支付单号:" + payMod.PayNo
                });
                payMod.UsePoint       = point;
                payMod.UsePointArrive = Point_ToMoney(point);
                payMod.MoneyPay       = payMod.MoneyPay - payMod.UsePointArrive;
            }
            payMod.MoneyReal = payMod.MoneyPay;
            payMod.Remark    = cartDT.Rows.Count > 1 ? "[" + cartDT.Rows[0]["ProName"] as string + "]等" : cartDT.Rows[0]["ProName"] as string;
            payMod.PaymentID = payBll.Add(payMod);
            Response.Redirect("/PayOnline/Orderpay.aspx?PayNo=" + payMod.PayNo);
        }