/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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)); } } }
/// <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); }