Esempio n. 1
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var success = await _productBiz.CreateProductAsync(request.ProductInfo);

                return(Unit.Value);
            }
        public async Task <IActionResult> CreateServiceProductAsync([FromBody] CreateServiceProductRequestDto requestDto)
        {
            if (string.IsNullOrEmpty(requestDto.PictureGuid))
            {
                return(Failed(ErrorCode.Empty, "封面图片未上传"));
            }

            var merchantModel = await new MerchantBiz().GetModelAsync(UserID);

            if (merchantModel == null)
            {
                return(Failed(ErrorCode.Empty, "未查询到此商铺数据"));
            }

            var productBiz = new ProductBiz();

            var checkProductName = await productBiz.CheckProductNameRepeatAsync(requestDto.ProductName, UserID);

            if (checkProductName)
            {
                return(Failed(ErrorCode.UserData, $"已存在“{requestDto.ProductName}”同名产品,请检查"));
            }

            List <ProductModel> productModels = new List <ProductModel>();

            List <ProductProjectModel> productProjectModels = new List <ProductProjectModel>();

            List <RichtextModel> richtextModels = new List <RichtextModel>();

            List <BannerModel> bannerModels = new List <BannerModel>();

            var productGuid = Guid.NewGuid().ToString("N");

            List <RichtextModel> richtexts = new List <RichtextModel>();

            //商品介绍富文本
            var introduceTextModel = new RichtextModel
            {
                TextGuid      = Guid.NewGuid().ToString("N"),
                OwnerGuid     = productGuid,
                Content       = requestDto.Introduce,
                CreatedBy     = UserID,
                LastUpdatedBy = UserID,
                OrgGuid       = string.Empty
            };

            //商品详情富文本
            var detailTextModel = new RichtextModel
            {
                TextGuid      = Guid.NewGuid().ToString("N"),
                OwnerGuid     = productGuid,
                Content       = requestDto.ProductDetail,
                CreatedBy     = UserID,
                LastUpdatedBy = UserID,
                OrgGuid       = string.Empty
            };

            richtexts.AddRange(new List <RichtextModel> {
                introduceTextModel, detailTextModel
            });
            richtextModels.AddRange(richtexts);

            List <BannerModel> banners = new List <BannerModel>();

            var sort = 1;

            foreach (var item in requestDto.Banners)
            {
                banners.Add(new BannerModel
                {
                    BannerGuid    = Guid.NewGuid().ToString("N"),
                    OwnerGuid     = productGuid,
                    PictureGuid   = item.PictureGuid,
                    TargetUrl     = item.TargetUrl,
                    Sort          = sort,
                    BannerName    = string.IsNullOrWhiteSpace(item.BannerName) ? $"banner{sort}" : item.BannerName,
                    Description   = item.Description,
                    CreatedBy     = UserID,
                    LastUpdatedBy = UserID,
                    OrgGuid       = string.Empty
                });
                sort++;
            }

            bannerModels.AddRange(banners);

            var productModel = new ProductModel
            {
                ProductGuid      = productGuid,
                ProductCode      = Guid.NewGuid().ToString("N"),
                ProductTitle     = requestDto.ProductTitle,
                MerchantGuid     = UserID,
                CategoryGuid     = requestDto.CategoryGuid,
                CategoryName     = requestDto.CategoryName,
                PictureGuid      = requestDto.PictureGuid,
                ProductName      = requestDto.ProductName,
                Price            = requestDto.Price,
                IntroduceGuid    = introduceTextModel.TextGuid,
                ProDetailGuid    = detailTextModel.TextGuid,
                OnSale           = requestDto.OnSale,
                CreatedBy        = UserID,
                LastUpdatedBy    = UserID,
                OrgGuid          = "",
                ProductForm      = ProductFormEnum.Service.ToString(),
                PlatformType     = merchantModel.PlatformType,
                EffectiveDays    = requestDto.EffectiveDays,
                ProjectThreshold = requestDto.ProjectThreshold,
                Recommend        = requestDto.Recommend
            };

#warning 因未开通线上支付,现所有商品均为可预付款,预付款比例为0,即所有商品金额均到店支付

            productModels.Add(productModel);
            List <ProductProjectModel> productProjects = new List <ProductProjectModel>();
            if (requestDto.ProjectGuids != null)
            {
                productProjects.AddRange(requestDto.ProjectGuids.Select(a => new ProductProjectModel
                {
                    ProductProjectGuid = Guid.NewGuid().ToString("N"),
                    ProductGuid        = productModel.ProductGuid,
                    ProjectGuid        = a.ProjectGuid,
                    ProjectTimes       = a.Infinite ? 999 : a.ProjectTimes,
                    PlatformType       = merchantModel.PlatformType,
                    CreatedBy          = UserID,
                    LastUpdatedBy      = UserID,
                    OrgGuid            = ""
                }).ToList());
            }

            productProjectModels.AddRange(productProjects);

            var result = await productBiz.CreateProductAsync(productModels, richtextModels, bannerModels, productProjectModels);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "创建产品失败"));
        }