/// <summary>
        /// 取诊疗项目SKU
        /// </summary>
        /// <param name="pid"></param>
        /// <returns></returns>
        public object GetProductSku(long pid)
        {
            CheckUserLogin();
            var sku = ProductManagerApplication.GetSKU(pid);

            return(Json(new { success = true, sku = sku }));
        }
Beispiel #2
0
        /// <summary>
        /// 获取评价
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public JsonResult <Result <dynamic> > GetComments([FromUri] ProductCommentQuery query)
        {
            if (query.PageNo == 0)
            {
                query.PageNo = 1;
            }
            if (query.PageSize == 0)
            {
                query.PageSize = 5;
            }
            var data = CommentApplication.GetProductComments(query);

            AutoMapper.Mapper.CreateMap <ProductComment, HomeGetCommentListModel>();
            var datalist = Mapper.Map <List <ProductComment>, List <HomeGetCommentListModel> >(data.Models);
            var users    = MemberApplication.GetMembers(datalist.Select(d => d.UserId).ToList());
            var products = ProductManagerApplication.GetAllProductByIds(datalist.Select(d => d.ProductId).ToList());

            //补充数据信息
            foreach (var item in datalist)
            {
                var u       = users.FirstOrDefault(d => d.Id == item.UserId);
                var product = products.FirstOrDefault(d => d.Id == item.ProductId);
                if (u != null)
                {
                    item.UserPhoto = Himall.Core.HimallIO.GetRomoteImagePath(u.Photo);
                }
                if (product != null)
                {
                    item.ProductName = product.ProductName;
                }
                //规格
                var sku = ProductManagerApplication.GetSKU(item.SkuId);
                if (sku != null)
                {
                    List <string> skucs = new List <string>();
                    if (!string.IsNullOrWhiteSpace(sku.Color))
                    {
                        skucs.Add(sku.Color);
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Size))
                    {
                        skucs.Add(sku.Size);
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Version))
                    {
                        skucs.Add(sku.Version);
                    }
                    item.SKU = string.Join("+", skucs);
                }
                foreach (var pitem in item.Images)
                {
                    pitem.CommentImage = HimallIO.GetRomoteImagePath(pitem.CommentImage);
                }
            }
            return(JsonResult <dynamic>(new { total = data.Total, rows = datalist }));
        }
        /// <summary>
        /// 是否可允许自提门店
        /// </summary>
        /// <param name="shopId">商家ID</param>
        /// <returns></returns>
        public object GetIsSelfDelivery(long shopId, long productId, string fromLatLng = "")
        {
            if (shopId <= 0)
            {
                return(Json(new { Message = "请传入合法商家ID", IsSelfDelivery = 0 }));
            }
            if (!(fromLatLng.Split(',').Length == 2))
            {
                return(Json(new { Message = "请传入合法经纬度", IsSelfDelivery = 0 }));
            }

            var query = new CommonModel.ShopBranchQuery()
            {
                ShopId = shopId,
                Status = CommonModel.ShopBranchStatus.Normal
            };
            string address = "", province = "", city = "", district = "", street = "";

            ShopbranchHelper.GetAddressByLatLng(fromLatLng, ref address, ref province, ref city, ref district, ref street);
            if (string.IsNullOrWhiteSpace(city))
            {
                return(Json(new { Message = "无法获取当前城市", IsSelfDelivery = 0 }));
            }

            Region cityInfo = RegionApplication.GetRegionByName(city, Region.RegionLevel.City);

            if (cityInfo == null)
            {
                return(Json(new { Message = "获取当前城市异常", IsSelfDelivery = 0 }));
            }
            query.CityId     = cityInfo.Id;
            query.ProductIds = new long[] { productId };

            var shopBranch = ShopBranchApplication.GetShopBranchsAll(query).Models; //获取该商品所在商家下,且与用户同城内门店,且门店有该商品
            var skuInfos   = ProductManagerApplication.GetSKU(productId);           //获取该商品的sku

            //门店SKU内会有默认的SKU
            if (!skuInfos.Exists(p => p.Id == string.Format("{0}_0_0_0", productId)))
            {
                skuInfos.Add(new DTO.SKU()
                {
                    Id = string.Format("{0}_0_0_0", productId)
                });
            }
            var shopBranchSkus = ShopBranchApplication.GetSkus(query.ShopId, shopBranch.Select(p => p.Id));//门店商品SKU

            //门店商品SKU,只要有一个sku有库存即可
            shopBranch.ForEach(p =>
                               p.Enabled = skuInfos.Where(skuInfo => shopBranchSkus.Where(sbSku => sbSku.ShopBranchId == p.Id && sbSku.Stock > 0 && sbSku.SkuId == skuInfo.Id).Count() > 0).Count() > 0
                               );

            return(Json(new { Message = "", IsSelfDelivery = shopBranch.Where(p => p.Enabled).Count() > 0 ? 1 : 0 }));//至少有一个能够自提的门店,才可显示图标
        }
Beispiel #4
0
        void CheckSkuIdIsValid(string skuId, long shopBranchId)
        {
            long productId = 0;

            long.TryParse(skuId.Split('_')[0], out productId);
            if (productId == 0)
            {
                throw new Himall.Core.InvalidPropertyException("SKUId无效");
            }

            var skuItem = ProductManagerApplication.GetSKU(skuId);

            if (skuItem == null)
            {
                throw new Himall.Core.InvalidPropertyException("SKUId无效");
            }
        }
Beispiel #5
0
        public object GetUpdateCartItem(string skuId, int count, long shopBranchId)
        {
            CheckUserLogin();
            CheckSkuIdIsValid(skuId, shopBranchId);
            //判断库存
            var sku = ProductManagerApplication.GetSKU(skuId);

            if (sku == null)
            {
                throw new MallException("错误的SKU");
            }
            //if (count > sku.Stock)
            //{
            //    throw new MallException("库存不足");
            //}
            var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId);

            if (shopBranch == null)
            {
                throw new MallException("错误的门店id");
            }
            var shopBranchSkuList = ShopBranchApplication.GetSkusByIds(shopBranchId, new List <string> {
                skuId
            });

            if (shopBranchSkuList == null || shopBranchSkuList.Count == 0)
            {
                throw new MallException("门店没有该商品");
            }
            if (shopBranchSkuList[0].Status == ShopBranchSkuStatus.InStock)
            {
                throw new MallException("此商品已下架");
            }
            var sbsku = shopBranchSkuList.FirstOrDefault();

            if (sbsku.Stock < count)
            {
                throw new MallException("门店库存不足");
            }
            long memberId = CurrentUser.Id;

            CartApplication.UpdateShopBranchCart(skuId, count, memberId, shopBranchId);
            return(Json(""));
        }
Beispiel #6
0
        public bool CheckSkuId(string skuId)
        {
            bool status    = true;
            long productId = 0;

            long.TryParse(skuId.Split('_')[0], out productId);
            if (productId == 0)
            {
                status = false;
            }
            var skuItem = ProductManagerApplication.GetSKU(skuId);

            if (skuItem == null)
            {
                status = false;
            }
            var sku = ProductManagerApplication.GetSKU(skuId);

            if (sku == null)
            {
                status = false;
            }
            return(status);
        }
Beispiel #7
0
        public void AddToCart(string skuId, int count, long memberId, long shopBranchId)
        {
            CheckSkuIdIsValid(skuId, shopBranchId);
            //判断库存
            var sku = ProductManagerApplication.GetSKU(skuId);

            if (sku == null)
            {
                throw new HimallException("错误的SKU");
            }
            if (count > sku.Stock)
            {
                throw new HimallException("库存不足");
            }
            var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId);

            if (shopBranch == null)
            {
                throw new HimallException("错误的门店id");
            }
            var shopBranchSkuList = ShopBranchApplication.GetSkusByIds(shopBranchId, new List <string> {
                skuId
            });

            if (shopBranchSkuList == null || shopBranchSkuList.Count == 0)
            {
                throw new HimallException("门店没有该商品");
            }
            if (shopBranchSkuList[0].Status == ShopBranchSkuStatus.InStock)
            {
                throw new HimallException("此商品已下架");
            }

            if (memberId > 0)
            {
                CartApplication.AddToShopBranchCart(skuId, count, memberId, shopBranchId);
            }
            else
            {
                string cartInfo = WebHelper.GetCookie(CookieKeysCollection.HIMALL_CART_BRANCH);
                if (!string.IsNullOrWhiteSpace(cartInfo))
                {
                    string[] cartItems   = cartInfo.Split(',');
                    string   newCartInfo = string.Empty;
                    bool     exist       = false;
                    foreach (string cartItem in cartItems)
                    {
                        var cartItemParts = cartItem.Split(':');
                        if (cartItemParts[0] == skuId && cartItemParts[2] == shopBranchId.ToString())
                        {
                            newCartInfo += "," + skuId + ":" + (int.Parse(cartItemParts[1]) + count) + ":" + shopBranchId;
                            exist        = true;
                        }
                        else
                        {
                            newCartInfo += "," + cartItem;
                        }
                    }
                    if (!exist)
                    {
                        newCartInfo += "," + skuId + ":" + count + ":" + shopBranchId;
                    }

                    if (!string.IsNullOrWhiteSpace(newCartInfo))
                    {
                        newCartInfo = newCartInfo.Substring(1);
                    }
                    WebHelper.SetCookie(CookieKeysCollection.HIMALL_CART_BRANCH, newCartInfo);
                }
                else
                {
                    WebHelper.SetCookie(CookieKeysCollection.HIMALL_CART_BRANCH, string.Format("{0}:{1}:{2}", skuId, count, shopBranchId));
                }
            }
        }
Beispiel #8
0
        public void AddToCart(string skuId, int count, long memberId)
        {
            CheckSkuIdIsValid(skuId);
            //判断库存
            var sku = ProductManagerApplication.GetSKU(skuId);

            if (sku == null)
            {
                throw new HimallException("错误的SKU");
            }
            if (count > sku.Stock)
            {
                throw new HimallException("库存不足");
            }
            #region 商品限购判断
            var prouctInfo = ProductManagerApplication.GetProduct(sku.ProductId);
            if (prouctInfo != null && prouctInfo.MaxBuyCount > 0 && !prouctInfo.IsOpenLadder)//商品有限购数量
            {
                var carInfo = CartApplication.GetCart(memberId);
                if (carInfo != null)
                {
                    var quantity = carInfo.Items.Where(p => p.ProductId == sku.ProductId).Sum(d => d.Quantity); //当前用户该商品已加入购物车数量
                    if (count + quantity > prouctInfo.MaxBuyCount)                                              //已有数量+新数量
                    {
                        throw new HimallException(string.Format("每个ID限购{0}件", prouctInfo.MaxBuyCount));
                    }
                }
            }
            #endregion

            if (memberId > 0)
            {
                CartApplication.AddToCart(skuId, count, memberId);
            }
            else
            {
                string cartInfo = WebHelper.GetCookie(CookieKeysCollection.HIMALL_CART);
                if (!string.IsNullOrWhiteSpace(cartInfo))
                {
                    string[] cartItems   = cartInfo.Split(',');
                    string   newCartInfo = string.Empty;
                    bool     exist       = false;
                    foreach (string cartItem in cartItems)
                    {
                        var cartItemParts = cartItem.Split(':');
                        if (cartItemParts[0] == skuId)
                        {
                            newCartInfo += "," + skuId + ":" + (int.Parse(cartItemParts[1]) + count);
                            exist        = true;
                        }
                        else
                        {
                            newCartInfo += "," + cartItem;
                        }
                    }
                    if (!exist)
                    {
                        newCartInfo += "," + skuId + ":" + count;
                    }

                    if (!string.IsNullOrWhiteSpace(newCartInfo))
                    {
                        newCartInfo = newCartInfo.Substring(1);
                    }
                    WebHelper.SetCookie(CookieKeysCollection.HIMALL_CART, newCartInfo);
                }
                else
                {
                    WebHelper.SetCookie(CookieKeysCollection.HIMALL_CART, string.Format("{0}:{1}", skuId, count));
                }
            }
        }
Beispiel #9
0
        private List <CartProductModel> PackageCartProducts(Mall.Entities.ShoppingCartInfo cart, decimal prodPrice, decimal discount, IProductService productService, IShopService shopService, IShopBranchService shopBranchService, IVShopService vshopService, ITypeService typeservice, bool isBranch = false)
        {
            List <CartProductModel> products = new List <CartProductModel>();
            var limitProducts = LimitTimeApplication.GetPriceByProducrIds(cart.Items.Select(e => e.ProductId).ToList());//限时购价格
            var groupCart     = cart.Items.Where(item => item.ShopBranchId == 0).Select(c =>
            {
                var cItem   = new Mall.Entities.ShoppingCartItem();
                var skuInfo = productService.GetSku(c.SkuId);
                if (skuInfo != null)
                {
                    cItem = c;
                }
                return(cItem);
            }).GroupBy(i => i.ProductId).ToList();

            foreach (var item in cart.Items)
            {
                var                        product       = ProductManagerApplication.GetProduct(item.ProductId);
                var                        shop          = shopService.GetShop(product.ShopId);
                DTO.ShopBranch             shopbranch    = null;
                Entities.ShopBranchSkuInfo shopbranchsku = null;
                if (item.ShopBranchId > 0)
                {
                    shopbranch    = ShopBranchApplication.GetShopBranchById(item.ShopBranchId);
                    shopbranchsku = shopBranchService.GetSkusByIds(item.ShopBranchId, new List <string> {
                        item.SkuId
                    }).FirstOrDefault();
                }

                if (null != shop)
                {
                    var vshop = vshopService.GetVShopByShopId(shop.Id);
                    var sku   = ProductManagerApplication.GetSKU(item.SkuId);
                    if (sku == null)
                    {
                        continue;
                    }
                    //处理限时购、会员折扣价格
                    var prod = limitProducts.FirstOrDefault(e => e.ProductId == item.ProductId);
                    prodPrice = sku.SalePrice;
                    if (prod != null && !isBranch)
                    {
                        prodPrice = prod.MinPrice;
                    }
                    else
                    {
                        if (shop.IsSelf)
                        {//官方自营店才计算会员折扣
                            prodPrice = sku.SalePrice * discount;
                        }
                    }
                    #region 阶梯价--张宇枫
                    //阶梯价
                    if (product.IsOpenLadder)
                    {
                        var quantity = groupCart.Where(i => i.Key == item.ProductId).ToList().Sum(cartitem => cartitem.Sum(i => i.Quantity));
                        prodPrice = ProductManagerApplication.GetProductLadderPrice(item.ProductId, quantity);
                        if (shop.IsSelf)
                        {
                            prodPrice = prodPrice * discount;
                        }
                    }
                    #endregion
                    Entities.TypeInfo typeInfo     = typeservice.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;
                    }
                    if (sku != null)
                    {
                        #region 正在参加限时抢购商品在购物车失效 TDO:ZYF
                        var isLimit = false;
                        //门店商品,在参加限时购,也可以正常购买
                        var limit = LimitTimeApplication.GetLimitTimeMarketItemByProductId(item.ProductId);
                        if (limit != null && !isBranch)
                        {
                            isLimit = limit.Status == Entities.FlashSaleInfo.FlashSaleStatus.Ongoing;
                        }
                        #endregion
                        var _tmp = new CartProductModel
                        {
                            CartItemId     = item.Id.ToString(),
                            SkuId          = item.SkuId,
                            Id             = product.Id.ToString(),
                            ImgUrl         = Core.MallIO.GetRomoteProductSizeImage(product.RelativePath, 1, (int)Mall.CommonModel.ImageSize.Size_150),
                            Name           = product.ProductName,
                            Price          = prodPrice.ToString("F2"),
                            Count          = item.Quantity.ToString(),
                            ShopId         = shop.Id.ToString(),
                            Size           = sku.Size,
                            Color          = sku.Color,
                            Version        = sku.Version,
                            VShopId        = vshop == null ? "0" : vshop.Id.ToString(),
                            ShopName       = shop.ShopName,
                            ShopLogo       = vshop == null ? "" : Core.MallIO.GetRomoteImagePath(vshop.StrLogo),
                            Url            = Core.MallIO.GetRomoteImagePath("/m-IOS/product/detail/") + item.ProductId,
                            ProductStatus  = isLimit ? 0 : (sku.Stock <= 0 ? ProductInfo.ProductSaleStatus.InStock.GetHashCode() : product.SaleStatus.GetHashCode()),
                            Status         = isLimit ? 1 : ProductManagerApplication.GetProductShowStatus(product, sku, shopbranch == null ? 1 : item.Quantity, shopbranch, shopbranchsku),// 0:正常;1:已失效;2:库存不足;3:已下架;
                            ColorAlias     = colorAlias,
                            SizeAlias      = sizeAlias,
                            VersionAlias   = versionAlias,
                            AddTime        = item.AddTime,
                            ShopBranchId   = item.ShopBranchId,
                            ShopBranchName = null == shopbranch ? "" : shopbranch.ShopBranchName,
                            ShopBranchLogo = null == shopbranch ? "" : Core.MallIO.GetRomoteImagePath(shopbranch.ShopImages)
                        };
                        products.Add(_tmp);
                    }
                }
            }
            return(products);
        }
Beispiel #10
0
        public JsonResult GetBranchCartProducts(long shopBranchId)
        {
            var  branchCartHelper = new BranchCartHelper();
            long userId           = 0;
            //会员折扣
            decimal discount = 1.0M;//默认折扣为1(没有折扣)

            if (CurrentUser != null)
            {
                userId   = CurrentUser.Id;
                discount = CurrentUser.MemberDiscount;
            }
            var cart = branchCartHelper.GetCart(userId, shopBranchId);
            //var shopBranch = _iShopBranchService.GetShopBranchById(shopBranchId);
            var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId);
            Dictionary <long, long> buyedCounts = null;

            if (userId > 0)
            {
                buyedCounts = new Dictionary <long, long>();
                buyedCounts = OrderApplication.GetProductBuyCount(userId, cart.Items.Select(x => x.ProductId));
            }
            decimal prodPrice         = 0.0M;//优惠价格
            var     shopBranchSkuList = _iShopBranchService.GetSkusByIds(shopBranchId, cart.Items.Select(x => x.SkuId).ToList());

            var products = cart.Items.Select(item =>
            {
                var product       = _iProductService.GetProduct(item.ProductId);
                var shopbranchsku = shopBranchSkuList.FirstOrDefault(x => x.SkuId == item.SkuId);
                long stock        = shopbranchsku == null ? 0 : shopbranchsku.Stock;

                if (stock > product.MaxBuyCount && product.MaxBuyCount != 0)
                {
                    stock = product.MaxBuyCount;
                }
                if (product.MaxBuyCount > 0 && buyedCounts != null && buyedCounts.ContainsKey(item.ProductId))
                {
                    long buynum = buyedCounts[item.ProductId];
                    stock       = stock - buynum;
                }

                var shop = _iShopService.GetShop(product.ShopId);
                //Entities.SKUInfo sku = null;
                string skuDetails = "";
                if (null != shop)
                {
                    var vshop = _iVShopService.GetVShopByShopId(shop.Id);
                    //sku = _iProductService.GetSku(item.SkuId);
                    DTO.SKU sku = ProductManagerApplication.GetSKU(item.SkuId);
                    if (sku == null)
                    {
                        return(null);
                    }
                    prodPrice = sku.SalePrice;
                    if (shop.IsSelf)
                    {//官方自营店才计算会员折扣
                        prodPrice = sku.SalePrice * discount;
                    }

                    var typeInfo = TypeApplication.GetProductType(product.TypeId);
                    skuDetails   = "";
                    if (!string.IsNullOrWhiteSpace(sku.Size))
                    {
                        skuDetails += sku.Size + "&nbsp;&nbsp;";
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Color))
                    {
                        skuDetails += sku.Color + "&nbsp;&nbsp;";
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Version))
                    {
                        skuDetails += sku.Version + "&nbsp;&nbsp;";
                    }
                    return(new
                    {
                        bId = shopBranchId,
                        cartItemId = item.Id,
                        skuId = item.SkuId,
                        id = product.Id,
                        name = product.ProductName,
                        price = prodPrice,
                        count = item.Quantity,
                        stock = shopbranchsku == null ? 0 : stock,
                        //阶梯价商品在门店购物车自动下架
                        //status = product.IsOpenLadder ? 1 : (shopbranchsku == null ? 1 : (shopbranchsku.Status == ShopBranchSkuStatus.Normal) ? (item.Quantity > stock ? 2 : 0) : 1),//0:正常;1:冻结;2:库存不足
                        status = ProductManagerApplication.GetProductShowStatus(product, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足;3:已下架;
                        skuDetails = skuDetails,
                        AddTime = item.AddTime
                    });
                }
                else
                {
                    return(null);
                }
            }).Where(d => d != null).OrderBy(s => s.status).ThenByDescending(o => o.AddTime);

            var cartModel = new { products = products, amount = products.Where(x => x.status == 0).Sum(item => item.price * item.count), totalCount = products.Where(x => x.status == 0).Sum(item => item.count), DeliveFee = shopBranch.DeliveFee, DeliveTotalFee = shopBranch.DeliveTotalFee, FreeMailFee = shopBranch.FreeMailFee, IsFreeMail = shopBranch.IsFreeMail, shopBranchStatus = (int)shopBranch.Status };

            return(SuccessResult <dynamic>(data: cartModel));
        }
Beispiel #11
0
        /// <summary>
        /// 立即购买方式提交的订单
        /// </summary>
        /// <param name="value">数据</param>
        private object SubmitOrderById(OrderSubmitOrderModel value)
        {
            string skuIds           = value.skuIds;
            string counts           = value.counts;
            long   recieveAddressId = value.recieveAddressId;
            string couponIds        = value.couponIds;
            int    integral         = value.integral;

            bool   isCashOnDelivery = value.isCashOnDelivery;
            int    invoiceType      = value.invoiceType;
            string invoiceTitle     = value.invoiceTitle;
            string invoiceContext   = value.invoiceContext;
            //end
            string orderRemarks = string.Empty;//value.orderRemarks;//订单备注

            OrderCreateModel model = new OrderCreateModel();
            var orderService       = ServiceProvider.Instance <IOrderService> .Create;
            var productService     = ServiceProvider.Instance <IProductService> .Create;
            var skuIdArr           = skuIds.Split(',').Select(item => item.ToString());
            var countArr           = counts.Split(',').Select(item => int.Parse(item));

            model.CouponIdsStr = CouponApplication.ConvertUsedCoupon(couponIds);
            IEnumerable <long> orderIds;

            model.PlatformType     = PlatformType.WeiXinSmallProg;
            model.CurrentUser      = CurrentUser;
            model.ReceiveAddressId = recieveAddressId;
            model.SkuIds           = skuIdArr;
            model.Counts           = countArr;
            model.Integral         = integral;

            model.IsCashOnDelivery = isCashOnDelivery;
            model.Invoice          = (InvoiceType)invoiceType;
            model.InvoiceContext   = invoiceContext;
            model.InvoiceTitle     = invoiceTitle;

            model.formId  = value.formId;
            model.Capital = value.Capital;

            CommonModel.OrderShop[]          OrderShops          = Newtonsoft.Json.JsonConvert.DeserializeObject <OrderShop[]>(value.jsonOrderShops);
            CommonModel.VirtualProductItem[] VirtualProductItems = Newtonsoft.Json.JsonConvert.DeserializeObject <VirtualProductItem[]>(value.VirtualProductItems);
            model.OrderShops   = OrderShops;//用户APP选择门店自提时用到,2.5版本未支持门店自提
            model.OrderRemarks = OrderShops.Select(p => p.Remark).ToArray();
            //end

            if (value.isStore)
            {
                model.IsShopbranchOrder = true;
            }

            model.IsVirtual = value.ProductType == 1;
            if (model.IsVirtual && skuIdArr.Count() > 0)
            {
                var skuInfo = ProductManagerApplication.GetSKU(skuIdArr.FirstOrDefault());
                if (skuInfo != null)
                {
                    var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(skuInfo.ProductId);
                    if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value)
                    {
                        return(Json(ErrorResult <dynamic>("该虚拟商品已过期,不支持下单")));
                    }
                }
            }

            try
            {
                //处理限时购
                if (skuIdArr.Count() == 1)
                {
                    var skuid = skuIdArr.ElementAt(0);
                    if (!string.IsNullOrWhiteSpace(skuid))
                    {
                        var sku       = productService.GetSku(skuid);
                        var flashSale = ServiceProvider.Instance <ILimitTimeBuyService> .Create.GetLimitTimeMarketItemByProductId(sku.ProductId);

                        model.IslimitBuy  = flashSale != null;//标识为限时购计算价格按限时购价格核算
                        model.FlashSaleId = flashSale != null ? flashSale.Id : 0;
                    }
                }
                var orders = orderService.CreateOrder(model);
                orderIds = orders.Select(item => item.Id).ToArray();
                decimal orderTotals = orders.Where(d => d.PaymentType != Entities.OrderInfo.PaymentTypes.CashOnDelivery).Sum(item => item.OrderTotalAmount);
                //orderIds = orderService.CreateOrder(CurrentUser.Id, skuIdArr, countArr, recieveAddressId, PlatformType);
                AddVshopBuyNumber(orderIds);//添加微店购买数量

                #region 处理虚拟订单项
                if (value.ProductType == 1 && VirtualProductItems != null && VirtualProductItems.Count() > 0)
                {
                    var orderId = orderIds.FirstOrDefault();
                    if (orderId > 0)
                    {
                        var orderItemInfo = OrderApplication.GetOrderItemsByOrderId(orderId).FirstOrDefault();
                        if (orderItemInfo != null)
                        {
                            var list = VirtualProductItems.ToList().Where(a => !string.IsNullOrWhiteSpace(a.Content)).ToList();//过滤空项
                            list.ForEach(a =>
                            {
                                a.OrderId     = orderId;
                                a.OrderItemId = orderItemInfo.Id;
                                if (a.VirtualProductItemType == (sbyte)ProductInfo.VirtualProductItemType.Picture)
                                {
                                    a.Content = MoveImages(a.Content, CurrentUser.Id);
                                }
                            });
                            if (list.Count > 0)
                            {
                                OrderApplication.AddVirtualOrderItemInfo(list);
                            }
                        }
                    }
                }
                #endregion
                return(Json(new { OrderId = string.Join(",", orderIds), OrderTotal = orderTotals,
                                  RealTotalIsZero = (orderTotals - model.Capital) == 0, msg = "提交成功" }));
            }
            catch (MallException he)
            {
                return(Json(ErrorResult <dynamic>(he.Message)));
            }
        }
Beispiel #12
0
        public object GetUpdateToCart(string openId, string SkuID, int Quantity, int GiftID = 0)
        {
            //验证用户
            CheckUserLogin();
            var  cartHelper  = new CartHelper();
            long userId      = CurrentUser != null ? CurrentUser.Id : 0;
            var  skus        = cartHelper.GetCart(userId);
            var  oldQuantity = GetCartProductQuantity(skus, skuId: SkuID);

            oldQuantity = oldQuantity + Quantity;

            long productId = 0;
            var  skuItem   = skus.Items.FirstOrDefault(i => i.SkuId == SkuID);

            if (null == skuItem)
            {
                var sku = ProductManagerApplication.GetSKU(SkuID);
                if (null == sku)
                {
                    return(Json(ErrorResult <dynamic>("错误的参数:SkuId")));
                }
                productId = sku.ProductId;
            }
            else
            {
                productId = skuItem.ProductId;
            }
            var ladderPrice = 0m;
            var product     = ProductManagerApplication.GetProduct(productId);

            if (product != null)
            {
                if (product.MaxBuyCount > 0 && oldQuantity > product.MaxBuyCount && !product.IsOpenLadder)
                {
                    cartHelper.UpdateCartItem(SkuID, product.MaxBuyCount, userId);
                    return(Json(ErrorResult <dynamic>(string.Format("每个ID限购{0}件", product.MaxBuyCount), new { stock = product.MaxBuyCount })));
                }
            }


            SKUInfo skuinfo = OrderApplication.GetSkuByID(SkuID);

            if (skuinfo.Stock < oldQuantity)
            {
                cartHelper.UpdateCartItem(SkuID, Convert.ToInt32(skuinfo.Stock), userId);
                return(Json(ErrorResult <dynamic>("库存不足", new { stock = skuinfo.Stock })));
            }

            cartHelper.UpdateCartItem(SkuID, oldQuantity, userId);
            //调用查询购物车数据

            #region 阶梯价--张宇枫
            var isOpenLadder = product.IsOpenLadder;
            if (isOpenLadder)
            {
                var shop = ShopApplication.GetShop(product.ShopId);
                var groupCartByProduct = cartHelper.GetCart(userId).Items.Where(item => item.ShopBranchId == 0).GroupBy(i => i.ProductId).ToList();
                //var groupCartByProduct = skus.Items.Where(item => item.ShopBranchId == 0).Select(c =>
                //{
                //    var cItem = new Mall.Entities.ShoppingCartItem();
                //    var skuInfo = ServiceProvider.Instance<IProductService>.Create.GetSku(c.SkuId);
                //    if (skuInfo != null)
                //        cItem = c;
                //    return cItem;
                //}).GroupBy(i => i.ProductId).ToList();

                var quantity =
                    groupCartByProduct.Where(i => i.Key == productId)
                    .ToList()
                    .Sum(cartitem => cartitem.Sum(i => i.Quantity));
                ladderPrice = ProductManagerApplication.GetProductLadderPrice(productId, quantity);
                if (shop.IsSelf)
                {
                    ladderPrice = CurrentUser.MemberDiscount * ladderPrice;
                }
            }
            #endregion
            return(Json(new { Price = ladderPrice.ToString("F2"), ProductId = productId, IsOpenLadder = isOpenLadder ? 1 : 0 }));
        }
Beispiel #13
0
        /// <summary>
        /// 查询订单
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public string GetOrder(HttpContext context)
        {
            string  bizcontent  = context.Request["bizcontent"];
            JObject jo          = (JObject)JsonConvert.DeserializeObject(bizcontent);
            string  OrderStatus = GetJObjectValue <string>(jo, "OrderStatus");
            string  PlatOrderNo = GetJObjectValue <string>(jo, "PlatOrderNo");
            string  StartTime   = GetJObjectValue <string>(jo, "StartTime");;
            string  EndTime     = GetJObjectValue <string>(jo, "EndTime");
            string  TimeType    = GetJObjectValue <string>(jo, "TimeType"); //未使用,所有都是按订单创建时间搜索
            int     PageIndex   = GetJObjectValue <int>(jo, "PageIndex");
            int     PageSize    = GetJObjectValue <int>(jo, "PageSize");

            if (PageIndex <= 0)
            {
                PageIndex = 1;
            }
            if (PageSize <= 0)
            {
                PageSize = 10;
            }
            OrderQuery query = new OrderQuery {
                ShopId = CurShopId
            };

            switch (OrderStatus)
            {
            case "JH_01":
                query.Status = Entities.OrderInfo.OrderOperateStatus.WaitPay;
                break;

            case "JH_02":
                query.Status = Entities.OrderInfo.OrderOperateStatus.WaitDelivery;
                if (query.MoreStatus == null)
                {
                    query.MoreStatus = new List <OrderInfo.OrderOperateStatus>()
                    {
                    };
                }
                query.MoreStatus.Add(OrderInfo.OrderOperateStatus.WaitSelfPickUp);
                break;

            case "JH_03":
                query.Status = Entities.OrderInfo.OrderOperateStatus.WaitReceiving;
                break;

            case "JH_04":
                query.Status = Entities.OrderInfo.OrderOperateStatus.Finish;
                break;

            case "JH_05":
                query.Status = Entities.OrderInfo.OrderOperateStatus.Close;
                break;

            case "JH_99":
                query.Status = null;      //所有
                break;
            }
            if (!string.IsNullOrEmpty(PlatOrderNo) && PlatOrderNo != "")
            {
                query.OrderId = PlatOrderNo;
            }
            else
            {
                //检测参数
                if (string.IsNullOrWhiteSpace(StartTime) ||
                    string.IsNullOrWhiteSpace(EndTime) ||
                    string.IsNullOrWhiteSpace(OrderStatus)
                    )
                {
                    throw new HimallApiException("参数错误,有必填参数未给值");
                }
                query.StartDate = DateTime.Parse(StartTime);
                query.EndDate   = DateTime.Parse(EndTime);
            }
            query.PageNo   = PageIndex;
            query.PageSize = PageSize;
            var  orders        = OrderApplication.GetFullOrders(query);
            bool ishasnextpage = false;

            if (orders.Total > 0)
            {
                ishasnextpage = orders.Models.Count == PageSize;
            }
            StringBuilder sb = new StringBuilder();

            sb.Append("{");
            sb.Append("\"code\":" + "\"" + "10000" + "\"");
            sb.Append(",\"message\":" + "\"" + "SUCCESS" + "\"");
            sb.Append(",\"numtotalorder\":" + "\"" + orders.Total + "\"");
            sb.Append(",\"ishasnextpage\":" + "\"" + (ishasnextpage ? "1" : "0") + "\"");
            sb.Append(",\"orders\":");
            sb.Append("[");
            int curordernum = 0;

            foreach (var order in orders.Models)
            {
                if (curordernum > 0)
                {
                    sb.Append(",");
                }
                sb.Append("{");
                sb.Append("\"PlatOrderNo\":" + "\"" + order.OrderId + "\"");
                string tradeStatus     = "";
                string tradeStatusName = "";
                string itemStatus      = "";
                switch (order.OrderStatus)
                {
                case Entities.OrderInfo.OrderOperateStatus.WaitPay:
                    tradeStatus     = "JH_01";
                    tradeStatusName = "等待买家付款";
                    itemStatus      = "JH_01";
                    break;

                case Entities.OrderInfo.OrderOperateStatus.WaitDelivery:
                    tradeStatus     = "JH_02";
                    tradeStatusName = "等待卖家发货";
                    itemStatus      = "JH_02";
                    break;

                case Entities.OrderInfo.OrderOperateStatus.WaitReceiving:
                    tradeStatus     = "JH_03";
                    tradeStatusName = "等待买家确认收货";
                    itemStatus      = "JH_03";
                    break;

                case Entities.OrderInfo.OrderOperateStatus.Close:
                    tradeStatus     = "JH_05";
                    tradeStatusName = "交易关闭";
                    itemStatus      = "JH_05";
                    break;

                case Entities.OrderInfo.OrderOperateStatus.Finish:
                    tradeStatus     = "JH_04";
                    tradeStatusName = "交易完成";
                    itemStatus      = "JH_04";
                    break;

                case Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp:
                    tradeStatus     = "JH_02";
                    tradeStatusName = "等待卖家发货";
                    itemStatus      = "JH_02";
                    break;

                default:
                    tradeStatus     = "JH_99";
                    tradeStatusName = "其他";
                    itemStatus      = "JH_99";
                    break;
                }
                sb.Append(",\"tradeStatus\":" + "\"" + tradeStatus + "\"");
                sb.Append(",\"tradeStatusdescription\":" + "\"" + tradeStatusName + "\"");
                sb.Append(",\"tradetime\":" + "\"" + order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss") + "\"");
                sb.Append(",\"payorderno\":" + "\"" + "" + "\"");
                sb.Append(",\"country\":" + "\"" + "CN" + "\"");
                string[] ShippingRegion = order.RegionFullName.Split(' ');
                string   province       = "";
                if (ShippingRegion.Length > 0)
                {
                    province = ShippingRegion[0];
                }
                string city = "";
                if (ShippingRegion.Length > 1)
                {
                    city = ShippingRegion[1];
                }
                string area = "";
                if (ShippingRegion.Length > 2)
                {
                    area = ShippingRegion[2];
                }
                string town = "";
                if (ShippingRegion.Length > 3)
                {
                    town = ShippingRegion[3];
                }

                sb.Append(",\"province\":" + "\"" + province + "\"");
                sb.Append(",\"city\":" + "\"" + city + "\"");
                sb.Append(",\"area\":" + "\"" + area + "\"");
                sb.Append(",\"town\":" + "\"" + town + "\"");
                sb.Append(",\"address\":" + "\"" + order.Address + "\"");
                sb.Append(",\"zip\":" + "\"\"");
                sb.Append(",\"phone\":" + "\"\"");
                sb.Append(",\"mobile\":" + "\"" + order.CellPhone + "\"");
                sb.Append(",\"email\":" + "\"\"");
                sb.Append(",\"customerremark\":" + "\"" + order.OrderRemarks + "\"");
                sb.Append(",\"sellerremark\":" + "\"" + order.SellerRemark + "\"");
                sb.Append(",\"postfee\":" + "\"" + order.Freight.ToString("F2") + "\"");
                sb.Append(",\"goodsfee\":" + "\"" + order.ProductTotalAmount.ToString("F2") + "\"");
                sb.Append(",\"totalmoney\":" + "\"" + order.OrderTotalAmount.ToString("F2") + "\"");
                sb.Append(",\"favourablemoney\":" + "\"" + (order.DiscountAmount + order.FullDiscount + order.IntegralDiscount).ToString("F2") + "\"");
                sb.Append(",\"commissionvalue\":" + "\"" + "" + "\"");
                sb.Append(",\"taxamount\":" + "\"0\"");
                sb.Append(",\"tariffamount\":" + "\"" + "" + "\"");
                sb.Append(",\"addedvalueamount\":" + "\"" + order.Tax + "\"");
                sb.Append(",\"consumptiondutyamount\":" + "\"" + "" + "\"");
                sb.Append(",\"sendstyle\":" + "\"" + order.DeliveryType.ToDescription() + "\"");
                sb.Append(",\"paytime\":" + "\"" + GetDateTimeString(order.PayDate, "yyyy-MM-dd HH:mm:ss") + "\"");
                sb.Append(",\"invoicetitle\":" + "\"" + order.InvoiceTitle + "\"");
                sb.Append(",\"taxpayerident\":" + "\"" + order.InvoiceCode + "\"");
                sb.Append(",\"codservicefee\":" + "\"" + "" + "\"");
                sb.Append(",\"receivername\":" + "\"" + order.ShipTo + "\"");
                sb.Append(",\"nick\":" + "\"" + order.UserName + "\"");
                sb.Append(",\"whsecode\":" + "\"" + "" + "\"");
                sb.Append(",\"IsHwgFlag\":" + "\"" + "0" + "\"");
                sb.Append(",\"ShouldPayType\":" + "\"" + GetShouldPayType(order.PaymentType) + "\"");
                sb.Append(",\"StoreName\":" + "\"" + order.ShopBranchName + "\"");
                sb.Append(",\"StoreId\":" + "\"" + order.ShopBranchId + "\"");
                sb.Append(",\"VerifyCode\":" + "\"" + order.PickupCode + "\"");
                //订单项
                sb.Append(",\"goodinfos\":");
                sb.Append("[");
                int curitemnum = 0;
                foreach (var item in order.OrderItems)
                {
                    var sku = ProductManagerApplication.GetSKU(item.SkuId);
                    if (curitemnum > 0)
                    {
                        sb.Append(",");
                    }
                    var skuproid = item.SkuId;
                    if (!string.IsNullOrWhiteSpace(sku.Sku))
                    {
                        skuproid = sku.Sku;
                    }
                    if (skuproid.IndexOf("_0_0_0") > -1 || string.IsNullOrWhiteSpace(skuproid))
                    {
                        var _pro = ProductManagerApplication.GetProduct(item.ProductId);
                        skuproid = _pro.ProductCode;
                    }
                    sb.Append("{");
                    sb.Append("\"ProductId\":" + "\"" + item.SkuId + "\"");
                    sb.Append(",\"suborderno\":" + "\"" + "" + "\"");
                    sb.Append(",\"tradegoodsno\":" + "\"" + skuproid + "\"");
                    sb.Append(",\"tradegoodsname\":" + "\"" + item.ProductName + "\"");
                    sb.Append(",\"tradegoodsspec\":" + "\"" + item.SKU + "\"");
                    sb.Append(",\"goodscount\":" + "\"" + item.Quantity + "\"");
                    sb.Append(",\"price\":" + "\"" + item.Price.ToString("F2") + "\"");
                    sb.Append(",\"discountmoney\":" + "\"" + (item.FullDiscount + item.CouponDiscount + item.DiscountAmount).ToString("F2") + "\"");
                    sb.Append(",\"taxamount\":" + "\"0\"");
                    sb.Append(",\"addedvalueamount\":" + "\"0\"");
                    sb.Append(",\"consumptiondutyamount\":" + "\"0\"");
                    string refundStatus = "JH_07";
                    switch (item.RefundStats)
                    {
                    case 1:
                        refundStatus = "JH_01";
                        break;

                    case 2:
                        refundStatus = "JH_02";
                        break;

                    case 3:
                        refundStatus = "JH_03";
                        break;

                    case 4:
                        refundStatus = "JH_04";
                        break;

                    case 5:
                    case 6:
                        refundStatus = "JH_99";
                        break;

                    case 7:
                        refundStatus = "JH_07";
                        break;
                    }
                    sb.Append(",\"refundStatus\":" + "\"" + refundStatus + "\"");
                    sb.Append(",\"status\":" + "\"" + itemStatus + "\"");
                    sb.Append(",\"remark\":" + "\"" + "" + "\"");
                    sb.Append("}");
                    curitemnum++;
                }
                sb.Append("]");
                //优惠
                sb.Append(",\"coupondetails\":");
                sb.Append("[");
                curitemnum = 0;
                foreach (var item in order.OrderItems)
                {
                    if (item.FullDiscount > 0)
                    {
                        if (curitemnum > 0)
                        {
                            sb.Append(",");
                        }
                        sb.Append(AddCouponDetail(item.SkuId, "JH_OffFreeCoupon", "满减", item.FullDiscount.ToString("F2")));
                        curitemnum++;
                    }
                    if (item.CouponDiscount > 0)
                    {
                        if (curitemnum > 0)
                        {
                            sb.Append(",");
                        }
                        sb.Append(AddCouponDetail(item.SkuId, "JH_Coupon", "优惠券", item.CouponDiscount.ToString("F2")));
                        curitemnum++;
                    }
                    if (item.EnabledRefundIntegral > 0)
                    {
                        if (curitemnum > 0)
                        {
                            sb.Append(",");
                        }
                        sb.Append(AddCouponDetail(item.SkuId, "JH_Point", "积分抵扣", item.EnabledRefundIntegral.Value.ToString("F2")));
                        curitemnum++;
                    }
                    if (item.DiscountAmount > 0)
                    {
                        if (curitemnum > 0)
                        {
                            sb.Append(",");
                        }
                        sb.Append(AddCouponDetail(item.SkuId, "JH_PeopleCoupon", "人工优惠", item.EnabledRefundIntegral.Value.ToString("F2")));
                        curitemnum++;
                    }
                }
                sb.Append("]");

                sb.Append("}");
                curordernum++;
            }
            sb.Append("]");
            sb.Append("}");

            return(sb.ToString());
        }
        /// <summary>
        /// 查询门店诊疗项目
        /// </summary>
        /// <param name="keywords"></param>
        /// <param name="cid"></param>
        /// <param name="pageNo"></param>
        /// <param name="pageSize"></param>
        /// <param name="branchProductStatus"></param>
        /// <returns></returns>
        public object GetShopProducts(
            string status,        /* 使用中0, 仓库中1, 待审核2,违规下架3 */
            string keywords = "", /* 搜索关键字 */
            long cid        = 0,  /* 分类ID */
            int pageNo      = 1,  /*页码*/
            int pageSize    = 10  /*每页显示数据量*/
            )
        {
            CheckUserLogin();
            ProductQuery query = new ProductQuery
            {
                PageNo   = pageNo,
                PageSize = pageSize,
                KeyWords = keywords,
                ShopId   = CurrentShop.Id
            };

            if (!string.IsNullOrWhiteSpace(status))
            {
                switch (status)
                {
                case "0":
                    query.SaleStatus  = Himall.Model.ProductInfo.ProductSaleStatus.OnSale;
                    query.AuditStatus = new Himall.Model.ProductInfo.ProductAuditStatus[] { Himall.Model.ProductInfo.ProductAuditStatus.Audited };
                    break;

                case "1":
                    query.SaleStatus  = Himall.Model.ProductInfo.ProductSaleStatus.InStock;
                    query.AuditStatus = new Himall.Model.ProductInfo.ProductAuditStatus[] { Himall.Model.ProductInfo.ProductAuditStatus.Audited, Himall.Model.ProductInfo.ProductAuditStatus.UnAudit, Himall.Model.ProductInfo.ProductAuditStatus.WaitForAuditing };
                    break;

                case "2":
                    query.SaleStatus  = Himall.Model.ProductInfo.ProductSaleStatus.OnSale;
                    query.AuditStatus = new Himall.Model.ProductInfo.ProductAuditStatus[] { Himall.Model.ProductInfo.ProductAuditStatus.WaitForAuditing };
                    break;

                case "3":
                    query.AuditStatus = new Himall.Model.ProductInfo.ProductAuditStatus[] { Himall.Model.ProductInfo.ProductAuditStatus.InfractionSaleOff };
                    break;
                }
            }

            if (cid > 0)
            {
                query.CategoryId = cid;
            }
            //查询诊疗项目
            var pageModel = ProductManagerApplication.GetProducts(query);
            var pids      = pageModel.Models.Select(e => e.Id);
            var skus      = ProductManagerApplication.GetSKU(pids);
            //查询门店SKU库存
            var product = pageModel.Models.ToList().Select(item =>
            {
                return(new
                {
                    id = item.Id,
                    name = item.ProductName,
                    price = item.MinSalePrice,
                    salesCount = item.SaleCounts,
                    img = Core.HimallIO.GetRomoteProductSizeImage(item.RelativePath, 1, (int)Himall.CommonModel.ImageSize.Size_350),
                    stock = skus.Where(e => e.ProductId == item.Id).Sum(e => e.Stock),
                    productCode = item.ProductCode
                });
            });
            var result = new
            {
                success  = true,
                products = product,
                total    = pageModel.Total
            };

            return(Json(result));
        }
Beispiel #15
0
        public object GetBranchCartProducts(long shopBranchId)
        {
            long userId = 0;
            //会员折扣
            decimal discount = 1.0M;//默认折扣为1(没有折扣)

            if (CurrentUser != null)
            {
                userId   = CurrentUser.Id;
                discount = CurrentUser.MemberDiscount;
            }
            var cart = GetCart(userId, shopBranchId);
            //var shopBranch = _iShopBranchService.GetShopBranchById(shopBranchId);
            var         shopBranch     = ShopBranchApplication.GetShopBranchById(shopBranchId);
            var         productService = _iProductService;
            var         shopService    = _iShopService;
            var         vshopService   = _iVShopService;
            List <long> pids           = new List <long>();
            decimal     prodPrice      = 0.0M;//优惠价格
            var         products       = cart.Items.Select(item =>
            {
                var product       = productService.GetProduct(item.ProductId);
                var shopbranchsku = _iShopBranchService.GetSkusByIds(shopBranchId, new List <string> {
                    item.SkuId
                }).FirstOrDefault();
                var shop = shopService.GetShop(product.ShopId);
                //Entities.SKUInfo sku = null;
                string skuDetails = "";
                if (null != shop)
                {
                    var vshop = vshopService.GetVShopByShopId(shop.Id);
                    //sku = productService.GetSku(item.SkuId);
                    DTO.SKU sku = ProductManagerApplication.GetSKU(item.SkuId);
                    if (sku == null)
                    {
                        return(null);
                    }
                    prodPrice = sku.SalePrice;
                    if (shop.IsSelf)
                    {//官方自营店才计算会员折扣
                        prodPrice = sku.SalePrice * discount;
                    }

                    var typeInfo = TypeApplication.GetProductType(product.TypeId);
                    skuDetails   = "";
                    if (!string.IsNullOrWhiteSpace(sku.Size))
                    {
                        skuDetails += sku.Size + "&nbsp;&nbsp;";
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Color))
                    {
                        skuDetails += sku.Color + "&nbsp;&nbsp;";
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Version))
                    {
                        skuDetails += sku.Version + "&nbsp;&nbsp;";
                    }
                    return(new
                    {
                        bId = shopBranchId,
                        cartItemId = item.Id,
                        skuId = item.SkuId,
                        id = product.Id,
                        name = product.ProductName,
                        price = prodPrice,
                        count = item.Quantity,
                        stock = shopbranchsku == null ? 0 : shopbranchsku.Stock,
                        //阶梯价商品在门店购物车自动下架
                        //status = product.IsOpenLadder ? 1 : (shopbranchsku == null ? 1 : (shopbranchsku.Status == ShopBranchSkuStatus.Normal) ? (item.Quantity > shopbranchsku.Stock ? 2 : 0) : 1),//0:正常;1:冻结;2:库存不足
                        status = ProductManagerApplication.GetProductShowStatus(product, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足;3:已下架;
                        skuDetails = skuDetails,
                        AddTime = item.AddTime
                    });
                }
                else
                {
                    return(null);
                }
            }).Where(d => d != null).OrderBy(s => s.status).ThenByDescending(o => o.AddTime);

            var cartModel = new
            {
                success          = true,
                products         = products,
                amount           = products.Where(x => x.status == 0).Sum(item => item.price * item.count),
                totalCount       = products.Where(x => x.status == 0).Sum(item => item.count),
                DeliveFee        = shopBranch.DeliveFee,
                DeliveTotalFee   = shopBranch.DeliveTotalFee,
                FreeMailFee      = shopBranch.FreeMailFee,
                shopBranchStatus = (int)shopBranch.Status
            };

            return(cartModel);
        }
        public object PostSubmitOrder(OrderSubmitOrderModel value)
        {
            CheckUserLogin();
            if (value.CapitalAmount > 0 && !string.IsNullOrEmpty(value.PayPwd))
            {
                var flag = MemberApplication.VerificationPayPwd(CurrentUser.Id, value.PayPwd);
                if (!flag)
                {
                    throw new MallApiException("预存款支付密码错误");
                }
            }
            string skuIds = value.skuIds;
            string counts = value.counts;
            long recieveAddressId = value.recieveAddressId;
            string couponIds = value.couponIds;
            int integral = value.integral;

            bool isCashOnDelivery = value.isCashOnDelivery;
            int invoiceType = value.invoiceType;
            string invoiceTitle = value.invoiceTitle;
            string invoiceContext = value.invoiceContext;
            //end
            string orderRemarks = string.Empty;//value.orderRemarks;//订单备注

            OrderCreateModel model = new OrderCreateModel();
            var orderService = ServiceProvider.Instance<IOrderService>.Create;
            var productService = ServiceProvider.Instance<IProductService>.Create;
            var skuIdArr = skuIds.Split(',').Select(item => item.ToString());
            var countArr = counts.Split(',').Select(item => int.Parse(item));
            model.CouponIdsStr = CouponApplication.ConvertUsedCoupon(couponIds);
            IEnumerable<long> orderIds;
            model.PlatformType = PlatformType.Android;
            model.CurrentUser = CurrentUser;
            model.ReceiveAddressId = recieveAddressId;
            model.SkuIds = skuIdArr;
            model.Counts = countArr;
            model.Integral = integral;
            model.Capital = value.CapitalAmount;

            model.IsCashOnDelivery = isCashOnDelivery;
            model.Invoice = (InvoiceType)invoiceType;
            model.InvoiceContext = invoiceContext;
            model.InvoiceTitle = invoiceTitle;
            model.InvoiceCode = value.invoiceCode;

            CommonModel.OrderShop[] OrderShops = Newtonsoft.Json.JsonConvert.DeserializeObject<OrderShop[]>(value.jsonOrderShops);
            CommonModel.VirtualProductItem[] VirtualProductItems = Newtonsoft.Json.JsonConvert.DeserializeObject<VirtualProductItem[]>(value.VirtualProductItems);
            model.OrderShops = OrderShops;//用户APP选择门店自提时用到,2.5版本未支持门店自提
            model.OrderRemarks = OrderShops.Select(p => p.Remark).ToArray();
            //end
            model.IsShopbranchOrder = true;
            model.IsVirtual = value.ProductType == 1;
            if (model.IsVirtual && skuIdArr.Count() > 0)
            {
                var skuInfo = ProductManagerApplication.GetSKU(skuIdArr.FirstOrDefault());
                if (skuInfo != null)
                {
                    var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(skuInfo.ProductId);
                    if (virtualProductInfo != null && virtualProductInfo.ValidityType && DateTime.Now > virtualProductInfo.EndDate.Value)
                    {
                        return ErrorResult("该虚拟商品已过期,不支持下单");
                    }
                }
            }
            try
            {
                //处理限时购
                if (skuIdArr.Count() == 1)
                {
                    var skuid = skuIdArr.ElementAt(0);
                    if (!string.IsNullOrWhiteSpace(skuid))
                    {
                        var sku = productService.GetSku(skuid);
                        bool isltmbuy = ServiceProvider.Instance<ILimitTimeBuyService>.Create.IsLimitTimeMarketItem(sku.ProductId);
                        model.IslimitBuy = isltmbuy;//标识为限时购计算价格按限时购价格核算
                    }
                }

                var orders = orderService.CreateOrder(model);
                orderIds = orders.Select(item => item.Id).ToArray();
                decimal orderTotals = orders.Sum(item => item.OrderTotalAmount);
                //orderIds = orderService.CreateOrder(CurrentUser.Id, skuIdArr, countArr, recieveAddressId, PlatformType);
                AddVshopBuyNumber(orderIds);//添加微店购买数量

                #region 处理虚拟订单项
                if (value.ProductType == 1 && VirtualProductItems != null && VirtualProductItems.Count() > 0)
                {
                    var orderId = orderIds.FirstOrDefault();
                    if (orderId > 0)
                    {
                        var orderItemInfo = OrderApplication.GetOrderItemsByOrderId(orderId).FirstOrDefault();
                        if (orderItemInfo != null)
                        {
                            var list = VirtualProductItems.ToList().Where(a => !string.IsNullOrWhiteSpace(a.Content)).ToList();//过滤空项
                            list.ForEach(a =>
                            {
                                a.OrderId = orderId;
                                a.OrderItemId = orderItemInfo.Id;
                                if (a.VirtualProductItemType == (sbyte)ProductInfo.VirtualProductItemType.Picture)
                                {
                                    a.Content = MoveImages(a.Content, CurrentUser.Id);
                                }
                            });
                            if (list.Count > 0)
                            {
                                OrderApplication.AddVirtualOrderItemInfo(list);
                            }
                        }
                    }
                }
                #endregion
                var _result = new { success = true, OrderIds = orderIds, RealTotalIsZero = orderTotals == 0 };
                return _result;
            }
            catch (MallException he)
            {
                return ErrorResult(he.Message);
            }
            catch (Exception ex)
            {
                return ErrorResult("提交订单异常");
            }
        }
Beispiel #17
0
        public object GetCart(long shopBranchId)
        {
            //CheckUserLogin();
            long userId = 0;
            //会员折扣
            decimal discount = 1.0M;//默认折扣为1(没有折扣)

            if (CurrentUser != null)
            {
                userId   = CurrentUser.Id;
                discount = CurrentUser.MemberDiscount;
            }
            var cart       = GetCart(userId, shopBranchId);
            var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId);

            if (shopBranch == null)
            {
                throw new MallException("门店库存不足");
            }
            var     stores    = cart.Items.Where(d => d.ShopBranchId > 0).OrderByDescending(d => d.AddTime).Select(d => d.ShopBranchId).GroupBy(d => d);
            decimal prodPrice = 0.0M;//优惠价格
            //var rets = new List<CartStoreModel>();
            var _store = new CartStoreModel();

            _store.ShopBranchId   = shopBranch.Id;
            _store.ShopId         = shopBranch.ShopId;
            _store.ShopBranchName = shopBranch.ShopBranchName;
            _store.Status         = shopBranch.Status.GetHashCode();
            _store.DeliveFee      = shopBranch.DeliveFee;
            _store.DeliveTotalFee = shopBranch.DeliveTotalFee;
            _store.FreeMailFee    = shopBranch.FreeMailFee;
            var product = cart.Items.Where(d => d.ShopBranchId == shopBranch.Id).OrderBy(s => s.Status).ThenByDescending(o => o.AddTime).ToList();

            _store.Products = new List <CartStoreProduct>();
            foreach (var pitem in product)
            {
                var pro           = ProductManagerApplication.GetProduct(pitem.ProductId);
                var shopbranchsku = ShopBranchApplication.GetSkusByIds(_store.ShopBranchId, new List <string> {
                    pitem.SkuId
                }).FirstOrDefault();
                var     shop       = ShopApplication.GetShop(pro.ShopId);
                var     vshop      = VshopApplication.GetVShopByShopId(pro.ShopId);
                DTO.SKU sku        = ProductManagerApplication.GetSKU(pitem.SkuId);
                string  skuDetails = "";
                if (null != shop && sku != null)
                {
                    prodPrice = sku.SalePrice;
                    if (shop.IsSelf)
                    {
                        //官方自营店才计算会员折扣
                        prodPrice = sku.SalePrice * discount;
                    }
                    prodPrice = decimal.Round(prodPrice, 2, MidpointRounding.AwayFromZero);

                    var typeInfo = TypeApplication.GetProductType(pro.TypeId);
                    skuDetails = "";
                    if (!string.IsNullOrWhiteSpace(sku.Size))
                    {
                        if (!string.IsNullOrWhiteSpace(skuDetails))
                        {
                            skuDetails += "、";
                        }
                        skuDetails += sku.Size;
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Color))
                    {
                        if (!string.IsNullOrWhiteSpace(skuDetails))
                        {
                            skuDetails += "、";
                        }
                        skuDetails += sku.Color;
                    }
                    if (!string.IsNullOrWhiteSpace(sku.Version))
                    {
                        if (!string.IsNullOrWhiteSpace(skuDetails))
                        {
                            skuDetails += "、";
                        }
                        skuDetails += sku.Version;
                    }
                    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 (pro != null)
                    {
                        colorAlias   = !string.IsNullOrWhiteSpace(pro.ColorAlias) ? pro.ColorAlias : colorAlias;
                        sizeAlias    = !string.IsNullOrWhiteSpace(pro.SizeAlias) ? pro.SizeAlias : sizeAlias;
                        versionAlias = !string.IsNullOrWhiteSpace(pro.VersionAlias) ? pro.VersionAlias : versionAlias;
                    }
                    var _product = new CartStoreProduct
                    {
                        ShopBranchId = shopBranchId,
                        CartItemId   = pitem.Id,
                        SkuId        = pitem.SkuId,
                        Id           = pro.Id,
                        ProductName  = pro.ProductName,
                        Price        = prodPrice,
                        Count        = pitem.Quantity,
                        Stock        = shopbranchsku == null ? 0 : shopbranchsku.Stock,
                        //阶梯价商品在门店购物车自动下架
                        Status       = ProductManagerApplication.GetProductShowStatus(pro, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足
                        SkuDetails   = skuDetails,
                        ColorAlias   = colorAlias,
                        SizeAlias    = sizeAlias,
                        VersionAlias = versionAlias,
                        Size         = sku.Size,
                        Color        = sku.Color,
                        Version      = sku.Version,
                        AddTime      = pitem.AddTime,
                        DefaultImage = MallIO.GetRomoteProductSizeImage(pro.ImagePath, 1, 500)
                    };
                    _store.Products.Add(_product);
                }
            }
            _store.Amount     = (_store.Products != null && _store.Products.Count > 0) ? _store.Products.Where(x => x.Status == 0).Sum(s => s.Price * s.Count) : 0;
            _store.TotalCount = (_store.Products != null && _store.Products.Count > 0) ? _store.Products.Where(x => x.Status == 0).Sum(s => s.Count) : 0;
            if (_store.Products.Count > 0)
            {//有商品数据,才返回门店信息
                _store.Products = _store.Products.OrderBy(p => p.Status).ThenByDescending(p => p.AddTime).ToList();
                //rets.Add(_store);
            }
            return(Json(_store));
        }