示例#1
0
        /// <summary>
        /// 调用广告
        /// </summary>
        /// <param name="categoryID"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public string ShowAdvert(int categoryID, string target, ADPosition position)
        {
            AdvertCollection ads = SearchAdverts(categoryID, target, position, null, null);

            Random rnd = new Random();

            if (ads.Count > 0)
            {
                ADCategory category = GetCategory(categoryID);
                switch (category.ShowType)
                {
                case ADShowType.Random:
                //int i = 0 ;
                //if (ads.Length > 1)
                //{
                //    i = new Random().Next(ads.Length);
                //}
                case ADShowType.Order:
                    return(ads[rnd.Next(0, 100000) % ads.Count].Code);

                case ADShowType.List:
                    return(BuildAdvertList(ads));
                }
            }
            return("");
        }
示例#2
0
        /// <summary>
        /// 获取贴内广告
        /// </summary>
        /// <param name="target">目标</param>
        /// <param name="postion">位置</param>
        /// <param name="postIndex">楼层</param>
        /// <returns></returns>
        public string GetInPostAD(string target, ADPosition postion, int Floor, bool isLastFloor)
        {
            //int showBginId;
            //int showTime;
            //string key = "pad_" + target + postion;
            //string keyshowTimes = "pad_st_" + target + postion;

            AdvertCollection ads = SearchAdverts(ADCategory.InPostAd.ID, target, postion, Floor, isLastFloor);
            Random           rnd = new Random();

            if (ads.Count > 0)
            {
                //if ( !PageCacheUtil.TryGetValue<int>(key, out showBginId))
                //{
                //    showBginId = rnd.Next(0, 100000) % ads.Count;
                //    PageCacheUtil.Set(key, showBginId);
                //}

                //if (!PageCacheUtil.TryGetValue<int>(keyshowTimes, out showTime))
                //{
                //    showTime = 0;
                //}
                ads.Sort();
                Advert ad = ads[0];
                ad.showTimes++;
                return(ad.Code);
            }
            return("");
        }
示例#3
0
        public AdvertCollection GetAdverts(int categoryID, ADPosition position, int pageSize, int pegeNumber, out int totalCount)
        {
            if (pageSize <= 0)
            {
                pageSize = Consts.DefaultPageSize;
            }
            if (pegeNumber <= 0)
            {
                pegeNumber = 1;
            }

            return(AdvertDao.Instance.GetAdverts(categoryID, position, pageSize, pegeNumber, out totalCount));
        }
示例#4
0
        protected int GetCount(int categoryID, string position)
        {
            int        c   = 0;
            ADPosition pos = StringUtil.TryParse <ADPosition>(position, ADPosition.None);

            foreach (Advert ad in AllAdverts)
            {
                if (ad.CategoryID == categoryID)
                {
                    if (ad.Position == pos)
                    {
                        c++;
                    }
                }
            }

            return(c);
        }
示例#5
0
        /// <summary>
        /// 根据类型编号、目标,返回 符合条件的广告列表
        /// </summary>
        /// <param name="categoryID"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        private AdvertCollection SearchAdverts(int categoryID, string target, ADPosition position, int?Floor, bool?isLastFloor)
        {
            if (AllSettings.Current.AdvertSettings.EnableAdverts == false)
            {
                return(new AdvertCollection());
            }

            if (!ADCategory.SystemADCategoryes.ContainsKey(categoryID))
            {
                return(new AdvertCollection());
            }

            AdvertCollection ads = ADCategory.SystemADCategoryes.GetValue(categoryID).AdvertList.Limited;

            AdvertCollection adResults;

            string cacheKey = string.Concat(categoryID, ",", target, position, Floor, isLastFloor);

            if (PageCacheUtil.TryGetValue <AdvertCollection>(cacheKey, out adResults) == false)
            {
                adResults = new AdvertCollection();
                foreach (Advert ad in ads)
                {
                    if (ad.Targets.Contains(",all,") || ad.Targets.IndexOf(string.Concat(",", target, ","), StringComparison.OrdinalIgnoreCase) > -1) //投放目标选择
                    {
                        if (position == ADPosition.None || ad.Position == position)                                                                   //投放位置选中(左边还是右边还是上边)
                        {
                            if (Floor == null ||                                                                                                      //忽略
                                ad.Floor.IndexOf(",-1,") > -1 || //全部楼层
                                ad.Floor.IndexOf("," + Floor + ",") > -1 || //匹配特定楼层
                                (ad.Floor.IndexOf(",-2,") > -1 && (isLastFloor != null && isLastFloor.Value))    //最后一楼
                                )
                            {
                                adResults.Add(ad);
                            }
                        }
                    }
                }
                PageCacheUtil.Set(cacheKey, adResults);
            }

            return(adResults);
        }
示例#6
0
        public override Advert SaveAdvert(
              int id, int index, int categoryID, ADPosition position, ADType adType, bool available, string title
            , string href, string text, int fontsize, string color, string src
            , int width, int height, DateTime beginDate, DateTime endDate, string code, string targets, string floor)
        {
            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_SaveAdvert";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter<int>("@ADID", id, SqlDbType.Int);
                query.CreateParameter<int>("@CategoryID", categoryID, SqlDbType.Int);
                query.CreateParameter<byte>("@Position", (byte)position, SqlDbType.TinyInt);
                query.CreateParameter<byte>("@AdType", (byte)adType, SqlDbType.TinyInt);
                query.CreateParameter<bool>("@Available", available, SqlDbType.Bit);
                query.CreateParameter<string>("@Title", title, SqlDbType.NVarChar, 50);
                query.CreateParameter<string>("@Href", href, SqlDbType.NVarChar, 500);
                query.CreateParameter<string>("@Text", text, SqlDbType.NVarChar, 200);
                query.CreateParameter<int>("@FontSize", fontsize, SqlDbType.Int);
                query.CreateParameter<string>("@Color", color, SqlDbType.VarChar, 50);
                query.CreateParameter<string>("@Src", src, SqlDbType.NVarChar, 500);
                query.CreateParameter<int>("@Height", height, SqlDbType.Int);
                query.CreateParameter<int>("@Width", width, SqlDbType.Int);
                query.CreateParameter<DateTime>("@BeginDate", beginDate, SqlDbType.DateTime);
                query.CreateParameter<DateTime>("@EndDate", endDate, SqlDbType.DateTime);
                query.CreateParameter<string>("@Code", code, SqlDbType.NText);
                query.CreateParameter<string>("@Targets", targets, SqlDbType.NText);
                query.CreateParameter<int>("@Index", index, SqlDbType.Int);
                query.CreateParameter<string>("@Floor", floor, SqlDbType.VarChar, 1000);

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        return new Advert(reader);
                    }
                }
            }
            return null;
        }
示例#7
0
        public override Advert SaveAdvert(
            int id, int index, int categoryID, ADPosition position, ADType adType, bool available, string title
            , string href, string text, int fontsize, string color, string src
            , int width, int height, DateTime beginDate, DateTime endDate, string code, string targets, string floor)
        {
            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_SaveAdvert";
                query.CommandType = CommandType.StoredProcedure;

                query.CreateParameter <int>("@ADID", id, SqlDbType.Int);
                query.CreateParameter <int>("@CategoryID", categoryID, SqlDbType.Int);
                query.CreateParameter <byte>("@Position", (byte)position, SqlDbType.TinyInt);
                query.CreateParameter <byte>("@AdType", (byte)adType, SqlDbType.TinyInt);
                query.CreateParameter <bool>("@Available", available, SqlDbType.Bit);
                query.CreateParameter <string>("@Title", title, SqlDbType.NVarChar, 50);
                query.CreateParameter <string>("@Href", href, SqlDbType.NVarChar, 500);
                query.CreateParameter <string>("@Text", text, SqlDbType.NVarChar, 200);
                query.CreateParameter <int>("@FontSize", fontsize, SqlDbType.Int);
                query.CreateParameter <string>("@Color", color, SqlDbType.VarChar, 50);
                query.CreateParameter <string>("@Src", src, SqlDbType.NVarChar, 500);
                query.CreateParameter <int>("@Height", height, SqlDbType.Int);
                query.CreateParameter <int>("@Width", width, SqlDbType.Int);
                query.CreateParameter <DateTime>("@BeginDate", beginDate, SqlDbType.DateTime);
                query.CreateParameter <DateTime>("@EndDate", endDate, SqlDbType.DateTime);
                query.CreateParameter <string>("@Code", code, SqlDbType.NText);
                query.CreateParameter <string>("@Targets", targets, SqlDbType.NText);
                query.CreateParameter <int>("@Index", index, SqlDbType.Int);
                query.CreateParameter <string>("@Floor", floor, SqlDbType.VarChar, 1000);

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        return(new Advert(reader));
                    }
                }
            }
            return(null);
        }
示例#8
0
        public override AdvertCollection GetAdverts(int categoryID, ADPosition adPosition, int pageSize, int pageNumber, out int totalCount)
        {
            totalCount = 0;

            using (SqlQuery query = new SqlQuery())
            {
                query.Pager.TableName    = "bx_Adverts";
                query.Pager.SortField    = "ADID";
                query.Pager.PageNumber   = pageNumber;
                query.Pager.PageSize     = pageSize;
                query.Pager.PageSize     = Consts.DefaultPageSize;
                query.Pager.SelectCount  = true;
                query.Pager.ResultFields = "*";

                if (categoryID != 0)
                {
                    query.Pager.Condition = "CategoryID = @CategoryID";
                    query.CreateParameter <int>("@CategoryID", categoryID, SqlDbType.Int);
                }

                if (adPosition != ADPosition.None)
                {
                    query.Pager.Condition += " AND [Position] = @Position";
                    query.CreateParameter <byte>("@Position", (byte)adPosition, SqlDbType.TinyInt);
                }

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    AdvertCollection ads = new AdvertCollection(reader);
                    if (reader.NextResult())
                    {
                        while (reader.Read())
                        {
                            totalCount = reader.Get <int>(0);
                        }
                    }
                    return(ads);
                }
            }
        }
示例#9
0
 public abstract AdvertCollection GetAdverts(int categoryID, ADPosition adPosition, int pageSize, int pageNumber, out int totalCount);
示例#10
0
 public abstract Advert SaveAdvert(
     int id, int index, int categoryID, ADPosition position, ADType adType, bool available, string title
     , string href, string text, int fontsize, string color, string src
     , int width, int height, DateTime beginDate, DateTime endDate, string code, string targets, string floor);
示例#11
0
        public override AdvertCollection GetAdverts(int categoryID, ADPosition adPosition, int pageSize, int pageNumber, out int totalCount)
        {
            totalCount = 0;

            using (SqlQuery query = new SqlQuery())
            {

                query.Pager.TableName = "bx_Adverts";
                query.Pager.SortField = "ADID";
                query.Pager.PageNumber = pageNumber;
                query.Pager.PageSize = pageSize;
                query.Pager.PageSize = Consts.DefaultPageSize;
                query.Pager.SelectCount = true;
                query.Pager.ResultFields = "*";

                if (categoryID != 0)
                {
                    query.Pager.Condition = "CategoryID = @CategoryID";
                    query.CreateParameter<int>("@CategoryID", categoryID, SqlDbType.Int);
                }

                if (adPosition != ADPosition.None)
                {
                    query.Pager.Condition += " AND [Position] = @Position";
                    query.CreateParameter<byte>("@Position", (byte)adPosition, SqlDbType.TinyInt);
                }

                using (XSqlDataReader reader = query.ExecuteReader())
                {
                    AdvertCollection ads = new AdvertCollection(reader);
                    if (reader.NextResult())
                    {
                        while (reader.Read())
                            totalCount = reader.Get<int>(0);
                    }
                    return ads;
                }
            }
        }
示例#12
0
        /// <summary>
        /// 修改或者添加广告
        /// </summary>
        /// <param name="adid"></param>
        /// <param name="categoryID"></param>
        /// <param name="position"></param>
        /// <param name="adType"></param>
        /// <param name="available"></param>
        /// <param name="title"></param>
        /// <param name="href"></param>
        /// <param name="text"></param>
        /// <param name="fontsize"></param>
        /// <param name="color"></param>
        /// <param name="src"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="beginDate"></param>
        /// <param name="endDate"></param>
        /// <param name="code"></param>
        /// <param name="targets"></param>
        /// <returns></returns>
        public Advert SaveAdvert(
            int operatorUserID
            , int adid
            , int index
            , int categoryID
            , ADPosition position
            , ADType adType
            , bool available
            , string title
            , string href
            , string text
            , int fontsize
            , string color
            , string src
            , int width
            , int height
            , DateTime beginDate
            , DateTime endDate
            , string code
            , string targets
            , string floor
            )
        {
            if (!CanManageAdvert(operatorUserID))
            {
                ThrowError(new NoPermissionManageAdvertError());
                return(null);
            }

            if (string.IsNullOrEmpty(title))
            {
                title = GetTitle();
            }

            switch (adType)
            {
            case ADType.Code:

                if (string.IsNullOrEmpty(code))
                {
                    ThrowError(new EmptyAdvertCodeError("code"));
                }
                break;

            case ADType.Image:

                if (string.IsNullOrEmpty(src))
                {
                    ThrowError(new EmptyAdvertResourceError("src"));
                }

                if (string.IsNullOrEmpty(href))
                {
                    ThrowError(new EmptyAdvertHrefError("href"));
                }
                break;

            case ADType.Flash:

                if (string.IsNullOrEmpty(src))
                {
                    ThrowError(new EmptyAdvertResourceError("src"));
                }

                if (width == 0)
                {
                    ThrowError(new EmptyAdvertWidthError("width"));
                }

                if (height == 0)
                {
                    ThrowError(new EmptyAdvertHeightError("height"));
                }
                break;

            case ADType.Text:

                if (string.IsNullOrEmpty(text))
                {
                    ThrowError(new EmptyAdvertTextError("text"));
                }

                if (string.IsNullOrEmpty(href))
                {
                    ThrowError(new EmptyAdvertHrefError("href"));
                }
                break;
            }


            if (string.IsNullOrEmpty(targets))
            {
                targets = ",all,";
            }
            else if (!string.IsNullOrEmpty(targets.Trim(',')))
            {
                targets = string.Format(",{0},", targets.Trim(',')); //前后逗号补充
            }
            if (!string.IsNullOrEmpty(floor) && !string.IsNullOrEmpty(floor.Trim(',')))
            {
                floor = string.Format(",{0},", floor.Trim(','));
            }

            if (categoryID == ADCategory.InPostAd.ID && string.IsNullOrEmpty(floor))
            {
                ThrowError(new CustomError("floor", "请选择广告显示的楼层"));
            }

            if (HasUnCatchedError)
            {
                return(null);
            }

            Advert ad = AdvertDao.Instance.SaveAdvert(
                adid
                , index
                , categoryID
                , position
                , adType
                , available
                , title
                , href
                , text
                , fontsize
                , color
                , src
                , width
                , height
                , beginDate
                , endDate
                , code
                , targets
                , floor
                );

            if (ADCategory.SystemADCategoryes.ContainsKey(categoryID))
            {
                ADCategory.SystemADCategoryes.GetValue(categoryID).ClearCache();
            }

            return(ad);
        }
示例#13
0
 /// <summary>
 /// 是否存在某类广告
 /// </summary>
 /// <param name="categoryID"></param>
 /// <param name="target"></param>
 /// <param name="position"></param>
 /// <returns></returns>
 public bool HasAdvert(int categoryID, string target, ADPosition position)
 {
     return(SearchAdverts(categoryID, target, position, null, null).Count > 0);
 }
示例#14
0
 /// <summary>
 /// 是否有贴内广告
 /// </summary>
 /// <param name="target"></param>
 /// <param name="postion"></param>
 /// <param name="floor"></param>
 /// <returns></returns>
 public bool HasInPostAD(string target, ADPosition postion, int floor, bool isLastFloor)
 {
     return(SearchAdverts(ADCategory.InPostAd.ID, target, postion, floor, isLastFloor).Count > 0);
 }