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