public virtual QueryResult QueryProductRecommend(ProductRecommendQueryFilter filter)
        {
            int totalCount;
            var dt = ObjectFactory <IProductRecommendQueryDA> .Instance.Query(filter, out totalCount);

            QueryResult result = new QueryResult();

            result.Data       = dt;
            result.TotalCount = totalCount;
            GetInventoryInfoByStock(dt);
            dt.Columns.Add("PageTypeName", typeof(string));
            dt.Columns.Add("PositionName", typeof(string));
            //获取页面类型
            var pageTypes = ObjectFactory <PageTypeAppService> .Instance.GetPageType(filter.CompanyCode, filter.ChannelID, ModuleType.ProductRecommend);

            Dictionary <string, List <CodeNamePair> > dictPositionCache = new Dictionary <string, List <CodeNamePair> >();

            foreach (DataRow dr in result.Data.Rows)
            {
                string pageTypeID    = dr["PageType"].ToString();
                var    foundPageType = pageTypes.FirstOrDefault(item => item.Code == pageTypeID);
                if (foundPageType != null)
                {
                    dr["PageTypeName"] = foundPageType.Name;
                }
                //根据PageType查询位置信息

                List <CodeNamePair> currentPagePosition;
                if (!dictPositionCache.TryGetValue(pageTypeID, out currentPagePosition))
                {
                    currentPagePosition = this.GetProductRecommendPosition(pageTypeID);
                    if (currentPagePosition != null && currentPagePosition.Count > 0)
                    {
                        currentPagePosition.ForEach(v =>
                        {
                            if (v.Name.Contains("专卖店--"))
                            {
                                v.Name = v.Name.Replace("专卖店--", "");
                            }
                        });
                    }
                    dictPositionCache.Add(pageTypeID, currentPagePosition);
                }
                var foundPosition = currentPagePosition.FirstOrDefault(item => item.Code == dr["PositionID"].ToString());
                if (foundPosition != null)
                {
                    dr["PositionName"] = foundPosition.Name;
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        public DataTable Query(ProductRecommendQueryFilter filter, out int totalCount)
        {
            PagingInfoEntity pagingEntity = new PagingInfoEntity();

            pagingEntity.SortField     = filter.PagingInfo.SortBy;
            pagingEntity.MaximumRows   = filter.PagingInfo.PageSize;
            pagingEntity.StartRowIndex = filter.PagingInfo.PageIndex * filter.PagingInfo.PageSize;

            var cmd = DataCommandManager.CreateCustomDataCommandFromConfig("ProductRecommend_Query");

            using (var sqlBuilder = new DynamicQuerySqlBuilder(cmd.CommandText, cmd, pagingEntity, "result.[SysNo] DESC"))
            {
                //商品ID
                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "IC.ProductID",
                    DbType.String,
                    "@ProductID",
                    QueryConditionOperatorType.Equal,
                    filter.ProductID);

                //商品系统编号
                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "IC.SysNo",
                    DbType.Int32,
                    "@SysNo",
                    QueryConditionOperatorType.Equal,
                    filter.ProductSysNo);
                if (filter.ProductStatus.HasValue)
                {
                    sqlBuilder.ConditionConstructor.AddCondition(
                        QueryConditionRelationType.AND,
                        "IC.Status",
                        DbType.Int32,
                        "@ProductStatus",
                        QueryConditionOperatorType.Equal,
                        filter.ProductStatus.Value);
                }

                //状态
                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "A.Status",
                    DbType.AnsiStringFixedLength,
                    "@AStatus",
                    QueryConditionOperatorType.Equal,
                    filter.Status);

                #region PageType,PageID,PositionID相关

                //位置编号
                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "B.PositionID",
                    DbType.Int32,
                    "@PositionID",
                    QueryConditionOperatorType.Equal,
                    filter.PositionID);

                if (filter.PageType.HasValue)
                {
                    //页面类型
                    sqlBuilder.ConditionConstructor.AddCondition(
                        QueryConditionRelationType.AND,
                        "B.PageType",
                        DbType.Int32,
                        "@PageType",
                        QueryConditionOperatorType.Equal,
                        filter.PageType);

                    PageTypePresentationType pType = PageTypeUtil.ResolvePresentationType(ModuleType.ProductRecommend, filter.PageType.Value.ToString());
                    if (pType == PageTypePresentationType.Merchant && filter.PageID == 1)
                    {
                        //特殊商家
                        sqlBuilder.ConditionConstructor.AddCondition(
                            QueryConditionRelationType.AND,
                            "V.VendorType",
                            DbType.Int32,
                            "@VendorType",
                            QueryConditionOperatorType.Equal,
                            0);
                    }
                    else if (pType == PageTypePresentationType.Category1)
                    {
                        sqlBuilder.ConditionConstructor.AddCondition(
                            QueryConditionRelationType.AND,
                            "C3.[C1Sysno]",
                            DbType.Int32,
                            "@C1Sysno",
                            QueryConditionOperatorType.Equal,
                            filter.PageID);
                    }
                    else if (pType == PageTypePresentationType.Category2)
                    {
                        sqlBuilder.ConditionConstructor.AddCondition(
                            QueryConditionRelationType.AND,
                            "C3.[C2Sysno]",
                            DbType.Int32,
                            "@C2Sysno",
                            QueryConditionOperatorType.Equal,
                            filter.PageID);
                    }
                    else if (pType == PageTypePresentationType.Category3)
                    {
                        sqlBuilder.ConditionConstructor.AddCondition(
                            QueryConditionRelationType.AND,
                            "C3.[C3SysNo]",
                            DbType.Int32,
                            "@C3Sysno",
                            QueryConditionOperatorType.Equal,
                            filter.PageID);
                    }
                    else
                    {
                        sqlBuilder.ConditionConstructor.AddCondition(
                            QueryConditionRelationType.AND,
                            "B.PageID",
                            DbType.Int32,
                            "@PageID",
                            QueryConditionOperatorType.Equal,
                            filter.PageID);
                    }
                }
                #endregion

                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "A.BeginDate",
                    DbType.DateTime,
                    "@BeginDateFrom",
                    QueryConditionOperatorType.MoreThanOrEqual,
                    filter.BeginDateFrom);

                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "A.BeginDate",
                    DbType.DateTime,
                    "@BeginDateTo",
                    QueryConditionOperatorType.LessThan,
                    filter.BeginDateTo);

                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "A.EndDate",
                    DbType.DateTime,
                    "@EndDateFrom",
                    QueryConditionOperatorType.MoreThanOrEqual,
                    filter.EndDateFrom);

                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "A.EndDate",
                    DbType.DateTime,
                    "@EndDateTo",
                    QueryConditionOperatorType.LessThan,
                    filter.EndDateTo);


                sqlBuilder.ConditionConstructor.AddCondition(
                    QueryConditionRelationType.AND,
                    "B.Status",
                    DbType.String,
                    "@BStatus",
                    QueryConditionOperatorType.Equal,
                    "A");
                //TODO:添加渠道过滤条件

                cmd.CommandText = sqlBuilder.BuildQuerySql();
                var ds = cmd.ExecuteDataSet();
                //转换DataTable的枚举列
                EnumColumnList enumConfig = new EnumColumnList();
                enumConfig.Add("Status", typeof(ADStatus));
                enumConfig.Add("ProductStatus", typeof(ProductStatus));
                cmd.ConvertEnumColumn(ds.Tables[0], enumConfig);

                totalCount = Convert.ToInt32(cmd.GetParameterValue("@TotalCount"));
                return(ds.Tables[0]);
            }
        }