コード例 #1
0
        /// <summary>
        /// 线上,下载推广计划报表
        /// </summary>
        public List <EntityCampaignReport> DownLoadCampaignReport(EntityUser session, long campaignId, int days)
        {
            List <EntityCampaignReport> lstAll = new List <EntityCampaignReport>();
            string strStartDay = DateTime.Now.AddDays(0 - days).Date.ToString("yyyy-MM-dd");
            string strEndDay   = DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd");

            string jsonBaseRpt = DownLoadCamapginBaseReport(session, campaignId, strStartDay, strEndDay).ToLower();

            if (!string.IsNullOrEmpty(jsonBaseRpt) && jsonBaseRpt.Length > 2)
            {
                var arrBaseRpt = new DynamicJsonParser().FromJson(jsonBaseRpt);
                foreach (var item in arrBaseRpt)
                {
                    EntityCampaignReport rpt = new EntityCampaignReport();
                    rpt.date        = item.date;
                    rpt.campaign_id = item.campaignid;
                    rpt.nick        = item.nick;
                    rpt.impressions = item.impressions == null ? 0 : item.impressions;
                    rpt.click       = item.click == null ? 0 : item.click;
                    rpt.ctr         = item.ctr == null ? 0M : item.ctr;
                    rpt.cost        = Convert.ToDecimal(item.cost == null ? 0M : item.cost) / 100.0M;
                    rpt.cpc         = item.cpc == null ? 0M : item.cpc;
                    rpt.avgpos      = item.avgpos == null ? 0M : item.avgpos;
                    rpt.source      = item.source;

                    lstAll.Add(rpt);
                }
            }

            string jsonEffectRpt = DownLoadCampaignEffectReport(session, campaignId, strStartDay, strEndDay).ToLower();

            if (!string.IsNullOrEmpty(jsonEffectRpt) && jsonEffectRpt.Length > 2)
            {
                var arrEffectRpt = new DynamicJsonParser().FromJson(jsonEffectRpt);
                foreach (var item in arrEffectRpt)
                {
                    EntityCampaignReport rpt = lstAll.Find(o => o.date == item.date);
                    if (rpt == null)
                    {
                        logger.ErrorFormat("base:{0}\r\n effect:{1}", jsonBaseRpt, jsonEffectRpt);
                        continue;
                    }
                    rpt.directpay        = Convert.ToDecimal(item.directpay == null ? 0M : item.directpay) / 100.0M;
                    rpt.indirectpay      = Convert.ToDecimal(item.indirectpay == null ? 0M : item.indirectpay) / 100.0M;
                    rpt.directpaycount   = item.directpaycount == null ? 0 : item.directpaycount;
                    rpt.indirectpaycount = item.indirectpaycount == null ? 0 : item.indirectpaycount;
                    rpt.favitemcount     = item.favitemcount == null ? 0 : item.favitemcount;
                    rpt.favshopcount     = item.favshopcount == null ? 0 : item.favshopcount;
                    rpt.totalpay         = rpt.directpay + rpt.indirectpay;
                    rpt.totalpaycount    = rpt.directpaycount + rpt.indirectpaycount;
                    rpt.totalfavcount    = rpt.favitemcount + rpt.favshopcount;
                    rpt.roi = rpt.cost == 0M ? 0M : Math.Round((rpt.directpay + rpt.indirectpay) / rpt.cost, 2);
                }
            }

            return(lstAll);
        }
コード例 #2
0
ファイル: WSTop.asmx.cs プロジェクト: bxstar/MVC5Demo
        public string HelloWorld()
        {
            //测试session,使用EnableSession = true
            EntityUser user = HttpContext.Current.Session["user"] as EntityUser;

            if (user != null)
            {
                string strUserInfo = DynamicJsonParser.FromObject(user);
                return(strUserInfo);
            }
            else
            {
                return(null);
            }
        }
コード例 #3
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,设置用户店铺下所有的宝贝
        /// </summary>
        public static Boolean SetUserOnlineItemCache(string nick, List <EntityItem> lstItem)
        {
            string cacheKey = string.Format("top_onlineitems_nick_{0}", nick);

            try
            {
                string cacheValue = CommonFunction.Compress(DynamicJsonParser.FromObject(lstItem));
                return(wsFindWordProxy.SetValueTimeOut(cacheKey, cacheValue, constMonthAsSecond));
            }
            catch (Exception se)
            {
                logger.Error(string.Format("缓存,设置{0}的宝贝失败", nick), se);
            }
            return(false);
        }
コード例 #4
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 线上,获取宝贝信息
        /// </summary>
        public static EntityItem GetItemOnline(string itemIdOrUrl)
        {
            EntityItem result = null;

            try
            {
                string strItem = wsKeywordForecastProxy.GetItemInfoCache(null, itemIdOrUrl);
                result = DynamicJsonParser.ToObject <EntityItem>(strItem);
            }
            catch (Exception se)
            {
                logger.Error("缓存,获取宝贝信息错误", se);
                return(null);
            }
            return(result);
        }
コード例 #5
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,设置用户宝贝找词的结果(时长:7天)
        /// </summary>
        public static Boolean SetUserItemFindKeywordCacheWeek(string nick, long itemId, List <EntityWordData> findKewordResult)
        {
            string cacheKey = string.Format("top_findkeyword_itemid_{0}_nick_{1}", itemId, nick);

            try
            {
                //findKewordResult.wd = null; //由于数据太多暂时不放进缓存
                string cacheValue = CommonFunction.Compress(DynamicJsonParser.FromObject(findKewordResult));
                return(wsFindWordProxy.SetValueTimeOut(cacheKey, cacheValue, constSevenDayAsSecond));
            }
            catch (Exception se)
            {
                logger.Error(string.Format("缓存,设置宝贝:{0},用户:{1}找词结果失败", itemId, nick), se);
            }
            return(false);
        }
コード例 #6
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,根据类目ID获取类目信息
        /// </summary>
        public static List <Top.Api.Domain.InsightCategoryInfoDTO> GetCatsFullInfoOnline(string categoryIds)
        {
            if (string.IsNullOrEmpty(categoryIds))
            {
                return(new List <Top.Api.Domain.InsightCategoryInfoDTO>());
            }
            List <Top.Api.Domain.InsightCategoryInfoDTO> lstResult = null;

            try
            {
                string strResponse = wsKeywordForecastProxy.GetCatsFullInfoOnline(null, "1", categoryIds);
                lstResult = DynamicJsonParser.ToObject <List <Top.Api.Domain.InsightCategoryInfoDTO> >(strResponse);
            }
            catch (Exception se)
            {
                logger.Error(string.Format("缓存,获取类目id:{0}的类目信息失败", categoryIds), se);
            }
            return(lstResult);
        }
コード例 #7
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,获取用户上架在线销售的全部宝贝,默认从缓存那数据
        /// </summary>
        public static List <EntityItem> GetUserOnlineItems(EntityUser session, Boolean isFromCache = true)
        {
            List <EntityItem> lstItem = null;

            try
            {
                string strResult = wsFindWordProxy.GetUserOnlineItems(null, session.fSubUserName, session.fSession, "tkc", isFromCache);
                if (strResult != null)
                {
                    lstItem = DynamicJsonParser.ToObject <List <EntityItem> >(CommonFunction.Decompress(strResult));
                }
            }
            catch (Exception se)
            {
                logger.Error("缓存,获取类目下热门词错误", se);
                return(null);
            }
            return(lstItem);
        }
コード例 #8
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,获取用户宝贝找词的结果
        /// </summary>
        public static List <EntityWordData> GetUserItemFindKeywordCache(string nick, long itemId)
        {
            List <EntityWordData> result = null;
            string cacheKey = string.Format("top_findkeyword_itemid_{0}_nick_{1}", itemId, nick);

            try
            {
                string cacheValue = wsFindWordProxy.GetValueTimeOut(cacheKey);
                if (cacheValue != null)
                {
                    result = DynamicJsonParser.ToObject <List <EntityWordData> >(CommonFunction.Decompress(cacheValue));
                }
            }
            catch (Exception se)
            {
                logger.Error(string.Format("缓存,获取宝贝:{0},用户:{1}找词结果失败", itemId, nick), se);
            }
            return(result);
        }
コード例 #9
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 缓存,获取用户店铺下所有的宝贝
        /// </summary>
        public static List <EntityItem> GetUserOnlineItemCache(string nick)
        {
            List <EntityItem> result   = null;
            string            cacheKey = string.Format("top_onlineitems_nick_{0}", nick);

            try
            {
                string cacheValue = wsFindWordProxy.GetValueTimeOut(cacheKey);
                if (cacheValue != null)
                {
                    result = DynamicJsonParser.ToObject <List <EntityItem> >(CommonFunction.Decompress(cacheValue));
                }
            }
            catch (Exception se)
            {
                logger.Error(string.Format("缓存,获取{0}的宝贝失败", nick), se);
            }
            return(result);
        }
コード例 #10
0
ファイル: WSTop.asmx.cs プロジェクト: bxstar/MVC5Demo
        public Campaign[] GetAllCampaignOnline()
        {//线上,获取所有的计划
            EntityUser user = HttpContext.Current.Session["user"] as EntityUser;

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

            //获取用户所有的推广计划信息
            List <Campaign> lstCampaignInfoOnline = new List <Campaign>();

            try
            {
                string cacheKey_CampaignInfo = string.Format("top_campaigninfo_nick_{0}", user.fSubUserName);

                string cacheValue_CampaignInfo = wsProxyFindWord.GetValue(cacheKey_CampaignInfo);
                if (cacheValue_CampaignInfo == null)
                {
                    lstCampaignInfoOnline = bllCampaign.GetCampaignOnline(user);
                    if (lstCampaignInfoOnline != null)
                    {
                        wsProxyFindWord.SetValueTimeOut(cacheKey_CampaignInfo, DynamicJsonParser.FromObject(lstCampaignInfoOnline), 15 * 60);      //缓存15分钟
                    }
                }
                else
                {
                    lstCampaignInfoOnline = DynamicJsonParser.ToObject <List <Campaign> >(cacheValue_CampaignInfo);
                }
            }
            catch (Exception se)
            {
                logger.Error(string.Format("获取计划信息出错,参数:{0}", user.fSubUserName), se);
            }

            return(lstCampaignInfoOnline.ToArray());
        }
コード例 #11
0
        public List <EntityWordData> GetItemKeywords(EntityUser user, string itemIdOrUrl)
        {
            //获取计划信息
            if (user == null)
            {
                return(null);
            }

            EntityItem itemOnline = CommonHandler.GetItemOnline(itemIdOrUrl);

            if (itemOnline == null || itemOnline.item_id == 0)
            {
                return(new List <EntityWordData>());
            }
            else
            {
                logger.InfoFormat("用户:{0},宝贝:{1},标题:{2}", user.fUserName, itemOnline.item_id, itemOnline.item_title);
            }

            //缓存获取找词的数量
            List <EntityWordData> resultFindKeyword = CommonHandler.GetUserItemFindKeywordCache(user.fSubUserName, itemOnline.item_id);

            if (resultFindKeyword != null && resultFindKeyword.Count() > 100)
            {
                logger.InfoFormat("用户:{0},宝贝:{1},缓存取词", user.fUserName, itemOnline.item_id);
                return(resultFindKeyword);
            }

            //重新找词
            logger.InfoFormat("用户:{0},宝贝:{1},开始找词", user.fUserName, itemOnline.item_id);
            resultFindKeyword = new List <EntityWordData>();

            //发送蜘蛛抓词任务
            string exchangeName = "ex_taobao_spider_samesimilar_item";

            BusinessMQ.SendMsgToExchange(user, exchangeName, string.Format("{0},{1},{2}", itemOnline.item_id, itemOnline.item_title, itemOnline.nick));

            //更新宝贝的信息

            logger.InfoFormat("用户:{0},宝贝:{1},获取类目热词开始", user.fUserName, itemOnline.item_id);
            List <string> lstCategoryWord = CommonHandler.GetCatTopKeyword(itemOnline.cid);

            logger.InfoFormat("用户:{0},宝贝:{1},获取类目热词完成,数量:{2}", user.fUserName, itemOnline.item_id, lstCategoryWord.Count);

            logger.InfoFormat("用户:{0},宝贝:{1},获取关键词开始", user.fUserName, itemOnline.item_id);
            DateTime dtStartFind = DateTime.Now;
            //标题分词在类目中出现的词,按重复字符数*长度排序,还要按照找词统计来排序
            List <string> lstMainWord = new List <string>();
            //蜘蛛抓取的关键词
            List <string> lstSpiderFindWord = new List <string>();
            //核心词排序字典
            Dictionary <string, int> dicMainWord = new Dictionary <string, int>();
            //是否找到了第一核心词
            Boolean isFindFirstMainWord = false;
            //是否通过蜘蛛找到了同款和相似宝贝的关键词
            Boolean isFindKeywordBySpider = false;
            //将宝贝标题的分词按长度排序,在类目名称中的关键词作为核心词
            List <string> lstTitleWord = CommonHandler.SplitWordFromWs(itemOnline.item_title).Split(',').OrderByDescending(o => o.Length).ToList();

            foreach (var item in lstTitleWord)
            {//标题分词中,被类目名称包含的为核心词
                if (item.Length > 1 && itemOnline.categroy_name.Contains(item) && !lstMainWord.Contains(item))
                {
                    lstMainWord.Add(item);
                    isFindFirstMainWord = true;
                }
            }

            foreach (var item in lstTitleWord)
            {//标题分词中,和类目名称有交集的,为核心词
                int sameCharCount = item.ToCharArray().Intersect(itemOnline.categroy_name.ToCharArray()).Count();
                if (item.Length > 1 && sameCharCount > 0 && !dicMainWord.ContainsKey(item))
                {
                    dicMainWord.Add(item, sameCharCount * item.Length);
                }
            }

            if (dicMainWord.Count > 0)
            {//核心词汇总,交集中重复字符越多,排序值最大,放最前
                lstMainWord         = lstMainWord.Union(dicMainWord.OrderByDescending(o => o.Value).Select(o => o.Key).ToList()).ToList();
                isFindFirstMainWord = true;
                dicMainWord         = new Dictionary <string, int>();
            }


            while ((!isFindKeywordBySpider) && (dtStartFind.AddSeconds(30) >= DateTime.Now))
            {//类目找不到词或找到不只一个词,30秒内没找到放弃
                string strFindKeywordResult = CommonHandler.GetItemFindKeywordCache(itemOnline.item_id);
                if (string.IsNullOrEmpty(strFindKeywordResult))
                {//暂时没有找到
                    System.Threading.Thread.Sleep(2000);
                    continue;
                }
                isFindKeywordBySpider = true;

                lstSpiderFindWord = strFindKeywordResult.Split(',').ToList();
                if (isFindFirstMainWord)
                {
                    //使用找词结果排序
                    foreach (var item in lstMainWord)
                    {
                        int intWordIndex = lstSpiderFindWord.FindIndex(o => o == item);
                        dicMainWord.Add(item, intWordIndex == -1 ? 9 : intWordIndex);   //不存在找词结果中的词,排最后
                    }
                    //排序值最小,放最前
                    lstMainWord = dicMainWord.OrderBy(o => o.Value).Select(o => o.Key).ToList();
                }
                else
                {
                    lstMainWord = lstSpiderFindWord.Take(2).ToList();
                }
            }
            //核心词
            string mainWord = string.Join(",", lstMainWord);

            if (lstMainWord.Count == 0)
            {
                if (itemOnline.categroy_name != "其他" && itemOnline.categroy_name != "其它")
                {
                    mainWord = string.Join(",", itemOnline.categroy_name.Split('/'));
                }
                else
                {//类目名称不能作为核心词时,使用属性词作为核心词
                    foreach (var itemProp in itemOnline.LstPropsName)
                    {
                        string str = Strings.GetChineseString(itemProp);
                        if (str != null && str.Length >= 2)
                        {
                            lstMainWord.Add(str);
                        }
                    }
                    mainWord = string.Join(",", lstMainWord);
                }
            }

            logger.InfoFormat("用户:{0},宝贝:{1},获取关键词完成,核心词:{2},数量:{3}", user.fUserName, itemOnline.item_id, mainWord, lstSpiderFindWord.Count);

            resultFindKeyword = CommonHandler.CombineWord(itemOnline, lstMainWord, lstSpiderFindWord.Union(lstTitleWord).Union(lstCategoryWord).ToList());
            int totalCount = resultFindKeyword.Count;

            if (totalCount < 500)
            {//数量不足500个,从词霸热词中获取
            }

            if (resultFindKeyword.Count < 20 && itemOnline.categroy_name != "其他" && itemOnline.categroy_name != "其它")
            {//无法分词,核心词可能有误,直接使用类目名称来组词
                lstMainWord.Clear();
                lstMainWord       = itemOnline.categroy_name.Split('/').ToList();
                resultFindKeyword = CommonHandler.CombineWord(itemOnline, lstMainWord, lstSpiderFindWord.Union(lstTitleWord).Union(lstCategoryWord).ToList());
            }

            if (resultFindKeyword.Count < 20)
            {//找词失败,发送告警邮件
                exchangeName = "ex_taobao_task_email";
                EntityMail mail = new EntityMail()
                {
                    mail_to = "*****@*****.**", mail_subject = "找词失败", create_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                };
                mail.mail_body = string.Format("{0},{1},{2}", itemOnline.item_id, itemOnline.item_title, itemOnline.nick);
                BusinessMQ.SendMsgToExchange(user, exchangeName, DynamicJsonParser.FromObject(mail));
            }

            //序号
            resultFindKeyword.Each((o, index) =>
            {
                o.id = index + 1;
            });

            //设置缓存
            CommonHandler.SetUserItemFindKeywordCache(user.fSubUserName, itemOnline.item_id, resultFindKeyword);
            logger.InfoFormat("用户:{0},宝贝:{1},设置关键词缓存完成,数量:{2}", user.fUserName, itemOnline.item_id, resultFindKeyword.Count);

            return(resultFindKeyword);
        }
コード例 #12
0
ファイル: WSTop.asmx.cs プロジェクト: bxstar/MVC5Demo
        public EntityCampaignReport[] GetAllCampaignRptOnline(string strDateStart, string strDateEnd)
        {
            //获取计划信息
            EntityUser user = HttpContext.Current.Session["user"] as EntityUser;

            if (user == null)
            {
                return(null);
            }
            List <EntityCampaignReport> lstResultCampaignRpt = new List <EntityCampaignReport>();

            try
            {
                //定义计划报表
                List <EntityCampaignReport> lstCampaignRptOnline = new List <EntityCampaignReport>();

                //获取用户所有的推广计划信息
                List <Campaign> lstCampaignInfoOnline = null;
                string          cacheKey_CampaignInfo = string.Format("top_campaigninfo_nick_{0}", user.fSubUserName);

                string cacheValue_CampaignInfo = wsProxyFindWord.GetValue(cacheKey_CampaignInfo);
                if (cacheValue_CampaignInfo == null)
                {
                    lstCampaignInfoOnline = bllCampaign.GetCampaignOnline(user);
                    if (lstCampaignInfoOnline != null)
                    {
                        wsProxyFindWord.SetValueTimeOut(cacheKey_CampaignInfo, DynamicJsonParser.FromObject(lstCampaignInfoOnline), 15 * 60);      //缓存15分钟
                    }
                }
                else
                {
                    lstCampaignInfoOnline = DynamicJsonParser.ToObject <List <Campaign> >(cacheValue_CampaignInfo);
                }

                string cacheKey_CampaignRpt   = string.Format("top_campaignrpt_nick_{0}", user.fSubUserName);
                string cacheValue_CampaignRpt = wsProxyFindWord.GetValue(cacheKey_CampaignRpt);
                if (cacheValue_CampaignRpt == null)
                {
                    //获取每个计划的报表
                    foreach (var campaignId in lstCampaignInfoOnline.Select(o => o.CampaignId))
                    {
                        var lstRptResult = bllCampaign.DownLoadCampaignReport(user, campaignId, 90);    //最多获取90天的报表数据
                        lstCampaignRptOnline.AddRange(lstRptResult);
                    }
                    DateTime dtNow = DateTime.Now;
                    if (lstCampaignRptOnline != null && lstCampaignRptOnline.Count > 0 && DateTime.Now.Hour >= 8 && lstCampaignRptOnline.Where(o => o.impressions > 0 && o.date == dtNow.AddDays(-1).ToString("yyyy-MM-dd")).Count() > 0)
                    {                                                                                                                                      //8点后,如果昨日有计划的展现数据大于0则缓存
                        TimeSpan ts = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day).AddDays(1) - DateTime.Now;
                        wsProxyFindWord.SetValueTimeOut(cacheKey_CampaignRpt, DynamicJsonParser.FromObject(lstCampaignRptOnline), (Int32)ts.TotalSeconds); //缓存到24:00
                    }
                }
                else
                {
                    lstCampaignRptOnline = DynamicJsonParser.ToObject <List <EntityCampaignReport> >(cacheValue_CampaignRpt);
                }

                DateTime dtStart = Convert.ToDateTime(strDateStart);
                DateTime dtEnd   = Convert.ToDateTime(strDateEnd);

                lstResultCampaignRpt = lstCampaignRptOnline.Where(o => Convert.ToDateTime(o.date) >= dtStart && Convert.ToDateTime(o.date) <= dtEnd).ToList();
                foreach (var item in lstResultCampaignRpt)
                {
                    Campaign c = lstCampaignInfoOnline.Find(o => o.CampaignId == item.campaign_id);
                    if (c != null)
                    {
                        item.campaign_name   = c.Title;
                        item.campaign_status = c.OnlineStatus;
                    }
                }
            }
            catch (Exception se)
            {
                logger.Error(string.Format("获取计划报表出错,参数:{0},{1},{2}", user.fSubUserName, strDateStart, strDateEnd), se);
            }

            return(lstResultCampaignRpt.ToArray());
        }
コード例 #13
0
ファイル: CommonHandler.cs プロジェクト: bxstar/MVC5Demo
        /// <summary>
        /// 组词,返回词指数
        /// </summary>
        /// <param name="itemTitle">宝贝标题</param>
        /// <param name="lstMainWord">核心词</param>
        /// <param name="lstOtherWord">属性词或类目热词</param>
        public static List <EntityWordData> CombineWord(EntityItem itemOnline, List <string> lstMainWord, List <string> lstOtherWord)
        {
            //关键词字典:键关键词,值权重
            Dictionary <string, int> dicResult = new Dictionary <string, int>();

            //属性词+核心词
            foreach (var itemMainWord in lstMainWord)
            {
                foreach (var itemOtherWord in lstOtherWord)
                {
                    if (itemOtherWord != itemMainWord)
                    {
                        if (!dicResult.ContainsKey(itemOtherWord + itemMainWord))
                        {
                            dicResult.Add(itemOtherWord + itemMainWord, 10);
                        }
                    }
                }

                //核心词
                if (!dicResult.ContainsKey(itemMainWord))
                {
                    dicResult.Add(itemMainWord, 8);
                }
            }



            //核心词,属性词+核心词,淘宝拓展
            string strKeywordTopExtend = string.Join(",", dicResult.Select(o => o.Key));
            string strExtendWords      = GetRelatedwordsByKeywordCache(strKeywordTopExtend, 1);

            if (!string.IsNullOrEmpty(strExtendWords))
            {
                string[] arrRelWord = strExtendWords.Split(',');
                foreach (var itemRelWord in arrRelWord)
                {
                    if (!dicResult.ContainsKey(itemRelWord))
                    {
                        dicResult.Add(itemRelWord, 7);
                    }
                }
            }

            //TODO淘宝拓词后,没有核心词的词可以和核心词组词
            //TODO标题词的分词,可以用属性词+属性词+核心词组

            int wordCount = dicResult.Count;

            logger.InfoFormat("组词总数量:{0}", wordCount);

            List <EntityWordData> lstKeywordWithIndex = GetkeywordIndexFromWs(itemOnline.item_title, string.Join("", lstMainWord), dicResult.Select(o => o.Key).Distinct().ToList());

            string parentCatId = string.Empty;

            if (string.IsNullOrEmpty(itemOnline.catpathid))
            {//获取宝贝类目所属的顶级类目,用于判断是否需要进行性别区分
                try
                {
                    string strResponse = wsKeywordForecastProxy.GetCatsFullInfoOnline(null, "1", itemOnline.cid.ToString());
                    if (!string.IsNullOrEmpty(strResponse))
                    {
                        List <dynamic> lstCatFullInfo = DynamicJsonParser.ToObject <List <dynamic> >(strResponse);
                        if (lstCatFullInfo != null && lstCatFullInfo.Count > 0)
                        {
                            string strCatPathId = lstCatFullInfo[0]["catpathid"].ToString();
                            parentCatId = strCatPathId.Trim().Replace(" ", ",").Split(',')[0];
                        }
                    }
                }
                catch (Exception se)
                {
                    logger.Error(string.Format("获取顶级类目错误,宝贝id:{0},类目id:{1}", itemOnline.item_id, itemOnline.cid), se);
                }
            }
            else
            {
                parentCatId = itemOnline.catpathid.Replace(" ", ",").Split(',')[0];
            }

            if (lstKeywordWithIndex != null && lstKeywordWithIndex.Count > 0)
            {
                return(FilterSpecialWord(lstKeywordWithIndex, itemOnline.item_title, parentCatId));
            }
            else
            {
                return(new List <EntityWordData>());
            }
        }