Ver código fonte

Merge branch 'cygx_10.6' of http://8.136.199.33:3000/hongze/hz_crm_api

xingzai 1 ano atrás
pai
commit
a0b83cd7a9

+ 10 - 2
controllers/cygx/activity.go

@@ -9,6 +9,7 @@ import (
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services"
 	cygxService "hongze/hz_crm_api/services/cygx"
+	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/utils"
 	"strconv"
 	"strings"
@@ -669,10 +670,12 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 				//更新活动音频
 				if int(voiceIdNew) > 0 {
 					go cygxService.UpdateResourceData(int(voiceIdNew), "activityvoice", "add", activityInfo.ActivityTime)
+					go elastic.AddComprehensiveActivityVoice(activityId) //更新ES中的活动音频内容
 				}
 				//更新活动视频
 				if int(videoIdNew) > 0 {
 					go cygxService.UpdateResourceData(int(videoIdNew), "activityvideo", "add", activityInfo.ActivityTime)
+					go elastic.AddComprehensiveActivityVideo(activityId) //更新ES中的活动视频内容
 				}
 
 				errAct = err
@@ -701,6 +704,7 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 						go cygxService.DoActivityOnenIdWxTemplateMsg(activityId)
 					}
 				}
+
 				//已结束或者进行中的活动修改时间后,修改活动状态以及重新发送邮件附件
 				if activeState != 0 && activeState != 1 {
 					resultTime := utils.StrTimeToTime(item.ActivityTime) //时间字符串格式转时间格式
@@ -723,9 +727,10 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 				if activityInfo.ActivityName != item.ActivityName || activityInfo.SigninImg == "" {
 					go cygxService.MakeActivitySigninImg(req.ActivityId)
 				}
-				//如果活动之前是发布的状态,那么就对公司的扣点进行更新(涉及到新老公司的扣点返点,不放在Redis统一处理了)
+
 				if activityInfo.PublishStatus == 1 {
-					go cygxService.UpdateYanXuanActivityPointsBillOldComapny(activityInfo, AdminUser.AdminId, itemPointsSet, itemPointsSetOld) //活动发布以及取消发布处理研选扣点
+					go cygxService.UpdateYanXuanActivityPointsBillOldComapny(activityInfo, AdminUser.AdminId, itemPointsSet, itemPointsSetOld) //活动发布以及取消发布处理研选扣点,如果活动之前是发布的状态,那么就对公司的扣点进行更新(涉及到新老公司的扣点返点,不放在Redis统一处理了)
+					go elastic.AddComprehensiveActivity(item.ActivityId)                                                                       // Es添加活动
 				}
 
 				//如果活动之前是未发布的状态,现在又发布了那么就对公司的扣点进行更新
@@ -757,6 +762,7 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 				go cygxService.UpdateResourceData(v, "activity", "add", time.Now().Format(utils.FormatDateTime))
 				go cygxService.YiDongSaveRoadshowDetail(v)
 				go cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(v, AdminUser.AdminId, 1) //活动发布以及取消发布处理研选扣点
+				go elastic.AddComprehensiveActivity(v)                                                    // Es添加活动
 			}
 			go cygxService.MakeActivitySigninImg(v)
 		}
@@ -1220,6 +1226,8 @@ func (this *ActivityCoAntroller) PublishAndCancel() {
 		go cygxService.YiDongUpdateActivityPublish(activityId)
 	}
 	go cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(activityId, AdminUser.AdminId, item.PublishStatus) //活动发布以及取消发布处理研选扣点
+
+	go elastic.AddComprehensiveActivity(activityId) // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 5 - 7
controllers/cygx/activity_special.go

@@ -10,6 +10,7 @@ import (
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services"
 	cygxService "hongze/hz_crm_api/services/cygx"
+	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/utils"
 	"os"
 	"path/filepath"
@@ -276,6 +277,7 @@ func (this *ActivitySpecialCoAntroller) PreserveAndPublish() {
 		go services.SendWxMsgWithCygxActivitySpecial(activityId)
 		go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
 	}
+	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -536,6 +538,7 @@ func (this *ActivitySpecialCoAntroller) PublishAndCancel() {
 		go cygxService.DetermineTripCancel(activityId)
 		go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
 	}
+	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -1094,6 +1097,7 @@ func (this *ActivitySpecialCoAntroller) TripPreserveAndPublish() {
 			cygxService.DetermineTripChange(activityId, "dateList", changeMsg)
 		}
 	}
+	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -1167,13 +1171,6 @@ func (this *ActivitySpecialCoAntroller) Offline() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
-	//item.ActivityId = req.ActivityId
-	//err = cygx.EditActivitySpecialIsOffline(item)
-	//if err != nil {
-	//	br.Msg = "操作失败"
-	//	br.ErrMsg = "操作失败,Err:" + err.Error()
-	//	return
-	//}
 	//模板消息推送
 	if item.PublishStatus == 1 {
 		go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
@@ -1181,6 +1178,7 @@ func (this *ActivitySpecialCoAntroller) Offline() {
 	} else {
 		go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
 	}
+	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 5 - 1
controllers/cygx/micro_roadshow.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/cygx"
 	cygxService "hongze/hz_crm_api/services/cygx"
+	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/utils"
 	"os"
 	"path/filepath"
@@ -276,6 +277,7 @@ func (this *MicroRoadshowController) Add() {
 		}
 
 		go cygxService.UpdateResourceData(req.VideoId, "roadshow", "update", publishDate.Format(utils.FormatDateTime))
+		go elastic.AddComprehensiveRoadshow(req.VideoId) //Es添加微路演
 		br.Ret = 200
 		br.Success = true
 		br.Msg = "编辑成功"
@@ -319,6 +321,7 @@ func (this *MicroRoadshowController) Add() {
 		if req.PublishOrSave == 1 {
 			go cygxService.SendWxMsgWithCygxMicroRoadshowVideo(int(newId))
 			go cygxService.UpdateResourceData(int(newId), "roadshow", "add", publishDate.Format(utils.FormatDateTime))
+			go elastic.AddComprehensiveRoadshow(req.VideoId) //Es添加微路演
 		}
 
 		br.Ret = 200
@@ -389,7 +392,7 @@ func (this *MicroRoadshowController) Edit() {
 		br.ErrMsg = "编辑失败,Err:" + err.Error()
 		return
 	}
-
+	go elastic.AddComprehensiveRoadshow(req.VideoId) //Es添加微路演
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "编辑成功"
@@ -444,6 +447,7 @@ func (this *MicroRoadshowController) PublishCancel() {
 		go cygxService.UpdateResourceData(int(videoId), "roadshow", "add", videoInfo.PublishDate.Format(utils.FormatDateTime))
 		br.Msg = "发布成功"
 	}
+	go elastic.AddComprehensiveRoadshow(videoId) //Es添加微路演
 }
 
 // @Title 视频详情

+ 15 - 8
controllers/cygx/morning_meeting_review.go

@@ -9,6 +9,7 @@ import (
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services"
 	cygxService "hongze/hz_crm_api/services/cygx"
+	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/utils"
 	"strconv"
 	"strings"
@@ -240,6 +241,7 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 			}
 			for _, itemchapter := range listchapter {
 				go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+				go elastic.AddComprehensiveMeetingreviewchapt(itemchapter.Id) //Es添加晨会精华
 			}
 			br.Msg = "发布成功"
 			br.Data = meetingId
@@ -299,6 +301,7 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 						br.ErrMsg = "删除章节失败,Err:" + err.Error()
 						return
 					}
+					go elastic.DeleteComprehensiveMeetingreviewchapt(item.Id) //Es删除晨会精华
 				}
 			}
 		}
@@ -378,7 +381,16 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 			industryIds = append(industryIds, item.IndustryId)
 			go cygxService.UpdateIndustryLayoutTime(industryIds, false)
 		}
-
+		//添加到首页最新
+		listchapter, err := cygx.GetCygxMorningMeetingReviewsListById(reqList.MeetingId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		for _, itemchapter := range listchapter {
+			go elastic.AddComprehensiveMeetingreviewchapt(itemchapter.Id) //Es添加晨会精华
+		}
 		br.Ret = 200
 		br.Success = true
 		if reqList.DoType == 0 {
@@ -387,13 +399,6 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 			for _, item := range reqList.List {
 				go services.SendWxMsgWithCygxMorningMeeting(reqList.MeetingId, item.IndustryId, item.IndustryName)
 			}
-			//添加到首页最新
-			listchapter, err := cygx.GetCygxMorningMeetingReviewsListById(reqList.MeetingId)
-			if err != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取数据失败,Err:" + err.Error()
-				return
-			}
 			for _, itemchapter := range listchapter {
 				go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
 			}
@@ -549,6 +554,7 @@ func (this *MorningMeetingController) PublishReport() {
 		for _, item := range list {
 			go services.SendWxMsgWithCygxMorningMeeting(vint, item.IndustryId, item.IndustryName)
 			go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+			go elastic.AddComprehensiveMeetingreviewchapt(item.Id) //Es添加晨会精华
 		}
 	}
 
@@ -595,6 +601,7 @@ func (this *MorningMeetingController) PublishCancleReport() {
 	}
 	for _, item := range list {
 		go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "delete", time.Now().Format(utils.FormatDateTime))
+		go elastic.DeleteComprehensiveMeetingreviewchapt(item.Id) //Es删除晨会精华
 	}
 	var condition string
 	var pars []interface{}

+ 6 - 5
controllers/cygx/summary_manage.go

@@ -11,6 +11,7 @@ import (
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services"
 	cygxService "hongze/hz_crm_api/services/cygx"
+	"hongze/hz_crm_api/services/elastic"
 	"hongze/hz_crm_api/utils"
 	"os"
 	"path/filepath"
@@ -259,7 +260,6 @@ func (this *SummaryManage) PreserveAndPublish() {
 			//articleInfo, err := cygx.GetArticleIdInfoBySummaryManageIdEdit(int(artNewId))
 			if err == nil && req.DoType == 1 {
 				go cygxService.DoArticleOnenIdWxTemplateMsg(articleIdNew, 1)
-
 			}
 		}
 	} else {
@@ -311,11 +311,11 @@ func (this *SummaryManage) PreserveAndPublish() {
 		}
 	}
 
-	// 查研观向7.4-更新产业布局时间
 	if len(industryIds) > 0 {
-		go cygxService.UpdateIndustryLayoutTime(industryIds, false)
+		go cygxService.UpdateIndustryLayoutTime(industryIds, false)       // 查研观向7.4-更新产业布局时间
+		go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
 	}
-
+	go elastic.AddComprehensiveArticle(item.ArticleId) // ES添加文章:报告、纪要
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -400,9 +400,10 @@ func (this *SummaryManage) PublishAndCancel() {
 			if articleIndustrial.ArticleId > 0 {
 				go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
 			}
+			go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
 		}
 	}
-
+	go elastic.AddComprehensiveArticle(articleId) // ES添加文章:报告、纪要
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 1 - 0
models/cygx/activity_special.go

@@ -94,6 +94,7 @@ type ActivitySpecialDetail struct {
 	IsOffline             int            `description:"是否下线,1已下线,0未下线"`
 	DateYmdList           []*DateYmdList `description:"时间年月日"`
 	IsSubmitMeeting       int            `description:"是否提交过到会信息 ,1是,0否"`
+	LastUpdatedTime       time.Time      `description:"更新时间"`
 }
 
 type ActivityDetailSpecialRep struct {

+ 1 - 1
models/cygx/activity_video.go

@@ -96,7 +96,7 @@ func GetActivityVideoHistoryById(condition string, pars []interface{}) (item []*
 	return
 }
 
-// 列表
+// 详情
 func GetCygxActivityVideoReqDetail(activityId int) (item *CygxActivityVideo, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *  FROM cygx_activity_video  WHERE activity_id= ? `

+ 7 - 0
models/cygx/activity_voice.go

@@ -45,3 +45,10 @@ func GetActivityVoiceList(condition string, pars []interface{}) (items []*CygxAc
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+func GetCygxActivityVoiceReqDetail(activityId int) (item *CygxActivityVoice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *  FROM cygx_activity_voice  WHERE activity_id= ? `
+	err = o.Raw(sql, activityId).QueryRow(&item)
+	return
+}

+ 8 - 0
models/cygx/cygx_morning_meeting_review_chapter.go

@@ -150,3 +150,11 @@ func UpdateCygxMorningMeetingGather(meetingIds string, meetingGatherId int) (err
 	_, err = o.Raw(sql, meetingIds, meetingGatherId).Exec()
 	return
 }
+
+// 详情
+func GetCygxMorningMeetingReviewChapterDetail(meetingGatherId int) (item *CygxMorningMeetingReviewChapter, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *  FROM cygx_morning_meeting_review_chapter  WHERE id= ? `
+	err = o.Raw(sql, meetingGatherId).QueryRow(&item)
+	return
+}

+ 49 - 6
models/cygx/industrial_article_group_management.go

@@ -2,6 +2,7 @@ package cygx
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"strconv"
 	"time"
 )
 
@@ -13,7 +14,7 @@ type CygxIndustrialArticleGroupManagement struct {
 	CreateTime             time.Time `description:"创建时间"`
 }
 
-//新增
+// 新增
 func AddCygxIndustrialArticleGroupManagement(item *CygxIndustrialArticleGroupManagement) (newId int64, err error) {
 	o := orm.NewOrm()
 	_, err = o.Insert(item)
@@ -23,7 +24,7 @@ func AddCygxIndustrialArticleGroupManagement(item *CygxIndustrialArticleGroupMan
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialArticleGroupManagementList(articleId int) (items []*IndustrialActivityGroupManagementRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -41,7 +42,7 @@ func GetIndustrialArticleGroupManagementList(articleId int) (items []*Industrial
 	return
 }
 
-//通过名称获取详情
+// 通过名称获取详情
 func GetIndustrialManagemenDetailByAaticle(articleId int) (item *CygxIndustrialArticleGroupManagement, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_industrial_article_group_management WHERE article_id = ? `
@@ -66,7 +67,7 @@ type ArticleIndustrialSubjectNameResp struct {
 	IndustrialManagementId int    `description:"产业id"`
 }
 
-//通过文章ID获取所关联的产业与标的
+// 通过文章ID获取所关联的产业与标的
 func GetCygxArticleIndustrialSubjectName(articleIds string) (items []*ArticleIndustrialSubjectNameResp, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT
@@ -101,7 +102,7 @@ type IndustrialArticleGroupResp struct {
 	IndustryName           string `description:"产业名称"`
 }
 
-//通过id 获取详情
+// 通过id 获取详情
 func GetIndustrialManagemenDetailByAaticleID(articleId int) (items []*ArticleIndustrialSubjectNameResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -117,7 +118,7 @@ func GetIndustrialManagemenDetailByAaticleID(articleId int) (items []*ArticleInd
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialArticleGroupListByarticleIds(articleIds string) (items []*IndustrialArticleGroupResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT  mg.*,m.industry_name  FROM
@@ -128,3 +129,45 @@ func GetIndustrialArticleGroupListByarticleIds(articleIds string) (items []*Indu
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// 用户收藏榜start
+type IndustrialManagementHotResp struct {
+	IndustrialManagementId int                      `orm:"column(industrial_management_id);pk" description:"产业id"`
+	IndustryName           string                   `description:"产业名称"`
+	IsFollw                bool                     `description:"是否关注"`
+	FllowNum               int                      `description:"关注数量"`
+	IsNew                  bool                     `description:"是否新标签"`
+	IsHot                  bool                     `description:"是否新标签"`
+	IsRed                  bool                     `description:"是否标记红点"`
+	Readnum                int                      `description:"阅读数量"`
+	PublishDate            string                   `description:"发布时间"`
+	MinReportTime          string                   `description:"报告最早发布时间"`
+	ArticleReadNum         int                      `description:"文章阅读数量"`
+	Source                 int                      `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
+	IndustrialSubjectList  []*CygxIndustrialSubject `description:"标的列表"`
+}
+
+// 产业与文章关联列表
+func GetSearchResourceList(userId int, condition string, startSize, pageSize int) (items []*IndustrialManagementHotResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			m.industry_name,
+			m.industrial_management_id,
+ 			MAX( a.publish_date ) as publish_date_order,
+			MIN(a.publish_date) AS min_report_time,
+			date_format( MAX( a.publish_date ), '%Y-%m-%d' ) AS publish_date,
+			(SELECT COUNT(1) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND  rec.article_id=a.article_id) AS readnum 
+		FROM
+			cygx_industrial_management AS m
+			INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
+			INNER JOIN cygx_article AS a ON a.article_id = mg.article_id  AND  a.article_type != 'lyjh'
+		WHERE
+			1 = 1
+			AND publish_status = 1 ` + condition + `  GROUP BY m.industrial_management_id  ORDER BY publish_date_order DESC `
+
+	if startSize > 0 || pageSize > 0 {
+		sql += ` LIMIT ` + strconv.Itoa(startSize) + "," + strconv.Itoa(pageSize)
+	}
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 29 - 19
models/cygx/industrial_subject.go

@@ -65,7 +65,7 @@ func UpdateIndustrialManagementSubjectNames(industrialManagementId int, industry
 	return
 }
 
-//新增
+// 新增
 func AddIndustrialSubject(item *CygxIndustrialSubject) (newId int64, err error) {
 	o := orm.NewOrm()
 	newId, err = o.Insert(item)
@@ -75,7 +75,7 @@ func AddIndustrialSubject(item *CygxIndustrialSubject) (newId int64, err error)
 	return
 }
 
-//批量新增
+// 批量新增
 func AddIndustrialSubjectList(items []*CygxIndustrialSubject) (newIdStr string, err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
@@ -100,7 +100,7 @@ func AddIndustrialSubjectList(items []*CygxIndustrialSubject) (newIdStr string,
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*CygxIndustrialSubjectNum, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *,
@@ -113,7 +113,7 @@ func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*CygxIndustria
 	return
 }
 
-//获取数量
+// 获取数量
 func GetIndustrialSubjectCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industrial_subject WHERE 1=1 `
 	if condition != "" {
@@ -124,7 +124,7 @@ func GetIndustrialSubjectCount(condition string, pars []interface{}) (count int,
 	return
 }
 
-//修改
+// 修改
 func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE cygx_industrial_subject SET  subject_name=? WHERE industrial_subject_id=? `
@@ -132,7 +132,7 @@ func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
 	return
 }
 
-//删除数据
+// 删除数据
 func DeleteIndustrialSubject(industrialSubjectId int) (err error) {
 	o := orm.NewOrm()
 	sql := ` DELETE FROM cygx_industrial_subject WHERE industrial_Subject_id = ?`
@@ -148,7 +148,7 @@ type ArtGroupIndustrialSubjectRepList struct {
 	List []*ArtGroupIndustrialSubjectRep
 }
 
-//获取文章关联的标的数量
+// 获取文章关联的标的数量
 func GetArtGroupIndustrialSubject(reportId int) (item []*ArtGroupIndustrialSubjectRep, err error) {
 	sql := ` SELECT sub.subject_name FROM cygx_industrial_article_group_subject AS sub_g
 		INNER JOIN cygx_industrial_subject AS sub ON sub.industrial_subject_id = sub_g.industrial_subject_id
@@ -159,7 +159,7 @@ func GetArtGroupIndustrialSubject(reportId int) (item []*ArtGroupIndustrialSubje
 	return
 }
 
-//获取标的关联的文章数量
+// 获取标的关联的文章数量
 func GetIndustrialSubjectGroupArtCount(industrialSubjectId int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industrial_article_group_subject WHERE industrial_subject_id=? `
 	o := orm.NewOrm()
@@ -167,7 +167,7 @@ func GetIndustrialSubjectGroupArtCount(industrialSubjectId int) (count int, err
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialSubjectAllByIds(condition string) (items []*CygxIndustrialSubjectNum, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *,
@@ -193,7 +193,7 @@ func GetIndustrialSubjectDetailByName(IndustrialSubjectName string) (item *CygxI
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialSubjectListName(condition string) (items []*ArtGroupIndustrialSubjectRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.*
@@ -233,7 +233,7 @@ type SubjectNameRep struct {
 	Name string `description:"标的名称"`
 }
 
-//列表
+// 列表
 func GetIndustrialSubjectListNameByChartId(condition string) (items []*CygxIndustrialSubjectListRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT 	s.*,m.industry_name
@@ -250,7 +250,7 @@ func GetIndustrialSubjectListNameByChartId(condition string) (items []*CygxIndus
 	return
 }
 
-//通过多个标的ID获取产业名称
+// 通过多个标的ID获取产业名称
 func GetindustrialSubjectNames(subjectIds string) (names string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) AS names 
@@ -263,7 +263,7 @@ func GetindustrialSubjectNames(subjectIds string) (names string, err error) {
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialSubjectListNameByName(condition string) (items []*CygxIndustrialSubject, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_industrial_subject WHERE 1= 1`
@@ -274,7 +274,7 @@ func GetIndustrialSubjectListNameByName(condition string) (items []*CygxIndustri
 	return
 }
 
-//通过标的名称获取标的关联的ID
+// 通过标的名称获取标的关联的ID
 func GetIndustrialSubjectIdsByName(subjectName string) (industrialSubjectIds string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids 
@@ -287,7 +287,7 @@ func GetIndustrialSubjectIdsByName(subjectName string) (industrialSubjectIds str
 	return
 }
 
-//通过标的名称获取标的关联的ID
+// 通过标的名称获取标的关联的ID
 func GetIndustrialSubjectIdsByNameLike(subjectName string) (industrialSubjectIds string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids 
@@ -301,7 +301,7 @@ func GetIndustrialSubjectIdsByNameLike(subjectName string) (industrialSubjectIds
 }
 
 type IndustrySubjectCountDetail struct {
-	ArtTotalNum int    `description:"文章总数量"`
+	ArtTotalNum int `description:"文章总数量"`
 	List        []*IndustrySubjectArtTypeCountList
 }
 
@@ -339,10 +339,20 @@ func GetIndustrySubjectArtTypeCountList(subjectId int) (list []*IndustrySubjectA
 	return
 }
 
-//列表
+// 列表
 func GetIndustrySubjectListByIds(IndustrialSubjectIds string) (items []*CygxIndustrialSubject, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id IN (`+ IndustrialSubjectIds +`) `
+	sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id IN (` + IndustrialSubjectIds + `) `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
-}
+}
+
+// 获取标的列表
+func GetCygxIndustrialSubjectListCondition(condition string, pars []interface{}) (items []*CygxIndustrialSubject, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * 
+		FROM
+			cygx_industrial_subject WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 1 - 0
models/cygx/summary_manage.go

@@ -133,6 +133,7 @@ type CygxArticleResp struct {
 	SubjectIds         string    `description:"报告所关联的标的"`
 	AdminId            int       `description:"销售/管理员ID"`
 	AdminName          string    `description:"销售/管理员姓名"`
+	Annotation         string    `description:"核心观点"`
 	VisibleRange       int       `description:"设置可见范围1全部,0内部"`
 }
 

+ 7 - 0
services/cygx/acitvity.go

@@ -503,6 +503,13 @@ func CheckActivityAddAppointment(activityInfo *cygx.ActivityDetail) (isProhibit
 func ActivityBodyAnalysis(body string, activeState int, req cygx.ActivityRep) (itemr *cygx.CygxActivity, errstr string) {
 	item := new(cygx.CygxActivity)
 	body = strings.Replace(body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
+
+	//活动地址,活动地点,地点,地址,办会地点,办会地址。对地址字眼进行替换,对上述字段兼容做内容解析
+	body = strings.Replace(body, "活动地点:", "活动地址:", -1)
+	body = strings.Replace(body, "地点:", "活动地址:", -1)
+	body = strings.Replace(body, "地址:", "活动地址:", -1)
+	body = strings.Replace(body, "办会地点:", "活动地址:", -1)
+	body = strings.Replace(body, "办会地址:", "活动地址:", -1)
 	doc, _ := goquery.NewDocumentFromReader(strings.NewReader(body))
 	doc.Find("p").Each(func(i int, s *goquery.Selection) {
 		contentTxt := s.Text()

+ 528 - 0
services/elastic/es_comprehensive.go

@@ -0,0 +1,528 @@
+package elastic
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/PuerkitoBio/goquery"
+	"github.com/olivere/elastic/v7"
+	"hongze/hz_crm_api/models/cygx"
+	"hongze/hz_crm_api/services/alarm_msg"
+	"hongze/hz_crm_api/utils"
+	"html"
+	"strconv"
+	"strings"
+)
+
+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 EsAddOrEditComprehensiveData(item *ElasticComprehensiveDetail) (err error) {
+	indexName := utils.IndexNameComprehensive // 避免调用错别的项目的索引 ,这里写死
+	//return
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("更新综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2)
+		}
+	}()
+	client, err := NewClient()
+	if err != nil {
+		fmt.Println(err, "err1")
+		return
+	}
+	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,
+		},
+	})
+	//fmt.Println(item.SourceId)
+	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))
+			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 {
+			err = errors.New(" client.UpdateByQuery(indexName), Err: " + e.Error())
+			return
+		}
+	}
+	return
+}
+
+// 删除数据
+func EsDeleteComprehensiveData(item *ElasticComprehensiveDetail) (err error) {
+	indexName := utils.IndexNameComprehensive // 避免调用错别的项目的索引 ,这里写死
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg("删除数据综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2)
+		}
+	}()
+	fmt.Println("删除", item.SourceId)
+	client, err := NewClient()
+	//拼接需要删除的前置条件
+	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
+}
+
+// ES添加文章:报告、纪要
+func AddComprehensiveArticle(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveArticle,Err:"+err.Error(), 3)
+		}
+	}()
+	v, e := cygx.GetArticleInfoOtherByArticleId(sourceId)
+	if e != nil {
+		err = errors.New("GetArticleInfoOtherByArticleId" + e.Error())
+		return
+	}
+	content := html.UnescapeString(v.Body)
+	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 = v.ArticleId
+	item.IsSummary = v.IsSummary
+	item.Source = utils.CYGX_OBJ_ARTICLE
+	item.Title = v.Title
+	item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
+	item.BodyText = bodyText
+	item.Annotation = html.UnescapeString(v.Annotation)
+	item.Abstract = html.UnescapeString(v.Abstract)
+	if v.PublishStatus == 1 {
+		EsAddOrEditComprehensiveData(item) //如果发布了就新增
+	} else {
+		EsDeleteComprehensiveData(item) // 没有发布就删除
+	}
+	return
+}
+
+// Es添加活动
+func AddComprehensiveActivity(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveActivity,Err:"+err.Error(), 3)
+		}
+	}()
+	activityId := sourceId
+	detail, e := cygx.GetAddActivityInfoById(sourceId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	mapActivityIndustrialManagement := make(map[int][]string)
+	mapActivitySubject := make(map[int][]string)
+	industrialList, e := cygx.GetIndustrialActivityGroupManagementList(activityId, 1)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetIndustrialActivityGroupManagementList" + e.Error())
+		return
+	}
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			mapActivityIndustrialManagement[activityId] = append(mapActivityIndustrialManagement[activityId], v.IndustryName)
+		}
+		subjectList, e := cygx.GetSubjectActivityGroupManagementList(activityId, 1)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSubjectActivityGroupManagementList" + e.Error())
+			return
+		}
+		if len(subjectList) > 0 {
+			for _, v := range subjectList {
+				mapActivitySubject[activityId] = append(mapActivitySubject[activityId], v.SubjectName)
+			}
+		}
+	}
+
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = detail.ActivityId
+	item.Source = utils.CYGX_OBJ_ACTIVITY
+	item.SubjectNames = strings.Join(mapActivitySubject[detail.ActivityId], ",")
+	item.IndustryName = strings.Join(mapActivityIndustrialManagement[detail.ActivityId], ",")
+	item.Title = detail.ActivityName
+	item.PublishDate = detail.ActivityTime
+	if detail.PublishStatus == 1 {
+		EsAddOrEditComprehensiveData(item) //如果发布了就新增
+	} else {
+		EsDeleteComprehensiveData(item) // 没有发布就删除
+	}
+	return
+}
+
+// Es添加专项调研活动
+func AddComprehensiveActivitySpecial(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveActivitySpecial,Err:"+err.Error(), 3)
+		}
+	}()
+	activityId := sourceId
+	detail, e := cygx.GetAddActivityInfoSpecialById(sourceId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoSpecialById" + e.Error())
+		return
+	}
+	mapActivityIndustrialManagement := make(map[int][]string)
+	mapActivitySubject := make(map[int][]string)
+	industrialList, e := cygx.GetIndustrialActivityGroupManagementList(activityId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetIndustrialActivityGroupManagementList" + e.Error())
+		return
+	}
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			mapActivityIndustrialManagement[activityId] = append(mapActivityIndustrialManagement[activityId], v.IndustryName)
+		}
+		subjectList, e := cygx.GetSubjectActivityGroupManagementList(activityId, 2)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSubjectActivityGroupManagementList" + e.Error())
+			return
+		}
+		if len(subjectList) > 0 {
+			for _, v := range subjectList {
+				mapActivitySubject[activityId] = append(mapActivitySubject[activityId], v.SubjectName)
+			}
+		}
+	}
+
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = detail.ActivityId
+	item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
+	item.SubjectNames = strings.Join(mapActivitySubject[detail.ActivityId], ",")
+	item.IndustryName = strings.Join(mapActivityIndustrialManagement[detail.ActivityId], ",")
+	item.Title = detail.ResearchTheme
+	if detail.ActivityTime == utils.EmptyDateTimeStr {
+		item.PublishDate = detail.LastUpdatedTime.Format(utils.FormatDateTime)
+	} else {
+		item.PublishDate = detail.ActivityTime
+	}
+	if detail.PublishStatus == 1 {
+		EsAddOrEditComprehensiveData(item) //如果发布了就新增
+	} else {
+		EsDeleteComprehensiveData(item) // 没有发布就删除
+	}
+	return
+}
+
+// Es添加活动视频
+func AddComprehensiveActivityVideo(activityId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveActivityVideo,Err:"+err.Error(), 3)
+		}
+	}()
+
+	detailactivity, e := cygx.GetAddActivityInfoById(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	detail, e := cygx.GetCygxActivityVideoReqDetail(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = detail.VideoId
+	item.Source = utils.CYGX_OBJ_ACTIVITYVIDEO
+	if detail == nil {
+		EsDeleteComprehensiveData(item) //如果活动视频不存在 没有发布就删除
+	}
+
+	mapActivityIndustrialManagement := make(map[int][]string)
+	mapActivitySubject := make(map[int][]string)
+	industrialList, e := cygx.GetIndustrialActivityGroupManagementList(activityId, 1)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetIndustrialActivityGroupManagementList" + e.Error())
+		return
+	}
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			mapActivityIndustrialManagement[activityId] = append(mapActivityIndustrialManagement[activityId], v.IndustryName)
+		}
+		subjectList, e := cygx.GetSubjectActivityGroupManagementList(activityId, 1)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSubjectActivityGroupManagementList" + e.Error())
+			return
+		}
+		if len(subjectList) > 0 {
+			for _, v := range subjectList {
+				mapActivitySubject[activityId] = append(mapActivitySubject[activityId], v.SubjectName)
+			}
+		}
+	}
+	item.SubjectNames = strings.Join(mapActivitySubject[detail.ActivityId], ",")
+	item.IndustryName = strings.Join(mapActivityIndustrialManagement[detail.ActivityId], ",")
+	item.Title = detail.VideoName
+	item.BodyText = detailactivity.ActivityName
+	item.PublishDate = detailactivity.ActivityTime
+	EsAddOrEditComprehensiveData(item) //新增或者修改
+	return
+}
+
+// Es添加活动音频
+func AddComprehensiveActivityVoice(activityId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveActivityVoice,Err:"+err.Error(), 3)
+		}
+	}()
+
+	detailactivity, e := cygx.GetAddActivityInfoById(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+
+	detail, e := cygx.GetCygxActivityVoiceReqDetail(activityId)
+	if e != nil {
+		err = errors.New("GetAddActivityInfoById" + e.Error())
+		return
+	}
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = detail.ActivityVoiceId
+	item.Source = utils.CYGX_OBJ_ACTIVITYVOICE
+	if detail == nil {
+		EsDeleteComprehensiveData(item) //如果不存在就先删除
+	}
+
+	mapActivityIndustrialManagement := make(map[int][]string)
+	mapActivitySubject := make(map[int][]string)
+	industrialList, e := cygx.GetIndustrialActivityGroupManagementList(activityId, 1)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetIndustrialActivityGroupManagementList" + e.Error())
+		return
+	}
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			mapActivityIndustrialManagement[activityId] = append(mapActivityIndustrialManagement[activityId], v.IndustryName)
+		}
+		subjectList, e := cygx.GetSubjectActivityGroupManagementList(activityId, 1)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSubjectActivityGroupManagementList" + e.Error())
+			return
+		}
+		if len(subjectList) > 0 {
+			for _, v := range subjectList {
+				mapActivitySubject[activityId] = append(mapActivitySubject[activityId], v.SubjectName)
+			}
+		}
+	}
+	item.SubjectNames = strings.Join(mapActivitySubject[detail.ActivityId], ",")
+	item.IndustryName = strings.Join(mapActivityIndustrialManagement[detail.ActivityId], ",")
+	item.Title = detail.VoiceName
+	item.BodyText = detailactivity.ActivityName
+	item.PublishDate = detailactivity.ActivityTime
+	EsAddOrEditComprehensiveData(item) //新增或者修改
+	return
+}
+
+// Es添加微路演
+func AddComprehensiveRoadshow(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveActivityVoice,Err:"+err.Error(), 3)
+		}
+	}()
+	v, e := cygx.GetMicroRoadshowVideoByVideoId(sourceId)
+	if e != nil {
+		err = errors.New("GetMicroRoadshowVideoByVideoId" + e.Error())
+		return
+	}
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = v.VideoId
+	item.Source = utils.CYGX_OBJ_ROADSHOW
+	item.IndustryName = v.IndustryName
+	item.Title = v.VideoName
+	item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
+	if v.PublishStatus == 1 {
+		EsAddOrEditComprehensiveData(item) //如果发布了就新增
+	} else {
+		EsDeleteComprehensiveData(item) // 没有发布就删除
+	}
+	return
+
+}
+
+// Es添加晨会精华
+func AddComprehensiveMeetingreviewchapt(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveMeetingreviewchapt,Err:"+err.Error(), 3)
+		}
+	}()
+	v, e := cygx.GetCygxMorningMeetingReviewChapterDetail(sourceId)
+	if e != nil {
+		err = errors.New("GetCygxMorningMeetingReviewChapterDetail" + e.Error())
+		return
+	}
+	content := html.UnescapeString(v.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 = sourceId
+	item.Source = utils.CYGX_OBJ_MEETINGREVIEWCHAPT
+	item.IndustryName = v.IndustryName
+	item.PublishDate = v.MeetingTime.Format(utils.FormatDateTime)
+	item.Abstract = bodyText
+	EsAddOrEditComprehensiveData(item) //如果发布了就新增
+	return
+}
+
+// Es删除晨会精华
+func DeleteComprehensiveMeetingreviewchapt(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveMeetingreviewchapt,Err:"+err.Error(), 3)
+		}
+	}()
+	item := new(ElasticComprehensiveDetail)
+	item.SourceId = sourceId
+	item.Source = utils.CYGX_OBJ_MEETINGREVIEWCHAPT
+	EsDeleteComprehensiveData(item) //删除
+	return
+}
+
+// 添加产业资源包
+func AddComprehensiveIndustrialSource(sourceType string, articleId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg("AddComprehensiveIndustrialSource"+err.Error(), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	mapActivitySubject := make(map[int][]string, 0)
+	listsubject, e := cygx.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 := cygx.GetSearchResourceList(0, condition, 0, 0)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	if len(list) == 0 {
+		return
+	}
+	for _, v := range list {
+		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"
+		EsAddOrEditComprehensiveData(item)
+	}
+}

+ 3 - 0
utils/config.go

@@ -79,6 +79,7 @@ var (
 var (
 	IndexName                      string //Es索引
 	IndexNameArticleHistory        string //文章阅读记录Es索引
+	IndexNameComprehensive         string //综合搜索Es索引
 	SummaryArticleId               int    //手动添加的纪要库开始ID
 	YanxSummaryPermissionId        int    //研选纪要分类ID
 	YanxViewpointPermissionId      int    //研选观点分类ID
@@ -240,6 +241,7 @@ ZwIDAQAB
 		//Endpoint = "oss-cn-shanghai.aliyuncs.com"
 		IndexName = "cygx_article_v03_23"
 		IndexNameArticleHistory = "cygx_article_history_v07_08"
+		IndexNameComprehensive = "cygx_comprehensive"
 		TemplateCompanyApplyRedirectUrl = "https://ficc.hzinsights.com/approval/approval/list"
 
 		//同花顺正式地址
@@ -278,6 +280,7 @@ ZwIDAQAB
 		Endpoint = "oss-cn-shanghai.aliyuncs.com"
 		IndexName = "cygx_article_v1"
 		IndexNameArticleHistory = "cygx_article_history_v1"
+		IndexNameComprehensive = "cygx_comprehensive_test"
 
 		//同花顺测试地址
 		THS_SendUrl = `https://mtest.10jqka.com.cn/gateway/ps/syncNews`

+ 11 - 0
utils/constants.go

@@ -402,6 +402,17 @@ const (
 	CHART_PERMISSION_ID_45W                        = 2002     // 权益45w大套餐表示的权限ID(自定义)
 )
 
+const (
+	CYGX_OBJ_ARTICLE            string = "article"            // 对象类型:文章
+	CYGX_OBJ_ACTIVITY           string = "activity"           // 对象类型:活动
+	CYGX_OBJ_ACTIVITYVIDEO      string = "activityvideo"      // 对象类型:活动视频
+	CYGX_OBJ_ACTIVITYVOICE      string = "activityvoice"      // 对象类型:活动音频
+	CYGX_OBJ_ACTIVITYSPECIAL    string = "activityspecial"    // 对象类型:专项调研活动
+	CYGX_OBJ_MEETINGREVIEWCHAPT string = "meetingreviewchapt" // 对象类型:晨会精华
+	CYGX_OBJ_ROADSHOW           string = "roadshow"           // 对象类型:路演
+)
+
+
 const (
 	SendTemplateMsgAuthorization = "dc855fce962a639faa779cbdd4cd332f"
 )