Exemple #1
0
        /// <summary>
        /// 获得完整用户配送地址
        /// </summary>
        /// <param name="uid">用户id</param>
        /// <param name="saId">配送地址id</param>
        /// <returns></returns>
        public static FullShipAddressInfo GetFullShipAddressBySAId(int uid, int saId)
        {
            FullShipAddressInfo fullShipAddressInfo = null;

            if (_usernosql != null)
            {
                foreach (FullShipAddressInfo tempFullShipAddressInfo in GetFullShipAddressList(uid))
                {
                    if (tempFullShipAddressInfo.SAId == saId)
                    {
                        fullShipAddressInfo = tempFullShipAddressInfo;
                        break;
                    }
                }
            }
            else
            {
                IDataReader reader = BrnMall.Core.BMAData.RDBS.GetFullShipAddressBySAId(saId);
                if (reader.Read())
                {
                    fullShipAddressInfo = BuildFullShipAddressFromReader(reader);
                }
                reader.Close();
            }

            return(fullShipAddressInfo);
        }
Exemple #2
0
        /// <summary>
        /// 获得完整用户配送地址列表
        /// </summary>
        /// <param name="uid">用户id</param>
        /// <returns></returns>
        public static List <FullShipAddressInfo> GetFullShipAddressList(int uid)
        {
            List <FullShipAddressInfo> fullShipAddressList = null;

            if (_usernosql != null)
            {
                fullShipAddressList = _usernosql.GetFullShipAddressList(uid);
                if (fullShipAddressList == null)
                {
                    fullShipAddressList = new List <FullShipAddressInfo>();
                    IDataReader reader = BrnMall.Core.BMAData.RDBS.GetFullShipAddressList(uid);
                    while (reader.Read())
                    {
                        FullShipAddressInfo fullShipAddressInfo = BuildFullShipAddressFromReader(reader);
                        fullShipAddressList.Add(fullShipAddressInfo);
                    }
                    reader.Close();
                    _usernosql.CreateFullShipAddressList(uid, fullShipAddressList);
                }
            }
            else
            {
                fullShipAddressList = new List <FullShipAddressInfo>();
                IDataReader reader = BrnMall.Core.BMAData.RDBS.GetFullShipAddressList(uid);
                while (reader.Read())
                {
                    FullShipAddressInfo fullShipAddressInfo = BuildFullShipAddressFromReader(reader);
                    fullShipAddressList.Add(fullShipAddressInfo);
                }
                reader.Close();
            }

            return(fullShipAddressList);
        }
Exemple #3
0
        /// <summary>
        /// 获得默认完整用户配送地址
        /// </summary>
        /// <param name="uid">用户id</param>
        /// <returns></returns>
        public static FullShipAddressInfo GetDefaultFullShipAddress(int uid)
        {
            FullShipAddressInfo fullShipAddressInfo = null;

            if (_usernosql != null)
            {
                foreach (FullShipAddressInfo tempFullShipAddressInfo in GetFullShipAddressList(uid))
                {
                    if (tempFullShipAddressInfo.IsDefault == 1)
                    {
                        fullShipAddressInfo = tempFullShipAddressInfo;
                        break;
                    }
                }
            }
            else
            {
                IDataReader reader = BrnShop.Core.BSPData.RDBS.GetDefaultFullShipAddress(uid);
                if (reader.Read())
                {
                    fullShipAddressInfo = BuildFullShipAddressFromReader(reader);
                }
                reader.Close();
            }

            return(fullShipAddressInfo);
        }
Exemple #4
0
        /// <summary>
        /// 获得完整用户配送地址
        /// </summary>
        /// <param name="saId">配送地址id</param>
        /// <param name="uid">用户id</param>
        /// <returns></returns>
        public static FullShipAddressInfo GetFullShipAddressBySAId(int saId, int uid)
        {
            if (saId < 1)
            {
                return(null);
            }

            FullShipAddressInfo fullShipAddressInfo = BrnShop.Data.ShipAddresses.GetFullShipAddressBySAId(uid, saId);

            if (fullShipAddressInfo == null || fullShipAddressInfo.Uid != uid)
            {
                return(null);
            }
            else
            {
                return(fullShipAddressInfo);
            }
        }
Exemple #5
0
        /// <summary>
        /// 构建完整用户配送地址信息
        /// </summary>
        public static FullShipAddressInfo BuildFullShipAddressFromReader(IDataReader reader)
        {
            FullShipAddressInfo fullShipAddressInfo = new FullShipAddressInfo();

            fullShipAddressInfo.SAId         = TypeHelper.ObjectToInt(reader["said"]);
            fullShipAddressInfo.Uid          = TypeHelper.ObjectToInt(reader["uid"]);
            fullShipAddressInfo.RegionId     = TypeHelper.ObjectToInt(reader["regionid"]);
            fullShipAddressInfo.IsDefault    = TypeHelper.ObjectToInt(reader["isdefault"]);
            fullShipAddressInfo.Alias        = reader["alias"].ToString();
            fullShipAddressInfo.Consignee    = reader["consignee"].ToString();
            fullShipAddressInfo.Phone        = reader["phone"].ToString();
            fullShipAddressInfo.Mobile       = reader["mobile"].ToString();
            fullShipAddressInfo.Email        = reader["email"].ToString();
            fullShipAddressInfo.ZipCode      = reader["zipcode"].ToString();
            fullShipAddressInfo.Address      = reader["address"].ToString();
            fullShipAddressInfo.ProvinceId   = TypeHelper.ObjectToInt(reader["provinceid"]);
            fullShipAddressInfo.ProvinceName = reader["provincename"].ToString();
            fullShipAddressInfo.CityId       = TypeHelper.ObjectToInt(reader["cityid"]);
            fullShipAddressInfo.CityName     = reader["cityname"].ToString();
            fullShipAddressInfo.CountyId     = TypeHelper.ObjectToInt(reader["regionid"]);
            fullShipAddressInfo.CountyName   = reader["name"].ToString();

            return(fullShipAddressInfo);
        }
Exemple #6
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="partUserInfo">用户信息</param>
        /// <param name="storeInfo">店铺信息</param>
        /// <param name="orderProductList">订单商品列表</param>
        /// <param name="singlePromotionList">单品促销活动列表</param>
        /// <param name="fullShipAddressInfo">配送地址</param>
        /// <param name="payMode">支付方式(0代表货到付款,1代表在线支付)</param>
        /// <param name="payCreditCount">支付积分数</param>
        /// <param name="couponList">优惠劵列表</param>
        /// <param name="fullCut">满减</param>
        /// <param name="buyerRemark">买家备注</param>
        /// <param name="bestTime">最佳配送时间</param>
        /// <param name="ip">ip地址</param>
        /// <returns>订单信息</returns>
        public static OrderInfo CreateOrder(PartUserInfo partUserInfo, StoreInfo storeInfo, List <OrderProductInfo> orderProductList, List <SinglePromotionInfo> singlePromotionList, FullShipAddressInfo fullShipAddressInfo, int payMode, ref int payCreditCount, List <CouponInfo> couponList, int fullCut, string buyerRemark, DateTime bestTime, string ip)
        {
            DateTime nowTime = DateTime.Now;

            OrderInfo orderInfo = new OrderInfo();

            orderInfo.OSN = GenerateOSN(storeInfo.StoreId, partUserInfo.Uid, fullShipAddressInfo.RegionId, nowTime);;
            orderInfo.Uid = partUserInfo.Uid;

            orderInfo.Weight        = Carts.SumOrderProductWeight(orderProductList);
            orderInfo.ProductAmount = Carts.SumOrderProductAmount(orderProductList);
            orderInfo.FullCut       = fullCut;
            orderInfo.ShipFee       = GetShipFee(fullShipAddressInfo.ProvinceId, fullShipAddressInfo.CityId, orderProductList);
            orderInfo.OrderAmount   = orderInfo.ProductAmount - orderInfo.FullCut + orderInfo.ShipFee;

            decimal payCreditMoney = Credits.PayCreditsToMoney(payCreditCount);

            if (orderInfo.OrderAmount >= payCreditMoney)
            {
                orderInfo.PayCreditCount = payCreditCount;
                orderInfo.PayCreditMoney = payCreditMoney;
                payCreditCount           = 0;
            }
            else
            {
                int orderPayCredits = Credits.MoneyToPayCredits(orderInfo.OrderAmount);
                orderInfo.PayCreditCount = orderPayCredits;
                orderInfo.PayCreditMoney = orderInfo.OrderAmount;
                payCreditCount           = payCreditCount - orderPayCredits;
            }

            orderInfo.CouponMoney = Coupons.SumCouponMoney(couponList);

            orderInfo.SurplusMoney = orderInfo.OrderAmount - orderInfo.PayCreditMoney - orderInfo.CouponMoney;
            if (orderInfo.SurplusMoney < 0)
            {
                orderInfo.SurplusMoney = 0;
            }

            orderInfo.OrderState = (orderInfo.SurplusMoney <= 0 || payMode == 0) ? (int)OrderState.Confirming : (int)OrderState.WaitPaying;

            orderInfo.IsReview      = 0;
            orderInfo.AddTime       = nowTime;
            orderInfo.StoreId       = storeInfo.StoreId;
            orderInfo.StoreName     = storeInfo.Name;
            orderInfo.PaySystemName = payMode == 0 ? "cod" : "";
            orderInfo.PayFriendName = payMode == 0 ? "货到付款" : "";
            orderInfo.PayMode       = payMode;

            orderInfo.RegionId  = fullShipAddressInfo.RegionId;
            orderInfo.Consignee = fullShipAddressInfo.Consignee;
            orderInfo.Mobile    = fullShipAddressInfo.Mobile;
            orderInfo.Phone     = fullShipAddressInfo.Phone;
            orderInfo.Email     = fullShipAddressInfo.Email;
            orderInfo.ZipCode   = fullShipAddressInfo.ZipCode;
            orderInfo.Address   = fullShipAddressInfo.Address;
            orderInfo.BestTime  = bestTime;

            orderInfo.BuyerRemark = buyerRemark;
            orderInfo.IP          = ip;

            try
            {
                //添加订单
                int oid = _iorderstrategy.CreateOrder(orderInfo, Carts.IsPersistOrderProduct, orderProductList);
                if (oid > 0)
                {
                    orderInfo.Oid = oid;

                    //减少商品库存数量
                    Products.DecreaseProductStockNumber(orderProductList);
                    //更新限购库存
                    if (singlePromotionList.Count > 0)
                    {
                        Promotions.UpdateSinglePromotionStock(singlePromotionList);
                    }
                    //使用支付积分
                    Credits.PayOrder(ref partUserInfo, orderInfo, orderInfo.PayCreditCount, nowTime);
                    //使用优惠劵
                    foreach (CouponInfo couponInfo in couponList)
                    {
                        if (couponInfo.Uid > 0)
                        {
                            Coupons.UseCoupon(couponInfo.CouponId, oid, nowTime, ip);
                        }
                        else
                        {
                            Coupons.ActivateAndUseCoupon(couponInfo.CouponId, partUserInfo.Uid, oid, nowTime, ip);
                        }
                    }

                    return(orderInfo);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(null);
        }
Exemple #7
0
        /// <summary>
        /// 编辑配送地址
        /// </summary>
        public ActionResult EditShipAddress()
        {
            if (WebHelper.IsGet())
            {
                int saId = WebHelper.GetQueryInt("saId");
                FullShipAddressInfo fullShipAddressInfo = ShipAddresses.GetFullShipAddressBySAId(saId, WorkContext.Uid);
                if (fullShipAddressInfo == null)
                {
                    return(PromptView(Url.Action("shipaddresslist"), "地址不存在"));
                }

                ShipAddressModel model = new ShipAddressModel();
                model.Alias      = fullShipAddressInfo.Alias;
                model.Consignee  = fullShipAddressInfo.Consignee;
                model.Mobile     = fullShipAddressInfo.Mobile;
                model.Phone      = fullShipAddressInfo.Phone;
                model.Email      = fullShipAddressInfo.Email;
                model.ZipCode    = fullShipAddressInfo.ZipCode;
                model.ProvinceId = fullShipAddressInfo.ProvinceId;
                model.CityId     = fullShipAddressInfo.CityId;
                model.RegionId   = fullShipAddressInfo.RegionId;
                model.Address    = fullShipAddressInfo.Address;
                model.IsDefault  = fullShipAddressInfo.IsDefault;

                return(View(model));
            }
            else
            {
                int    saId      = WebHelper.GetQueryInt("saId");
                int    regionId  = WebHelper.GetFormInt("regionId");
                string alias     = WebHelper.GetFormString("alias");
                string consignee = WebHelper.GetFormString("consignee");
                string mobile    = WebHelper.GetFormString("mobile");
                string phone     = WebHelper.GetFormString("phone");
                string email     = WebHelper.GetFormString("email");
                string zipcode   = WebHelper.GetFormString("zipcode");
                string address   = WebHelper.GetFormString("address");
                int    isDefault = WebHelper.GetFormInt("isDefault");

                string verifyResult = VerifyShipAddress(regionId, alias, consignee, mobile, phone, email, zipcode, address);
                if (verifyResult.Length == 0)
                {
                    ShipAddressInfo shipAddressInfo = ShipAddresses.GetShipAddressBySAId(saId, WorkContext.Uid);
                    //检查地址
                    if (shipAddressInfo == null)
                    {
                        return(AjaxResult("noexist", "配送地址不存在"));
                    }

                    shipAddressInfo.Uid       = WorkContext.Uid;
                    shipAddressInfo.RegionId  = regionId;
                    shipAddressInfo.IsDefault = isDefault == 0 ? 0 : 1;
                    shipAddressInfo.Alias     = WebHelper.HtmlEncode(alias);
                    shipAddressInfo.Consignee = WebHelper.HtmlEncode(consignee);
                    shipAddressInfo.Mobile    = mobile;
                    shipAddressInfo.Phone     = phone;
                    shipAddressInfo.Email     = email;
                    shipAddressInfo.ZipCode   = zipcode;
                    shipAddressInfo.Address   = WebHelper.HtmlEncode(address);
                    ShipAddresses.UpdateShipAddress(shipAddressInfo);
                    return(AjaxResult("success", "编辑成功"));
                }
                else
                {
                    return(AjaxResult("error", verifyResult, true));
                }
            }
        }
Exemple #8
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="partUserInfo">用户信息</param>
        /// <param name="storeInfo">店铺信息</param>
        /// <param name="orderProductList">订单商品列表</param>
        /// <param name="singlePromotionList">单品促销活动列表</param>
        /// <param name="fullShipAddressInfo">配送地址</param>
        /// <param name="payPluginInfo">支付方式</param>
        /// <param name="payCreditCount">支付积分数</param>
        /// <param name="couponList">优惠劵列表</param>
        /// <param name="fullCut">满减</param>
        /// <param name="buyerRemark">买家备注</param>
        /// <param name="bestTime">最佳配送时间</param>
        /// <param name="ip">ip地址</param>
        /// <returns>订单信息</returns>
        public static OrderInfo CreateOrder(PartUserInfo partUserInfo, StoreInfo storeInfo, List <OrderProductInfo> orderProductList, List <SinglePromotionInfo> singlePromotionList, FullShipAddressInfo fullShipAddressInfo, PluginInfo payPluginInfo, ref int payCreditCount, List <CouponInfo> couponList, int fullCut, string buyerRemark, DateTime bestTime, string ip)
        {
            DateTime   nowTime   = DateTime.Now;
            IPayPlugin payPlugin = (IPayPlugin)payPluginInfo.Instance;

            OrderInfo orderInfo = new OrderInfo();

            orderInfo.OSN = GenerateOSN(storeInfo.StoreId, partUserInfo.Uid, fullShipAddressInfo.RegionId, nowTime);;
            orderInfo.Uid = partUserInfo.Uid;

            orderInfo.Weight        = Carts.SumOrderProductWeight(orderProductList);
            orderInfo.ProductAmount = Carts.SumOrderProductAmount(orderProductList);
            //折扣
            //折扣
            decimal disc = 1.00m;

            if (partUserInfo.UserLevel == 1)
            {
                disc = 0.95m;
                orderInfo.Discount      = orderInfo.ProductAmount - (orderInfo.ProductAmount * disc);
                orderInfo.ProductAmount = orderInfo.ProductAmount - orderInfo.Discount;
            }
            if (partUserInfo.UserLevel == 2)
            {
                disc = 0.9m;
                orderInfo.Discount      = orderInfo.ProductAmount - (orderInfo.ProductAmount * disc);
                orderInfo.ProductAmount = orderInfo.ProductAmount - orderInfo.Discount;
            }
            if (partUserInfo.UserLevel == 3)
            {
                disc = 0.85m;
                orderInfo.Discount      = orderInfo.ProductAmount - (orderInfo.ProductAmount * disc);
                orderInfo.ProductAmount = orderInfo.ProductAmount - orderInfo.Discount;
            }
            orderInfo.FullCut     = fullCut;
            orderInfo.ShipFee     = GetShipFee(fullShipAddressInfo.ProvinceId, fullShipAddressInfo.CityId, orderProductList);
            orderInfo.PayFee      = payPlugin.GetPayFee(orderInfo.ProductAmount - orderInfo.FullCut, nowTime, partUserInfo);
            orderInfo.OrderAmount = orderInfo.ProductAmount - orderInfo.FullCut + orderInfo.ShipFee + orderInfo.PayFee;
            //折扣
            //折扣
            //decimal disc = 1.00m;
            //if (partUserInfo.UserLevel == 1)
            //{
            //    disc = 0.95m;
            //    orderInfo.Discount = orderInfo.OrderAmount * disc;
            //    orderInfo.OrderAmount = orderInfo.OrderAmount - orderInfo.Discount;
            //}
            //if (partUserInfo.UserLevel == 2)
            //{
            //    disc = 0.9m;
            //    orderInfo.Discount = orderInfo.OrderAmount * disc;
            //    orderInfo.OrderAmount = orderInfo.OrderAmount - orderInfo.Discount;
            //}
            //if (partUserInfo.UserLevel == 3)
            //{
            //    disc = 0.85m;
            //    orderInfo.Discount = orderInfo.OrderAmount * disc;
            //    orderInfo.OrderAmount = orderInfo.OrderAmount - orderInfo.Discount;
            //}
            decimal payCreditMoney = Credits.PayCreditsToMoney(payCreditCount);

            if (orderInfo.OrderAmount >= payCreditMoney)
            {
                orderInfo.PayCreditCount = payCreditCount;
                orderInfo.PayCreditMoney = payCreditMoney;
                payCreditCount           = 0;
            }
            else
            {
                int orderPayCredits = Credits.MoneyToPayCredits(orderInfo.OrderAmount);
                orderInfo.PayCreditCount = orderPayCredits;
                orderInfo.PayCreditMoney = orderInfo.OrderAmount;
                payCreditCount           = payCreditCount - orderPayCredits;
            }

            orderInfo.CouponMoney  = Coupons.SumCouponMoney(couponList);
            orderInfo.SurplusMoney = orderInfo.OrderAmount - orderInfo.PayCreditMoney - orderInfo.CouponMoney;



            orderInfo.OrderState = (orderInfo.SurplusMoney <= 0 || payPlugin.PayMode == 0) ? (int)OrderState.Confirming : (int)OrderState.WaitPaying;

            orderInfo.ParentId      = 0;
            orderInfo.IsReview      = 0;
            orderInfo.AddTime       = nowTime;
            orderInfo.StoreId       = storeInfo.StoreId;
            orderInfo.StoreName     = storeInfo.Name;
            orderInfo.PaySystemName = payPluginInfo.SystemName;
            orderInfo.PayFriendName = payPluginInfo.FriendlyName;
            orderInfo.PayMode       = payPlugin.PayMode;

            orderInfo.RegionId  = fullShipAddressInfo.RegionId;
            orderInfo.Consignee = fullShipAddressInfo.Consignee;
            orderInfo.Mobile    = fullShipAddressInfo.Mobile;
            orderInfo.Phone     = fullShipAddressInfo.Phone;
            orderInfo.Email     = fullShipAddressInfo.Email;
            orderInfo.ZipCode   = fullShipAddressInfo.ZipCode;
            orderInfo.Address   = fullShipAddressInfo.Address;
            orderInfo.BestTime  = bestTime;

            orderInfo.BuyerRemark = buyerRemark;
            orderInfo.IP          = ip;

            try
            {
                //添加订单
                int oid = _iorderstrategy.CreateOrder(orderInfo, Carts.IsPersistOrderProduct, orderProductList);
                //int oid = _iorderstrategy.CreateOrder(orderInfo, false, orderProductList);
                if (oid > 0)
                {
                    orderInfo.Oid = oid;

                    //减少商品库存数量
                    Products.DecreaseProductStockNumber(orderProductList);
                    //更新限购库存
                    if (singlePromotionList.Count > 0)
                    {
                        Promotions.UpdateSinglePromotionStock(singlePromotionList);
                    }
                    //使用支付积分
                    Credits.PayOrder(ref partUserInfo, orderInfo, orderInfo.PayCreditCount, nowTime);
                    //使用优惠劵
                    foreach (CouponInfo couponInfo in couponList)
                    {
                        if (couponInfo.Uid > 0)
                        {
                            Coupons.UseCoupon(couponInfo.CouponId, oid, nowTime, ip);
                        }
                        else
                        {
                            Coupons.ActivateAndUseCoupon(couponInfo.CouponId, partUserInfo.Uid, oid, nowTime, ip);
                        }
                    }

                    return(orderInfo);
                }
            }
            catch (Exception ex)
            {
                //throw ex;
                BMALog.Instance.Write(ex.ToString());
            }

            return(null);
        }