Ejemplo n.º 1
0
        public async Task OnGetAsync(long?id, long EditID)
        {
            ViewData["EditID"] = EditID;

            if (id.HasValue)
            {
                //编辑
                //从缓存获取
                var cacheKey = string.Format(CacheKeyDefinition.ProductSkuTemp, EditID);
                var list     = await _cacheService.GetAsync <List <ProductSkuDto> >(cacheKey);

                if (list == null)
                {
                    list = new List <ProductSkuDto>();
                }
                var model = list.SingleOrDefault(x => x.Id == id);
                if (model == null)
                {
                    throw new KuDataNotFoundException("无法取得数据!");
                }
                ViewData["Mode"] = "Edit";
            }
            else
            {
                Dto = new ProductSkuDto();
                ViewData["Mode"] = "Add";
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> SkuSave(ProductSkuDto model, long EditID)
        {
            //临时SKU数据,保存到缓存中
            var cacheKey = string.Format(CacheKeyDefinition.ProductSkuTemp, EditID);
            var list     = _cacheService.Get <List <ProductSkuDto> >(cacheKey);

            if (list == null)
            {
                list = new List <ProductSkuDto>();
            }
            //TODO
            if (model.Id == 0)
            {
                model.Id           = ID.NewID();
                model.CreateTime   = DateTime.Now;
                model.ModifyStatus = Domain.Enum.EmEntityModifyStatus.Insert;
                list.Add(model);
            }
            else
            {
                var index     = list.FindIndex(x => x.Id == model.Id);
                var savedItem = list[index];
                model.ModifyStatus = savedItem.ModifyStatus;
                if (model.ModifyStatus != Domain.Enum.EmEntityModifyStatus.Insert)
                {
                    model.ModifyStatus = Domain.Enum.EmEntityModifyStatus.Update;
                }
                list[index] = model;
            }
            _cacheService.Add(cacheKey, list, new TimeSpan(10, 0, 0));
            return(JsonData(true));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> SkuEdit(long?id, long EditID)
        {
            ViewData["EditID"] = EditID;

            if (id.HasValue)
            {
                //编辑
                //从缓存获取
                var cacheKey = string.Format(CacheKeyDefinition.ProductSkuTemp, EditID);
                var list     = _cacheService.Get <List <ProductSkuDto> >(cacheKey);
                if (list == null)
                {
                    list = new List <ProductSkuDto>();
                }
                var model = list.SingleOrDefault(x => x.Id == id);
                if (model == null)
                {
                    throw new VinoDataNotFoundException("无法取得数据!");
                }
                ViewData["Mode"] = "Edit";
                return(View(model));
            }
            else
            {
                //新增
                ProductSkuDto dto = new ProductSkuDto();
                ViewData["Mode"] = "Add";
                return(View(dto));
            }
        }
Ejemplo n.º 4
0
        public async Task OnGetAsync(long id)
        {
            Dto = await _service.GetByIdAsync(id);

            if (Dto == null)
            {
                throw new KuDataNotFoundException();
            }
        }
Ejemplo n.º 5
0
    public async Task <Money?> GetUnitPriceOrNullAsync(CreateOrderDto input, CreateOrderLineDto inputOrderLine,
                                                       ProductDto product, ProductSkuDto productSku, Currency effectiveCurrency)
    {
        if (inputOrderLine.ProductSkuId == OrderTestData.ProductSku3Id)
        {
            return(new Money(Sku3UnitPrice, effectiveCurrency));
        }

        return(null);
    }
        public virtual Task <string> GenerateAsync(ProductDto productDto, ProductSkuDto productSkuDto)
        {
            var names = new Collection <string[]>();

            foreach (var attributeOptionId in productSkuDto.AttributeOptionIds)
            {
                names.Add(productDto.ProductAttributes.SelectMany(
                              attribute => attribute.ProductAttributeOptions.Where(option => option.Id == attributeOptionId),
                              (attribute, option) => new [] { attribute.DisplayName, option.DisplayName }).Single());
            }

            return(Task.FromResult(_jsonSerializer.Serialize(names)));
        }
Ejemplo n.º 7
0
    public virtual async Task <Money?> GetUnitPriceOrNullAsync(CreateOrderDto input, CreateOrderLineDto inputOrderLine,
                                                               ProductDto product, ProductSkuDto productSku, Currency effectiveCurrency)
    {
        if (inputOrderLine.FindBookingAssetId() is not null)
        {
            return(await GetAssetBookingUnitPriceAsync(input, inputOrderLine, effectiveCurrency));
        }

        if (inputOrderLine.FindBookingAssetCategoryId() is not null)
        {
            return(await GetAssetCategoryBookingUnitPriceAsync(input, inputOrderLine, effectiveCurrency));
        }

        return(null);
    }
Ejemplo n.º 8
0
        protected virtual async Task <Money> GetUnitPriceAsync(CreateOrderDto input, CreateOrderLineDto inputOrderLine,
                                                               ProductDto product, ProductSkuDto productSku, Currency effectiveCurrency)
        {
            foreach (var overrider in _orderLinePriceOverriders)
            {
                var overridenUnitPrice =
                    await overrider.GetUnitPriceOrNullAsync(input, inputOrderLine, product, productSku,
                                                            effectiveCurrency);

                if (overridenUnitPrice is not null)
                {
                    return(overridenUnitPrice.Value);
                }
            }

            return(new Money(productSku.Price, effectiveCurrency));
        }
    protected virtual async Task <bool> ValidateHashTokenAsync(FlashSalePlanEto plan, ProductDto product, ProductSkuDto productSku, string originHashToken)
    {
        var hashToken = await FlashSalePlanHasher.HashAsync(plan.LastModificationTime, product.LastModificationTime, productSku.LastModificationTime);

        return(string.Equals(hashToken, originHashToken, StringComparison.InvariantCulture));
    }
    protected virtual async Task <Dictionary <Guid, ProductDetailDto> > GetProductDetailDictionaryAsync(ProductDto product, ProductSkuDto productSku)
    {
        var dict = new Dictionary <Guid, ProductDetailDto>();

        var productDetailId = productSku.ProductDetailId ?? product.ProductDetailId;

        if (productDetailId.HasValue)
        {
            dict.Add(productDetailId.Value, await ProductDetailAppService.GetAsync(productDetailId.Value));
        }

        return(dict);
    }
Ejemplo n.º 11
0
    protected virtual Task ValidatePreOrderAsync(FlashSalePlanCacheItem plan, ProductDto product, ProductSkuDto productSku)
    {
        if (!product.IsPublished)
        {
            throw new BusinessException(FlashSalesErrorCodes.ProductIsNotPublished);
        }

        if (product.InventoryStrategy != InventoryStrategy.FlashSales)
        {
            throw new UnexpectedInventoryStrategyException(InventoryStrategy.FlashSales);
        }

        if (!plan.IsPublished)
        {
            throw new EntityNotFoundException(typeof(FlashSalePlan), plan.Id);
        }

        if (Clock.Now >= plan.EndTime)
        {
            throw new BusinessException(FlashSalesErrorCodes.FlashSaleIsOver);
        }

        if (productSku.Inventory < 1)
        {
            throw new BusinessException(FlashSalesErrorCodes.ProductSkuInventoryExceeded);
        }

        return(Task.CompletedTask);
    }
Ejemplo n.º 12
0
    protected virtual async Task SetPreOrderCacheAsync(FlashSalePlanCacheItem plan, ProductDto product, ProductSkuDto productSku, DateTimeOffset expirationTime)
    {
        var hashToken = await FlashSalePlanHasher.HashAsync(plan.LastModificationTime, product.LastModificationTime, productSku.LastModificationTime);

        await PreOrderDistributedCache.SetAsync(await GetPreOrderCacheKeyAsync(plan.Id), new FlashSalePlanPreOrderCacheItem()
        {
            HashToken             = hashToken,
            PlanId                = plan.Id,
            ProductId             = product.Id,
            ProductSkuId          = productSku.Id,
            InventoryProviderName = product.InventoryProviderName,
        }, new DistributedCacheEntryOptions()
        {
            AbsoluteExpiration = expirationTime
        });
    }
Ejemplo n.º 13
0
        protected virtual Task <string> GenerateSkuDescriptionAsync(ProductDto product, ProductSkuDto productSku)
        {
            var attributeOptionIds = _jsonSerializer.Deserialize <Guid[]>(productSku.SerializedAttributeOptionIds);

            var names = new Collection <string[]>();

            foreach (var attributeOptionId in attributeOptionIds)
            {
                names.Add(product.ProductAttributes.SelectMany(
                              attribute => attribute.ProductAttributeOptions.Where(option => option.Id == attributeOptionId),
                              (attribute, option) => new [] { attribute.DisplayName, option.DisplayName }).Single());
            }

            return(Task.FromResult(_jsonSerializer.Serialize(names)));
        }