/// <summary> /// 进入立即购买提交页面 /// </summary> /// <param name="skuIds">库存ID集合</param> /// <param name="counts">库存ID对应的数量</param> /// <param name="GroupActionId">拼团活动编号</param> /// <param name="GroupId">拼团编号</param> public ActionResult Submit(string skuIds, string counts, int islimit = 0, long shippingAddressId = 0, string couponIds = "") { var coupons = CouponApplication.ConvertUsedCoupon(couponIds); var result = OrderApplication.GetMobileSubmit(UserId, skuIds, counts, shippingAddressId, coupons); ViewBag.InvoiceContext = result.InvoiceContext; ViewBag.InvoiceTitle = result.InvoiceTitle; ViewBag.skuIds = skuIds; ViewBag.counts = counts; ViewBag.IsCashOnDelivery = result.IsCashOnDelivery; ViewBag.address = null == result.Address || result.Address.NeedUpdate ? null : result.Address; ViewBag.ConfirmModel = result; ViewBag.Islimit = islimit == 1 ? true : false; var orderTag = Guid.NewGuid().ToString("N"); ViewBag.OrderTag = orderTag; Session["OrderTag"] = orderTag; InitOrderSubmitModel(result); #region 是否开启门店授权 ViewBag.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; #endregion #region TDO:ZYF 3.2注释是否提供发票 //bool ProvideInvoice = false; //if (result.products != null) // ProvideInvoice = ShopApplication.HasProvideInvoice(result.products.Select(p => p.shopId).ToList()); //ViewBag.ProvideInvoice = ProvideInvoice; #endregion bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); ViewBag.CanIntegralPerMoney = canIntegralPerMoney; ViewBag.CanCapital = canCapital; ViewBag.productType = result.ProductType; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (result.ProductType == 1) { var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(result.ProductId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new HimallException("该虚拟商品已过期,不支持下单"); } if (result.products != null && result.products.Count > 0) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(result.products.FirstOrDefault().shopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } ViewBag.ShipperAddress = shipperAddress; ViewBag.ShipperTelPhone = shipperTelPhone; return(View()); }
/// <summary> /// 获得编辑收获地址页面 /// </summary> /// <param name="addressId">收货地址Id</param> /// <param name="returnURL">返回url路径</param> public ActionResult EditShippingAddress(long addressId = 0, string returnURL = "") { var ShipngInfo = OrderApplication.GetUserAddress(addressId); ViewBag.addId = addressId; if (ShipngInfo != null) { ViewBag.fullPath = RegionApplication.GetRegionPath(ShipngInfo.RegionId); ViewBag.fullName = RegionApplication.GetFullName(ShipngInfo.RegionId); } return(View(ShipngInfo)); }
public ActionResult EditShippingAddress(long addressId = 0L, string returnURL = "") { ShippingAddressInfo userAddress = OrderApplication.GetUserAddress(addressId); ViewBag.addId = addressId; if (userAddress != null) { ViewBag.fullPath = RegionApplication.GetRegionPath(userAddress.RegionId); ViewBag.fullName = RegionApplication.GetFullName(userAddress.RegionId, " "); } return(base.View(userAddress)); }
/// <summary> /// 点击立即购买调用的GET方法,但是重定向到了Submit页面 /// </summary> /// <param name="skuIds">多个库存Id</param> /// <param name="counts">每个库存对应的数据量</param> /// <param name="regionId">客户收货地区的id</param> /// <param name="collpids">组合购Id集合</param> /// <returns>订单提交页面的数据</returns> public ActionResult SubmitByProductId(string skuIds, string counts, long?regionId, string collpids = null, string CouponIds = "", sbyte productType = 0, long productId = 0) { //Logo ViewBag.Logo = SiteSettings.Logo; //获取Logo //设置会员信息 ViewBag.Member = CurrentUser; var coupons = CouponApplication.ConvertUsedCoupon(CouponIds); var submitModel = OrderApplication.SubmitByProductId(UserId, skuIds, counts, regionId, collpids, coupons, productType); ViewBag.IsCashOnDelivery = submitModel.IsCashOnDelivery; ViewBag.IsLimitBuy = submitModel.IsLimitBuy; InitOrderSubmitModel(submitModel); #region 是否开启门店授权 ViewBag.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; #endregion #region 是否提供发票 //bool ProvideInvoice = false; //if (submitModel.products != null) // ProvideInvoice = ShopApplication.HasProvideInvoice(submitModel.products.Select(p => p.shopId).ToList()); //ViewBag.ProvideInvoice = ProvideInvoice; #endregion bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); ViewBag.CanIntegralPerMoney = canIntegralPerMoney; ViewBag.CanCapital = canCapital; ViewBag.Keyword = SiteSettings.Keyword; if (productType == 1 && productId > 0) { submitModel.VirtualProductItemInfos = ProductManagerApplication.GetVirtualProductItemInfoByProductId(productId); var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(productId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new MallException("该虚拟商品已过期,不支持下单"); } } submitModel.ProductType = productType; if (productType == 1 && submitModel.products != null && submitModel.products.Count > 0) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(submitModel.products.FirstOrDefault().shopId); if (verificationShipper != null) { ViewBag.ShipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; ViewBag.ShipperTelPhone = verificationShipper.TelPhone; } } return(View("Submit", submitModel)); }
/// <summary> /// 获得编辑收获地址页面 /// </summary> /// <param name="addressId">收货地址Id</param> /// <param name="returnURL">返回url路径</param> public ActionResult EditShippingAddress(long addressId = 0, string returnURL = "") { var ShipngInfo = OrderApplication.GetUserAddress(addressId); ViewBag.addId = addressId; if (ShipngInfo != null) { ViewBag.fullPath = RegionApplication.GetRegionPath(ShipngInfo.RegionId); ViewBag.fullName = RegionApplication.GetFullName(ShipngInfo.RegionId); } #region 是否开启门店授权 ViewBag.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; #endregion return(View(ShipngInfo)); }
/// <summary> /// 银行账户信息 /// </summary> /// <returns></returns> public ActionResult Step4() { Cache.Remove(CacheKeyCollection.CACHE_SHOP(CurrentSellerManager.ShopId, false)); ShopInfo.ShopStage Stage = ShopInfo.ShopStage.Agreement; var shop = ShopApplication.GetShopProfileStep2(CurrentSellerManager.ShopId, out Stage); if (Stage == ShopInfo.ShopStage.CompanyInfo) { return(RedirectToAction("step3")); } ViewBag.BankRegionIds = RegionApplication.GetRegionPath(shop.BankRegionId); ViewBag.fullName = RegionApplication.GetFullName(shop.BankRegionId); return(View(shop)); }
/// <summary> /// 银行账户信息 /// </summary> /// <returns></returns> public ActionResult Step4() { ShopApplication.ClearCacheShop(CurrentSellerManager.ShopId); var Stage = Entities.ShopInfo.ShopStage.Agreement; var shop = ShopApplication.GetShopProfileStep2(CurrentSellerManager.ShopId, out Stage); if (Stage == Entities.ShopInfo.ShopStage.CompanyInfo) { return(RedirectToAction("step3")); } ViewBag.BankRegionIds = RegionApplication.GetRegionPath(shop.BankRegionId); ViewBag.fullName = RegionApplication.GetFullName(shop.BankRegionId); return(View(shop)); }
public ActionResult EditShippingAddress(long addressId = 0L, string returnURL = "", long shopBranchId = 0L) { if (shopBranchId == 0L) { throw new HimallException("获取门店ID失败,不可提交非门店商品"); } ((dynamic)base.ViewBag).shopBranchId = shopBranchId; ShippingAddressInfo userAddress = OrderApplication.GetUserAddress(addressId); ((dynamic)base.ViewBag).addId = addressId; if (userAddress != null) { ((dynamic)base.ViewBag).fullPath = RegionApplication.GetRegionPath(userAddress.RegionId); ((dynamic)base.ViewBag).fullName = RegionApplication.GetFullName(userAddress.RegionId, " "); } return(base.View(userAddress)); }
/// <summary> /// 个人或企业账户信息 /// </summary> /// <returns></returns> public ActionResult Step3() { var modelShop = ShopApplication.GetShop(CurrentSellerManager.ShopId); #region 个人/企业信息 long companyRegionId = 0; long businessLicenceRegionId = 0; string refuseReason = ""; if (modelShop.BusinessType.Equals(Himall.CommonModel.ShopBusinessType.Personal)) { var step1 = ShopApplication.GetShopProfileSteps1(CurrentSellerManager.ShopId, out companyRegionId, out businessLicenceRegionId, out refuseReason); ViewBag.CompanyRegionIds = RegionApplication.GetRegionPath((int)companyRegionId); ViewBag.RefuseReason = refuseReason; ViewBag.fullName = RegionApplication.GetFullName((int)companyRegionId); long uid = ShopApplication.GetShopManagers(CurrentSellerManager.ShopId); var model = MemberApplication.GetMembers(uid); step1.RealName = model.RealName; Himall.DTO.MemberAccountSafety mMemberAccountSafety = MemberApplication.GetMemberAccountSafety(uid); step1.MemberEmail = mMemberAccountSafety.Email; step1.MemberPhone = mMemberAccountSafety.Phone; ModelState.AddModelError("Phone", "多个联系方式用,号分隔"); ModelState.AddModelError("ContactPhone", "多个联系方式用,号分隔"); return(View("Steps3", step1)); } else { var step1 = ShopApplication.GetShopProfileStep1(CurrentSellerManager.ShopId, out companyRegionId, out businessLicenceRegionId, out refuseReason); ViewBag.CompanyRegionIds = RegionApplication.GetRegionPath((int)companyRegionId); ViewBag.RefuseReason = refuseReason; ViewBag.fullName = RegionApplication.GetFullName((int)companyRegionId); long uid = ShopApplication.GetShopManagers(CurrentSellerManager.ShopId); var model = MemberApplication.GetMembers(uid); step1.RealName = model.RealName; Himall.DTO.MemberAccountSafety mMemberAccountSafety = MemberApplication.GetMemberAccountSafety(uid); step1.MemberEmail = mMemberAccountSafety.Email; step1.MemberPhone = mMemberAccountSafety.Phone; ModelState.AddModelError("Phone", "多个联系方式用,号分隔"); ModelState.AddModelError("ContactPhone", "多个联系方式用,号分隔"); return(View(step1)); } #endregion }
/// <summary> /// 获得编辑收获地址页面 /// </summary> /// <param name="addressId">收货地址Id</param> /// <param name="returnURL">返回url路径</param> public ActionResult EditShippingAddress(long addressId = 0, string returnURL = "", long shopBranchId = 0) { if (shopBranchId == 0) { throw new MallException("获取门店ID失败,不可提交非门店商品"); } ViewBag.shopBranchId = shopBranchId; var ShipngInfo = OrderApplication.GetUserAddress(addressId); ViewBag.addId = addressId; if (ShipngInfo != null) { ViewBag.fullPath = RegionApplication.GetRegionPath(ShipngInfo.RegionId); ViewBag.fullName = RegionApplication.GetFullName(ShipngInfo.RegionId); } return(View(ShipngInfo)); }
public object GetShopGetAddress(long shopId, long shopBranchId = 0) { if (shopBranchId <= 0) { var data = ShopShippersApplication.GetDefaultGetGoodsShipper(shopId); if (data == null) { data = new DTO.ShopShipper() { }; } else { data.RegionStr = RegionApplication.GetFullName(data.RegionId); } var model = new { success = true, Region = data.RegionStr, Address = data.Address, Phone = data.TelPhone, ShipperName = data.ShipperName }; return(model); } else { var data = ShopBranchApplication.GetShopBranchById(shopBranchId); string redionstr = ""; if (data != null) { redionstr = RegionApplication.GetFullName(data.AddressId); } var model = new { success = true, Region = redionstr, Address = data.AddressDetail, Phone = data.ContactPhone, ShipperName = data.ContactUser }; return(model); } }
public JsonResult GetShopGetAddress(long shopId, long shopBranchId = 0) { if (shopBranchId <= 0) { var data = ShopShippersApplication.GetDefaultGetGoodsShipper(shopId); if (data == null) { data = new DTO.ShopShipper() { }; } else { data.RegionStr = RegionApplication.GetFullName(data.RegionId); } var model = new { Region = string.IsNullOrEmpty(data.RegionStr) ? "" : data.RegionStr, Address = string.IsNullOrEmpty(data.Address) ? "" : data.Address, Phone = string.IsNullOrEmpty(data.TelPhone) ? "" : data.TelPhone, ShipperName = string.IsNullOrEmpty(data.ShipperName) ? "" : data.ShipperName }; return(Json <dynamic>(true, data: model)); } else { var data = ShopBranchApplication.GetShopBranchById(shopBranchId); string redionstr = ""; if (data != null) { redionstr = RegionApplication.GetFullName(data.AddressId); } var model = new { Region = redionstr, Address = data == null ? "" : data.AddressDetail, Phone = data == null ? "" : data.ContactPhone, ShipperName = data == null ? "" : data.ContactUser }; return(Json <dynamic>(true, data: model)); } }
public ActionResult Detail(long id) { var order = _iOrderService.GetOrder(id); if (order == null) { throw new MallException("错误的订单信息"); } if (order.OrderType == Entities.OrderInfo.OrderTypes.FightGroup) { var fgord = _iFightGroupService.GetFightGroupOrderStatusByOrderId(order.Id); order.FightGroupOrderJoinStatus = fgord.GetJoinStatus; order.FightGroupCanRefund = fgord.CanRefund; } var orderItems = _iOrderService.GetOrderItemsByOrderId(order.Id); //处理平台佣金 var orderRefunds = RefundApplication.GetOrderRefundList(id); foreach (var item in orderItems) { var refund = orderRefunds.Where(e => e.OrderItemId == item.Id).Sum(e => e.ReturnPlatCommission); item.PlatCommission = Math.Round(item.CommisRate * (item.RealTotalPrice - item.FullDiscount - item.CouponDiscount), 2); if (refund > 0) { item.PlatCommission = item.PlatCommission - refund; } item.PlatCommission = (item.PlatCommission < 0) ? 0 : item.PlatCommission; } ViewBag.OrderItems = orderItems; ViewBag.Logs = _iOrderService.GetOrderLogs(order.Id); ViewBag.Coupon = 0; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; #region 门店信息 if (order.ShopBranchId > 0) { var shopBranchInfo = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); if (shopBranchInfo != null) { ViewBag.ShopBranchInfo = shopBranchInfo; if (order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.Finish) { ViewBag.ShopBranchContactUser = shopBranchInfo.UserName; } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { shipperAddress = RegionApplication.GetFullName(shopBranchInfo.AddressId) + " " + shopBranchInfo.AddressDetail; shipperTelPhone = shopBranchInfo.ContactPhone; } } } #endregion if (order.OrderType == OrderInfo.OrderTypes.Virtual) { ViewBag.VirtualOrderItemInfos = OrderApplication.GetVirtualOrderItemInfosByOrderId(order.Id); ViewBag.OrderVerificationCodeInfos = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); if (order.ShopBranchId == 0) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(order.ShopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } ViewBag.ShipperAddress = shipperAddress; ViewBag.ShipperTelPhone = shipperTelPhone; //发票信息 ViewBag.OrderInvoiceInfo = OrderApplication.GetOrderInvoiceInfo(order.Id); //统一显示支付方式名称 order.PaymentTypeName = PaymentApplication.GetPaymentTypeDescById(order.PaymentTypeGateway) ?? order.PaymentTypeName; return(View(order)); }
/// <summary> /// 订单详细信息页面 /// </summary> /// <param name="id">订单Id</param> public ActionResult Detail(long id) { OrderDetailView view = OrderApplication.Detail(id, UserId, PlatformType, Request.Url.Host); ViewBag.Detail = view.Detail; ViewBag.Bonus = view.Bonus; ViewBag.ShareHref = view.ShareHref; ViewBag.IsRefundTimeOut = view.IsRefundTimeOut; ViewBag.Logo = SiteSettings.Logo; view.Order.FightGroupOrderJoinStatus = view.FightGroupJoinStatus; view.Order.FightGroupCanRefund = view.FightGroupCanRefund; var customerServices = CustomerServiceApplication.GetMobileCustomerServiceAndMQ(view.Order.ShopId); ViewBag.CustomerServices = customerServices; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; #region 门店信息 if (view.Order.ShopBranchId > 0) { var shopBranchInfo = ShopBranchApplication.GetShopBranchById(view.Order.ShopBranchId); ViewBag.ShopBranchInfo = shopBranchInfo; if (view.Order.OrderType == OrderInfo.OrderTypes.Virtual && shopBranchInfo != null) { shipperAddress = RegionApplication.GetFullName(shopBranchInfo.AddressId) + " " + shopBranchInfo.AddressDetail; shipperTelPhone = shopBranchInfo.ContactPhone; } } else { if (view.Order.OrderType == OrderInfo.OrderTypes.Virtual) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(view.Order.ShopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } #endregion ViewBag.isCanRefundOrder = OrderApplication.CanRefund(view.Order); #region 虚拟订单信息 if (view.Order.OrderType == OrderInfo.OrderTypes.Virtual) { var orderItemInfo = view.Detail.OrderItems.FirstOrDefault(); if (orderItemInfo != null) { ViewBag.virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); var orderVerificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { view.Order.Id }); orderVerificationCodes.ForEach(a => { a.QRCode = GetQRCode(a.VerificationCode); }); ViewBag.orderVerificationCodes = orderVerificationCodes; ViewBag.virtualOrderItemInfos = OrderApplication.GetVirtualOrderItemInfosByOrderId(view.Order.Id); } } #endregion //发票信息 ViewBag.OrderInvoiceInfo = OrderApplication.GetOrderInvoiceInfo(view.Order.Id); //统一显示支付方式名称 view.Order.PaymentTypeName = PaymentApplication.GetPaymentTypeDescById(view.Order.PaymentTypeGateway) ?? view.Order.PaymentTypeName; ViewBag.ShipperAddress = shipperAddress; ViewBag.ShipperTelPhone = shipperTelPhone; return(View(view.Order)); }
public object GetOrderDetail(long id) { CheckUserLogin(); OrderInfo order = ServiceProvider.Instance <IOrderService> .Create.GetOrder(id, CurrentUser.Id); var orderService = ServiceProvider.Instance <IOrderService> .Create; var bonusService = ServiceProvider.Instance <IShopBonusService> .Create; var orderRefundService = ServiceProvider.Instance <IRefundService> .Create; var bonusmodel = bonusService.GetGrantByUserOrder(id, CurrentUser.Id); bool hasBonus = bonusmodel != null ? true : false; string shareHref = ""; string shareTitle = ""; string shareDetail = ""; string shareImg = ""; if (hasBonus) { shareHref = CurrentUrlHelper.CurrentUrlNoPort() + "/m-weixin/shopbonus/index/" + bonusService.GetGrantIdByOrderId(id); var bonus = ShopBonusApplication.GetBonus(bonusmodel.ShopBonusId); shareTitle = bonus.ShareTitle; shareDetail = bonus.ShareDetail; shareImg = HimallIO.GetRomoteImagePath(bonus.ShareImg); } var vshop = ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(order.ShopId); var customerServices = CustomerServiceApplication.GetMobileCustomerServiceAndMQ(order.ShopId); var shop = ShopApplication.GetShop(order.ShopId); var orderItems = OrderApplication.GetOrderItemsByOrderId(order.Id); var products = ProductManagerApplication.GetProducts(orderItems.Select(p => p.ProductId)); var refunds = OrderApplication.GetOrderRefundsByOrder(order.Id); //获取订单商品项数据 var orderDetail = new { ShopId = shop.Id, ShopName = shop.ShopName, OrderItems = orderItems.Select(item => { var product = products.FirstOrDefault(p => p.Id == item.ProductId); var typeInfo = TypeApplication.GetType(product.TypeId); string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; if (product != null) { colorAlias = !string.IsNullOrWhiteSpace(product.ColorAlias) ? product.ColorAlias : colorAlias; sizeAlias = !string.IsNullOrWhiteSpace(product.SizeAlias) ? product.SizeAlias : sizeAlias; versionAlias = !string.IsNullOrWhiteSpace(product.VersionAlias) ? product.VersionAlias : versionAlias; } var itemrefund = refunds.FirstOrDefault(d => d.OrderItemId == item.Id && d.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund); int?itemrefstate = (itemrefund == null ? null : (int?)itemrefund.SellerAuditStatus); itemrefstate = (itemrefstate > 4 ? (int?)itemrefund.ManagerConfirmStatus : itemrefstate); var IsCanRefund = OrderApplication.CanRefund(order, itemrefstate, itemId: item.Id); return(new { ItemId = item.Id, ProductId = item.ProductId, ProductName = item.ProductName, Count = item.Quantity, Price = item.SalePrice, ProductImage = Core.HimallIO.GetRomoteProductSizeImage(product.RelativePath, 1, (int)Himall.CommonModel.ImageSize.Size_100), color = item.Color, size = item.Size, version = item.Version, IsCanRefund = IsCanRefund, ColorAlias = colorAlias, SizeAlias = sizeAlias, VersionAlias = versionAlias, EnabledRefundAmount = item.EnabledRefundAmount, OrderRefundId = (itemrefund == null ? 0 : itemrefund.Id), RefundStats = itemrefstate }); }) }; //取拼团订单状态 var fightGroupOrderInfo = ServiceProvider.Instance <IFightGroupService> .Create.GetFightGroupOrderStatusByOrderId(order.Id); var _ordrefobj = orderRefundService.GetOrderRefundByOrderId(order.Id) ?? new OrderRefundInfo { Id = 0 }; if (order.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp) { _ordrefobj = new OrderRefundInfo { Id = 0 }; } int?ordrefstate = (_ordrefobj == null ? null : (int?)_ordrefobj.SellerAuditStatus); ordrefstate = (ordrefstate > 4 ? (int?)_ordrefobj.ManagerConfirmStatus : ordrefstate); var hasAppendComment = ServiceProvider.Instance <ICommentService> .Create.HasAppendComment(orderItems.FirstOrDefault().Id); var orderModel = new { Id = order.Id, OrderType = order.OrderType, OrderTypeName = order.OrderType.ToDescription(), Status = order.OrderStatus.ToDescription(), JoinStatus = fightGroupOrderInfo == null ? -2 : fightGroupOrderInfo.JoinStatus, ShipTo = order.ShipTo, Phone = order.CellPhone, Address = order.RegionFullName + " " + order.Address, HasExpressStatus = !string.IsNullOrWhiteSpace(order.ShipOrderNumber), ExpressCompanyName = order.ExpressCompanyName, Freight = order.Freight, Tax = order.Tax, IntegralDiscount = order.IntegralDiscount, RealTotalAmount = order.OrderTotalAmount, CapitalAmount = order.CapitalAmount, RefundTotalAmount = order.RefundTotalAmount, ProductTotalAmount = order.ProductTotalAmount, OrderPayAmount = order.OrderPayAmount,//订单需要第三方支付的金额 PaymentTypeName = PaymentApplication.GetPaymentTypeDescById(order.PaymentTypeGateway) ?? order.PaymentTypeName, PaymentTypeDesc = order.PaymentTypeDesc, OrderDate = order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss"), ShopName = order.ShopName, VShopId = vshop == null ? 0 : vshop.Id, commentCount = OrderApplication.GetOrderCommentCount(order.Id), ShopId = order.ShopId, orderStatus = (int)order.OrderStatus, //Invoice = order.InvoiceType.ToDescription(), //InvoiceValue = (int)order.InvoiceType, //InvoiceContext = order.InvoiceContext, //InvoiceTitle = order.InvoiceTitle, //InvoiceCode = order.InvoiceCode, PaymentType = order.PaymentType.ToDescription(), PaymentTypeValue = (int)order.PaymentType, FullDiscount = order.FullDiscount, DiscountAmount = order.DiscountAmount, OrderRemarks = string.IsNullOrEmpty(order.OrderRemarks) ? "" : order.OrderRemarks, HasBonus = hasBonus, ShareHref = shareHref, ShareTitle = shareTitle, ShareDetail = shareDetail, ShareImg = shareImg, IsCanRefund = !(orderDetail.OrderItems.Any(e => e.IsCanRefund == true)) && OrderApplication.CanRefund(order, ordrefstate, null), RefundStats = ordrefstate, OrderRefundId = _ordrefobj.Id > 0 ? _ordrefobj.Id : 0, EnabledRefundAmount = order.OrderEnabledRefundAmount, HasAppendComment = hasAppendComment, SelfTake = order.DeliveryType == Himall.CommonModel.DeliveryType.SelfTake ? 1 : 0, OrderInvoice = OrderApplication.GetOrderInvoiceInfo(order.Id) }; #region 门店配送信息 Himall.DTO.ShopBranch storeInfo = null; if (order.ShopBranchId > 0) { storeInfo = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); } #endregion #region 虚拟订单信息 VirtualProductInfo virtualProductInfo = null; int validityType = 0; string startDate = string.Empty, endDate = string.Empty; List <dynamic> orderVerificationCodes = null; List <dynamic> virtualOrderItemInfos = null; bool isCanRefundVirtual = false; if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var orderItemInfo = orderItems.FirstOrDefault(); if (orderItemInfo != null) { virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); if (virtualProductInfo != null) { validityType = virtualProductInfo.ValidityType ? 1 : 0; if (validityType == 1) { startDate = virtualProductInfo.StartDate.Value.ToString("yyyy-MM-dd"); endDate = virtualProductInfo.EndDate.Value.ToString("yyyy-MM-dd"); } } var codes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); orderVerificationCodes = codes.Select(p => { return(new { VerificationCode = Regex.Replace(p.VerificationCode, @"(\d{4})", "$1 "), Status = p.Status, StatusText = p.Status.ToDescription(), QRCode = GetQRCode(p.VerificationCode) }); }).ToList <dynamic>(); var virtualItems = OrderApplication.GetVirtualOrderItemInfosByOrderId(order.Id); virtualOrderItemInfos = virtualItems.Select(p => { return(new { VirtualProductItemName = p.VirtualProductItemName, Content = ReplaceImage(p.Content, p.VirtualProductItemType), VirtualProductItemType = p.VirtualProductItemType }); }).ToList <dynamic>(); } } if (order.OrderStatus == Himall.Entities.OrderInfo.OrderOperateStatus.WaitVerification) { if (virtualProductInfo != null) { if (virtualProductInfo.SupportRefundType == 2) { isCanRefundVirtual = true; } else if (virtualProductInfo.SupportRefundType == 1) { if (virtualProductInfo.EndDate.Value > DateTime.Now) { isCanRefundVirtual = true; } } else if (virtualProductInfo.SupportRefundType == 3) { isCanRefundVirtual = false; } if (isCanRefundVirtual) { long num = orderVerificationCodes.Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).Count(); if (num > 0) { isCanRefundVirtual = true; } else { isCanRefundVirtual = false; } } } } #endregion #region 虚拟订单核销地址信息 string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (order.OrderType == OrderInfo.OrderTypes.Virtual) { if (order.ShopBranchId > 0 && storeInfo != null) { shipperAddress = RegionApplication.GetFullName(storeInfo.AddressId) + " " + storeInfo.AddressDetail; shipperTelPhone = storeInfo.ContactPhone; } else { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(order.ShopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } #endregion return(new { success = true, Order = orderModel, OrderItem = orderDetail.OrderItems, StoreInfo = storeInfo, CustomerServices = customerServices, ValidityType = validityType, StartDate = startDate, EndDate = endDate, OrderVerificationCodes = orderVerificationCodes, VirtualOrderItemInfos = virtualOrderItemInfos, IsCanRefundVirtual = isCanRefundVirtual, ShipperAddress = shipperAddress, ShipperTelPhone = shipperTelPhone }); }
/// <summary> /// 退款申请 /// </summary> /// <param name="id"></param> /// <param name="itemId"></param> /// <returns></returns> public ActionResult RefundApply(long orderid, long?itemId, long?refundid) { RefundApplyModel model = new RefundApplyModel(); model.RefundMode = null; model.OrderItemId = null; var order = _iOrderService.GetOrder(orderid, CurrentUser.Id); if (order == null) { throw new Mall.Core.MallException("该订单已删除或不属于该用户"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && (int)order.OrderStatus < 2) { throw new Mall.Core.MallException("错误的售后申请,订单状态有误"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && itemId == null && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp) { throw new Mall.Core.MallException("错误的订单退款申请,订单状态有误"); } //售后时间限制 if (order.OrderType != OrderInfo.OrderTypes.Virtual && _iOrderService.IsRefundTimeOut(orderid)) { throw new Mall.Core.MallException("订单已超过售后期"); } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { //如果为虚拟商品,则要判断该商品是否允许退款,且该订单中是否至少有一个待核销的核销码 var orderItemInfo = OrderApplication.GetOrderItemsByOrderId(order.Id).FirstOrDefault(); if (orderItemInfo != null) { itemId = orderItemInfo.Id; var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); if (virtualProductInfo != null) { if (virtualProductInfo.SupportRefundType == 3) { throw new Mall.Core.MallException("该商品不支持退款"); } if (virtualProductInfo.SupportRefundType == 1 && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new Mall.Core.MallException("该商品不支持过期退款"); } var orderVerificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); long num = orderVerificationCodes.Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).Count(); if (num == 0) { throw new Mall.Core.MallException("该商品没有可退的核销码"); } } } } //计算可退金额 预留 _iOrderService.CalculateOrderItemRefund(orderid); var item = new Entities.OrderItemInfo(); model.MaxRefundGoodsNumber = 0; model.MaxRefundAmount = order.OrderEnabledRefundAmount; if (itemId == null) { model.OrderItems = _iOrderService.GetOrderItemsByOrderId(order.Id); if (model.OrderItems.Count == 1) { item = model.OrderItems.FirstOrDefault(); } } else { item = _iOrderService.GetOrderItem(itemId.Value); model.OrderItems.Add(item); model.MaxRefundGoodsNumber = item.Quantity - item.ReturnQuantity; model.MaxRefundAmount = item.EnabledRefundAmount - item.RefundPrice; } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var count = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status != OrderInfo.VerificationCodeStatus.WaitVerification).ToList().Count; if (item.EnabledRefundAmount.HasValue) { decimal price = item.EnabledRefundAmount.Value / item.Quantity; model.MaxRefundAmount = item.EnabledRefundAmount.Value - Math.Round(count * price, 2, MidpointRounding.AwayFromZero); } } foreach (var orderItem in model.OrderItems) { Entities.TypeInfo typeInfo = _iTypeService.GetTypeByProductId(orderItem.ProductId); var productInfo = ProductManagerApplication.GetProduct(orderItem.ProductId); orderItem.ColorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; orderItem.SizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; orderItem.VersionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; if (productInfo != null) { orderItem.ColorAlias = !string.IsNullOrWhiteSpace(productInfo.ColorAlias) ? productInfo.ColorAlias : orderItem.ColorAlias; orderItem.SizeAlias = !string.IsNullOrWhiteSpace(productInfo.SizeAlias) ? productInfo.SizeAlias : orderItem.SizeAlias; orderItem.VersionAlias = !string.IsNullOrWhiteSpace(productInfo.VersionAlias) ? productInfo.VersionAlias : orderItem.VersionAlias; } } if (!model.MaxRefundAmount.HasValue) { model.MaxRefundAmount = 0; } bool isCanApply = false; var refundser = _iRefundService; Entities.OrderRefundInfo refunddata; if (order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitDelivery) { isCanApply = refundser.CanApplyRefund(orderid, item.Id); } else { isCanApply = refundser.CanApplyRefund(orderid, item.Id, false); } if (!refundid.HasValue) { if (order.OrderType != OrderInfo.OrderTypes.Virtual) { if (!isCanApply) { var orderRefunds = OrderApplication.GetOrderRefunds(new long[] { item.Id }); if (orderRefunds.Count == 1) { Response.Redirect("/OrderRefund/Detail/" + orderRefunds[0].Id); } throw new Mall.Core.MallException("您已申请过售后,不可重复申请"); } } //model.ContactPerson = CurrentUser.RealName; //model.ContactCellPhone = CurrentUser.CellPhone; //model.ContactCellPhone = order.CellPhone; model.ContactPerson = string.IsNullOrEmpty(order.ShipTo) ? CurrentUser.RealName : order.ShipTo; model.ContactCellPhone = string.IsNullOrEmpty(order.CellPhone) ? CurrentUser.CellPhone : order.CellPhone; model.OrderItemId = itemId; if (!model.OrderItemId.HasValue) { model.IsOrderAllRefund = true; model.RefundMode = Entities.OrderRefundInfo.OrderRefundMode.OrderRefund; } } else { refunddata = refundser.GetOrderRefund(refundid.Value, CurrentUser.Id); if (refunddata == null) { throw new Mall.Core.MallException("错误的售后数据"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && refunddata.SellerAuditStatus != Entities.OrderRefundInfo.OrderRefundAuditStatus.UnAudit) { throw new Mall.Core.MallException("错误的售后状态,不可激活"); } model.ContactPerson = refunddata.ContactPerson; model.ContactCellPhone = refunddata.ContactCellPhone; model.OrderItemId = refunddata.OrderItemId; model.IsOrderAllRefund = (refunddata.RefundMode == Entities.OrderRefundInfo.OrderRefundMode.OrderRefund); model.RefundMode = refunddata.RefundMode; model.RefundReasonValue = refunddata.Reason; model.RefundReasonDetail = refunddata.ReasonDetail; model.RefundWayValue = refunddata.RefundPayType; model.CertPic1 = refunddata.CertPic1; model.CertPic2 = refunddata.CertPic2; model.CertPic3 = refunddata.CertPic3; } if (!model.IsOrderAllRefund && item.EnabledRefundAmount.HasValue) { model.RefundGoodsPrice = item.EnabledRefundAmount.Value / item.Quantity; } model.OrderInfo = order; model.OrderId = orderid; model.RefundId = refundid; var reasons = refundser.GetRefundReasons(); foreach (var _ir in reasons) { _ir.AfterSalesText = _ir.AfterSalesText.Trim(); } List <SelectListItem> reasel = new List <SelectListItem>(); SelectListItem _tmpsel; _tmpsel = new SelectListItem { Text = "选择售后理由", Value = "" }; reasel.Add(_tmpsel); foreach (var _i in reasons) { _tmpsel = new SelectListItem { Text = _i.AfterSalesText, Value = _i.AfterSalesText }; if (!string.IsNullOrWhiteSpace(model.RefundReasonValue)) { if (_i.AfterSalesText == model.RefundReasonValue) { _tmpsel.Selected = true; } } reasel.Add(_tmpsel); } model.RefundReasons = reasel; List <SelectListItem> list = new List <SelectListItem> { new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackCapital.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackCapital).ToString() } }; if (order.CanBackOut()) { _tmpsel = new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackOut.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackOut).ToString() }; //if (model.RefundWayValue.HasValue) //{ // if (_tmpsel.Value == model.RefundWayValue.ToString()) // { // _tmpsel.Selected = true; // } //} _tmpsel.Selected = true; //若订单支付方式为支付宝、微信支付则退款方式默认选中“退款原路返回” list.Add(_tmpsel); } model.RefundWay = list; if (order.DeliveryType == CommonModel.DeliveryType.SelfTake) { var shopBranch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); model.ReturnGoodsAddress = RegionApplication.GetFullName(shopBranch.AddressId); model.ReturnGoodsAddress += " " + shopBranch.AddressDetail; model.ReturnGoodsAddress += " " + shopBranch.ContactPhone; } ViewBag.Keyword = string.IsNullOrWhiteSpace(SiteSettings.SearchKeyword) ? SiteSettings.Keyword : SiteSettings.SearchKeyword; ViewBag.Keywords = SiteSettings.HotKeyWords; #region 虚拟订单退款 ViewBag.orderVerificationCode = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).ToList(); #endregion ViewBag.IsVirtual = order.OrderType == OrderInfo.OrderTypes.Virtual ? 1 : 0; return(View(model)); }
/// <summary> /// 获取立即购买提交页面的数据 /// </summary> /// <param name="skuIds">库存ID集合</param> /// <param name="counts">库存ID对应的数量</param> object GetSubmitModelById(string skuId, int count, long shippingAddressId = 0, IEnumerable <string[]> CouponIdsStr = null, bool isStore = false, sbyte productType = 0, long shopBranchId = 0) { CheckUserLogin(); dynamic d = new System.Dynamic.ExpandoObject(); var siteconfig = SiteSettingApplication.SiteSettings; var result = OrderApplication.GetMobileSubmit(CurrentUserId, skuId.ToString(), count.ToString(), shippingAddressId, CouponIdsStr, shopBranchId); dynamic add = new System.Dynamic.ExpandoObject(); if (result.Address != null) { add = new { ShippingId = result.Address.Id, ShipTo = result.Address.ShipTo, CellPhone = result.Address.Phone, FullRegionName = result.Address.RegionFullName, FullAddress = result.Address.RegionFullName + " " + result.Address.Address + " " + result.Address.AddressDetail, Address = result.Address.Address, RegionId = result.Address.RegionId }; } else { add = null; } string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (isStore) { if (productType == 0) { throw new MallException("门店订单暂时不允许立即购买"); } //门店订单 Mall.DTO.ShopBranch storeInfo = Application.ShopBranchApplication.GetShopBranchById(shopBranchId); if (storeInfo == null) { throw new MallException("获取门店信息失败,不可提交非门店商品"); } d.shopBranchId = shopBranchId; d.shopBranchInfo = storeInfo; if (storeInfo != null) { shipperAddress = RegionApplication.GetFullName(storeInfo.AddressId) + storeInfo.AddressDetail; shipperTelPhone = storeInfo.ContactPhone; } } d.ProductType = productType; if (result.ProductType == 1) { d.VirtualProductItemInfos = ProductManagerApplication.GetVirtualProductItemInfoByProductId(result.ProductId); var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(result.ProductId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new MallException("该虚拟商品已过期,不支持下单"); } if (result.products != null && result.products.Count > 0 && !isStore) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(result.products.FirstOrDefault().shopId);//虚拟订单支持立即购买所以商家只有一个 if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } d.shipperAddress = shipperAddress; d.shipperTelPhone = shipperTelPhone; bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); d.InvoiceContext = result.InvoiceContext; d.InvoiceTitle = result.InvoiceTitle; d.cellPhone = result.cellPhone; d.email = result.email; d.vatInvoice = result.vatInvoice; d.invoiceName = result.invoiceName; //默认抬头(普通、电子) d.invoiceCode = result.invoiceCode; //默认税号(普通、电子) d.products = result.products; d.TotalAmount = result.totalAmount; d.Freight = result.Freight; d.orderAmount = result.orderAmount; d.IsCashOnDelivery = result.IsCashOnDelivery; d.IsOpenStore = siteconfig.IsOpenStore; d.Address = add; d.integralPerMoney = result.integralPerMoney; d.userIntegralMaxDeductible = result.userIntegralMaxDeductible; d.integralPerMoneyRate = result.integralPerMoneyRate; d.userIntegralMaxRate = siteconfig.IntegralDeductibleRate; d.userIntegrals = result.userIntegrals; d.TotalMemberIntegral = result.memberIntegralInfo.AvailableIntegrals; d.canIntegralPerMoney = canIntegralPerMoney; d.canCapital = canCapital; d.capitalAmount = result.capitalAmount; return(Json(d)); }
public ActionResult Detail(long id) { var order = _iOrderService.GetOrder(id, CurrentUser.Id);//限制到用户 var orderItems = _iOrderService.GetOrderItemsByOrderId(order.Id); //补充商品货号 var proids = orderItems.Select(d => d.ProductId); var procodelist = ProductManagerApplication.GetProductByIds(proids).Select(d => new { d.Id, d.ProductCode, d.FreightTemplateId }).ToList(); foreach (var item in orderItems) { var _tmp = procodelist.Find(d => d.Id == item.ProductId); if (_tmp != null) { item.ProductCode = _tmp.ProductCode; item.FreightId = _tmp.FreightTemplateId; } } var service = ServiceApplication.Create <Mall.IServices.IProductService>(); // string RegionIdPath = regionService.GetRegionPath(order.RegionId); var freightProductGroup = orderItems.GroupBy(a => a.FreightId); if (order.DeliveryType != CommonModel.DeliveryType.SelfTake) { var regionService = ServiceApplication.Create <Mall.IServices.IRegionService>(); var region = regionService.GetRegion(order.RegionId); int cityId = 0; if (region != null) { cityId = region.Id; } //foreach (var f in freightProductGroup) //{ // var productIds = f.Select(a => a.ProductId); // var counts = f.Select(a => Convert.ToInt32(a.Quantity)); // decimal freight = service.GetFreight(productIds, counts, cityId); // foreach (var item in f) // { // item.Freight = freight; // } //} } ViewBag.freightProductGroup = freightProductGroup; ViewBag.Coupon = 0; var coupon = _iCouponService.GetCouponRecordInfo(order.UserId, order.Id); var bonus = _iShopBonusService.GetUsedPrice(order.Id, order.UserId); if (coupon != null) { ViewBag.Coupon = CouponApplication.GetCouponInfo(coupon.CouponId).Price; } else if (bonus > 0) { ViewBag.Coupon = bonus; } if (order.OrderType == Entities.OrderInfo.OrderTypes.FightGroup) { var fgord = _iFightGroupService.GetFightGroupOrderStatusByOrderId(order.Id); order.FightGroupOrderJoinStatus = fgord.GetJoinStatus; order.FightGroupCanRefund = fgord.CanRefund; } //使用OrderListModel // AutoMapper.Mapper.CreateMap<OrderInfo, OrderListModel>(); // AutoMapper.Mapper.CreateMap<OrderItemInfo, OrderItemListModel>(); var orderModel = order.Map <OrderListModel>(); orderModel.OrderItemList = orderItems.Map <IEnumerable <OrderItemListModel> >(); if (order.ShopBranchId > 0) {//补充数据 var branch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); if (branch != null) { orderModel.ShopBranchName = branch.ShopBranchName; orderModel.ShopBranchAddress = branch.AddressFullName; orderModel.ShopBranchContactPhone = branch.ContactPhone; } } if (order.FightGroupOrderJoinStatus.HasValue) { orderModel.FightGroupJoinStatus = order.FightGroupOrderJoinStatus.Value; } orderModel.UserRemark = order.OrderRemarks; ViewBag.Keyword = SiteSettings.Keyword; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; #region 虚拟订单 if (order.OrderType == OrderInfo.OrderTypes.Virtual) { orderModel.OrderVerificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); orderModel.OrderVerificationCodes.ForEach(a => { a.QRCode = GetQRCode(a.VerificationCode); }); orderModel.VirtualOrderItems = OrderApplication.GetVirtualOrderItemInfosByOrderId(order.Id); if (order.ShopBranchId > 0)//门店订单取门店地址 { var shopBranch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); if (shopBranch != null) { shipperAddress = RegionApplication.GetFullName(shopBranch.AddressId) + " " + shopBranch.AddressDetail; shipperTelPhone = shopBranch.ContactPhone; } } else { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(order.ShopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } ViewBag.ShipperAddress = shipperAddress; ViewBag.ShipperTelPhone = shipperTelPhone; #endregion orderModel.PaymentTypeName = PaymentApplication.GetPaymentTypeDescById(order.PaymentTypeGateway) ?? order.PaymentTypeName; //发票信息 orderModel.OrderInvoice = OrderApplication.GetOrderInvoiceInfo(order.Id); return(View(orderModel)); }
public object GetOrderDetail(long orderId) { CheckUserLogin(); var orderService = ServiceProvider.Instance <IOrderService> .Create; var order = orderService.GetOrder(orderId, CurrentUser.Id); var orderitems = orderService.GetOrderItemsByOrderId(order.Id); var orderRefundService = ServiceProvider.Instance <IRefundService> .Create; var productService = ServiceProvider.Instance <IProductService> .Create; var coupon = ServiceProvider.Instance <ICouponService> .Create.GetCouponRecordInfo(order.UserId, order.Id); string couponName = ""; decimal couponAmout = 0; if (coupon != null) { var c = CouponApplication.GetCouponInfo(coupon.CouponId); couponName = c.CouponName; couponAmout = c.Price; } //订单信息是否正常 if (order == null) { throw new MallException("订单号不存在!"); } dynamic expressTrace = new ExpandoObject(); //取订单物流信息 if (!string.IsNullOrWhiteSpace(order.ShipOrderNumber)) { var expressData = ServiceProvider.Instance <IExpressService> .Create.GetExpressData(order.ExpressCompanyName, order.ShipOrderNumber); if (expressData.Success) { expressData.ExpressDataItems = expressData.ExpressDataItems.OrderByDescending(item => item.Time);//按时间逆序排列 expressTrace.traces = expressData.ExpressDataItems.Select(item => new { acceptTime = item.Time.ToString("yyyy-MM-dd HH:mm:ss"), acceptStation = item.Content }); } } var orderRefunds = OrderApplication.GetOrderRefunds(orderitems.Select(p => p.Id)); var isCanOrderReturn = OrderApplication.CanRefund(order); //获取订单商品项数据 var orderDetail = new { ShopId = order.ShopId, EnabledRefundAmount = order.OrderEnabledRefundAmount, OrderItems = orderitems.Select(item => { var productinfo = productService.GetProduct(item.ProductId); Entities.TypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(productinfo.TypeId); string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; var itemStatusText = ""; var itemrefund = orderRefunds.Where(or => or.OrderItemId == item.Id).FirstOrDefault(d => d.RefundMode != OrderRefundInfo.OrderRefundMode.OrderRefund); int?itemrefstate = (itemrefund == null ? 0 : (int?)itemrefund.SellerAuditStatus); itemrefstate = (itemrefstate > 4 ? (int?)itemrefund.ManagerConfirmStatus : itemrefstate); if (itemrefund != null) { //默认为商家处理进度 if (itemrefstate == 4) { //商家拒绝,可以再发起申请 itemStatusText = ""; } else { itemStatusText = "售后处理中"; } } if (itemrefstate > 4) {//如果商家已经处理完,则显示平台处理进度 if (itemrefstate == 7) { itemStatusText = "退款成功"; } } if (productinfo != null) { colorAlias = (!string.IsNullOrWhiteSpace(productinfo.ColorAlias)) ? productinfo.ColorAlias : colorAlias;//如果商品有自定义规格名称,则用 sizeAlias = (!string.IsNullOrWhiteSpace(productinfo.SizeAlias)) ? productinfo.SizeAlias : sizeAlias; versionAlias = (!string.IsNullOrWhiteSpace(productinfo.VersionAlias)) ? productinfo.VersionAlias : versionAlias; } long activeId = 0; int activetype = 0; var limitbuyser = ServiceProvider.Instance <ILimitTimeBuyService> .Create; var limitBuy = limitbuyser.GetLimitTimeMarketItemByProductId(item.ProductId); if (limitBuy != null) { //salePrice = limitBuy.MinPrice; activeId = limitBuy.Id; activetype = 1; } else { #region 限时购预热 var FlashSale = limitbuyser.IsFlashSaleDoesNotStarted(item.ProductId); var FlashSaleConfig = limitbuyser.GetConfig(); if (FlashSale != null) { TimeSpan flashSaleTime = DateTime.Parse(FlashSale.BeginDate) - DateTime.Now; //开始时间还剩多久 TimeSpan preheatTime = new TimeSpan(FlashSaleConfig.Preheat, 0, 0); //预热时间是多久 if (preheatTime >= flashSaleTime) //预热大于开始 { if (!FlashSaleConfig.IsNormalPurchase) { activeId = FlashSale.Id; activetype = 1; } } } #endregion } return(new { Status = itemrefstate, StatusText = itemStatusText, Id = item.Id, SkuId = item.SkuId, ProductId = item.ProductId, Name = item.ProductName, Amount = item.Quantity, Price = item.SalePrice, //ProductImage = "http://" + Url.Request.RequestUri.Host + productService.GetProduct(item.ProductId).GetImage(ProductInfo.ImageSize.Size_100), Image = Core.MallIO.GetRomoteProductSizeImage(productService.GetProduct(item.ProductId).RelativePath, 1, (int)Mall.CommonModel.ImageSize.Size_100), color = item.Color, size = item.Size, version = item.Version, IsCanRefund = OrderApplication.CanRefund(order, itemrefstate, itemId: item.Id), ColorAlias = colorAlias, SizeAlias = sizeAlias, VersionAlias = versionAlias, SkuText = colorAlias + ":" + item.Color + ";" + sizeAlias + ":" + item.Size + ";" + versionAlias + ":" + item.Version, EnabledRefundAmount = item.EnabledRefundAmount, ActiveId = activeId, //活动Id ActiveType = activetype //活动类型(1代表限购,2代表团购,3代表商品预售,4代表限购预售,5代表团购预售) }); }) }; //取拼团订单状态 var fightGroupOrderInfo = ServiceProvider.Instance <IFightGroupService> .Create.GetFightGroupOrderStatusByOrderId(order.Id); #region 门店信息 var branchInfo = new ShopBranch(); if (order.ShopBranchId > 0) { branchInfo = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); } else { branchInfo = null; } #endregion #region 虚拟订单信息 VirtualProductInfo virtualProductInfo = null; int validityType = 0; string startDate = string.Empty, endDate = string.Empty; List <dynamic> orderVerificationCodes = null; List <dynamic> virtualOrderItemInfos = null; bool isCanRefundVirtual = false; if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var orderItemInfo = orderitems.FirstOrDefault(); if (orderItemInfo != null) { virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); if (virtualProductInfo != null) { validityType = virtualProductInfo.ValidityType ? 1 : 0; if (validityType == 1) { startDate = virtualProductInfo.StartDate.Value.ToString("yyyy-MM-dd"); endDate = virtualProductInfo.EndDate.Value.ToString("yyyy-MM-dd"); } } var codes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); orderVerificationCodes = codes.Select(p => { return(new { VerificationCode = Regex.Replace(p.VerificationCode, @"(\d{4})", "$1 "), Status = p.Status, StatusText = p.Status.ToDescription(), QRCode = GetQRCode(p.VerificationCode) }); }).ToList <dynamic>(); var virtualItems = OrderApplication.GetVirtualOrderItemInfosByOrderId(order.Id); virtualOrderItemInfos = virtualItems.Select(p => { return(new { VirtualProductItemName = p.VirtualProductItemName, Content = ReplaceImage(p.Content, p.VirtualProductItemType), VirtualProductItemType = p.VirtualProductItemType }); }).ToList <dynamic>(); } } if (order.OrderStatus == Mall.Entities.OrderInfo.OrderOperateStatus.WaitVerification) { if (virtualProductInfo != null) { if (virtualProductInfo.SupportRefundType == 2) { isCanRefundVirtual = true; } else if (virtualProductInfo.SupportRefundType == 1) { if (virtualProductInfo.EndDate.Value > DateTime.Now) { isCanRefundVirtual = true; } } else if (virtualProductInfo.SupportRefundType == 3) { isCanRefundVirtual = false; } if (isCanRefundVirtual) { long num = orderVerificationCodes.Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).Count(); if (num > 0) { isCanRefundVirtual = true; } else { isCanRefundVirtual = false; } } } } #endregion #region 虚拟订单核销地址信息 string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (order.OrderType == OrderInfo.OrderTypes.Virtual) { if (order.ShopBranchId > 0 && branchInfo != null) { shipperAddress = RegionApplication.GetFullName(branchInfo.AddressId) + " " + branchInfo.AddressDetail; shipperTelPhone = branchInfo.ContactPhone; } else { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(order.ShopId); if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } #endregion var bonusmodel = ServiceProvider.Instance <IShopBonusService> .Create.GetGrantByUserOrder(orderId, CurrentUser.Id); bool hasBonus = bonusmodel != null ? true : false; string shareHref = ""; string shareTitle = ""; string shareDetail = ""; string shareImg = ""; if (hasBonus) { shareHref = "/m-weixin/ShopBonus/Index/" + ServiceProvider.Instance <IShopBonusService> .Create.GetGrantIdByOrderId(orderId); var bonus = ShopBonusApplication.GetBonus(bonusmodel.ShopBonusId); shareTitle = bonus.ShareTitle; shareDetail = bonus.ShareDetail; shareImg = MallIO.GetRomoteImagePath(bonus.ShareImg); } var orderModel = new { OrderId = order.Id, Status = (int)order.OrderStatus, StatusText = order.OrderStatus.ToDescription(), EnabledRefundAmount = order.OrderEnabledRefundAmount, OrderTotal = order.OrderTotalAmount, CapitalAmount = order.CapitalAmount, OrderAmount = order.ProductTotalAmount, DeductionPoints = 0, DeductionMoney = order.IntegralDiscount, //CouponAmount = couponAmout.ToString("F2"),//优惠劵金额 CouponAmount = order.DiscountAmount, //优惠劵金额 CouponName = couponName, //优惠劵名称 RefundAmount = order.RefundTotalAmount, Tax = order.Tax, AdjustedFreight = order.Freight, OrderDate = order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss"), ItemStatus = 0, ItemStatusText = "", ShipTo = order.ShipTo, ShipToDate = order.ShippingDate.HasValue ? order.ShippingDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", Cellphone = order.CellPhone, Address = order.DeliveryType == CommonModel.DeliveryType.SelfTake && branchInfo != null ? branchInfo.AddressFullName : (order.RegionFullName + " " + order.Address), FreightFreePromotionName = string.Empty, ReducedPromotionName = string.Empty, ReducedPromotionAmount = order.FullDiscount, SentTimesPointPromotionName = string.Empty, CanBackReturn = !string.IsNullOrWhiteSpace(order.PaymentTypeGateway), CanCashierReturn = false, PaymentType = order.PaymentType.ToDescription(), OrderPayAmount = order.OrderPayAmount,//订单需要第三方支付的金额 PaymentTypeName = PaymentApplication.GetPaymentTypeDescById(order.PaymentTypeGateway) ?? order.PaymentTypeName, PaymentTypeDesc = order.PaymentTypeDesc, Remark = string.IsNullOrEmpty(order.OrderRemarks) ? "" : order.OrderRemarks, //InvoiceTitle = order.InvoiceTitle, //Invoice = order.InvoiceType.ToDescription(), //InvoiceValue = (int)order.InvoiceType, //InvoiceContext = order.InvoiceContext, //InvoiceCode = order.InvoiceCode, ModeName = order.DeliveryType.ToDescription(), LogisticsData = expressTrace, TakeCode = order.PickupCode, LineItems = orderDetail.OrderItems, IsCanRefund = !(orderDetail.OrderItems.Any(e => e.IsCanRefund == true)) && OrderApplication.CanRefund(order, null, null), IsSelfTake = order.DeliveryType == Mall.CommonModel.DeliveryType.SelfTake ? 1 : 0, BranchInfo = branchInfo, DeliveryType = (int)order.DeliveryType, OrderInvoice = OrderApplication.GetOrderInvoiceInfo(order.Id), ValidityType = validityType, StartDate = startDate, EndDate = endDate, OrderVerificationCodes = orderVerificationCodes, VirtualOrderItemInfos = virtualOrderItemInfos, IsCanRefundVirtual = isCanRefundVirtual, ShipperAddress = shipperAddress, ShipperTelPhone = shipperTelPhone, OrderType = order.OrderType, JoinStatus = fightGroupOrderInfo == null ? -2 : fightGroupOrderInfo.JoinStatus, HasBonus = hasBonus, ShareHref = shareHref, ShareTitle = shareTitle, ShareDetail = shareDetail, ShareImg = shareImg, ShopName = order.ShopName }; return(Json(orderModel)); }
/// <summary> /// 退款申请 /// </summary> /// <param name="id"></param> /// <param name="itemId"></param> /// <returns></returns> public ActionResult RefundApply(long orderid, long?itemId, long?refundid) { RefundApplyModel model = new RefundApplyModel(); model.RefundMode = null; model.OrderItemId = null; var order = _iOrderService.GetOrder(orderid, CurrentUser.Id); if (order == null) { throw new Himall.Core.HimallException("该预约单已删除或不属于该用户"); } if ((int)order.OrderStatus < 2) { throw new Himall.Core.HimallException("错误的售后申请,预约单状态有误"); } if (itemId == null && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp) { throw new Himall.Core.HimallException("错误的预约单退款申请,预约单状态有误"); } //售后时间限制 if (_iOrderService.IsRefundTimeOut(orderid)) { throw new Himall.Core.HimallException("预约单已超过售后期"); } //计算可退金额 预留 _iOrderService.CalculateOrderItemRefund(orderid); OrderItemInfo item = new OrderItemInfo(); model.MaxRefundGoodsNumber = 0; model.MaxRefundAmount = order.OrderEnabledRefundAmount; if (itemId == null) { model.OrderItems = order.OrderItemInfo.ToList(); if (model.OrderItems.Count == 1) { item = model.OrderItems.FirstOrDefault(); } } else { item = order.OrderItemInfo.Where(a => a.Id == itemId).FirstOrDefault(); model.OrderItems.Add(item); model.MaxRefundGoodsNumber = item.Quantity - item.ReturnQuantity; model.MaxRefundAmount = item.EnabledRefundAmount - item.RefundPrice; } foreach (var orderItem in model.OrderItems) { ProductTypeInfo typeInfo = _iTypeService.GetTypeByProductId(orderItem.ProductId); orderItem.ColorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; orderItem.SizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; orderItem.VersionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; } if (!model.MaxRefundAmount.HasValue) { model.MaxRefundAmount = 0; } bool isCanApply = false; var refundser = _iRefundService; OrderRefundInfo refunddata; if (order.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery) { isCanApply = refundser.CanApplyRefund(orderid, item.Id); } else { isCanApply = refundser.CanApplyRefund(orderid, item.Id, false); } if (!refundid.HasValue) { if (!isCanApply) { var orderRefunds = OrderApplication.GetOrderRefunds(new long[] { item.Id }); if (orderRefunds.Count == 1) { Response.Redirect("/OrderRefund/Detail/" + orderRefunds[0].Id); } throw new Himall.Core.HimallException("您已申请过售后,不可重复申请"); } model.ContactPerson = CurrentUser.RealName; model.ContactCellPhone = CurrentUser.CellPhone; model.OrderItemId = itemId; if (!model.OrderItemId.HasValue) { model.IsOrderAllRefund = true; model.RefundMode = OrderRefundInfo.OrderRefundMode.OrderRefund; } } else { refunddata = refundser.GetOrderRefund(refundid.Value, CurrentUser.Id); if (refunddata == null) { throw new Himall.Core.HimallException("错误的售后数据"); } if (refunddata.SellerAuditStatus != OrderRefundInfo.OrderRefundAuditStatus.UnAudit) { throw new Himall.Core.HimallException("错误的售后状态,不可激活"); } model.ContactPerson = refunddata.ContactPerson; model.ContactCellPhone = refunddata.ContactCellPhone; model.OrderItemId = refunddata.OrderItemId; model.IsOrderAllRefund = (refunddata.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund); model.RefundMode = refunddata.RefundMode; model.RefundReasonValue = refunddata.Reason; model.RefundReasonDetail = refunddata.ReasonDetail; model.RefundWayValue = refunddata.RefundPayType; model.CertPic1 = refunddata.CertPic1; model.CertPic2 = refunddata.CertPic2; model.CertPic3 = refunddata.CertPic3; } if (!model.IsOrderAllRefund && item.EnabledRefundAmount.HasValue) { model.RefundGoodsPrice = item.EnabledRefundAmount.Value / item.Quantity; } model.OrderInfo = order; model.OrderId = orderid; model.RefundId = refundid; var reasons = refundser.GetRefundReasons(); foreach (var _ir in reasons) { _ir.AfterSalesText = _ir.AfterSalesText.Trim(); } List <SelectListItem> reasel = new List <SelectListItem>(); SelectListItem _tmpsel; _tmpsel = new SelectListItem { Text = "选择售后原因", Value = "" }; reasel.Add(_tmpsel); foreach (var _i in reasons) { _tmpsel = new SelectListItem { Text = _i.AfterSalesText, Value = _i.AfterSalesText }; if (!string.IsNullOrWhiteSpace(model.RefundReasonValue)) { if (_i.AfterSalesText == model.RefundReasonValue) { _tmpsel.Selected = true; } } reasel.Add(_tmpsel); } model.RefundReasons = reasel; List <SelectListItem> list = new List <SelectListItem> { new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackCapital.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackCapital).ToString() } }; if (order.CanBackOut()) { _tmpsel = new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackOut.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackOut).ToString() }; //if (model.RefundWayValue.HasValue) //{ // if (_tmpsel.Value == model.RefundWayValue.ToString()) // { // _tmpsel.Selected = true; // } //} _tmpsel.Selected = true; //若预约单支付方式为支付宝、微信支付则退款方式默认选中“退款原路返回” list.Add(_tmpsel); } model.RefundWay = list; if (order.DeliveryType == CommonModel.Enum.DeliveryType.SelfTake) { var shopBranch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId.Value); model.ReturnGoodsAddress = RegionApplication.GetFullName(shopBranch.AddressId); model.ReturnGoodsAddress += " " + shopBranch.AddressDetail; model.ReturnGoodsAddress += " " + shopBranch.ContactPhone; } return(View(model)); }
/// <summary> /// 进入立即购买提交页面 /// </summary> /// <param name="skuIds">库存ID集合</param> /// <param name="counts">库存ID对应的数量</param> /// <param name="GroupActionId">拼团活动编号</param> /// <param name="GroupId">拼团编号</param> public ActionResult Submit(string skuIds, string counts, int islimit = 0, long shippingAddressId = 0, string couponIds = "", sbyte productType = 0, long shopBranchId = 0) { if (productType == 0) { throw new MallException("门店订单不支持立即购买"); } var coupons = CouponApplication.ConvertUsedCoupon(couponIds); var result = OrderApplication.GetMobileSubmit(UserId, skuIds, counts, shippingAddressId, coupons, shopBranchId); ViewBag.InvoiceContext = result.InvoiceContext; ViewBag.InvoiceTitle = result.InvoiceTitle; ViewBag.skuIds = skuIds; ViewBag.counts = counts; ViewBag.IsCashOnDelivery = result.IsCashOnDelivery; ViewBag.address = null == result.Address || result.Address.NeedUpdate ? null : result.Address; if (result.products != null) { var bid = result.products.FirstOrDefault().ShopBranchId; result.shopBranchInfo = ShopBranchApplication.GetShopBranchInfoById(bid); } ViewBag.ConfirmModel = result; ViewBag.Islimit = islimit == 1 ? true : false; string orderTag = Guid.NewGuid().ToString("N"); ViewBag.OrderTag = orderTag; //Session["OrderTag"] = orderTag; base.HttpContext.Session.Set <string>("OrderTag", orderTag); InitOrderSubmitModel(result); #region 是否开启门店授权 ViewBag.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; #endregion #region 是否提供发票 bool ProvideInvoice = false; if (result.products != null) { ProvideInvoice = ShopApplication.HasProvideInvoice(result.products.Select(p => p.shopId).ToList()); } ViewBag.ProvideInvoice = ProvideInvoice; #endregion bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); ViewBag.CanIntegralPerMoney = canIntegralPerMoney; ViewBag.CanCapital = canCapital; ViewBag.productType = productType; ViewBag.shopBranchId = shopBranchId; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (productType == 1) { var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(result.ProductId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new MallException("该虚拟商品已过期,不支持下单"); } if (result.shopBranchInfo != null) { shipperAddress = RegionApplication.GetFullName(result.shopBranchInfo.AddressId) + result.shopBranchInfo.AddressDetail; shipperTelPhone = result.shopBranchInfo.ContactPhone; } } ViewBag.ShipperAddress = shipperAddress; ViewBag.ShipperTelPhone = shipperTelPhone; return(View()); }
/// <summary> /// 获取立即购买提交页面的数据 /// </summary> /// <param name="skuIds">库存ID集合</param> /// <param name="counts">库存ID对应的数量</param> public object GetSubmitModel(string skuId, int count, long shippingAddressId = 0, string couponIds = "") { CheckUserLogin(); var coupons = CouponApplication.ConvertUsedCoupon(couponIds); var result = OrderApplication.GetMobileSubmit(CurrentUserId, skuId.ToString(), count.ToString(), shippingAddressId, coupons); dynamic d = SuccessResult(); if (result.Address != null && !result.Address.NeedUpdate) { var addDetail = result.Address.AddressDetail ?? ""; var add = new { Id = result.Address.Id, ShipTo = result.Address.ShipTo, Phone = result.Address.Phone, Address = result.Address.RegionFullName + " " + result.Address.Address + " " + addDetail, RegionId = result.Address.RegionId }; d.Address = add; } else { d.Address = null; } bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); d.canIntegralPerMoney = canIntegralPerMoney; d.canCapital = canCapital; //发票信息 d.InvoiceContext = result.InvoiceContext; //发票类容 d.InvoiceTitle = result.InvoiceTitle; //发票抬头 d.cellPhone = result.cellPhone; //默认收票人手机 d.email = result.email; //默认收票人邮箱 d.vatInvoice = result.vatInvoice; //默认增值税发票 d.invoiceName = result.invoiceName; //默认抬头(普通、电子) d.invoiceCode = result.invoiceCode; //默认税号(普通、电子) d.products = result.products; d.capitalAmount = result.capitalAmount; d.TotalAmount = result.totalAmount; d.Freight = result.Freight; d.orderAmount = result.orderAmount; d.IsCashOnDelivery = result.IsCashOnDelivery; d.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; d.ProvideInvoice = ShopApplication.HasProvideInvoice(result.products.Select(s => s.shopId).Distinct().ToList()); d.integralPerMoney = result.integralPerMoney; d.userIntegralMaxDeductible = result.userIntegralMaxDeductible; d.integralPerMoneyRate = result.integralPerMoneyRate; d.userIntegralMaxRate = SiteSettingApplication.SiteSettings.IntegralDeductibleRate; d.userIntegrals = result.userIntegrals; d.TotalMemberIntegral = result.memberIntegralInfo.AvailableIntegrals; d.productType = result.ProductType; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (result.ProductType == 1) { var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(result.ProductId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new HimallException("该虚拟商品已过期,不支持下单"); } if (result.products != null && result.products.Count > 0) { var verificationShipper = ShopShippersApplication.GetDefaultVerificationShipper(result.products.FirstOrDefault().shopId);//虚拟订单支持立即购买所以商家只有一个 if (verificationShipper != null) { shipperAddress = RegionApplication.GetFullName(verificationShipper.RegionId) + " " + verificationShipper.Address; shipperTelPhone = verificationShipper.TelPhone; } } } d.shipperAddress = shipperAddress; d.shipperTelPhone = shipperTelPhone; return(d); }
public object GetSubmitModel(string skuId, int count, long shippingAddressId = 0, string couponIds = "", sbyte productType = 0, long shopBranchId = 0) { if (productType == 0) throw new MallException("门店订单暂时不允许立即购买"); //门店订单 Mall.DTO.ShopBranch storeInfo = Application.ShopBranchApplication.GetShopBranchById(shopBranchId); if (storeInfo == null) throw new MallException("获取门店信息失败,不可提交非门店商品"); CheckUserLogin(); var coupons = CouponApplication.ConvertUsedCoupon(couponIds); var result = OrderApplication.GetMobileSubmit(CurrentUserId, skuId.ToString(), count.ToString(), shippingAddressId, coupons, shopBranchId); dynamic d = SuccessResult(); bool canIntegralPerMoney = true, canCapital = true; CanDeductible(out canIntegralPerMoney, out canCapital); //解决循环引用的序列化的问题 dynamic address = new System.Dynamic.ExpandoObject(); if (result.Address != null) { var addDetail = result.Address.AddressDetail ?? ""; var add = new { Id = result.Address.Id, ShipTo = result.Address.ShipTo, Phone = result.Address.Phone, Address = result.Address.RegionFullName + " " + result.Address.Address + " " + addDetail, RegionId = result.Address.RegionId }; address = add; } else address = null; //d.InvoiceContext = result.InvoiceContext; //d.InvoiceTitle = OrderApplication.GetInvoiceTitles(CurrentUserId); d.InvoiceContext = result.InvoiceContext;//发票类容 d.InvoiceTitle = result.InvoiceTitle;//发票抬头 d.cellPhone = result.cellPhone;//默认收票人手机 d.email = result.email;//默认收票人邮箱 d.vatInvoice = result.vatInvoice;//默认增值税发票 d.invoiceName = result.invoiceName;//默认抬头(普通、电子) d.invoiceCode = result.invoiceCode;//默认税号(普通、电子) d.products = result.products; d.TotalAmount = result.totalAmount; d.Freight = result.Freight; d.orderAmount = result.orderAmount; d.IsCashOnDelivery = result.IsCashOnDelivery; d.IsOpenStore = SiteSettingApplication.SiteSettings != null && SiteSettingApplication.SiteSettings.IsOpenStore; d.ProvideInvoice = ShopApplication.HasProvideInvoice(result.products.Select(s => s.shopId).Distinct().ToList()); d.integralPerMoney = result.integralPerMoney; d.userIntegralMaxDeductible = result.userIntegralMaxDeductible; d.integralPerMoneyRate = result.integralPerMoneyRate; d.userIntegralMaxRate = SiteSettingApplication.SiteSettings.IntegralDeductibleRate; d.userIntegrals = result.userIntegrals; d.TotalMemberIntegral = result.memberIntegralInfo.AvailableIntegrals; d.canIntegralPerMoney = canIntegralPerMoney; d.canCapital = canCapital; d.capitalAmount = result.capitalAmount; d.productType = productType; d.shopBranchId = shopBranchId; d.shopBranchInfo = storeInfo; string shipperAddress = string.Empty, shipperTelPhone = string.Empty; if (productType == 1) { var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(result.ProductId); if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new MallException("该虚拟商品已过期,不支持下单"); } if (storeInfo != null) { shipperAddress = RegionApplication.GetFullName(storeInfo.AddressId) + storeInfo.AddressDetail;//ShopBranchApplication.RenderAddress(storeInfo.AddressPath, storeInfo.AddressDetail, 2); shipperTelPhone = storeInfo.ContactPhone; } } d.shipperAddress = shipperAddress; d.shipperTelPhone = shipperTelPhone; return d; }
/// <summary> /// 获取申请售后的信息 /// </summary> /// <param name="id">订单ID</param> /// <param name="itemId">子订单ID</param> /// <returns></returns> public object GetOrderRefundModel(long id, long?itemId = null, long?refundId = null) { CheckUserLogin(); try { dynamic d = new System.Dynamic.ExpandoObject(); var ordser = ServiceProvider.Instance <IOrderService> .Create; var refundser = ServiceProvider.Instance <IRefundService> .Create; var order = ordser.GetOrder(id, CurrentUser.Id); if (order == null) { throw new Himall.Core.HimallException("该订单已删除或不属于该用户"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && (int)order.OrderStatus < 2) { throw new Himall.Core.HimallException("错误的售后申请,订单状态有误"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && itemId == null && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp) { throw new Himall.Core.HimallException("错误的订单退款申请,订单状态有误"); } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { //如果为虚拟商品,则要判断该商品是否允许退款,且该订单中是否至少有一个待核销的核销码 var orderItemInfo = OrderApplication.GetOrderItemsByOrderId(order.Id).FirstOrDefault(); if (orderItemInfo != null) { itemId = orderItemInfo.Id; var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); if (virtualProductInfo != null) { if (virtualProductInfo.SupportRefundType == 3) { return(new { success = false, msg = "该商品不支持退款" }); } if (virtualProductInfo.SupportRefundType == 1 && DateTime.Now > virtualProductInfo.EndDate.Value) { return(new { success = false, msg = "该商品不支持过期退款" }); } var orderVerificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); long num = orderVerificationCodes.Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).Count(); if (num == 0) { return(new { success = false, msg = "该商品没有可退的核销码" }); } int validityType = 0; string startDate = string.Empty, endDate = string.Empty; validityType = virtualProductInfo.ValidityType ? 1 : 0; if (validityType == 1) { startDate = virtualProductInfo.StartDate.Value.ToString("yyyy-MM-dd"); endDate = virtualProductInfo.EndDate.Value.ToString("yyyy-MM-dd"); } d.ValidityType = validityType; d.StartDate = startDate; d.EndDate = endDate; } } } //计算可退金额 预留 ordser.CalculateOrderItemRefund(id); var orderitems = OrderApplication.GetOrderItems(order.Id); OrderRefundModel refundModel = new OrderRefundModel(); var item = new OrderItemInfo(); refundModel.MaxRGDNumber = 0; refundModel.MaxRefundAmount = order.OrderEnabledRefundAmount; if (itemId == null) { item = orderitems.FirstOrDefault(); } else { item = orderitems.Where(a => a.Id == itemId).FirstOrDefault(); refundModel.MaxRGDNumber = item.Quantity - item.ReturnQuantity; refundModel.MaxRefundAmount = (decimal)(item.EnabledRefundAmount - item.RefundPrice); } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var count = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status != OrderInfo.VerificationCodeStatus.WaitVerification).ToList().Count; if (item.EnabledRefundAmount.HasValue) { decimal price = item.EnabledRefundAmount.Value / item.Quantity; refundModel.MaxRefundAmount = item.EnabledRefundAmount.Value - Math.Round(count * price, 2, MidpointRounding.AwayFromZero); } } bool isCanApply = false; if (refundModel.MaxRefundAmount <= 0) { return(new { success = false, msg = "此为优惠券全额抵扣订单不支持退款" }); } if (order.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery) { isCanApply = refundser.CanApplyRefund(id, item.Id); } else { isCanApply = refundser.CanApplyRefund(id, item.Id, false); } if (!refundId.HasValue) { if (!isCanApply) { throw new Himall.Core.HimallException("您已申请过售后,不可重复申请"); } d.ContactPerson = string.IsNullOrEmpty(order.ShipTo) ? CurrentUser.RealName : order.ShipTo; d.ContactCellPhone = string.IsNullOrEmpty(order.CellPhone) ? CurrentUser.CellPhone : order.CellPhone; d.OrderItemId = itemId; d.RefundType = 0; d.IsRefundOrder = false; if (!itemId.HasValue) { d.IsRefundOrder = true; d.RefundType = 1; } var reasonlist = refundser.GetRefundReasons(); d.Id = order.Id; d.MaxRGDNumber = refundModel.MaxRGDNumber; d.MaxRefundAmount = refundModel.MaxRefundAmount; d.OrderStatus = order.OrderStatus.ToDescription(); d.OrderStatusValue = (int)order.OrderStatus; d.BackOut = false; d.RefundReasons = reasonlist; if (order.CanBackOut()) { d.BackOut = true; } } else { var refunddata = refundser.GetOrderRefund(refundId.Value, CurrentUser.Id); if (refunddata == null) { throw new Himall.Core.HimallException("错误的售后数据"); } if (order.OrderType != OrderInfo.OrderTypes.Virtual && refunddata.SellerAuditStatus != Entities.OrderRefundInfo.OrderRefundAuditStatus.UnAudit) { throw new Himall.Core.HimallException("错误的售后状态,不可激活"); } d.ContactPerson = refunddata.ContactPerson; d.ContactCellPhone = refunddata.ContactCellPhone; d.OrderItemId = refunddata.OrderItemId; d.IsRefundOrder = (refunddata.RefundMode == Entities.OrderRefundInfo.OrderRefundMode.OrderRefund); d.RefundType = (refunddata.RefundMode == Entities.OrderRefundInfo.OrderRefundMode.OrderRefund ? 1 : 0); var reasonlist = refundser.GetRefundReasons(); d.RefundReasons = reasonlist; //理由List d.Id = id; d.MaxRGDNumber = refundModel.MaxRGDNumber; d.MaxRefundAmount = refundModel.MaxRefundAmount; d.OrderStatus = order.OrderStatus.ToDescription(); d.OrderStatusValue = (int)order.OrderStatus; d.BackOut = false; d.ReasonDetail = refunddata.ReasonDetail; d.CertPic1 = Himall.Core.HimallIO.GetRomoteImagePath(refunddata.CertPic1); d.CertPic2 = Himall.Core.HimallIO.GetRomoteImagePath(refunddata.CertPic2); d.CertPic3 = Himall.Core.HimallIO.GetRomoteImagePath(refunddata.CertPic3); if (order.CanBackOut()) { d.BackOut = true; } } if (!d.IsRefundOrder && item.EnabledRefundAmount.HasValue) { d.RefundGoodsPrice = item.EnabledRefundAmount.Value / item.Quantity; } d.DeliveryType = order.DeliveryType; if (order.DeliveryType == CommonModel.DeliveryType.SelfTake) { var shopBranch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); d.ReturnGoodsAddress = RegionApplication.GetFullName(shopBranch.AddressId); d.ReturnGoodsAddress += " " + shopBranch.AddressDetail; d.ReturnGoodsAddress += " " + shopBranch.ContactPhone; } d.IsVirtual = order.OrderType == OrderInfo.OrderTypes.Virtual ? 1 : 0; if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var codes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).ToList(); d.OrderVerificationCode = codes.Select(a => a.VerificationCode).Select(p => p = Regex.Replace(p, @"(\d{4})", "$1 ")); } return(new { success = true, RefundMode = d }); } catch (HimallException himallex) { return(ErrorResult(himallex.Message)); } catch (Exception ex) { return(ErrorResult("系统异常:" + ex.Message)); } }