Example #1
0
        public static async Task <IEnumerable <ActivityPriceModel> > FetchActivityProductPrice(ActivityPriceRequest request)
        {
            var data = request.Items.Where(g => !string.IsNullOrWhiteSpace(g.PID))
                       .GroupBy(g => g.ActicityId)
                       .Select(g => new ProductActivityType {
                ActivityId = g.Key, PIDs = g.Select(t => t.PID).ToList()
            });
            var result = new List <ActivityPriceModel>();

            if (data.Any())
            {
                var types = ActivityManager.SelectActivityTypeByActivityIds(data.Select(g => g.ActivityId).ToList()).Where(g => g != null);
                foreach (var item in data)
                {
                    var type = types.FirstOrDefault(g => g.ActivityId == item.ActivityId);

                    //拼团
                    if (type == null && await GroupBuyingManager.CheckProductGroupId(item.ActivityId))
                    {
                        type = new ActivityTypeModel {
                            ActivityId = item.ActivityId, Type = 7
                        };
                    }

                    if (type == null)
                    {
                        continue;
                    }
                    if (type.Type == 1)
                    {
                        var dat = await DalBargain.SelectProductActivityPrice(item.ActivityId, item.PIDs);

                        if (dat == null || dat.Count() != item.PIDs.Count)
                        {
                            return(null);
                        }
                        result.AddRange(dat);
                    }
                    else if (type.Type == 9)
                    {
                        if (request.UserId == Guid.Empty)
                        {
                            break;
                        }
                        var userId = request.UserId;
                        foreach (var pid in item.PIDs)
                        {
                            result.Add(await DalBargain.FetchBargainPrice(pid, userId));
                        }
                    }
                    else if (type.Type == 7)
                    {
                        // 拼团
                        if (request.UserId == Guid.Empty)
                        {
                            break;
                        }
                        foreach (var pid in item.PIDs)
                        {
                            if (request.GroupId == Guid.Empty)
                            {
                                var priceInfo = await DalFlashSale.FetchGroupBuyingPrtoductPrice(item.ActivityId, pid, Logger);

                                if (await DalFlashSale.CheckFreeCouponInfo(item.ActivityId, request.UserId))
                                {
                                    priceInfo.ActivityPrice = 0;
                                    Logger.Info($"GroupBuyingFreeCoupon==>{request.UserId:D}/{item.ActivityId:D}/{pid}==>符合团长免单==>活动价为0");
                                }
                                result.Add(priceInfo);
                            }
                            else
                            {
                                var dat = await DalFlashSale.FetchGroupBuyingPrice(pid, request.UserId, request.GroupId, Logger);

                                if (dat.Code == 0)
                                {
                                    return(null);
                                }
                                result.Add(dat);
                            }
                        }
                    }
                }
            }
            return(result);
        }
        public async Task <OperationResult <IEnumerable <ActivityPriceModel> > > FetchActivityProductPriceAsync(ActivityPriceRequest request)
        {
            if (request.Items.Count < 1)
            {
                return(OperationResult.FromError <IEnumerable <ActivityPriceModel> >(ErrorCode.ParameterError, "参数不正确"));
            }
            var result = await FlashSaleCreateOrderManager.FetchActivityProductPrice(request);

            if (result == null)
            {
                return(OperationResult.FromError <IEnumerable <ActivityPriceModel> >(ErrorCode.ParameterError, "该商品未找到活动价"));
            }
            return(OperationResult.FromResult(result));
        }