/// <summary> /// 构造购物车 /// </summary> /// <returns></returns> public static OrderPipelineProcessResult BuildShoppingCart(ShoppingCart shoppingCart) { OrderPipelineProcessResult shoppingResult = SOPipelineProcessor.BuildShoppingCart(shoppingCart); if (shoppingResult.ReturnData != null && shoppingResult.ReturnData.OrderItemGroupList != null) { //修正购物车中商品购买数量 //foreach (var group in shoppingCart.ShoppingItemGroupList) //{ // OrderItemGroup newShoppingGroup = null; // if (group.PackageType.Equals(0)) // { // //单个商品 // newShoppingGroup = shoppingResult.ReturnData.OrderItemGroupList.Find(x // => x.PackageType == group.PackageType // && x.PackageNo == group.PackageNo // && x.ProductItemList[0].ProductSysNo == group.ShoppingItemList[0].ProductSysNo); // } // else if (group.PackageType.Equals(1)) // { // //套餐 // newShoppingGroup = shoppingResult.ReturnData.OrderItemGroupList.Find(x // => x.PackageType == group.PackageType // && x.PackageNo == group.PackageNo); // } // if (newShoppingGroup != null) // { // //最多购买newShoppingGroup.MaxCountPerSO个 // if (group.Quantity > newShoppingGroup.MaxCountPerSO) // { // group.Quantity = newShoppingGroup.MaxCountPerSO; // newShoppingGroup.Quantity = newShoppingGroup.MaxCountPerSO; // } // //至少需要购买newShoppingGroup.MinCountPerSO个 // if (group.Quantity < newShoppingGroup.MinCountPerSO) // { // group.Quantity = newShoppingGroup.MinCountPerSO; // newShoppingGroup.Quantity = newShoppingGroup.MinCountPerSO; // } // } //} //排序,套餐排在最前面 var query = from r in shoppingResult.ReturnData.OrderItemGroupList orderby r.PackageType //descending select r; shoppingResult.ReturnData.OrderItemGroupList = query.ToList(); } return(shoppingResult); }
private static CheckOutResult PreCheckAndBuild(CheckOutContext context, ShoppingCart shoppingCart, int customerSysNo, int orderSource , Func <OrderInfo, OrderPipelineProcessResult> action) { CheckOutResult result = new CheckOutResult(); MemberInfo memberInfo = CustomerDA.GetCustomerInfo(customerSysNo); CheckOutContext newCheckoutContenxt = new CheckOutContext(); if (context != null) { newCheckoutContenxt = context.Clone(); } CustomerInfo customerInfo = new CustomerInfo() { AccountBalance = memberInfo.ValidPrepayAmt, AccountPoint = memberInfo.ValidScore, CustomerRank = (int)memberInfo.CustomerRank, ID = memberInfo.CustomerID, SysNo = memberInfo.SysNo, Name = memberInfo.CustomerName, IsEmailConfirmed = memberInfo.IsEmailConfirmed, IsPhoneValided = memberInfo.IsPhoneValided, CellPhone = memberInfo.CellPhone, SocietyID = memberInfo.SocietyID }; result.Customer = customerInfo; //用户个人实名认证信息 result.CustomerAuthenticationInfo = CustomerDA.GetCustomerAuthenticationInfo(customerSysNo); //用户购物发票信息 result.CustomerInvoiceInfo = CustomerDA.GetCustomerInvoiceInfo(customerSysNo); if (result.CustomerInvoiceInfo == null) { result.CustomerInvoiceInfo = new Entity.Member.CustomerInvoiceInfo() { CustomerSysNo = customerSysNo, InvoiceTitle = customerInfo.Name }; } //收货地址 var custShippingAddressListResult = GetCustomerShippingAddressList(context, customerSysNo); result.ShippingAddressList = custShippingAddressListResult.ShippingAddressList; result.SelShippingAddress = custShippingAddressListResult.SelShippingAddress; //支付方式&配送方式 var payAndShipTypeResult = GetPayAndShipTypeList(context, customerSysNo, shoppingCart); result.PaymentCategoryList = payAndShipTypeResult.PaymentCategoryList; result.SelPaymentCategoryID = payAndShipTypeResult.SelPaymentCategoryID; result.PayTypeList = payAndShipTypeResult.PayTypeList; result.SelPayType = payAndShipTypeResult.SelPayType; result.ShipTypeList = payAndShipTypeResult.ShipTypeList; result.SelShipType = payAndShipTypeResult.SelShipType; //根据CheckOutContext 进一步构造shoppingCartResult.ReturnData对象 OrderInfo preOrderInfo = SOPipelineProcessor.Convert2OrderInfo(shoppingCart); preOrderInfo.Customer = customerInfo; preOrderInfo.PayTypeID = result.SelPayType.PayTypeID.ToString(); preOrderInfo.ShipTypeID = result.SelShipType.ShipTypeSysNo.ToString(); preOrderInfo.Memo = newCheckoutContenxt.OrderMemo; preOrderInfo.CouponCode = newCheckoutContenxt.PromotionCode; preOrderInfo.ChannelID = shoppingCart.ChannelID; preOrderInfo.LanguageCode = shoppingCart.LanguageCode; preOrderInfo.OrderSource = orderSource; preOrderInfo.VirualGroupBuyOrderTel = context != null ? context.VirualGroupBuyOrderTel : ""; preOrderInfo.Contact = new ContactInfo() { AddressAreaID = result.SelShippingAddress.ReceiveAreaSysNo, //AddressAreaID = result.SelShippingAddress.ReceiveAreaCitySysNo, AddressTitle = result.SelShippingAddress.AddressTitle, AddressDetail = result.SelShippingAddress.ReceiveAddress, MobilePhone = result.SelShippingAddress.ReceiveCellPhone, Phone = result.SelShippingAddress.ReceivePhone, Name = result.SelShippingAddress.ReceiveName, ZipCode = result.SelShippingAddress.ReceiveZip, ID = result.SelShippingAddress.SysNo, }; //使用余额进行支付,给订单的余额支付金额赋值,在SOPipline中会对订单的余额支付金额重新进行计算 if (newCheckoutContenxt.IsUsedPrePay > 0) { preOrderInfo.BalancePayAmount = customerInfo.AccountBalance; } //积分 preOrderInfo.PointPay = newCheckoutContenxt.PointPay; //礼品卡 if (newCheckoutContenxt.GiftCardList != null && newCheckoutContenxt.GiftCardList.Count > 0) { preOrderInfo.GiftCardList = new List <GiftCardInfo>(); foreach (var giftCardContext in newCheckoutContenxt.GiftCardList) { if (!string.IsNullOrWhiteSpace(giftCardContext.Crypto)) { giftCardContext.Password = ExtractGiftCardPassword(giftCardContext.Password, customerSysNo); } GiftCardInfo giftCardInfo = new GiftCardInfo() { Code = giftCardContext.Code, Password = giftCardContext.Password }; giftCardInfo["Crypto"] = giftCardContext.Crypto; preOrderInfo.GiftCardList.Add(giftCardInfo); } } //购物发票,1表示要开发票 if (newCheckoutContenxt.NeedInvoice == 1) { preOrderInfo.Receipt = new ReceiptInfo() { PersonalInvoiceTitle = result.CustomerInvoiceInfo.InvoiceTitle }; } //执行真正的action操作 OrderPipelineProcessResult checkOutResult = action(preOrderInfo); SetCheckoutResult(checkOutResult, result, newCheckoutContenxt); return(result); }
/// <summary> /// 获取商家仓库的所有配送方式 /// </summary> /// <param name="sellerSysNo">商家编号</param> /// <returns></returns> public static List <ShipTypeInfo> Checkout_GetStockShippingType(int sellerSysNo) { return(SOPipelineProcessor.Checkout_GetStockShippingType(sellerSysNo)); }
/// <summary> /// 根据配送地区编号和支付方式编号取得所有支持的配送方式列表 /// </summary> /// <param name="addressAreaID">配送地区编号</param> /// <param name="paymentCategory">支付类别</param> /// <returns></returns> public static List <ShipTypeInfo> GetSupportedShipTypeList(int addressAreaID, PaymentCategory?paymentCategory) { return(SOPipelineProcessor.GetSupportedShipTypeList(addressAreaID, paymentCategory)); }