package services import ( "context" "encoding/json" "fmt" "github.com/PuerkitoBio/goquery" "github.com/olivere/elastic/v7" "strconv" //"go/doc" "hongze/hongze_cygx/models" "hongze/hongze_cygx/utils" "html" //"strconv" "errors" "strings" "time" ) type SearchComprehensiveItem struct { SourceId int `description:"资源ID"` IsSummary int `description:"是否是纪要"` Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt 、 产品内测:productinterior"` Title string `description:"标题"` BodyText string `description:"内容"` PublishDate string `description:"发布时间"` Abstract string `description:"摘要"` Annotation string `description:"核心观点"` IndustryName string `description:"产业名称"` SubjectNames string `description:"标的名称"` Body []string } type ElasticComprehensiveDetail struct { SourceId int `description:"资源ID"` IsSummary int `description:"是否是纪要"` Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt 、 产品内测:productinterior 、 产业资源包:industrialsource"` Title string `description:"标题"` BodyText string `description:"内容"` PublishDate string `description:"发布时间"` Abstract string `description:"摘要"` Annotation string `description:"核心观点"` IndustryName string `description:"产业名称"` SubjectNames string `description:"标的名称"` } //func init() { // AddComprehensiveIndustrialSource("Hz", 0) // //AddComprehensiveChart(0) // // AddComprehensiveMeetingreviewchapt() //} // 添加文章:报告、纪要 func AddComprehensiveArticle(articleId int) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("删除数据综合页面数据Es失败"+err.Error(), 2) } }() IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() var condition1 string var pars1 []interface{} mapActivityIndustrialManagement := make(map[int][]string) industrialgroupList, e := models.GetIndustrialArticleGroupManagementList(condition1, pars1) if e != nil { fmt.Println(e) return } for _, v := range industrialgroupList { if v.ArticleId == 0 { continue } mapActivityIndustrialManagement[v.ArticleId] = append(mapActivityIndustrialManagement[v.ArticleId], IndustrialManagementRespMap[v.IndustrialManagementId]) } mapActivitySubject := make(map[int][]string) SubjectgroupList, e := models.GetSubjectArticleGroupManagementList(condition1, pars1) if e != nil { fmt.Println(e) return } for _, v := range SubjectgroupList { if v.ArticleId == 0 { continue } mapActivitySubject[v.ArticleId] = append(mapActivitySubject[v.ArticleId], IndustrialSubjectMap[v.IndustrialSubjectId]) } var condition string var pars []interface{} condition += ` AND publish_status = 1 ` if articleId > 0 { condition = ` AND article_id = ? ` pars = append(pars, articleId) } articleList, e := models.GetArticleList(condition, pars) if e != nil { err = errors.New("GetArticleList, Err: " + e.Error()) return } //indexName := utils.IndexNameComprehensive for _, v := range articleList { time.Sleep(200 * time.Millisecond) content := html.UnescapeString(v.Body) doc, err := goquery.NewDocumentFromReader(strings.NewReader(content)) if err != nil { fmt.Println("create doc err:", err.Error()) return } bodyText := doc.Text() item := new(ElasticComprehensiveDetail) item.SourceId = v.ArticleId item.IsSummary = v.IsSummary item.Source = "article" item.Title = v.Title item.PublishDate = v.PublishDate item.BodyText = bodyText if v.IsSummary == 0 { item.SubjectNames = strings.Join(mapActivitySubject[v.ArticleId], ",") + "," + v.FieldName item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ArticleId], ",") } item.Annotation, _ = GetReportContentTextSubNew(v.Annotation) item.Abstract, _ = GetReportContentTextSubNew(v.Abstract) EsAddOrEditComprehensiveData(item) fmt.Println(item.IndustryName) fmt.Println(item.SubjectNames) } } // 添加图表 func AddComprehensiveChart(chartId int) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("AddComprehensiveChart Err"+err.Error()+fmt.Sprint(chartId), 2) } }() var condition string var pars []interface{} condition += ` AND publish_status = 1 ` if chartId > 0 { condition = ` AND chart_id = ? ` pars = append(pars, chartId) } list, e := models.GetChartList(condition, pars, 0, 1000000) if e != nil { err = errors.New("GetChartList, Err: " + e.Error()) return } //indexName := utils.IndexNameComprehensive for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.ChartId item.Source = "newchart" item.Title = v.Title item.PublishDate = v.CreateDate EsAddOrEditComprehensiveData(item) fmt.Println(v.ChartId) } } //func init() { // AddComprehensiveIndustrialSource("Hz", 9433) //} // 添加产业资源包 func AddComprehensiveIndustrialSource(sourceType string, articleId int) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("AddComprehensiveIndustrialSource"+err.Error(), 2) } }() var condition string var pars []interface{} mapActivitySubject := make(map[int][]string, 0) maplistMeetingTime := make(map[int]time.Time, 0) listMeeting, err := models.GetCygxMorningMeetingReviewChapterList(" GROUP BY c.industry_id ORDER BY r.publish_time DESC ", pars) for _, v := range listMeeting { resultTime := utils.StrTimeToTime(v.PublishTime) maplistMeetingTime[v.IndustryId] = resultTime } listsubject, e := models.GetCygxIndustrialSubjectListCondition(condition, pars) if e != nil { err = errors.New("GetIndustrialManagementRepList, Err: " + e.Error()) return } for _, v := range listsubject { mapActivitySubject[v.IndustrialManagementId] = append(mapActivitySubject[v.IndustrialManagementId], v.SubjectName) } var industrialsource string if sourceType == "Hz" { condition = " AND a.article_type_id = 0 " // 弘则资源包 industrialsource = "industrialsourceHz" } else { condition = " AND a.article_type_id > 0 " //研选资源包 industrialsource = "industrialsourceYx" } if articleId > 0 { condition += " AND a.article_id = " + strconv.Itoa(articleId) } list, err := models.GetSearchResourceList(0, condition, 0, 0) if err != nil { fmt.Println(err) return } //indexName := utils.IndexNameComprehensive for _, v := range list { //time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.IndustrialManagementId item.Source = industrialsource item.IndustryName = v.IndustryName item.SubjectNames = strings.Join(mapActivitySubject[v.IndustrialManagementId], ",") item.PublishDate = v.PublishDate + " 00:00:00" if sourceType == "Hz" { //如果时间晚就进行替换 resultTime := utils.StrTimeToTime(item.PublishDate) if maplistMeetingTime[v.IndustrialManagementId].After(resultTime) { item.PublishDate = maplistMeetingTime[v.IndustrialManagementId].Format(utils.FormatDateTime) } } fmt.Println(item) EsAddOrEditComprehensiveData(item) UpdateComprehensiveIndustrialResourceData(item) } } // 添加晨会精华 func AddComprehensiveMeetingreviewchapt() { var condition string var pars []interface{} IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() list, err := models.GetCygxMorningMeetingReviewChapterList(condition, pars) if err != nil { fmt.Println(err) return } //indexName := utils.IndexNameComprehensive for _, v := range list { time.Sleep(200 * time.Millisecond) content := html.UnescapeString(v.Content) doc, err := goquery.NewDocumentFromReader(strings.NewReader(content)) if err != nil { fmt.Println("create doc err:", err.Error()) return } bodyText := doc.Text() item := new(ElasticComprehensiveDetail) item.SourceId = v.Id item.Source = "meetingreviewchapt" item.IndustryName = IndustrialManagementRespMap[v.IndustryId] item.PublishDate = v.PublishTime item.Abstract = bodyText EsAddOrEditComprehensiveData(item) fmt.Println(item) } } // 添加活动 func AddComprehensiveActivity() { var condition string var pars []interface{} condition = ` AND publish_status = 1 ` //condition = ` AND publish_status = 1 AND activity_id = 2407 ` list, err := models.GetCygxActivityList(condition, pars, 0, 100000) if err != nil { fmt.Println(err) return } IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() var condition1 string var pars1 []interface{} mapActivityIndustrialManagement := make(map[int][]string) industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range industrialgroupList { if v.ActivityId == 0 { continue } mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId]) } mapActivitySubject := make(map[int][]string) SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range SubjectgroupList { if v.ActivityId == 0 { continue } mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId]) } //return for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.ActivityId //item.IsSummary = v.IsSummary item.Source = "activity" //item.SubjectNames = json.Sprint(mapActivitySubject[v.ActivityId]) item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",") item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",") item.Title = v.ActivityName item.PublishDate = v.ActivityTime //item.BodyText = bodyText //item.Annotation, _ = GetReportContentTextSubNew(v.Annotation) //item.Abstract, _ = GetReportContentTextSubNew(v.Abstract) //EsAddOrEditComprehensiveData(indexName, item) EsAddOrEditComprehensiveData(item) fmt.Println(item) } } // 添加专项调研活动 func AddComprehensiveActivitySpecial() { var condition string var pars []interface{} condition = ` AND publish_status = 1 ` list, err := models.GetActivitySpecialListAll(condition, pars, 0, 100000) if err != nil { fmt.Println(err) return } //indexName := utils.IndexNameComprehensive IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() // 产业标签 IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() // 标的标签 var condition1 string var pars1 []interface{} mapActivityIndustrialManagement := make(map[int][]string) industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 2 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range industrialgroupList { if v.ActivityId == 0 { continue } mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId]) } mapActivitySubject := make(map[int][]string) SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 2 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range SubjectgroupList { if v.ActivityId == 0 { continue } mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId]) } for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.ActivityId item.Source = "activityspecial" item.Title = v.ResearchTheme item.PublishDate = v.ActivityTime if v.ActivityTime == utils.FormatDateTimeInit { item.PublishDate = v.LastUpdatedTime.Format(utils.FormatDateTime) } else { item.PublishDate = v.ActivityTime } item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",") item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",") EsAddOrEditComprehensiveData(item) } } // 添加活动视频 func AddComprehensiveActivityVideo() { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("添加活动视频综合页面数据Es失败"+err.Error(), 2) } }() var condition string var pars []interface{} list, e := models.GetActivityVideoListAll(condition, pars, 0, 100000) if e != nil { err = errors.New("GetActivityVideoListAll, Err: " + e.Error()) return } if len(list) == 0 { return } var activityIds []int for _, v := range list { activityIds = append(activityIds, v.ActivityId) } pars = make([]interface{}, 0) condition = ` AND publish_status = 1 AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)` pars = append(pars, activityIds) listArt, e := models.GetCygxActivityList(condition, pars, 0, 100000) if e != nil { err = errors.New("GetCygxActivityList, Err: " + e.Error()) return } mapActivity := make(map[int]string) for _, v := range listArt { mapActivity[v.ActivityId] = v.ActivityName } IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() var condition1 string var pars1 []interface{} mapActivityIndustrialManagement := make(map[int][]string) industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } //产业名称 for _, v := range industrialgroupList { if v.ActivityId == 0 { continue } mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId]) } //标的名称 mapActivitySubject := make(map[int][]string) SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range SubjectgroupList { if v.ActivityId == 0 { continue } mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId]) } //indexName := utils.IndexNameComprehensive for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.Id item.Source = "activityvideo" item.Title = v.Title item.PublishDate = v.ActivityTime item.BodyText = mapActivity[v.ActivityId] item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",") item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",") EsAddOrEditComprehensiveData(item) fmt.Println(item) } } // 添加活动音频 func AddComprehensiveActivityVoice() { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("AddComprehensiveActivityVoice"+err.Error(), 2) } }() var condition string var pars []interface{} list, err := models.GetActivityVoiceList(condition, pars, 0, 100000) if err != nil { fmt.Println(err) return } if len(list) == 0 { return } var activityIds []int for _, v := range list { activityIds = append(activityIds, v.ActivityId) } pars = make([]interface{}, 0) condition = ` AND publish_status = 1 AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)` pars = append(pars, activityIds) listArt, e := models.GetCygxActivityList(condition, pars, 0, 100000) if e != nil { err = errors.New("GetCygxActivityList, Err: " + e.Error()) return } mapActivity := make(map[int]string) for _, v := range listArt { mapActivity[v.ActivityId] = v.ActivityName } IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() var condition1 string var pars1 []interface{} mapActivityIndustrialManagement := make(map[int][]string) industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } //产业名称 for _, v := range industrialgroupList { if v.ActivityId == 0 { continue } mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId]) } //标的名称 mapActivitySubject := make(map[int][]string) SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1) if e != nil { fmt.Println(e) return } for _, v := range SubjectgroupList { if v.ActivityId == 0 { continue } mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId]) } //indexName := utils.IndexNameComprehensive for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.ActivityVoiceId item.Source = "activityvoice" item.Title = v.VoiceName item.PublishDate = v.ActivityTime item.BodyText = mapActivity[v.ActivityId] item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",") item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",") EsAddOrEditComprehensiveData(item) fmt.Println(item) } } // 微路演 func AddComprehensiveRoadshow() { var condition string var pars []interface{} IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() list, err := models.GetMicroRoadshowVideoListBycondition(condition, pars, 0, 100000) if err != nil { fmt.Println(err) return } //indexName := utils.IndexNameComprehensive for _, v := range list { time.Sleep(200 * time.Millisecond) item := new(ElasticComprehensiveDetail) item.SourceId = v.VideoId item.Source = "roadshow" item.IndustryName = IndustrialManagementRespMap[v.IndustryId] item.Title = v.VideoName item.PublishDate = v.PublishDate.Format(utils.FormatDateTime) EsAddOrEditComprehensiveData(item) fmt.Println(item) } } // Es研选专栏 func EsAddYanxuanSpecial(sourceId int) { var err error defer func() { if err != nil { fmt.Println("err:", err) go utils.SendAlarmMsg(fmt.Sprint("更新研选专栏失败sourceId: ", sourceId), 2) } }() detail, e := models.GetYanxuanSpecialItemById(sourceId) if e != nil { err = errors.New("GetArticleInfoOtherByArticleId" + e.Error()) return } content := html.UnescapeString(detail.Content) doc, e := goquery.NewDocumentFromReader(strings.NewReader(content)) if e != nil { err = errors.New("goquery.NewDocumentFromReader" + e.Error()) return } bodyText := doc.Text() item := new(ElasticComprehensiveDetail) item.SourceId = detail.Id item.Source = utils.CYGX_OBJ_YANXUANSPECIAL item.Title = detail.Title item.PublishDate = detail.PublishTime item.BodyText = bodyText item.Abstract = bodyText item.IndustryName = detail.IndustryTags item.SubjectNames = detail.CompanyTags + detail.Tags if detail.Status == 3 { EsAddOrEditComprehensiveData(item) //如果发布了就新增 } else { EsDeleteComprehensiveData(item) // 没有发布就删除 } return } // 新增和修改数据 func EsAddOrEditComprehensiveData(item *ElasticComprehensiveDetail) (err error) { indexName := utils.IndexNameComprehensive //return defer func() { if err != nil { fmt.Println(err, item.SourceId) //go utils.SendAlarmMsg("更新综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2) } }() client := utils.Client mustMap := make([]interface{}, 0) mustMap = append(mustMap, map[string]interface{}{ "term": map[string]interface{}{ "SourceId": item.SourceId, }, }) mustMap = append(mustMap, map[string]interface{}{ "term": map[string]interface{}{ "Source": item.Source, }, }) queryMap := map[string]interface{}{ "query": map[string]interface{}{ "bool": map[string]interface{}{ "must": mustMap, }, }, } requestTotalHits := client.Count(indexName).BodyJson(queryMap) total, e := requestTotalHits.Do(context.Background()) if e != nil { err = errors.New("requestTotalHits.Do(context.Background()), Err: " + e.Error()) return } //return //根据来源以及ID ,判断内容是否存在,如果存在就新增,如果不存在就修改 if total == 0 { resp, e := client.Index().Index(indexName).BodyJson(item).Do(context.Background()) if e != nil { err = errors.New("client.Index().Index(indexName).BodyJson(item).Do(context.Background()), Err: " + e.Error()) return } if resp.Status == 0 && resp.Result == "created" { //fmt.Println("新增成功") //err = nil return } else { //err = errors.New(fmt.Sprint(resp)) err = errors.New(fmt.Sprint("articleId", item.SourceId)) return } } else { //拼接需要改动的前置条件 bool_query := elastic.NewBoolQuery() bool_query.Must(elastic.NewTermQuery("SourceId", item.SourceId)) bool_query.Must(elastic.NewTermQuery("Source", item.Source)) //设置需要改动的内容 var script string script += fmt.Sprint("ctx._source['SubjectNames'] = '", item.SubjectNames, "';") script += fmt.Sprint("ctx._source['PublishDate'] = '", item.PublishDate, "';") script += fmt.Sprint("ctx._source['IsSummary'] = ", item.IsSummary, ";") script += fmt.Sprint("ctx._source['Abstract'] = '", item.Abstract, "';") script += fmt.Sprint("ctx._source['Title'] = '", item.Title, "';") script += fmt.Sprint("ctx._source['BodyText'] = '", item.BodyText, "';") script += fmt.Sprint("ctx._source['Annotation'] = '", item.Annotation, "';") script += fmt.Sprint("ctx._source['IndustryName'] = '", item.IndustryName, "'") _, e = client.UpdateByQuery(indexName). Query(bool_query). Script(elastic.NewScriptInline(script)). Refresh("true"). Do(context.Background()) if e != nil && e.Error() != "elastic: Error 400 (Bad Request): compile error [type=script_exception]" { //文本内容过长的时候,修改会报 400 的错误,暂时先不处理 //fmt.Println("err", e.Error()) ////err = e //err = errors.New("client.UpdateByQuery(indexName), Err: " + e.Error()) return } } return } // 删除数据 func EsDeleteComprehensiveData(item *ElasticComprehensiveDetail) (err error) { defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("删除数据综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2) } }() indexName := utils.IndexNameComprehensive client := utils.Client //拼接需要删除的前置条件 bool_query := elastic.NewBoolQuery() bool_query.Must(elastic.NewTermQuery("SourceId", item.SourceId)) bool_query.Must(elastic.NewTermQuery("Source", item.Source)) _, e := client.DeleteByQuery(indexName). Query(bool_query). Do(context.Background()) if e != nil { err = errors.New(" client.DeleteByQuery(indexName), Err: " + e.Error()) return } return } func EsComprehensiveSearch(keyWord string, startSize, pageSize int) (result []*SearchComprehensiveItem, total int64, err error) { indexName := utils.IndexNameComprehensive client := utils.Client keyWordArr, err := GetIndustryMapNameSliceV3(keyWord) keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr) keyWordLen := len(keyWordArr) if keyWordLen <= 0 { keyWordArr = append(keyWordArr, keyWord) keyWordLen = len(keyWordArr) } //Es 的高级查询有 自定义排序 文档一时半会儿撸不懂,先做多次查询手动过滤 2023.2.2 //ikType 查询方式 ,0:查所有 、 1:查询键入词 、 2:查询除了查询键入词之外的联想词 mustMap := make([]interface{}, 0) shouldMap := make(map[string]interface{}, 0) shouldMapquery := make([]interface{}, 0) mustNotMap := make([]interface{}, 0) shouldNotMap := make(map[string]interface{}, 0) shouldNotMapquery := make([]interface{}, 0) // @Param OrderColumn query int true "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 " //keyWordWeight := GetWeight(keyWordLen) var boost int //lenkeyWordArr := len(keyWordArr) for k, v := range keyWordArr { if k > 0 { continue } if k == 0 { boost = 2 * 1000 } else { boost = 1 } if v != "" { shouldMapquery = append(shouldMapquery, map[string]interface{}{ "function_score": map[string]interface{}{ "query": map[string]interface{}{ "multi_match": map[string]interface{}{ //"boost": (lenkeyWordArr - k) * boost, //给查询的值赋予权重 "boost": boost, //给查询的值赋予权重 "fields": []interface{}{"Title"}, "query": v, }, }, }, }) shouldMapquery = append(shouldMapquery, map[string]interface{}{ "function_score": map[string]interface{}{ "query": map[string]interface{}{ "multi_match": map[string]interface{}{ "boost": boost, //给查询的值赋予权重 "fields": []interface{}{"Abstract"}, "query": v, }, }, }, }) shouldMapquery = append(shouldMapquery, map[string]interface{}{ "function_score": map[string]interface{}{ "query": map[string]interface{}{ "multi_match": map[string]interface{}{ "boost": boost, //给查询的值赋予权重 "fields": []interface{}{"Annotation"}, "query": v, }, }, }, }) //shouldMapquery = append(shouldMapquery, map[string]interface{}{ // "function_score": map[string]interface{}{ // "query": map[string]interface{}{ // "multi_match": map[string]interface{}{ // //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重 // "boost": boost, //给查询的值赋予权重 // "fields": []interface{}{"BodyText"}, // "query": v, // }, // }, // }, //}) shouldMapquery = append(shouldMapquery, map[string]interface{}{ "function_score": map[string]interface{}{ "query": map[string]interface{}{ "multi_match": map[string]interface{}{ //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重 "boost": boost, //给查询的值赋予权重 "fields": []interface{}{"IndustryName"}, "query": v, }, }, }, }) shouldMapquery = append(shouldMapquery, map[string]interface{}{ "function_score": map[string]interface{}{ "query": map[string]interface{}{ "multi_match": map[string]interface{}{ //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重 "boost": boost, //给查询的值赋予权重 "fields": []interface{}{"SubjectNames"}, "query": v, }, }, }, }) } } shouldMap = map[string]interface{}{ "should": shouldMapquery, } shouldNotMap = map[string]interface{}{ "should": shouldNotMapquery, } //排序 sortMap := make([]interface{}, 0) //时间 sortMap = append(sortMap, map[string]interface{}{ "PublishDate": map[string]interface{}{ "order": "desc", }, }) //sortMap = append(sortMap, map[string]interface{}{ // "_score": map[string]interface{}{ // "order": "desc", // }, //}) //高亮 highlightMap := make(map[string]interface{}, 0) highlightMap = map[string]interface{}{ "fields": map[string]interface{}{ //"BodyText": map[string]interface{}{}, "Title": map[string]interface{}{}, "Abstract": map[string]interface{}{}, "Annotation": map[string]interface{}{}, }, //样式 红色 "post_tags": []interface{}{""}, "pre_tags": []interface{}{""}, "fragment_size": 50, } mustMap = append(mustMap, map[string]interface{}{ "bool": shouldMap, }) mustNotMap = append(mustNotMap, map[string]interface{}{ "bool": shouldNotMap, }) queryMap := map[string]interface{}{ "query": map[string]interface{}{ "bool": map[string]interface{}{ "must": mustMap, }, }, } queryMap["sort"] = sortMap queryMap["from"] = startSize queryMap["size"] = pageSize queryMap["highlight"] = highlightMap //jsonBytes, _ := json.Marshal(queryMap) //fmt.Println(string(jsonBytes)) //utils.FileLog.Info(string(jsonBytes)) request := client.Search(indexName).Source(queryMap) // sets the JSON request searchByMatch, err := request.Do(context.Background()) if searchByMatch != nil { if searchByMatch.Hits != nil { for _, v := range searchByMatch.Hits.Hits { var isAppend bool articleJson, err := v.Source.MarshalJSON() if err != nil { return nil, 0, err } article := new(ElasticComprehensiveDetail) err = json.Unmarshal(articleJson, &article) if err != nil { return nil, 0, err } //fmt.Println(article.SourceId, article.Title, article.Source) searchItem := new(SearchComprehensiveItem) searchItem.SourceId = article.SourceId if len(v.Highlight["Annotation"]) > 0 { for _, vText := range v.Highlight["Annotation"] { searchItem.Body = append(searchItem.Body, vText) } } if len(v.Highlight["Abstract"]) > 0 { for _, vText := range v.Highlight["Abstract"] { searchItem.Body = append(searchItem.Body, vText) } } if len(v.Highlight["BodyText"]) > 0 { for _, vText := range v.Highlight["BodyText"] { searchItem.Body = append(searchItem.Body, vText) } } //searchItem.IsSummary = article.IsSummary //if len(searchItem.Body) == 0 { // bodyRune := []rune(article.BodyText) // bodyRuneLen := len(bodyRune) // if bodyRuneLen > 100 { // bodyRuneLen = 100 // } // body := string(bodyRune[:bodyRuneLen]) // searchItem.Body = []string{body} //} var title string if len(v.Highlight["Title"]) > 0 { title = v.Highlight["Title"][0] } else { title = article.Title } searchItem.Title = title searchItem.Source = article.Source searchItem.PublishDate = article.PublishDate if !isAppend { result = append(result, searchItem) } } } total = searchByMatch.Hits.TotalHits.Value } return } func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserItem) (items []*models.CygxResourceDataResp, err error) { var condition string var pars []interface{} uid := user.UserId titleHighlight := make(map[int]string) bodyHighlight := make(map[int][]string) yanXuanbodyHighlight := make(map[int][]string) //var bodyHighlight []string mapItems := make(map[string]*models.CygxResourceDataResp) for _, v := range list { //预处理文章 item := new(models.CygxResourceDataResp) item.SourceId = v.SourceId item.Source = v.Source //if v.IsSummary == 1 { item.BodyHighlight = v.Body titleHighlight[v.SourceId] = v.Title bodyHighlight[v.SourceId] = v.Body //fmt.Println(v.Title) //} else { // item.BodyHighlight = make([]string, 0) //} item.PublishDate = utils.TimeRemoveHms2(v.PublishDate) mapItems[fmt.Sprint(v.Source, v.SourceId)] = item } var articleIds []int var newchartIds []int var roadshowIds []string var activityIds []int var activityvideoIds []string var activityvoiceIds []string var activityspecialIds []int var researchsummaryIds []int var minutessummaryIds []int var meetingreviewchaptIds []int var productinteriorIds []int var industrialResourceIdsHz []int // 弘则产业资源包 var industrialResourceIdsYx []int // 研选产业资源包 var yanxuanSpecialIds []int // 研选专栏 var askserieVideoIds []string //问答系列视频 var reportselectionIds []int //报告精选 var ficcreporrtIds []string //FICC研报 //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt "` for _, v := range list { if v.Source == "article" { articleIds = append(articleIds, v.SourceId) } else if v.Source == "newchart" { newchartIds = append(newchartIds, v.SourceId) } else if v.Source == "roadshow" { roadshowIds = append(roadshowIds, strconv.Itoa(v.SourceId)) } else if v.Source == "activity" { activityIds = append(activityIds, v.SourceId) } else if v.Source == "activityvideo" { activityvideoIds = append(activityvideoIds, strconv.Itoa(v.SourceId)) } else if v.Source == "activityvoice" { activityvoiceIds = append(activityvoiceIds, strconv.Itoa(v.SourceId)) } else if v.Source == "activityspecial" { activityspecialIds = append(activityspecialIds, v.SourceId) } else if v.Source == "researchsummary" { researchsummaryIds = append(researchsummaryIds, v.SourceId) } else if v.Source == "minutessummary" { minutessummaryIds = append(minutessummaryIds, v.SourceId) } else if v.Source == "meetingreviewchapt" { meetingreviewchaptIds = append(meetingreviewchaptIds, v.SourceId) } else if v.Source == "productinterior" { productinteriorIds = append(productinteriorIds, v.SourceId) } else if v.Source == "industrialsourceHz" { industrialResourceIdsHz = append(industrialResourceIdsHz, v.SourceId) } else if v.Source == "industrialsourceYx" { industrialResourceIdsYx = append(industrialResourceIdsYx, v.SourceId) } else if v.Source == utils.CYGX_OBJ_YANXUANSPECIAL { yanxuanSpecialIds = append(yanxuanSpecialIds, v.SourceId) yanXuanbodyHighlight[v.SourceId] = v.Body } else if v.Source == utils.CYGX_OBJ_ASKSERIEVIDEO { askserieVideoIds = append(askserieVideoIds, strconv.Itoa(v.SourceId)) } else if v.Source == "reportselection" { reportselectionIds = append(reportselectionIds, v.SourceId) } else if v.Source == utils.CYGX_OBJ_FICC_REPORT { ficcreporrtIds = append(ficcreporrtIds, strconv.Itoa(v.SourceId)) } } //处理文章 if len(articleIds) > 0 { pars = make([]interface{}, 0) condition = ` AND a.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)` pars = append(pars, articleIds) listArticle, e := models.GetHomeList(condition, pars, 0, len(articleIds)) if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } listArticle, e = HandleArticleCategoryImg(listArticle) if e != nil { err = errors.New("HandleArticleCategoryImg, Err: " + e.Error()) return } for _, v := range listArticle { v.Body = "" v.BodyHtml = "" if titleHighlight[v.ArticleId] != "" { v.Title = titleHighlight[v.ArticleId] } if len(bodyHighlight[v.ArticleId]) > 0 { v.Abstract = "" v.Annotation = "" v.BodyHighlight = bodyHighlight[v.ArticleId] } else { v.BodyHighlight = make([]string, 0) } mapItems[fmt.Sprint("article", v.ArticleId)].Article = v } } //处理晨会精华 if len(meetingreviewchaptIds) > 0 { //pars = make([]interface{}, 0) //condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)` //pars = append(pars, meetingreviewchaptIds) listrMeet, e := GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds) if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } for _, v := range listrMeet { v.Content = AnnotationHtml(v.Content) v.PublishTime = utils.TimeRemoveHms2(v.PublishTime) mapItems[fmt.Sprint("meetingreviewchapt", v.Id)].Meetingreviewchapt = v } } //处理上周纪要汇总 if len(minutessummaryIds) > 0 { pars = make([]interface{}, 0) condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(minutessummaryIds)) + `)` pars = append(pars, minutessummaryIds) listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_minutes_summary", pars, 0, len(minutessummaryIds)) if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } for _, v := range listresearchsummary { v.PublishDate = utils.TimeRemoveHms2(v.PublishDate) mapItems[fmt.Sprint("minutessummary", v.ArticleId)].Minutessummary = v } } //处理本周纪要汇总 if len(researchsummaryIds) > 0 { pars = make([]interface{}, 0) condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(researchsummaryIds)) + `)` pars = append(pars, researchsummaryIds) listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_research_summary", pars, 0, len(researchsummaryIds)) if e != nil { err = errors.New("GetReportSelectionListHome, Err: " + e.Error()) return } for _, v := range listresearchsummary { v.PublishDate = utils.TimeRemoveHms2(v.PublishDate) mapItems[fmt.Sprint("researchsummary", v.ArticleId)].Researchsummary = v } } //处理产品内测 if len(productinteriorIds) > 0 { pars = make([]interface{}, 0) condition = ` AND art.status = 1 AND art.product_interior_id IN (` + utils.GetOrmInReplace(len(productinteriorIds)) + `)` pars = append(pars, productinteriorIds) listProductInterior, e := models.GetCygxProductInteriorList(condition, pars, 0, len(productinteriorIds)) if e != nil { err = errors.New("GetCygxProductInteriorList, Err: " + e.Error()) return } for _, v := range listProductInterior { v.Body = ProductInteriorHtml(v.Body) v.PublishTime = utils.TimeRemoveHms2(v.PublishTime) mapItems[fmt.Sprint("productinterior", v.ProductInteriorId)].ProductInterior = v } } //处理报告精选 lenreportselectionIds := len(reportselectionIds) if lenreportselectionIds > 0 { pars = make([]interface{}, 0) condition = ` AND article_id IN (` + utils.GetOrmInReplace(lenreportselectionIds) + `)` pars = append(pars, reportselectionIds) listreportselection, e := models.GetReportSelectionList(condition, pars, 0, lenreportselectionIds) if e != nil { err = errors.New("GetReportSelectionList, Err: " + e.Error()) return } mapPv := GetCygxReportHistoryRecordListMap(reportselectionIds, "bgjx") for _, v := range listreportselection { v.Title += "(第" + v.Periods + "期)" v.MarketStrategy = AnnotationHtml(v.MarketStrategy) v.PublishDate = utils.TimeRemoveHms2(v.PublishDate) v.Pv = mapPv[v.ArticleId] mapItems[fmt.Sprint("reportselection", v.ArticleId)].ReportSelection = v } } detail, e := models.GetConfigByCode("city_img_url") if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } detailChart, e := models.GetConfigByCode("chart_img_url") if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } addressList := strings.Split(detail.ConfigValue, "{|}") mapAddress := make(map[string]string) chartList := strings.Split(detailChart.ConfigValue, "{|}") mapChart := make(map[string]string) var cityName string var chartName string var imgUrl string var imgUrlChart string for _, v := range addressList { vslice := strings.Split(v, "_") cityName = vslice[0] imgUrl = vslice[len(vslice)-1] mapAddress[cityName] = imgUrl } for _, v := range chartList { vslice := strings.Split(v, "_") chartName = vslice[0] imgUrlChart = vslice[len(vslice)-1] mapChart[chartName] = imgUrlChart } var imgUrlResp string //处理活动 if len(activityIds) > 0 { for _, vss := range activityIds { imgUrlResp += strconv.Itoa(vss) + "," } pars = make([]interface{}, 0) condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)` pars = append(pars, activityIds) activityList, e := models.GetActivityListNew(condition, pars, uid, 0, len(activityIds), 0, 0, "") if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } //处理不同的报名方式按钮回显 mapActivitySignup, e := GetActivitySignupResp(activityIds, user) if e != nil { e = errors.New("GetActivitySignupResp, Err: " + e.Error()) return } activityTypeIdMap := GetActivityTypeIdMap() var activityListRersp []*models.ActivityDetail for _, v := range activityList { v.SignupType = mapActivitySignup[v.ActivityId] v.ActivityType = activityTypeIdMap[v.ActivityTypeId] // 线上还是线下 activityListRersp = append(activityListRersp, ActivityButtonShow(v)) } for _, v := range activityListRersp { if v == nil { continue } if v.ActivityType == 0 { if mapAddress[v.City] != "" { imgUrlResp = mapAddress[v.City] } else { imgUrlResp = mapAddress["其它"] } } else { if mapChart[v.ChartPermissionName] != "" { imgUrlResp = mapChart[v.ChartPermissionName] } } v.SourceType = 1 v.Expert, _ = GetReportContentTextSub(v.Expert) mapItems[fmt.Sprint("activity", v.ActivityId)].Activity = v } } //产业资源包 if len(industrialResourceIdsHz) > 0 { pars = make([]interface{}, 0) var industrialResourceIdstring []string for _, v := range industrialResourceIdsHz { industrialResourceIdstring = append(industrialResourceIdstring, strconv.Itoa(v)) } industrialId := strings.Join(industrialResourceIdstring, ",") condition = ` AND m.industrial_management_id IN (` + industrialId + `) AND a.article_type_id = 0 ` listIndustrialResourceIds, e := models.GetSearchResourceList(user.UserId, condition, 0, len(industrialResourceIdsHz)) if e != nil { err = errors.New("GetSearchResourceList, Err: " + e.Error()) return } //合并产业关联的标的 listSubjcet, e := models.GetIndustrialSubjectAllByIndustrialId(industrialResourceIdsHz) if e != nil { e = errors.New("GetIndustrialSubjectAllByIndustrialId, Err: " + e.Error()) return } mapIndustrial := make(map[string]int) for _, v := range listSubjcet { for k2, v2 := range listIndustrialResourceIds { if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] == 0 { listIndustrialResourceIds[k2].IndustrialSubjectList = append(listIndustrialResourceIds[k2].IndustrialSubjectList, v) } } } for _, v := range listIndustrialResourceIds { if v.TimeLineData == "" { v.ListTimeLine = make([]models.TimeLineReportResp, 0) } else { if err = json.Unmarshal([]byte(v.TimeLineData), &v.ListTimeLine); err != nil { e = errors.New("Unmarshal, Err: " + e.Error()) //return } } v.Source = 1 mapItems[fmt.Sprint("industrialsourceHz", v.IndustrialManagementId)].IndustrialResource = v } } if len(industrialResourceIdsYx) > 0 { pars = make([]interface{}, 0) var industrialResourceIdstring []string for _, v := range industrialResourceIdsYx { industrialResourceIdstring = append(industrialResourceIdstring, strconv.Itoa(v)) } industrialId := strings.Join(industrialResourceIdstring, ",") condition = ` AND m.industrial_management_id IN (` + industrialId + `) AND a.article_type_id > 0 ` listIndustrialResourceIds, e := models.GetSearchResourceList(user.UserId, condition, 0, len(industrialResourceIdsYx)) if e != nil { err = errors.New("GetSearchResourceList, Err: " + e.Error()) return } //合并产业关联的标的 listSubjcet, e := models.GetIndustrialSubjectAllByIndustrialId(industrialResourceIdsYx) if e != nil { e = errors.New("GetIndustrialSubjectAllByIndustrialId, Err: " + e.Error()) return } mapIndustrial := make(map[string]int) for _, v := range listSubjcet { for k2, v2 := range listIndustrialResourceIds { if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] == 0 { listIndustrialResourceIds[k2].IndustrialSubjectList = append(listIndustrialResourceIds[k2].IndustrialSubjectList, v) } } } for _, v := range listIndustrialResourceIds { v.Source = 2 mapItems[fmt.Sprint("industrialsourceYx", v.IndustrialManagementId)].IndustrialResource = v } } //处理图表 if len(newchartIds) > 0 { pars = make([]interface{}, 0) condition = ` AND a.chart_id IN (` + utils.GetOrmInReplace(len(newchartIds)) + `)` pars = append(pars, newchartIds) chartDateList, e := models.GetChartListCollectionNew(condition, pars, uid, 0, len(newchartIds)) if e != nil { err = errors.New("GetResourceDataList, Err: " + e.Error()) return } for _, v := range chartDateList { mapItems[fmt.Sprint("newchart", v.ChartId)].Newchart = v } } //处理专项调研 if len(activityspecialIds) > 0 { pars = make([]interface{}, 0) condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityspecialIds)) + `)` pars = append(pars, activityspecialIds) activitySpeciallist, e := models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, 0, len(activityspecialIds)) if e != nil { err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error()) return } UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId) if e != nil { err = errors.New("GetSpecialTripUserMap, Err: " + e.Error()) return } for _, v := range activitySpeciallist { if mapChart[v.ChartPermissionName] != "" { imgUrlResp = mapChart[v.ChartPermissionName] } if _, ok := UserMap[v.ActivityId]; ok { v.IsTrip = 1 } if v.Days == 0 { v.TripStatus = 1 v.TripImgLink = v.TripImgLink } else { v.TripStatus = 2 v.TripImgLink = v.TripImgLinkFix v.ActivityTimeText = v.ActivityTimeTextByDay } resultTimeStart := utils.StrTimeToTime(v.ActivityTime) //时间字符串格式转时间格式 resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式 if resultTimeStart.After(time.Now()) { v.ActiveState = 1 } else if time.Now().After(resultTimeEnd) { v.ActiveState = 3 } else { v.ActiveState = 2 } v.ImgUrl = imgUrlResp mapItems[fmt.Sprint("activityspecial", v.ActivityId)].Activityspecial = v } } if len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds)+len(askserieVideoIds) > 0 { audioIdstr := strings.Join(activityvoiceIds, ",") activityVideoIdsStr := strings.Join(activityvideoIds, ",") roadshowIdsStr := strings.Join(roadshowIds, ",") askserieVideoIdsStr := strings.Join(askserieVideoIds, ",") list, _, e := GetMicroRoadShowMycollectV12(len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds)+len(askserieVideoIds), 0, audioIdstr, activityVideoIdsStr, roadshowIdsStr, askserieVideoIdsStr, user) if e != nil { err = errors.New("GetMicroRoadShowMycollectV12, Err: " + e.Error()) return } // 用户权限 authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId) if e != nil { err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error()) return } // 获取默认图配置 audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig() if e != nil { err = errors.New("GetMicroRoadShowDefaultImgConfig, Err: " + e.Error()) return } //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"` for i := range list { // 权限 au := new(models.UserPermissionAuthInfo) au.SellerName = authInfo.SellerName au.SellerMobile = authInfo.SellerMobile au.HasPermission = authInfo.HasPermission au.OperationMode = authInfo.OperationMode if au.HasPermission == 1 { // 非宏观权限进一步判断是否有权限 if list[i].ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, list[i].ChartPermissionName) { au.HasPermission = 2 } } // 无权限的弹框提示 if au.HasPermission != 1 { if au.OperationMode == UserPermissionOperationModeCall { if list[i].Type == 1 { au.PopupMsg = UserPermissionPopupMsgCallActivity } else { au.PopupMsg = UserPermissionPopupMsgCallMicroVideo } } else { if list[i].Type == 1 { au.PopupMsg = UserPermissionPopupMsgApplyActivity } else { au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo } } } list[i].AuthInfo = au list[i].PublishTime = utils.StrTimeToTime(list[i].PublishTime).Format(utils.FormatDate) // 默认图 if list[i].BackgroundImg == "" { if list[i].Type == 1 { list[i].BackgroundImg = audioMap[list[i].ChartPermissionId] } else { list[i].BackgroundImg = videoMap[list[i].ChartPermissionId] } } // 分享图 if list[i].ShareImg == "" { if list[i].Type == 1 { list[i].ShareImg = audioShareMap[list[i].ChartPermissionId] } else { list[i].ShareImg = videoShareMap[list[i].ChartPermissionId] } } } //Type int `description:"类型: 1-音频; 2-活动视频; 3-产业视频"` for _, item := range list { if item.Type == 1 { mapItems[fmt.Sprint("activityvoice", item.Id)].Activityvoice = item } else if item.Type == 2 { mapItems[fmt.Sprint("activityvideo", item.Id)].Activityvideo = item } else if item.Type == 3 { mapItems[fmt.Sprint("roadshow", item.Id)].Roadshow = item } else if item.Type == 4 { mapItems[fmt.Sprint(utils.CYGX_OBJ_ASKSERIEVIDEO, item.Id)].AskserieVideo = item } } } //处理研选专栏 lenyanxuanSpecialIds := len(yanxuanSpecialIds) if lenyanxuanSpecialIds > 0 { pars = make([]interface{}, 0) condition = ` AND a.id IN (` + utils.GetOrmInReplace(lenyanxuanSpecialIds) + `) ` pars = append(pars, yanxuanSpecialIds) listyanxuanSpecial, e := models.GetYanxuanSpecialList(user.UserId, condition, pars, 0, 0) if e != nil { err = errors.New("GetYanxuanSpecialList, Err: " + e.Error()) return } for _, v := range listyanxuanSpecial { v.PublishTime = utils.TimeRemoveHms2(v.PublishTime) v.Annotation, _ = GetReportContentTextSubNew(v.Content) if len(yanXuanbodyHighlight[v.Id]) > 0 { v.BodyHighlight = yanXuanbodyHighlight[v.Id] } else { v.BodyHighlight = append(v.BodyHighlight, v.Annotation) } v.Annotation = "" //强制置空,兼容前端优先级 // Source PublishDate 字段兼容前端样式 v.Source = utils.CYGX_OBJ_YANXUANSPECIAL v.PublishDate = v.PublishTime mapItems[fmt.Sprint(utils.CYGX_OBJ_YANXUANSPECIAL, v.Id)].YanxuanSpecial = v } } //处理FICC研报 if len(ficcreporrtIds) > 0 { pars = make([]interface{}, 0) condition = ` AND a.report_id IN (` + utils.GetOrmInReplace(len(ficcreporrtIds)) + `)` pars = append(pars, ficcreporrtIds) listArticle, e := models.GetHomeList(condition, pars, 0, len(ficcreporrtIds)) if e != nil { err = errors.New("GetHomeList, Err: " + e.Error()) return } listArticle, e = HandleArticleCategoryImg(listArticle) if e != nil { err = errors.New("HandleArticleCategoryImg, Err: " + e.Error()) return } for _, v := range listArticle { //fmt.Println(v.ArticleId) v.Body = "" v.Source = 0 //配合前端这里强制改为 0 v.ArticleResponse = 0 //配合前端这里强制改为 0 //v.Source = utils.CYGX_OBJ_YANXUANSPECIAL mapItems[fmt.Sprint("ficcreport", v.ReportId)].FiccReport = v } //listArticle, e = HandleArticleCategoryImg(listArticle) //if e != nil { // err = errors.New("HandleArticleCategoryImg, Err: " + e.Error()) // return //} //for _, v := range listArticle { // //reportInfoItem := new(ficc_report.ReportDetail) // //reportInfoItem.ReportInfo.ReportId = v.ReportId // //reportInfoItem.ReportInfo.PublishTime = utils.StrTimeToTime(v.PublishDate) // //reportInfoItem.ReportInfo.Title = v.Title // mapItems[fmt.Sprint("ficcreport", v.ArticleId)].FiccReport = v // //} } for _, vList := range list { for _, v := range mapItems { //如果这些类型都为空,那么就不合并 if v.Article == nil && v.Newchart == nil && v.Roadshow == nil && v.Activity == nil && v.Activityvideo == nil && v.Activityvoice == nil && v.Activityspecial == nil && v.Researchsummary == nil && v.Minutessummary == nil && v.Meetingreviewchapt == nil && v.ProductInterior == nil && v.IndustrialResource == nil && v.YanxuanSpecial == nil && v.AskserieVideo == nil && v.ReportSelection == nil && v.FiccReport == nil { continue } if v.SourceId == vList.SourceId && v.Source == vList.Source { items = append(items, v) } } } for _, v := range items { if v.IndustrialResource != nil { v.Source = "industrialsource" } } return } func SqlComprehensiveSearch(keyWord string, startSize, pageSize int) (result []*SearchComprehensiveItem, total int, err error) { listListNoEnd, e := models.GetActivityIdListNoEnd() var activityIds []string for _, v := range listListNoEnd { activityIds = append(activityIds, strconv.Itoa(v.ActivityId)) } activityIds = append(activityIds, "0") conditionActivity := " AND IF ( source IN('activity') , source_id IN (" + strings.Join(activityIds, ",") + ") ,1=1 )" keyWord = "%" + keyWord + "%" var conditionTitle string var parsTitle []interface{} conditionTitle = " AND is_hide = 0 AND search_title LIKE ? AND IF ( source IN('activityvoice','activityvideo') , chart_permission_id != 31 ,1=1 ) " + conditionActivity parsTitle = append(parsTitle, keyWord) totalTitle, e := models.GetResourceDataCount(conditionTitle, parsTitle) if e != nil { err = errors.New("GetResourceDataCount, Err: " + e.Error()) return } var conditionContent string var parsContent []interface{} conditionContent = " AND is_hide = 0 AND search_content LIKE ? AND search_title NOT LIKE ? AND IF ( source IN('activityvoice','activityvideo') , chart_permission_id != 31 ,1=1 ) " + conditionActivity parsContent = append(parsContent, keyWord, keyWord) totalContent, e := models.GetResourceDataCount(conditionContent, parsContent) if e != nil { err = errors.New("AddCygxArticleViewRecord, Err: " + e.Error()) return } var searchTotal int searchTotal = (startSize/pageSize + 1) * pageSize var list []*models.CygxResourceData //fmt.Println("totalTitle", totalTitle) //fmt.Println("totalContent", totalContent) //fmt.Println(searchTotal) if totalTitle >= searchTotal { //全部都是标题搜索 list, e = models.GetResourceDataListCondition(conditionTitle, parsTitle, startSize, pageSize) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetResourceDataListCondition, Err: " + e.Error()) return } } else if totalTitle <= searchTotal-pageSize { //全部都是内容搜索 startSize = startSize - totalTitle list, e = models.GetResourceDataListCondition(conditionContent, parsContent, startSize, pageSize) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetResourceDataListCondition, Err: " + e.Error()) return } } else { //一半标题搜索,一半内容搜索 list, e = models.GetResourceDataListCondition(conditionTitle, parsTitle, startSize, pageSize) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetResourceDataListCondition, Err: " + e.Error()) return } listContent, e := models.GetResourceDataListCondition(conditionContent, parsContent, 0, pageSize-totalContent%pageSize) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetResourceDataListCondition, Err: " + e.Error()) return } for _, v := range listContent { list = append(list, v) } } for _, v := range list { item := new(SearchComprehensiveItem) item.SourceId = v.SourceId item.Source = v.Source result = append(result, item) } total = totalTitle + totalContent return }