コード例 #1
0
        private void AddItemsRecursive(NodeContentBase nodeContent, PromotionItems itemsOnPromotion, List <CatalogContentBase> conditionProducts)
        {
            foreach (var child in _contentLoader.GetChildren <CatalogContentBase>(nodeContent.ContentLink))
            {
                AddIfProduct(child, conditionProducts);

                var childNode = child as NodeContentBase;
                if (childNode != null && itemsOnPromotion.Condition.IncludesSubcategories)
                {
                    AddItemsRecursive(childNode, itemsOnPromotion, conditionProducts);
                }
            }
        }
コード例 #2
0
        private IEnumerable <CatalogContentBase> GetProductsForPromotion(PromotionItems itemsOnPromotion)
        {
            var conditionProducts = new List <CatalogContentBase>();

            foreach (var conditionItemReference in itemsOnPromotion.Condition.Items)
            {
                var conditionItem = _contentLoader.Get <CatalogContentBase>(conditionItemReference);
                AddIfProduct(conditionItem, conditionProducts);

                var nodeContent = conditionItem as NodeContentBase;
                if (nodeContent != null)
                {
                    AddItemsRecursive(nodeContent, itemsOnPromotion, conditionProducts);
                }
            }

            return(conditionProducts);
        }
コード例 #3
0
        /// <summary>
        /// 根据商品id获取活动类型
        /// </summary>
        /// <param name="commodityId"></param>
        /// <returns></returns>
        public int JudgeActivityTypeExt(Guid commodityId)
        {
            try
            {
                DateTime now = DateTime.Now;

                List <TodayPromotionDTO> s = (from p in PromotionItems.ObjectSet()
                                              join pro in Promotion.ObjectSet() on p.PromotionId equals pro.Id
                                              where p.CommodityId == commodityId && !pro.IsDel && pro.IsEnable &&
                                              pro.EndTime >= now && (pro.StartTime <= now || pro.PresellStartTime <= now)
                                              orderby pro.PromotionType descending
                                              select new TodayPromotionDTO()
                {
                    PromotionType = pro.PromotionType,
                }).ToList();
                int proList = 0;
                if (s != null)
                {
                    foreach (var item in s)
                    {
                        proList = item.PromotionType;
                    }
                }
                else
                {
                    proList = 9;
                }

                return(proList);
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("获取商品活动类型异常{0}", commodityId), ex);
                throw;
            }
        }
コード例 #4
0
        /// <summary>
        /// 根据用户ID查询收藏商品
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public System.Collections.Generic.List <Jinher.AMP.BTP.Deploy.CustomDTO.CommodityListCDTO> GetCollectionComsExt(SetCollectionSearchDTO search)
        {
            DateTime now = DateTime.Now;
            List <CommodityListCDTO> result = new List <CommodityListCDTO>();

            try
            {
                if (search == null || search.UserId == Guid.Empty || search.ChannelId == Guid.Empty || search.PageIndex < 1 || search.PageSize < 1)
                {
                    return(result);
                }

                var commodityList = (from setCollection in SetCollection.ObjectSet()
                                     join commodity in Commodity.ObjectSet() on setCollection.ColKey equals commodity.Id
                                     where setCollection.ColType == 1 && setCollection.UserId == search.UserId && commodity.IsDel == false && commodity.State == 0 && commodity.CommodityType == 0 && setCollection.ChannelId == search.ChannelId
                                     orderby setCollection.SubTime descending
                                     select new CommodityListCDTO
                {
                    Id = commodity.Id,
                    Pic = commodity.PicturesPath,
                    Price = commodity.Price,
                    State = commodity.State,
                    Stock = commodity.Stock,
                    Name = commodity.Name,
                    MarketPrice = commodity.MarketPrice,
                    AppId = commodity.AppId,
                    ComAttrType = (commodity.ComAttribute == "[]" || commodity.ComAttribute == null) ? 1 : 3
                }).Skip((search.PageIndex - 1) * search.PageSize)
                                    .Take(search.PageSize).ToList();
                if (!commodityList.Any())
                {
                    return(result);
                }
                var appIds = commodityList.Select(c => c.AppId).Distinct().ToList();

                #region 众筹
                if (CustomConfig.CrowdfundingFlag)
                {
                    var cfAppIds = Crowdfunding.ObjectSet().Where(c => appIds.Contains(c.AppId) && c.StartTime < now && c.State == 0).Select(m => m.AppId).ToList();
                    if (cfAppIds.Any())
                    {
                        foreach (var commodityListCdto in commodityList)
                        {
                            if (cfAppIds.Any(c => c == commodityListCdto.AppId))
                            {
                                commodityListCdto.IsActiveCrowdfunding = true;
                            }
                        }
                    }
                }
                #endregion

                List <Guid> commodityIds = commodityList.Select(c => c.Id).ToList();
                var         promotionDic = (from p in PromotionItems.ObjectSet()
                                            join pro in Promotion.ObjectSet() on p.PromotionId equals pro.Id
                                            where commodityIds.Contains(p.CommodityId) && !pro.IsDel && pro.IsEnable && (pro.StartTime <= now || pro.PresellStartTime <= now) && pro.EndTime >= now
                                            select new
                {
                    ComId = p.CommodityId,
                    Intensity = (decimal)p.Intensity,
                    DiscountPrice = (decimal)p.DiscountPrice,
                    StartTime = pro.StartTime,
                    EndTime = pro.EndTime,
                    PresellStartTime = pro.PresellStartTime,
                    PresellEndTime = "",
                    LimitBuyEach = p.LimitBuyEach,
                    LimitBuyTotal = p.LimitBuyTotal,
                    SurplusLimitBuyTotal = p.SurplusLimitBuyTotal,
                    PromotionType = pro.PromotionType
                }
                                            ).Distinct();

                foreach (var commodity in commodityList)
                {
                    var promotion = promotionDic.FirstOrDefault(c => c.ComId == commodity.Id);
                    if (promotion != null)
                    {
                        commodity.LimitBuyEach         = promotion.LimitBuyEach ?? -1;
                        commodity.LimitBuyTotal        = promotion.LimitBuyTotal ?? -1;
                        commodity.SurplusLimitBuyTotal = promotion.SurplusLimitBuyTotal ?? 0;
                        if (promotion.DiscountPrice > -1)
                        {
                            commodity.DiscountPrice = Convert.ToDecimal(promotion.DiscountPrice);
                            commodity.Intensity     = 10;
                            continue;
                        }

                        commodity.DiscountPrice = -1;
                        commodity.Intensity     = promotion.Intensity;
                        commodity.PromotionType = promotion.PromotionType;
                    }
                    else
                    {
                        commodity.DiscountPrice        = -1;
                        commodity.Intensity            = 10;
                        commodity.LimitBuyEach         = -1;
                        commodity.LimitBuyTotal        = -1;
                        commodity.SurplusLimitBuyTotal = -1;
                        commodity.PromotionType        = 9999;
                    }
                }
                return(commodityList);
            }
            catch (Exception e)
            {
                LogHelper.Error("SetCollectionSV.GetCollectionComsExt,获取收藏商品列表查询错误" + e);
                return(new List <CommodityListCDTO>());
            }
        }
        /* RewardDescription is "checking" whether the promotion was fulfilled (or not, or partially),
         *  ...which items the promotion was applied to...
         *  ...the fake-cart is taken care of)
         * PromotionProcessorBase has one abstract method to be implemented, Evaluate.
         * ...the method is supplied with a PromotionData, and a PromotionProcessorContext object
         * ...that contains information about the current order/fakeCart.
         */

        protected override RewardDescription Evaluate( // note: it's OrderForm now...
            MyPercentagePromotion promotionData        // the model --> look in the UI to see the properties
            , PromotionProcessorContext context)
        {
            /* A reward description contains information about if and how a reward is applied.
             * ...some properties are:
             *   - A list of redemption descriptions, one for each of the maximum amount of redemptions
             *      ...that could be applied to the current order.
             *     This does not have to take redemption limits into consideration, that is handled by the
             *      promotion engine.
             *   - A reward type. Depending on the type, the promotion value is read from the properties
             *      UnitDiscount, Percentage or Quantity.
             *   - A status flag. Indicates if a promotion is not, partially, or fully fulfilled.
             *   - A saved amount. The amount by which this reward reduces the order cost.
             *      Is set by the promotion engine; should not be set in the promotion processor*/

            IOrderForm orderForm = context.OrderForm; // OrderForm now pops in with the context
            //context. // lots of things
            IEnumerable <ILineItem> lineItemsCheck = orderForm.GetAllLineItems();
            IEnumerable <ILineItem> lineItems      = GetLineItems(context.OrderForm);

            #region Just Checking

            //var e = _contentLoader.Get<EntryContentBase>(item0);

            //should check if it's applicable... at all

            //var li = _orderFactory.Service.CreateLineItem(e.Code);
            //li.Quantity = 1;
            //li.PlacedPrice = 15;
            //orderForm.Shipments.First().LineItems.Add(li);

            #endregion

            // GetFulfillmentStatus - extension method
            FulfillmentStatus status = promotionData.MinNumberOfItems.GetFulfillmentStatus(
                orderForm, _targetEvaluator, _fulfillmentEvaluator);

            List <RewardDescription>     rewardDescriptions     = new List <RewardDescription>();
            List <RedemptionDescription> redemptionDescriptions = new List <RedemptionDescription>();

            #region NewStuff

            // The below does not see the cart, it's for landing pages for the Promotion itself (rendering)
            PromotionItems promoItems = GetPromotionItems(promotionData); // gets null

            var condition = promotionData.PercentageDiscount;             // ...in the model
            var targets   = promotionData.DiscountTargets;                // get one in any case, points to what's at "promo"

            var skuCodes = _targetEvaluator.GetApplicableCodes(
                lineItems, targets.Items, targets.MatchRecursive); // get one if kicked in, 0 if not

            var fulfillmentStatus = _fulfillmentEvaluator.GetStatusForBuyQuantityPromotion(
                skuCodes
                , lineItems
                , promotionData.MinNumberOfItems.RequiredQuantity
                , promotionData.PartialFulfillmentNumberOfItems);

            // Just checking
            // The promotion engine creates a "price matrix" for all items in the order form.
            // OrderFormPriceMatrix, is accessible through the EntryPrices property
            //   of the PromotionProcessorContext object.
            // PromotionProcessorContext is passed to the Evaluate method as one of the arguments.
            //  ...the matrix holds "codes" and quantity
            // The second ExtractEntries call starts to receive entries where the first call ended.
            //   ... makes it easy to create several redemptions by calling ExtractEntries in a loop,
            //   ... and create one RedemptionDescription inside the loop.
            // The price matrix has one public method (ExtractEntries)
            //   ... two overloads, both overloads takes entry codes and quantity as parameters.
            //   ... one contains an action for getting the entries in a specific order.
            //   ... if no specific order is specified, MostExpensiveFirst is used.
            var affectedEntries = context.EntryPrices.ExtractEntries(
                skuCodes,
                1); // get one if it kicks in, null if not

            if (affectedEntries != null)
            {
                IEnumerable <PriceEntry> priceEntries = affectedEntries.PriceEntries;
                foreach (var item in priceEntries)
                {
                    var qty     = item.Quantity;
                    var price   = item.Price;
                    var calc    = item.CalculatedTotal; // involves the Qty
                    var actuals = item.ActualTotal;     // includes rounding
                }
            }

            // could have a look here
            switch (fulfillmentStatus)
            {
            case FulfillmentStatus.NotFulfilled:
                break;

            case FulfillmentStatus.PartiallyFulfilled:
                break;

            case FulfillmentStatus.Fulfilled:
                break;

            case FulfillmentStatus.CouponCodeRequired:
                break;

            case FulfillmentStatus.Excluded:
                break;

            case FulfillmentStatus.VisitorGroupRequired:
                break;

            case FulfillmentStatus.RedemptionLimitReached:
                break;

            case FulfillmentStatus.NoMoneySaved:
                break;

            case FulfillmentStatus.InvalidCoupon:
                break;

            case FulfillmentStatus.InvalidCombination:
                break;

            case FulfillmentStatus.MissingVisitorGroup:
                break;

            case FulfillmentStatus.NoRedemptionRemaining:
                break;

            case FulfillmentStatus.Ineffective:
                break;

            default:
                break;
            }

            // ... an extension method
            return(RewardDescription.CreatePercentageReward(
                       fulfillmentStatus
                       , GetRedemptions(skuCodes, promotionData, context)
                       , promotionData
                       , promotionData.PercentageDiscount.Percentage
                       //, fulfillmentStatus.GetRewardDescriptionText()
                       , fulfillmentStatus.GetRewardDescriptionText() + " : " + promotionData.Description + " : "
                       ));

            #endregion

            #region Older stuff and debug - no show

            #region Older not in use

            //RewardDescription rewardDescription = new RewardDescription();

            //var codes = _targetEvaluator.GetApplicableCodes(lineItems,)

            //_fulfillmentEvaluator.GetStatusForBuyQuantityPromotion(
            //    )

            #endregion // new stuff

            #region Previous version

            //if (status.HasFlag(FulfillmentStatus.Fulfilled))
            //{
            //    return RewardDescription.CreateMoneyOrPercentageRewardDescription(
            //        status,
            //        redemptionDescriptions,
            //        promotionData,
            //        promotionData.PercentageDiscount,
            //        context.OrderGroup.Currency,
            //        "Custom promotion fulfilled"); // should have a more flexible way... GetDescription()

            //}
            //else
            //{
            //    return RewardDescription.CreateNotFulfilledDescription(
            //        promotionData, FulfillmentStatus.NotFulfilled);
            //}


            #endregion

            #region Debug

            //RedemptionDescription rFirst;
            //redemptionDescriptions.Add(CreateRedemptionDescriptionText(orderForm));

            // below "if-construct" is for debug
            //if (promotionData.PercentageDiscount <= 0) // ... return "sorry, no discount"
            //{
            //    return RewardDescription.CreatePercentageReward(
            //        FulfillmentStatus.NotFulfilled,
            //        redemptionDescriptions,
            //        promotionData,
            //        0,
            //        CreateRewardDescriptionText(redemptionDescriptions.First(), FulfillmentStatus.NotFulfilled, promotionData));

            //    /*RewardDescription.CreateMoneyOrPercentageRewardDescription(FulfillmentStatus.NotFulfilled,r,promotionData,null);*/
            //}

            //IEnumerable<ContentReference> targetItems = promotionData.DiscountTargets.Items.ToList(); // set by the Promo-UI

            //bool matchRecursive = true; // walking down the catalog hierarchy
            //var lineItems = GetLineItems(orderForm); // "GetLineItems" - in the base class (PromotionProcessorBase)
            //var affectedItems = _targetEvaluator.GetApplicableItems(lineItems, targetItems, matchRecursive); // in CollectionTargetEvaluator
            //var affectedItems = _targetEvaluator.GetApplicableCodes(orderForm.GetAllLineItems(), targetItems, false);


            // small class --> just to get the status by the settings
            //var status = FulfillmentEvaluator.GetStatusForBuyQuantityPromotion(affectedItems.Select(x => x.LineItem)
            //  , promotionData.MinNumberOfItems, promotionData.PartialFulfillmentNumberOfItems); // in the model
            //var s = FulfillmentEvaluator.

            //FulfillmentEvaluator ff = new FulfillmentEvaluator();

            //if (rewardDescriptions.Any())
            //{
            //    return rewardDescriptions.First();
            //}
            //else
            //{
            //    return null;
            //}


            /*return RewardDescription.CreateMoneyOrPercentageRewardDescription(
             *  status,
             *  affectedItems,
             *  promotionData,
             *  promotionData.PercentageDiscount,
             *  GetRewardDescriptionText(affectedItems, status, promotionData));*/

            #endregion

            #endregion
        } // end RewardDescription
コード例 #6
0
        /// <summary>
        /// 获取订单中的商品列表
        /// </summary>
        /// <param name="Code"></param>
        /// <returns></returns>
        public OrderForShareDTO GetOrderCommoditysExt(System.Guid orderId)
        {
            OrderForShareDTO orderForShareDTO = new OrderForShareDTO();

            //查询订单信息
            var order = CommodityOrder.ObjectSet().Where(o => o.Id == orderId).FirstOrDefault();

            if (order == null)
            {
                return(null);
            }

            Guid userId = order.UserId;
            Guid appId  = order.AppId;

            orderForShareDTO.AppId = appId;

            //查询购买者信息
            CommodityUser userInfo = CommodityUser.ObjectSet().Where(u => u.Id == userId && u.AppId == appId).FirstOrDefault();

            if (userInfo != null)
            {
                orderForShareDTO.UserName  = userInfo.Name;
                orderForShareDTO.UserPhoto = userInfo.HeadPic;
            }

            //查询订单中商品数量
            var count = OrderItem.ObjectSet().Where(o => o.CommodityOrderId == orderId).Sum(o => o.Number);

            orderForShareDTO.Count = count;

            //查询订单中随机的一件商品
            OrderItem orderitem = OrderItem.ObjectSet().Where(o => o.CommodityOrderId == orderId).FirstOrDefault();

            if (orderitem != null)
            {
                Commodity commodity = Commodity.ObjectSet().Where(o => o.Id == orderitem.CommodityId).FirstOrDefault();
                orderForShareDTO.RealPrice = orderitem.RealPrice;
                orderForShareDTO.Days      = 0;
                // 获取距离促销还剩下多少天
                var days = (from i in Promotion.ObjectSet()
                            join y in PromotionItems.ObjectSet()
                            on i.Id equals y.PromotionId
                            where DateTime.Now > i.StartTime && DateTime.Now < i.EndTime &&
                            y.CommodityId == orderitem.CommodityId && !i.IsDel && i.IsEnable
                            select new PromotionSDTO
                {
                    EndTime = i.EndTime
                }).ToList();

                if (days.Count > 0)
                {
                    TimeSpan ts = days[0].EndTime - DateTime.Now;
                    if (ts.TotalSeconds > 0)
                    {
                        if (ts.TotalSeconds % (3600 * 24) > 0)
                        {
                            orderForShareDTO.Days = ts.Days + 1;
                        }
                        else
                        {
                            orderForShareDTO.Days = ts.Days;
                        }
                    }
                }
                if (commodity != null)
                {
                    orderForShareDTO.CommodityDTO = commodity.ToEntityData();
                }
            }

            return(orderForShareDTO);
        }
コード例 #7
0
        /// <summary>
        /// 成团自动退款 -- JOB调用
        /// </summary>
        /// <returns></returns>
        public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO VoluntarilyRefundDiyGroupExt()
        {
            try
            {
                ContextSession contextSession = ContextFactory.CurrentThreadContext;
                //获取所有组团未成功,但是没有手动退款的拼团订单
                var diyQuery = (from diy in DiyGroup.ObjectSet()
                                join c in Commodity.ObjectSet() on diy.CommodityId equals c.Id
                                join ps in PromotionItems.ObjectSet() on c.Id equals ps.CommodityId
                                join p in Promotion.ObjectSet() on ps.PromotionId equals p.Id
                                where diy.JoinNumber != 0 && diy.PromotionId == p.Id && diy.State == 4
                                select new DiyGroupManageVM
                {
                    DiyId = diy.Id,
                    AppId = diy.EsAppId
                });
                diyQuery = diyQuery.Distinct();

                List <DiyGroupConfig> list = new List <DiyGroupConfig>();
                foreach (var diyGroupManageVm in diyQuery)
                {
                    DiyGroupConfigCDTO diyGroupConfig;
                    if (list.Count > 0 && list.Any(t => t.EsAppId == diyGroupManageVm.AppId))
                    {
                        diyGroupConfig = list.FirstOrDefault(t => t.EsAppId == diyGroupManageVm.AppId).DiyGroupConfigCdto;
                    }
                    else
                    {
                        diyGroupConfig = TPS.ZPHSV.Instance.GetDiyGroupConfig(diyGroupManageVm.AppId);
                        DiyGroupConfig diyGroupConfigBp = new DiyGroupConfig
                        {
                            EsAppId            = diyGroupManageVm.AppId,
                            DiyGroupConfigCdto = diyGroupConfig
                        };
                        list.Add(diyGroupConfigBp);
                    }

                    if (diyGroupConfig.IsRefund)
                    {
                        var query = DiyGroup.ObjectSet().FirstOrDefault(n => n.Id == diyGroupManageVm.DiyId && n.EsAppId == diyGroupManageVm.AppId);
                        if (query != null)
                        {
                            query.State       = 5;
                            query.ModifiedOn  = DateTime.Now;
                            query.EntityState = EntityState.Modified;
                        }
                    }
                }
                contextSession.SaveChange();
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("成团自动退款 -- JOB调用"), ex);
                return(new ResultDTO {
                    ResultCode = 1, Message = "Error"
                });
            }
            return(new ResultDTO {
                ResultCode = 0, Message = "Success"
            });
        }
コード例 #8
0
        /// <summary>
        /// 获取拼团详情
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupDetailDTO> GetDiyGroupDetailExt(Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupDetailSearchDTO search)
        {
            ResultDTO <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupDetailDTO> result = new ResultDTO <DiyGroupDetailDTO>();

            if (search == null || search.DiyGoupId == Guid.Empty)
            {
                result.ResultCode = 1;
                result.Message    = "参数错误";
                return(result);
            }
            var query = (from dg in DiyGroup.ObjectSet()
                         join c in Commodity.ObjectSet() on dg.CommodityId equals c.Id
                         join p in Promotion.ObjectSet() on dg.PromotionId equals p.Id
                         where dg.Id == search.DiyGoupId
                         select new
            {
                DiyGroup = dg,
                Commodity = c,
                Promotion = p
            }).FirstOrDefault();

            if (query == null || query.Commodity == null || query.DiyGroup == null || query.Promotion == null)
            {
                result.ResultCode = 2;
                result.Message    = "没有获取到相应的拼团详情";
                return(result);
            }
            var commodity     = query.Commodity;
            var diyGroup      = query.DiyGroup;
            var promotion     = query.Promotion;
            var promotionItem = PromotionItems.ObjectSet().Where(t => t.PromotionId == diyGroup.PromotionId).FirstOrDefault();

            if (promotionItem == null)
            {
                result.ResultCode = 2;
                result.Message    = "没有获取到相应的拼团详情";
                return(result);
            }
            var productDetailPicture = ProductDetailsPicture.ObjectSet().Where(n => n.CommodityId == commodity.Id).OrderBy(n => n.Sort).Select(c => c.PicturesPath).FirstOrDefault();

            result.Data = new DiyGroupDetailDTO()
            {
                Id                 = diyGroup.Id,
                Name               = diyGroup.Name,
                Code               = diyGroup.Code,
                SubTime            = diyGroup.SubTime,
                SubId              = diyGroup.SubId,
                AppId              = diyGroup.AppId,
                CommodityId        = diyGroup.CommodityId,
                PromotionId        = diyGroup.PromotionId,
                ModifiedOn         = diyGroup.ModifiedOn,
                ExpireTime         = diyGroup.ExpireTime,
                State              = diyGroup.State,
                JoinNumber         = diyGroup.JoinNumber,
                SuccessProcessorId = diyGroup.SuccessProcessorId,
                SuccessTime        = diyGroup.SuccessTime,
                FailProcessorId    = diyGroup.FailProcessorId,
                FailTime           = diyGroup.FailTime,
                EsAppId            = diyGroup.EsAppId,
                //commodity
                PicturesPath         = commodity.PicturesPath,
                CommodityName        = commodity.Name,
                ProductDetailPicture = productDetailPicture,
                //promotion
                StartTime      = promotion.StartTime,
                EndTime        = promotion.EndTime,
                GroupMinVolume = promotion.GroupMinVolume ?? -1,
                ExpireSecond   = promotion.ExpireSecond ?? -1,
                Description    = promotion.Description,
                OutsideId      = promotion.OutsideId.Value,
                //promotionitem
                LimitBuyEach         = promotionItem.LimitBuyEach ?? -1,
                LimitBuyTotal        = promotionItem.LimitBuyTotal ?? -1,
                DiscountPrice        = promotionItem.DiscountPrice,
                SurplusLimitBuyTotal = promotionItem.SurplusLimitBuyTotal ?? -1
            };
            result.Data.DiyGroupOrderList = new List <DiyGroupOrderDetailDTO>();
            var diyGroupOrder = (from dgOrder in DiyGroupOrder.ObjectSet()
                                 join co in CommodityOrder.ObjectSet() on dgOrder.OrderId equals co.Id
                                 where dgOrder.DiyGroupId == search.DiyGoupId && (dgOrder.Role == 0 || dgOrder.Role == 1 && dgOrder.State == 1)
                                 orderby dgOrder.SubTime ascending
                                 select new DiyGroupOrderDetailDTO
            {
                Id = dgOrder.Id,
                SubTime = dgOrder.SubTime,
                SubId = dgOrder.SubId,
                AppId = dgOrder.AppId,
                OrderId = dgOrder.OrderId,
                OrderCode = dgOrder.OrderCode,
                Role = dgOrder.Role,
                DiyGroupId = dgOrder.DiyGroupId,
                SubCode = dgOrder.SubCode,
                ModifiedOn = dgOrder.ModifiedOn,
                DiyGroupPrice = (decimal)co.RealPrice
            }).ToList();

            result.Data.DiyGroupOrderList.AddRange(diyGroupOrder);

            //提取用户信息
            var userIdList   = result.Data.DiyGroupOrderList.Select(t => t.SubId).ToList();
            var userInfolist = CBCSV.Instance.GetUserInfoWithAccountList(userIdList);

            if (userInfolist != null && userInfolist.Count > 0)
            {
                foreach (var item in result.Data.DiyGroupOrderList)
                {
                    var tmpUserInfo = userInfolist.Where(t => t.UserId == item.SubId).FirstOrDefault();
                    if (tmpUserInfo != null)
                    {
                        item.UserCode    = CBCSV.EncodeUserCode(tmpUserInfo.Account);
                        item.UserPicture = tmpUserInfo.HeadIcon;
                    }
                }
            }

            //var diyHeadOrder = diyGroupOrder.Where(t => t.Role == 0).FirstOrDefault();
            //if (diyHeadOrder != null && diyHeadOrder.State == 0)
            //{
            //    result.Data.JoinNumber = result.Data.JoinNumber + 1;
            //}

            //系统当前时间,倒计时用
            result.Data.DateTimeNow = DateTime.Now;
            return(result);
        }
コード例 #9
0
        /// <summary>
        /// 自动确认成团 -- JOB调用
        /// </summary>
        /// <returns></returns>
        public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO VoluntarilyConfirmDiyGroupExt()
        {
            try
            {
                ContextSession contextSession = ContextFactory.CurrentThreadContext;
                //获取所有组团成功,但是没有手动成团的拼团订单
                var diyQuery = (from diy in DiyGroup.ObjectSet()
                                join c in Commodity.ObjectSet() on diy.CommodityId equals c.Id
                                join ps in PromotionItems.ObjectSet() on c.Id equals ps.CommodityId
                                join p in Promotion.ObjectSet() on ps.PromotionId equals p.Id
                                where diy.JoinNumber != 0 && diy.PromotionId == p.Id && diy.State == 2
                                select new DiyGroupManageVM
                {
                    DiyId = diy.Id,
                    AppId = diy.EsAppId
                });
                diyQuery = diyQuery.Distinct();

                List <DiyGroupConfig> list = new List <DiyGroupConfig>();
                foreach (var diyGroupManageVm in diyQuery)
                {
                    DiyGroupConfigCDTO diyGroupConfig;
                    if (list.Count > 0 && list.Any(t => t.EsAppId == diyGroupManageVm.AppId))
                    {
                        diyGroupConfig = list.FirstOrDefault(t => t.EsAppId == diyGroupManageVm.AppId).DiyGroupConfigCdto;
                    }
                    else
                    {
                        diyGroupConfig = TPS.ZPHSV.Instance.GetDiyGroupConfig(diyGroupManageVm.AppId);
                        DiyGroupConfig diyGroupConfigBp = new DiyGroupConfig
                        {
                            EsAppId            = diyGroupManageVm.AppId,
                            DiyGroupConfigCdto = diyGroupConfig
                        };
                        list.Add(diyGroupConfigBp);
                    }

                    if (diyGroupConfig.IsClustering)
                    {
                        var query = (from diyGroup in DiyGroup.ObjectSet()
                                     join diyGroupOrder in DiyGroupOrder.ObjectSet() on diyGroup.Id equals diyGroupOrder.DiyGroupId
                                     join order in CommodityOrder.ObjectSet() on diyGroupOrder.OrderId equals order.Id
                                     where diyGroup.Id == diyGroupManageVm.DiyId && diyGroupOrder.State == 1 && diyGroup.State == 2
                                     select order
                                     ).ToList();

                        if (query.Count > 0)
                        {
                            foreach (var diyorder in query)
                            {
                                diyorder.State       = 1;
                                diyorder.ModifiedOn  = DateTime.Now;
                                diyorder.EntityState = System.Data.EntityState.Modified;
                                contextSession.SaveObject(diyorder);
                                Jinher.AMP.BTP.BE.BELogic.AddMessage addmassage = new Jinher.AMP.BTP.BE.BELogic.AddMessage();
                                addmassage.AddMessages(diyorder.Id.ToString(), diyorder.UserId.ToString(), diyorder.AppId, diyorder.Code, diyorder.State, "", "order");
                                // 触发订单成功事件
                                OrderEventHelper.OnOrderPaySuccess(diyorder);
                            }
                        }
                        var diyquery = DiyGroup.ObjectSet().FirstOrDefault(n => n.Id == diyGroupManageVm.DiyId && n.EsAppId == diyGroupManageVm.AppId && n.State == 2);
                        if (diyquery != null)
                        {
                            diyquery.State       = 3;
                            diyquery.ModifiedOn  = DateTime.Now;
                            diyquery.EntityState = EntityState.Modified;
                            contextSession.SaveObject(diyquery);
                        }
                    }
                }
                contextSession.SaveChange();
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("自动确认成团 -- JOB调用异常"), ex);
                return(new ResultDTO {
                    ResultCode = 1, Message = "Error"
                });
            }
            return(new ResultDTO {
                ResultCode = 0, Message = "Success"
            });
        }
コード例 #10
0
        /// <summary>
        /// 我的拼团订单列表
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public List <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupOrderListDTO> GetDiyGroupListExt(Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupSearchDTO search)
        {
            List <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupOrderListDTO> resultlist = new List <DiyGroupOrderListDTO>();

            if (search == null)
            {
                return(resultlist);
            }
            search.PageIndex = search.PageIndex == 0 ? 1 : search.PageIndex;
            search.PageSize  = search.PageSize == 0 ? 20 : search.PageSize;

            var diyList = (from diy in DiyGroup.ObjectSet()
                           join pro in PromotionItems.ObjectSet() on diy.PromotionId equals pro.PromotionId
                           join p in Promotion.ObjectSet() on pro.PromotionId equals p.Id
                           join diyo in DiyGroupOrder.ObjectSet() on diy.Id equals diyo.DiyGroupId
                           join com in CommodityOrder.ObjectSet() on diyo.OrderId equals com.Id
                           where diy.EsAppId == search.EsAppId && com.UserId == search.UserId && diyo.State == 1 && diy.State != 0
                           orderby diyo.SubTime descending
                           select new DiyGroupOrderListDTO
            {
                Price = com.RealPrice,
                DiyGroupPrice = pro.DiscountPrice,
                SubTime = diyo.SubTime,
                DiyGroupState = diy.State,
                GroupMinVolume = p.GroupMinVolume ?? -1,
                JoinNumber = diy.JoinNumber,
                DiyGroupId = diy.Id,
                EsAppId = diy.EsAppId,
                OrderId = diyo.OrderId,
                DiyOrderSubTime = diyo.SubTime,
                ModifiedOn = diyo.ModifiedOn,
                EndTime = p.EndTime
            }).Skip((search.PageIndex - 1) * search.PageSize).Take(search.PageSize).ToList();

            var diyorderIds = diyList.Select(n => n.OrderId).ToList();

            if (diyList.Any())
            {
                var diyorderList = (from ord in OrderItem.ObjectSet()
                                    where diyorderIds.Contains(ord.CommodityOrderId)
                                    select new DiyGroupManageMM
                {
                    Pic = ord.PicturesPath,
                    Name = ord.Name,
                    DiyNumber = ord.Number,
                    DiyGroupOrderId = ord.CommodityOrderId,
                    attributes = ord.CommodityAttributes
                }).ToList();
                Dictionary <Guid, List <DiyGroupManageMM> > csdtoList = diyorderList.GroupBy(c => c.DiyGroupOrderId, (key, group) =>
                                                                                             new { DiyGroupOrderId = key, CommodityList = group })
                                                                        .ToDictionary(c => c.DiyGroupOrderId, c => c.CommodityList.ToList());
                var listAppIds = (from co in diyList select co.EsAppId).Distinct().ToList();
                Dictionary <Guid, string> dictAppName = APPSV.GetAppNameListByIds(listAppIds);

                foreach (var diyGroupOrder in diyList)
                {
                    if (csdtoList.ContainsKey(diyGroupOrder.OrderId))
                    {
                        var commodityDtoList = csdtoList[diyGroupOrder.OrderId];
                        diyGroupOrder.OrderDataList = commodityDtoList;
                    }
                    if (dictAppName != null && dictAppName.Count > 0 && dictAppName.ContainsKey(diyGroupOrder.EsAppId))
                    {
                        var appNameDto = dictAppName[diyGroupOrder.EsAppId];
                        diyGroupOrder.AppName = appNameDto;
                    }
                    resultlist.Add(diyGroupOrder);
                }
            }
            return(resultlist);
        }
コード例 #11
0
        /// <summary>
        /// 更新活动
        /// </summary>
        public ResultDTO UpdatePromotionExt(PresentPromotionCreateDTO input)
        {
            if (input.Id == Guid.Empty)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "参数错误"
                });
            }
            if (input.Commodities == null || input.Commodities.Count == 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "请选择主商品"
                });
            }
            if (input.Gifts == null || input.Gifts.Count == 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "请选择赠品"
                });
            }

            var comIds = input.Commodities.Select(_ => _.CommodityId);
            // 检查活动是否冲突
            // 该商品正在参与XX(秒杀、预约、预售、拼团、限时打折、赠品促销、套餐促销)活动,请更换商品或者更改活动时间
            var prop = (from item in PromotionItems.ObjectSet()
                        join pro in Promotion.ObjectSet() on item.PromotionId equals pro.Id
                        where
                        !pro.IsDel && (comIds.Contains(item.CommodityId) &&
                                       pro.EndTime >= input.BeginTime && pro.StartTime <= input.EndTime)
                        select pro).FirstOrDefault();

            if (prop != null)
            {
                var propName = "限时打折";
                switch (prop.PromotionType)
                {
                case 1:
                    propName = "秒杀";
                    break;

                case 2:
                    propName = "预约";
                    break;

                case 3:
                    propName = "拼团";
                    break;

                case 5:
                    propName = "预售";
                    break;
                }
                return(new ResultDTO {
                    isSuccess = false, Message = "该商品正在参与" + propName + "活动,请更换商品或者更改活动时间"
                });
            }
            var ppCount = PresentPromotionCommodity.ObjectSet().Where(_ => comIds.Contains(_.CommodityId)).Join(PresentPromotion.ObjectSet().Where(p => p.Id != input.Id && p.EndTime >= input.BeginTime && p.BeginTime <= input.EndTime), pc => pc.PresentPromotionId, p => p.Id, (pc, p) => 1).Count();

            if (ppCount > 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "该商品正在参与赠品促销活动,请更换商品或者更改活动时间"
                });
            }

            ContextSession contextSession = ContextFactory.CurrentThreadContext;

            try
            {
                var presentPromotion = PresentPromotion.FindByID(input.Id);
                if (presentPromotion == null)
                {
                    return(new ResultDTO {
                        isSuccess = false, Message = "参数错误"
                    });
                }
                var now = DateTime.Now;
                if (presentPromotion.IsEnd || now > presentPromotion.EndTime)
                {
                    return(new ResultDTO {
                        isSuccess = false, Message = "活动已结束"
                    });
                }
                if (presentPromotion.BeginTime < now && now < presentPromotion.EndTime)
                {
                    return(new ResultDTO {
                        isSuccess = false, Message = "活动已开始"
                    });
                }
                //presentPromotion.AppId = input.AppId;
                //presentPromotion.UserId = ContextDTO.LoginUserID;
                presentPromotion.Name      = input.Name;
                presentPromotion.BeginTime = input.BeginTime;
                presentPromotion.EndTime   = input.EndTime;
                presentPromotion.Limit     = input.Limit;
                presentPromotion.IsEnd     = false;
                contextSession.SaveObject(presentPromotion);

                foreach (var item in PresentPromotionCommodity.ObjectSet().Where(_ => _.PresentPromotionId == presentPromotion.Id))
                {
                    item.EntityState = System.Data.EntityState.Deleted;
                    contextSession.SaveObject(item);
                }
                foreach (var item in PresentPromotionGift.ObjectSet().Where(_ => _.PresentPromotionId == presentPromotion.Id))
                {
                    item.EntityState = System.Data.EntityState.Deleted;
                    contextSession.SaveObject(item);
                }

                foreach (var item in input.Commodities)
                {
                    PresentPromotionCommodity ppc = PresentPromotionCommodity.CreatePresentPromotionCommodity();
                    ppc.PresentPromotionId = presentPromotion.Id;
                    ppc.AppId            = input.AppId;
                    ppc.UserId           = ContextDTO.LoginUserID;
                    ppc.CommodityId      = item.CommodityId;
                    ppc.CommodityCode    = item.Code;
                    ppc.CommodityName    = item.Name;
                    ppc.CommoditySKUId   = item.SKUId;
                    ppc.CommoditySKU     = item.SKUName;
                    ppc.CommoditySKUCode = item.SKUCode;
                    ppc.CommodityPrice   = item.Price;
                    ppc.Limit            = item.Limit;
                    contextSession.SaveObject(ppc);
                }

                foreach (var item in input.Gifts)
                {
                    PresentPromotionGift ppg = PresentPromotionGift.CreatePresentPromotionGift();
                    ppg.PresentPromotionId = presentPromotion.Id;
                    ppg.AppId            = input.AppId;
                    ppg.UserId           = ContextDTO.LoginUserID;
                    ppg.CommodityId      = item.CommodityId;
                    ppg.CommodityCode    = item.Code;
                    ppg.CommodityName    = item.Name;
                    ppg.CommoditySKUId   = item.SKUId;
                    ppg.CommoditySKU     = item.SKUName;
                    ppg.CommoditySKUCode = item.SKUCode;
                    ppg.CommodityPrice   = item.Price;
                    ppg.Number           = item.Limit;
                    contextSession.SaveObject(ppg);
                }
                contextSession.SaveChange();
            }
            catch (Exception ex)
            {
                LogHelper.Error("PresentPromotionBPExt.CreatePromotionExt 异常", ex);
                return(new Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO {
                    isSuccess = false, Message = ex.Message
                });
            }
            return(new Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO {
                isSuccess = true
            });
        }
コード例 #12
0
        /// <summary>
        /// 发布活动
        /// </summary>
        public ResultDTO CreatePromotionExt(PresentPromotionCreateDTO input)
        {
            if (input.Commodities == null || input.Commodities.Count == 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "请选择主商品"
                });
            }
            if (input.Gifts == null || input.Gifts.Count == 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "请选择赠品"
                });
            }
            var comIds = input.Commodities.Select(_ => _.CommodityId);
            // 检查活动是否冲突
            // 该商品正在参与XX(秒杀、预约、预售、拼团、限时打折、赠品促销、套餐促销)活动,请更换商品或者更改活动时间
            var prop = (from item in PromotionItems.ObjectSet()
                        join pro in Promotion.ObjectSet() on item.PromotionId equals pro.Id
                        where
                        !pro.IsDel && (comIds.Contains(item.CommodityId) &&
                                       pro.EndTime >= input.BeginTime && pro.StartTime <= input.EndTime)
                        select pro).FirstOrDefault();

            if (prop != null)
            {
                var propName = "限时打折";
                switch (prop.PromotionType)
                {
                case 1:
                    propName = "秒杀";
                    break;

                case 2:
                    propName = "预约";
                    break;

                case 3:
                    propName = "拼团";
                    break;

                case 5:
                    propName = "预售";
                    break;
                }

                Jinher.AMP.ZPH.ISV.Facade.CommodityFacade facadeCheck = new Jinher.AMP.ZPH.ISV.Facade.CommodityFacade();

                foreach (var item in comIds)
                {
                    Jinher.AMP.ZPH.Deploy.CustomDTO.CheckComdtyActInSameTimeCDTO dto = new ZPH.Deploy.CustomDTO.CheckComdtyActInSameTimeCDTO()
                    {
                        comdtyId  = item,
                        startTime = input.BeginTime,
                        endTime   = input.EndTime
                    };

                    Jinher.AMP.ZPH.Deploy.CustomDTO.ReturnInfo requst = facadeCheck.CheckComdtyActInSameTime(dto);
                    if (requst.Message.Contains("套装"))
                    {
                        propName = "套装";
                        break;
                    }
                }

                return(new ResultDTO {
                    isSuccess = false, Message = "该商品正在参与" + propName + "活动,请更换商品或者更改活动时间"
                });
            }
            var ppCount = PresentPromotionCommodity.ObjectSet().Where(_ => comIds.Contains(_.CommodityId)).Join(PresentPromotion.ObjectSet().Where(p => !p.IsEnd && p.EndTime >= input.BeginTime && p.BeginTime <= input.EndTime), pc => pc.PresentPromotionId, p => p.Id, (pc, p) => 1).Count();

            if (ppCount > 0)
            {
                return(new ResultDTO {
                    isSuccess = false, Message = "该商品正在参与赠品促销活动,请更换商品或者更改活动时间"
                });
            }

            ContextSession contextSession = ContextFactory.CurrentThreadContext;

            var presentPromotion = PresentPromotion.CreatePresentPromotion();

            presentPromotion.AppId     = input.AppId;
            presentPromotion.UserId    = ContextDTO.LoginUserID;
            presentPromotion.Name      = input.Name;
            presentPromotion.BeginTime = input.BeginTime;
            presentPromotion.EndTime   = input.EndTime;
            presentPromotion.Limit     = input.Limit;
            presentPromotion.IsEnd     = false;
            contextSession.SaveObject(presentPromotion);

            foreach (var item in input.Commodities)
            {
                PresentPromotionCommodity ppc = PresentPromotionCommodity.CreatePresentPromotionCommodity();
                ppc.PresentPromotionId = presentPromotion.Id;
                ppc.AppId            = input.AppId;
                ppc.UserId           = ContextDTO.LoginUserID;
                ppc.CommodityId      = item.CommodityId;
                ppc.CommodityCode    = item.Code;
                ppc.CommodityName    = item.Name;
                ppc.CommoditySKUId   = item.SKUId;
                ppc.CommoditySKU     = item.SKUName;
                ppc.CommoditySKUCode = item.SKUCode;
                ppc.CommodityPrice   = item.Price;
                ppc.Limit            = item.Limit;
                contextSession.SaveObject(ppc);
            }

            foreach (var item in input.Gifts)
            {
                PresentPromotionGift ppg = PresentPromotionGift.CreatePresentPromotionGift();
                ppg.PresentPromotionId = presentPromotion.Id;
                ppg.AppId            = input.AppId;
                ppg.UserId           = ContextDTO.LoginUserID;
                ppg.CommodityId      = item.CommodityId;
                ppg.CommodityCode    = item.Code;
                ppg.CommodityName    = item.Name;
                ppg.CommoditySKUId   = item.SKUId;
                ppg.CommoditySKU     = item.SKUName;
                ppg.CommoditySKUCode = item.SKUCode;
                ppg.CommodityPrice   = item.Price;
                ppg.Number           = item.Limit;
                contextSession.SaveObject(ppg);
            }
            try
            {
                contextSession.SaveChange(Jinher.JAP.Common.SaveExceptionEnum.BF);
            }
            catch (Exception ex)
            {
                LogHelper.Error("PresentPromotionBPExt.CreatePromotionExt 异常", ex);
                return(new Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO {
                    isSuccess = false, Message = ex.Message
                });
            }
            return(new Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO {
                isSuccess = true
            });
        }
コード例 #13
0
ファイル: DiyGroupBPExt.cs プロジェクト: GSIL-Monitor/BTP
        /// <summary>
        /// 获取拼团信息(必传参数AppId、PageIndex、PageSize、State,可选参数ComNameSub)
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupManageDTO> GetDiyGroupsExt(Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupSearchDTO search)
        {
            Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO <Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupManageDTO> result = new ResultDTO <DiyGroupManageDTO>();
            if (search == null)
            {
                result.Message    = "参数错误,appId不能为空!";
                result.ResultCode = 1;
                return(result);
            }
            var resultData = new Jinher.AMP.BTP.Deploy.CustomDTO.DiyGroupManageDTO();

            var diyQuery = (from diy in DiyGroup.ObjectSet()
                            join c in Commodity.ObjectSet()
                            on diy.CommodityId equals c.Id
                            join ps in PromotionItems.ObjectSet() on c.Id equals ps.CommodityId
                            join p in Promotion.ObjectSet() on ps.PromotionId equals p.Id
                            where c.AppId == search.AppId && diy.State != 0 && diy.JoinNumber != 0 &&
                            diy.PromotionId == p.Id
                            select new DiyGroupManageVM
            {
                DiyGroupNumber = diy.Code,
                DiyGroupName = c.Name,
                DiyGroupPrice = ps.DiscountPrice,
                DiyGroupCount = p.GroupMinVolume,
                DiyId = diy.Id,
                DiyGroupSubTime = diy.SubTime,
                DiyGroupState = diy.State
            });

            if (!String.IsNullOrEmpty(search.ComNameSub))
            {
                diyQuery = diyQuery.Where(c => c.DiyGroupName.Contains(search.ComNameSub));
            }
            if (!String.IsNullOrEmpty(search.State))
            {
                if (search.State.Contains(","))
                {
                    int[] arrystate = Array.ConvertAll <string, int>(search.State.Split(','), s => int.Parse(s)).ToArray();
                    diyQuery = diyQuery.Where(c => arrystate.Contains(c.DiyGroupState));
                }
                else
                {
                    diyQuery = diyQuery.Where(c => c.DiyGroupState == 1);
                }
            }
            else if (search.State == "")
            {
            }

            diyQuery         = diyQuery.Distinct();
            resultData.Count = diyQuery.Count();

            var searchResult   = diyQuery.OrderByDescending(c => c.DiyGroupNumber).Skip((search.PageIndex - 1) * search.PageSize).Take(search.PageSize).ToList();
            var diygroupIdList = searchResult.Select(c => c.DiyId).ToList();
            //构建拼团订单id数组
            List <Guid> diyOrderIdList = new List <Guid>();

            for (int i = 0; i < searchResult.Count; i++)
            {
                diyOrderIdList.Add(searchResult[i].DiyId);
            }
            List <DiyGroupManageMM> diyGroupManageMmList = (from diyo in DiyGroupOrder.ObjectSet()
                                                            join co in CommodityOrder.ObjectSet() on diyo.OrderId equals co.Id
                                                            where diyo.AppId == search.AppId && diygroupIdList.Contains(diyo.DiyGroupId) && diyo.State == 1
                                                            select new DiyGroupManageMM
            {
                DiyGroupOrderCode = diyo.OrderCode,
                DiyGroupPersonCode = diyo.SubCode,
                DiyGroupPersonRole = diyo.Role,
                DiyGroupOrderId = diyo.OrderId,
                DiyGroupId = diyo.DiyGroupId,
                DiyGroupPrice = (decimal)co.RealPrice
            }
                                                            ).OrderBy(c => c.DiyGroupOrderCode).ToList();

            foreach (DiyGroupManageVM vm in searchResult)
            {
                List <DiyGroupManageMM> diyorderItemslist = new List <DiyGroupManageMM>();
                foreach (DiyGroupManageMM model in diyGroupManageMmList)
                {
                    if (model.DiyGroupId == vm.DiyId)
                    {
                        diyorderItemslist.Add(model);
                    }
                }
                vm.OrderDataList = diyorderItemslist;
            }
            resultData.Data = searchResult;
            result.Data     = resultData;
            return(result);
        }
コード例 #14
0
        public Deploy.CustomDTO.ResultDTO <SearchCommodityByFreightTemplateOutputDTO> GetCommodityByFreightTemplateExt(SearchCommodityByFreightTemplateInputDTO inputDTO)
        {
            if (inputDTO == null)
            {
                throw new ArgumentNullException();
            }

            var appId             = inputDTO.AppId;
            var templateId        = inputDTO.TemplateId;
            var showAssociated    = inputDTO.ShowAssociated;
            var commodityName     = inputDTO.CommodityName;
            var takeCount         = inputDTO.PageSize;
            var skipCount         = inputDTO.PageIndex > 0 ? --inputDTO.PageIndex * takeCount : 0;
            var defaultTemplateId = Guid.Empty;
            var joinPromotion     = inputDTO.JoinPromotion;

            var query = Commodity.ObjectSet().Where(predicate =>
                                                    predicate.AppId == appId &&
                                                    (showAssociated ? predicate.FreightTemplateId == templateId : (predicate.FreightTemplateId == null || predicate.FreightTemplateId == defaultTemplateId)) &&
                                                    (!string.IsNullOrEmpty(commodityName) ? predicate.Name.Contains(commodityName) : true));

            if (!showAssociated && joinPromotion)
            {
                //过滤出搞活动的商品
                query = from commodity in query
                        join promo in Promotion.ObjectSet() on commodity.AppId equals promo.AppId into cpcontainer
                        from promo in cpcontainer.DefaultIfEmpty()
                        join promoItem in PromotionItems.ObjectSet()
                        on new
                {
                    promoId     = promo.Id,
                    commodityId = commodity.Id
                } equals
                new
                {
                    promoId     = promoItem.PromotionId,
                    commodityId = promoItem.CommodityId
                }
                where promo.StartTime >= DateTime.Now && promo.EndTime <= DateTime.Now
                select commodity;
            }

            var total = query.Count();

            var list = query.OrderBy(selector => selector.SubTime).Skip(skipCount).Take(takeCount).Select(selector => new ComdtyList4SelCDTO
            {
                Id    = selector.Id,
                Name  = selector.Name,
                Pic   = selector.PicturesPath,
                Price = selector.Price,
                Stock = selector.Stock
            }).ToList();

            var outputDTO = new ResultDTO <SearchCommodityByFreightTemplateOutputDTO>
            {
                Data = new SearchCommodityByFreightTemplateOutputDTO
                {
                    Total       = total,
                    Commodities = list
                },
                isSuccess  = true,
                ResultCode = 0
            };

            return(outputDTO);
        }