Jelajahi Sumber

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_11.0

xingzai 1 tahun lalu
induk
melakukan
f60cc0d0cf
48 mengubah file dengan 2490 tambahan dan 273 penghapusan
  1. 35 11
      controllers/activity.go
  2. 31 1
      controllers/activity_special.go
  3. 3 1
      controllers/article.go
  4. 2 2
      controllers/home.go
  5. 0 17
      controllers/report.go
  6. 72 9
      controllers/search.go
  7. 8 2
      models/activity.go
  8. 41 6
      models/activity_meeting_reminder.go
  9. 11 10
      models/activity_points_set.go
  10. 33 31
      models/activity_special.go
  11. 35 0
      models/activity_special_meeting_detail.go
  12. 1 0
      models/activity_video.go
  13. 2 1
      models/activity_voice.go
  14. 8 4
      models/article.go
  15. 6 4
      models/company_interaction_num.go
  16. 11 0
      models/company_report_permission.go
  17. 1 0
      models/company_user_type.go
  18. 1 0
      models/db.go
  19. 0 16
      models/industrial_activity_group_management.go
  20. 34 0
      models/industrial_activity_group_subject.go
  21. 19 1
      models/industrial_article_group_subject.go
  22. 12 0
      models/industrial_management.go
  23. 24 0
      models/industrial_subject.go
  24. 4 0
      models/micro_roadshow.go
  25. 55 13
      models/report.go
  26. 3 0
      models/resource_data.go
  27. 6 4
      models/user_interaction_num.go
  28. 31 13
      models/user_record.go
  29. 2 0
      models/wx_user.go
  30. 9 0
      routers/commentsRouter.go
  31. 1 0
      routers/router.go
  32. 156 94
      services/activity.go
  33. 41 0
      services/activity_points.go
  34. 45 0
      services/activity_signup.go
  35. 32 13
      services/activity_special_trip.go
  36. 90 0
      services/activity_wx_template_msg.go
  37. 7 3
      services/article.go
  38. 2 0
      services/chart.go
  39. 1474 0
      services/es_comprehensive.go
  40. 47 1
      services/industrial_management.go
  41. 17 0
      services/init_10.5.1.go
  42. 3 0
      services/keyword.go
  43. 38 14
      services/send_company_user.go
  44. 8 2
      services/wx_user.go
  45. 14 0
      utils/common.go
  46. 3 0
      utils/config.go
  47. 1 0
      utils/constants.go
  48. 11 0
      utils/elastic.go

+ 35 - 11
controllers/activity.go

@@ -24,6 +24,10 @@ type ActivityABaseController struct {
 	BaseCommonController
 }
 
+type ActivityNoLoginController struct {
+	BaseAuthMobileController
+}
+
 // @Title 活动类型列表
 // @Description活动类型列表接口
 // @Success 200 {object} models.ActivityTypeListResp
@@ -238,15 +242,15 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	}
 
 	//添加我的日程访问记录
-	item := new(models.CygxPageHistoryRecord)
-	item.UserId = user.UserId
-	item.CreateTime = time.Now()
-	item.Mobile = user.Mobile
-	item.Email = user.Email
-	item.CompanyId = user.CompanyId
-	item.CompanyName = user.CompanyName
-	item.PageType = "MySchedule"
-	go models.AddCygxPageHistoryRecord(item)
+	//item := new(models.CygxPageHistoryRecord)
+	//item.UserId = user.UserId
+	//item.CreateTime = time.Now()
+	//item.Mobile = user.Mobile
+	//item.Email = user.Email
+	//item.CompanyId = user.CompanyId
+	//item.CompanyName = user.CompanyName
+	//item.PageType = "MySchedule"
+	//go models.AddCygxPageHistoryRecord(item)
 	resp := new(models.GetCygxActivityListRep)
 
 	//处理音频回放
@@ -863,6 +867,7 @@ func (this *ActivityCoAntroller) SignupAdd() {
 		resp.IsResearch = true
 	}
 
+
 	//公司线下调研活动客户报名后给建会人,所属销售推送模板信息
 	if signupStatus == "Success" {
 		go services.SendResearchActivitiesTemplateMsg(user, activityInfo)
@@ -959,6 +964,13 @@ func (this *ActivityCoAntroller) SignupCancel() {
 		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
 		return
 	}
+	cancelDeadlineMsg := services.CheckCancelDeadline(activityInfo)
+	if cancelDeadlineMsg != "" {
+		br.Msg = cancelDeadlineMsg
+		br.ErrMsg = cancelDeadlineMsg
+		return
+	}
+
 	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
 	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
 		if signupType == 1 {
@@ -993,6 +1005,12 @@ func (this *ActivityCoAntroller) SignupCancel() {
 		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
 		return
 	}
+
+	// 如果是买方研选下的专家沙龙,同时推给内容组四人
+	if activityInfo.ActivityTypeId == 5 {
+		go services.SendActivitieCancelSignTemplateMsg(user, activityInfo)
+	}
+	
 	go services.YanXuanActivityPointsBillSignupCancel(activityId, uid) // 用户取消报名添加到处理研选扣点
 	br.Ret = 200
 	br.Success = true
@@ -2346,6 +2364,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 	}
 	mapActivity := make(map[int][]*models.CygxActivityLabelList)
 	mapkeyWord := make(map[string]string)
+	activityPointsByUserAllMap := services.GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
 	for _, v := range listActivity {
 		if v.KeyWord == "" {
 			continue
@@ -2355,6 +2374,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			v.ActivityTypeId = 2
 		}
 		item := new(models.CygxActivityLabelList)
+		item.IsResearchPoints = activityPointsByUserAllMap[v.ActivityId]
 		item.City = mapCity[fmt.Sprint(v.KeyWord, "{|}", v.ActivityTypeId)]
 		item.KeyWord = services.LabelStrV5(v.KeyWord, v.IsShowSubjectName, v.TemporaryLabel)
 		if _, ok := mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)]; ok {
@@ -2367,7 +2387,6 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		}
 
 		item.IsExternalLabel = v.IsExternalLabel
-		item.IsResearchPoints = v.IsResearchPoints
 
 		mapActivity[v.ActivityTypeId] = append(mapActivity[v.ActivityTypeId], item)
 		mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)] = item.KeyWord
@@ -3997,6 +4016,12 @@ func (this *ActivityCoAntroller) Check() {
 	}
 	//这里的文案顺序提示 权限>时间>研选扣点>邮箱绑定。
 	resp := new(models.ActivityCheck)
+	resp.CancelPopupMsg, err = services.ActivityCancelDeadlineMsg(activityInfo) //处理取消报名截止时间的弹窗文案
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + err.Error()
+		return
+	}
 	hasPermission := 0
 	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
 	if err != nil {
@@ -4034,7 +4059,6 @@ func (this *ActivityCoAntroller) Check() {
 			return
 		}
 	}
-
 	if resp.CheckPoints {
 		//如果通过点数的校验,就来校验邮箱
 		resp.CheckEmail, resp.PopupMsg = services.CheckActivityUserEmail(activityInfo, user)

+ 31 - 1
controllers/activity_special.go

@@ -246,6 +246,16 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 			itemBill.RegisterPlatform = 1
 			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 
+			var itemMeeting = new(models.CygxActivitySpecialMeetingDetail)
+			itemMeeting.UserId = user.UserId
+			itemMeeting.ActivityId = activityId
+			itemMeeting.CreateTime = time.Now()
+			itemMeeting.Mobile = user.Mobile
+			itemMeeting.Email = user.Email
+			itemMeeting.CompanyId = user.CompanyId
+			itemMeeting.CompanyName = user.CompanyName
+			itemMeeting.RealName = user.RealName
+
 			go services.ActivitySpecialUserRmind(user, activityId, 2)
 			//判断是删除还是添加
 			if total == 0 {
@@ -309,7 +319,20 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 					itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
 				}
 			}
-			go models.AddCygxActivitySpecialTripBill(itemBill)
+			//添加流水记录
+			err = models.AddCygxActivitySpecialTripBill(itemBill)
+			if err != nil {
+				br.Msg = "报名失败,"
+				br.ErrMsg = "AddCygxActivitySpecialTripBill,Err:" + err.Error()
+				return
+			}
+			//添加数据到会信息
+			err = models.AddCygxActivitySpecialMeetingDetail(itemMeeting)
+			if err != nil {
+				br.Msg = "报名失败,"
+				br.ErrMsg = "AddCygxActivitySpecialMeetingDetail,Err:" + err.Error()
+				return
+			}
 		}
 	} else {
 		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermission(user)
@@ -396,6 +419,13 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 		br.ErrMsg = "CancelActivitySpecialTrip,Err:" + err.Error()
 		return
 	}
+
+	err = models.CancelCygxActivitySpecialMeetingDetail(uid, activityId)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "CancelCygxActivitySpecialMeetingDetail,Err:" + err.Error()
+		return
+	}
 	go models.AddCygxActivitySpecialTripBill(itemBill)
 
 	br.Ret = 200

+ 3 - 1
controllers/article.go

@@ -91,7 +91,6 @@ func (this *ArticleController) Detail() {
 		detail.IsResearch = true
 	}
 
-	detail.IsApplyAppointmentExpert = services.GetIsApplyAppointmentExpert(user, articleId) // 获取用户数是否约访专家的请求  查研观向11.0
 	// 高毅资产的联系人,有权限的行业也不能查看报告详情页。提示无权限页面
 	if detail.ArticleTypeId == 0 && user.CompanyId == utils.GAO_YI_ZI_CHAN_COMPANY_ID {
 		_, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionArticle(user)
@@ -424,6 +423,9 @@ Loop:
 			detail.ReportLink += "?token=" + chartUserTokenByMobile
 		}
 	}
+	if detail.ArticleTypeId == 14 {
+		detail.IsApplyAppointmentExpert = true //判断文章类型是否属于专家访谈  查研观向11.0
+	}
 	resp.HasPermission = hasPermission
 	resp.HaveResearch = haveResearch
 	resp.Detail = detail

+ 2 - 2
controllers/home.go

@@ -942,7 +942,7 @@ func (this *HomeController) NewList() {
 			if tagArticleIds != "" {
 				condition = ` AND ((source = 'article' AND source_id IN (` + tagArticleIds + `) ) `
 				if mmIds != "" {
-					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+					condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
 				}
 				if tagActivityIds != "" && lenActivityIds > 0 {
 					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) )) `
@@ -954,7 +954,7 @@ func (this *HomeController) NewList() {
 			} else if tagActivityIds != "" {
 				condition = ` AND ((source = 'article' AND source_id IN (0))  `
 				if mmIds != "" {
-					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+					condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
 				}
 				if tagActivityIds != "" && lenActivityIds > 0 {
 					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `))) `

+ 0 - 17
controllers/report.go

@@ -326,23 +326,6 @@ func (this *ReportController) ArticleCategoryList() {
 		}
 		categoryMap[v.CategoryId] = v.CategoryId
 		list = append(list, v)
-		//recordCount, err := models.IndustrialUserRecordArticleCount(uid, industrialManagementId, v.CategoryId)
-		//if err != nil && err.Error() != utils.ErrNoRow() {
-		//	br.Msg = "获取信息失败"
-		//	br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
-		//	return
-		//}
-		//Newdetail, err := models.GetNewIndustrialUserRecordArticle(industrialManagementId, v.CategoryId)
-		//if err != nil && err.Error() != utils.ErrNoRow() {
-		//	br.Msg = "获取信息失败"
-		//	br.ErrMsg = "获取信息失败,Err:" + err.Error()
-		//	return
-		//}
-		//if Newdetail != nil {
-		//	if recordCount == 0 && user.CreatedTime.Before(utils.StrTimeToTime(Newdetail.PublishDate)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(Newdetail.PublishDate)) {
-		//		list[k].IsRed = true
-		//	}
-		//}
 	}
 
 	// 用户权限

+ 72 - 9
controllers/search.go

@@ -671,15 +671,14 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 		}
 	}
 	//记录用户搜索关键词
-	var source int
-	if listType == 1 {
-		source = 3
-	} else if listType == 2 {
-		source = 1
-	} else {
-		source = 2
-	}
-	go services.AddSearchKeyWord(user, keyWord, source)
+	//var source int
+	//if listType == 1 {
+	//	source = 3
+	//} else if listType == 2 {
+	//	source = 1
+	//} else {
+	//	source = 2
+	//}
 
 	if chartTotal > int(total) {
 		total = int64(chartTotal)
@@ -698,3 +697,67 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 综合搜索接口
+// @Description 综合搜索接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} models.SearchItem
+// @router /comprehensive/list [get]
+func (this *SearchController) ComprehensiveList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+	keyWord := this.GetString("KeyWord")
+	if keyWord == "" {
+		br.Msg = "请输入搜索词"
+		br.ErrMsg = "请输入搜索词"
+		return
+	}
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	resp := new(models.HomeResourceDataListResp)
+	tmpResult, tmpTotalResult, err := services.EsComprehensiveSearch(keyWord, startSize, pageSize)
+	if err != nil {
+		br.Msg = "检索失败"
+		br.ErrMsg = "检索失败,Err:" + err.Error()
+		return
+	}
+	//for _, v := range tmpResult {
+	//	fmt.Println(v.Title, "Title", v.IsSummary)
+	//}
+	list, err := services.GetResourceDataEsList(tmpResult, user)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	if currentIndex == 1 {
+		go services.AddSearchKeyWord(user, keyWord, 1)
+	}
+
+	resp.List = list
+	page := paging.GetPaging(currentIndex, pageSize, int(tmpTotalResult))
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 8 - 2
models/activity.go

@@ -74,6 +74,7 @@ type ActivityCheck struct {
 	CheckPermission   bool   `description:"权限是否通过校验"`
 	HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
 	PopupMsg          string `description:"权限弹窗信息"`
+	CancelPopupMsg    string `description:"取消报名时间弹窗信息"`
 	SellerMobile      string `description:"销售电话"`
 	SellerName        string `description:"销售姓名"`
 	Mobile            string `description:"手机号"`
@@ -232,6 +233,7 @@ type ActivityDetail struct {
 	IsExternalLabel         bool                       `description:"是否为外部资源"`
 	IsResearchPoints        bool                       `description:"是否为研选扣点"`
 	ImgUrlBgYx              string                     `description:"研选背景图片"`
+	CancelDeadline          string                     `description:"取消报名截止时间"`
 }
 type ListArticleActivity struct {
 	Title   string `description:"文章标题"`
@@ -466,7 +468,8 @@ func GetScheduleAndSpecilList(condition string, pars []interface{}, conditionSpe
 			art.city,
 			art.is_external_label,
 			art.siginup_deadline,
-			art.is_research_points
+			art.is_research_points,
+			art.cancel_deadline
 		FROM
 			cygx_activity AS art
 			INNER JOIN cygx_my_schedule AS my ON my.activity_id = art.activity_id
@@ -501,6 +504,7 @@ func GetScheduleAndSpecilList(condition string, pars []interface{}, conditionSpe
 			"",
 			"",
 			"",
+			"",
 			""
 		FROM
 			cygx_activity_special AS art
@@ -1124,7 +1128,8 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			art.activity_time,
 			art.is_external_label,
 			art.siginup_deadline,
-			art.is_research_points
+			art.is_research_points,
+			art.cancel_deadline
 		FROM
 			cygx_activity AS art
 			INNER JOIN cygx_activity_type AS t ON t.activity_type_id = art.activity_type_id
@@ -1159,6 +1164,7 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			art.activity_time,
 			"",
 			"",
+			"",
 			""
 		FROM
 			cygx_activity_special AS art

+ 41 - 6
models/activity_meeting_reminder.go

@@ -3,6 +3,7 @@ package models
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"time"
 )
 
@@ -17,7 +18,7 @@ type CygxActivityMeetingReminder struct {
 	CompanyName string    `description:"公司名称"`
 }
 
-//记录日志
+// 记录日志
 type CygxActivityMeetingReminderLog struct {
 	Id          int       `orm:"column(id);pk"`
 	ActivityId  int       `description:"活动ID"`
@@ -30,7 +31,7 @@ type CygxActivityMeetingReminderLog struct {
 	Type        int       `description:"操作方式,1报名,2取消报名"`
 }
 
-//添加会议提醒信息
+// 添加会议提醒信息
 func AddActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -89,7 +90,7 @@ func AddActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64
 	return
 }
 
-//获取用户报名数量
+// 获取用户报名数量
 func GetActivityMeetingReminderCount(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel=0 AND user_id=? AND activity_id=? `
 	o := orm.NewOrm()
@@ -97,7 +98,7 @@ func GetActivityMeetingReminderCount(uid, activityId int) (count int, err error)
 	return
 }
 
-//取消会议提醒
+// 取消会议提醒
 func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
@@ -147,7 +148,7 @@ func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId in
 	return
 }
 
-//获取某一用户的日程数量
+// 获取某一用户的日程数量
 func GetUserActivityMeetingReminderCount(uid int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder_log WHERE  user_id=? `
 	o := orm.NewOrm()
@@ -155,7 +156,7 @@ func GetUserActivityMeetingReminderCount(uid int) (count int, err error) {
 	return
 }
 
-//GetCygxReminderListByUser 获取设置会议提醒的人
+// GetCygxReminderListByUser 获取设置会议提醒的人
 func GetCygxReminderListByUser(condition string, pars []interface{}) (item []*CygxActivityMeetingReminder, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *
@@ -165,3 +166,37 @@ func GetCygxReminderListByUser(condition string, pars []interface{}) (item []*Cy
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
+
+// 修改是否推送消息状态
+func UpdateSendedMsgMeetingSendWxMsg(activityIds []int) (err error) {
+	lenarr := len(activityIds)
+	if lenarr == 0 {
+		return
+	}
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, activityIds)
+	//修改设置消息提醒微信模版消息推送状态
+	sql := ` UPDATE cygx_activity_meeting_reminder SET  is_send_wx_msg= 1  WHERE  1=1   ` + condition
+	_, err = o.Raw(sql, pars).Exec()
+	if err != nil {
+		return
+	}
+
+	//修改设置预约外呼微信模版消息推送状态
+	sql = ` UPDATE cygx_activity_signup SET  is_send_wx_msg= 1  WHERE  1=1   ` + condition
+	_, err = o.Raw(sql, pars).Exec()
+	return
+}

+ 11 - 10
models/activity_points_set.go

@@ -18,16 +18,17 @@ type YanXuanActivityPointsRedis struct {
 }
 
 type CygxActivityPointsSet struct {
-	Id               int       `gorm:"column:id;primary_key;AUTO_INCREMENT" json:"id"`
-	ActivityId       int       `gorm:"column:activity_id;NOT NULL" json:"activity_id"`                         // 活动ID
-	PointsObject     int       `gorm:"column:points_object;default:1;NOT NULL" json:"points_object"`           // 扣点对象,1:参会人、2:办会人、3:办会人和参会人
-	CompanyId        int       `gorm:"column:company_id;default:0;NOT NULL" json:"company_id"`                 // 公司ID
-	CompanyName      float64   `gorm:"column:company_name;NOT NULL" json:"company_name"`                       // 公司名称
-	UserPointsNum    float64   `gorm:"column:user_points_num;default:0;NOT NULL" json:"user_points_num"`       // 参会人扣点数量
-	PointsType       int       `gorm:"column:points_type;default:0;NOT NULL" json:"points_type"`               // 扣点形式,1:报名即扣点,2:到会即扣点
-	CompanyPointsNum float64   `gorm:"column:company_points_num;default:0;NOT NULL" json:"company_points_num"` // 办会人扣点数量
-	CreateTime       time.Time `gorm:"column:create_time;NOT NULL" json:"create_time"`                         // 创建时间
-	ModifyTime       time.Time `gorm:"column:modify_time;NOT NULL" json:"modify_time"`                         // 更新时间
+	Id                 int       `gorm:"column:id;primary_key;AUTO_INCREMENT" json:"id"`
+	ActivityId         int       `gorm:"column:activity_id;NOT NULL" json:"activity_id"`                         // 活动ID
+	PointsObject       int       `gorm:"column:points_object;default:1;NOT NULL" json:"points_object"`           // 扣点对象,1:参会人、2:办会人、3:办会人和参会人
+	CompanyId          int       `gorm:"column:company_id;default:0;NOT NULL" json:"company_id"`                 // 公司ID
+	CompanyName        float64   `gorm:"column:company_name;NOT NULL" json:"company_name"`                       // 公司名称
+	UserPointsNum      float64   `gorm:"column:user_points_num;default:0;NOT NULL" json:"user_points_num"`       // 参会人扣点数量
+	PointsType         int       `gorm:"column:points_type;default:0;NOT NULL" json:"points_type"`               // 扣点形式,1:报名即扣点,2:到会即扣点
+	CompanyPointsNum   float64   `gorm:"column:company_points_num;default:0;NOT NULL" json:"company_points_num"` // 办会人扣点数量
+	CancelDeadlineType int       `description:"取消报名截止时间类型,0:不设置,1:同报名截止时间, 2:24小时之前、3:48小时之前"`
+	CreateTime         time.Time `gorm:"column:create_time;NOT NULL" json:"create_time"` // 创建时间
+	ModifyTime         time.Time `gorm:"column:modify_time;NOT NULL" json:"modify_time"` // 更新时间
 }
 
 type CygxActivityPointsSetRsq struct {

+ 33 - 31
models/activity_special.go

@@ -3,41 +3,43 @@ package models
 import (
 	//"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"time"
 )
 
 // 专项调研活动列表
 type CygxActivitySpecialDetail struct {
-	ActivityId            int    `description:"活动ID "`
-	ActivityTypeName      string `description:"活动名称"`
-	SpecialType           int    `description:"调研形式、 1 线上 , 2 线下"`
-	City                  string `description:"调研城市"`
-	ChartPermissionName   string `description:"行业名称"`
-	ChartPermissionId     int    `description:"行业Id"`
-	ResearchTheme         string `description:"调研主题"`
-	ActivityTimeText      string `description:"活动预期时间带文字"`
-	TripImgLink           string `description:"行程图片链接"`
-	IsSignup              int    `description:"是否感兴趣 1是 ,0 否"`
-	Label                 string `description:"主题标签"`
-	ImgUrl                string `description:"图片链接"`
-	ImgUrlText            string `description:"图片链接文字"`
-	IndustrialName        string `description:"产业名称"`
-	IndustrialSubjectName string `description:"标的名称(相关公司)"`
-	Scale                 string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
-	CustomerTypeIds       string `description:"活动可见的客户类型,多个ID用 , 隔开"`
-	IsTrip                int    `description:"是否报名 1是 ,0 否"`
-	TripNum               int    `description:"已报名人数"`
-	Days                  int    `description:"调研天数"`
-	Host                  string `description:"主持人"`
-	PersonInCharge        string `description:"纪要负责人"`
-	LimitPeopleNum        int    `description:"限制人数数量"`
-	TripImgLinkFix        string `description:"确定行程之后的图片链接"`
-	ActivityTimeTextByDay string `description:"活动预期时间带周日"`
-	ActivityTime          string `description:"活动预期时间"`
-	ActivityTimeEnd       string `description:"活动预期结束时间"`
-	ActiveState           int    `description:"活动进行状态 未开始:1、进行中2、已结束3"`
-	TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
-	Explain               string `description:"说明"`
-	AdminId               int    `description:"管理员ID"`
+	ActivityId            int       `description:"活动ID "`
+	ActivityTypeName      string    `description:"活动名称"`
+	SpecialType           int       `description:"调研形式、 1 线上 , 2 线下"`
+	City                  string    `description:"调研城市"`
+	ChartPermissionName   string    `description:"行业名称"`
+	ChartPermissionId     int       `description:"行业Id"`
+	ResearchTheme         string    `description:"调研主题"`
+	ActivityTimeText      string    `description:"活动预期时间带文字"`
+	TripImgLink           string    `description:"行程图片链接"`
+	IsSignup              int       `description:"是否感兴趣 1是 ,0 否"`
+	Label                 string    `description:"主题标签"`
+	ImgUrl                string    `description:"图片链接"`
+	ImgUrlText            string    `description:"图片链接文字"`
+	IndustrialName        string    `description:"产业名称"`
+	IndustrialSubjectName string    `description:"标的名称(相关公司)"`
+	Scale                 string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	CustomerTypeIds       string    `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	IsTrip                int       `description:"是否报名 1是 ,0 否"`
+	TripNum               int       `description:"已报名人数"`
+	Days                  int       `description:"调研天数"`
+	Host                  string    `description:"主持人"`
+	PersonInCharge        string    `description:"纪要负责人"`
+	LimitPeopleNum        int       `description:"限制人数数量"`
+	TripImgLinkFix        string    `description:"确定行程之后的图片链接"`
+	ActivityTimeTextByDay string    `description:"活动预期时间带周日"`
+	ActivityTime          string    `description:"活动预期时间"`
+	ActivityTimeEnd       string    `description:"活动预期结束时间"`
+	ActiveState           int       `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	TripStatus            int       `description:"行程进行状态 1:预报名,2:确定行程"`
+	Explain               string    `description:"说明"`
+	AdminId               int       `description:"管理员ID"`
+	LastUpdatedTime       time.Time `description:"更新时间"`
 }
 
 // 获取数量

+ 35 - 0
models/activity_special_meeting_detail.go

@@ -0,0 +1,35 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySpecialMeetingDetail struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id"`
+	ActivityId  int       `description:"活动ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱号"`
+	CompanyId   int       `description:"公司ID"`
+	CompanyName string    `description:"公司名称"`
+	IsMeeting   int       `description:"是否到会  1.是 ,0否"`
+	IsAirborne  int       `description:"是否属于空降  1.是 ,0否"`
+	RealName    string    `description:"真实姓名"`
+}
+
+// 添加
+func AddCygxActivitySpecialMeetingDetail(item *CygxActivitySpecialMeetingDetail) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 取消
+func CancelCygxActivitySpecialMeetingDetail(uid, activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE  FROM cygx_activity_special_meeting_detail   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, uid, activityId).Exec()
+	return
+}

+ 1 - 0
models/activity_video.go

@@ -42,6 +42,7 @@ type CygxActivityVideoListResp struct {
 	Title         string `orm:"column(video_name)";description:"视频名称"`
 	ResourceUrl   string `orm:"column(video_url)";description:"视频地址"`
 	VideoDuration string `description:"视频时长"`
+	ActivityTime  string `description:"活动时间"`
 }
 
 type CygxActivityVideoListRep struct {

+ 2 - 1
models/activity_voice.go

@@ -30,6 +30,7 @@ type CygxActivityVoiceResp struct {
 	CreateTime          string `description:"创建时间"`
 	ChartPermissionId   int    `description:"权限id"`
 	ChartPermissionName string `description:"行业名称"`
+	ActivityTime        string `description:"活动时间"`
 }
 
 // ActivityVoiceReq 音频数据
@@ -102,7 +103,7 @@ func GetCygxActivityVoiceByActivityId(activityId int) (item *CygxActivityVoice,
 func GetActivityVoiceList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVoiceResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-	v.*,art.chart_permission_id
+	v.*,art.chart_permission_id,art.activity_time
 FROM
 	cygx_activity_voice AS v 
 	INNER JOIN cygx_activity as art ON art.activity_id = v.activity_id    WHERE 1= 1  `

+ 8 - 4
models/article.go

@@ -119,6 +119,7 @@ type HomeArticle struct {
 	ArticleResponse     int                  `description:"报告类型 0:啥也不是,1研选报告,2:研选纪要,3:研选沙龙,4;研选观点"`
 	Readnum             int                  `description:"阅读数量"`
 	Cover               string               `description:"封面图片"`
+	BodyHighlight       []string             `description:"搜索高亮展示结果"`
 	List                []*IndustrialManagementIdInt
 }
 
@@ -174,7 +175,8 @@ type ArticleDetail struct {
 	IsFollowButton           bool   `description:"是否关注"`
 	IsRoadShow               bool   `description:"是否是路演精华"`
 	ReportType               int    `description:"报告类型,1行业报告,2产业报告,0无"`
-	IsApplyAppointmentExpert bool   `description:"是否预约过专家"`
+	FieldName                string `description:"策略平台的领域字段名称"`
+	IsApplyAppointmentExpert bool   `description:"是否属于专家访谈"`
 }
 
 type ArticleDetailFileLink struct {
@@ -284,13 +286,15 @@ func GetArticleDetailTestById(articleId int) (item *ArticleDetail, err error) {
 
 func GetArticleAll() (item []*ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_article WHERE is_summary=1`
+	//sql := `SELECT * FROM cygx_article WHERE 1=1  is_summary=1`
+	sql := `SELECT * FROM cygx_article WHERE 1=1   AND publish_status = 1 `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
 func GetArticleAllDate(endDate string) (item []*ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_article WHERE is_summary=1 AND publish_date >= ?   `
+	//sql := `SELECT * FROM cygx_article WHERE is_summary=1 AND publish_date >= ?   `
+	sql := `SELECT * FROM cygx_article WHERE 1=1 AND publish_date >= ?   `
 	_, err = o.Raw(sql, endDate).QueryRows(&item)
 	return
 }
@@ -305,7 +309,7 @@ func GetArticleAll2() (item []*ArticleDetail, err error) {
 // 获取文章列表
 func GetArticleList(condition string, pars []interface{}) (items []*ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT	article_id FROM cygx_article  WHERE 1= 1 ` + condition
+	sql := `SELECT 	*  FROM cygx_article  WHERE 1= 1 ` + condition
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 6 - 4
models/company_interaction_num.go

@@ -22,18 +22,19 @@ type CygxCompanyInteractionNum struct {
 	ActivityVideoNum    int       `description:"活动视频播放量"`
 	ActivityVoiceNum    int       `description:"活动音频播放量"`
 	RoadshowNum         int       `description:"路演播放总数量"`
+	TagNum              int       `description:"标签点击次数"`
 	CreateTime          time.Time `description:"创建时间"`
 	ModifyTime          time.Time `description:"更新时间"`
 }
 
-//添加
+// 添加
 func AddCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
 	return
 }
 
-//修改
+// 修改
 func UpdateCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (err error) {
 	updateParams := make(map[string]interface{})
 	updateParams["CompanyId"] = item.CompanyId
@@ -51,6 +52,7 @@ func UpdateCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (err error
 	updateParams["ActivityVideoNum"] = item.ActivityVideoNum
 	updateParams["ActivityVoiceNum"] = item.ActivityVoiceNum
 	updateParams["RoadshowNum"] = item.RoadshowNum
+	updateParams["TagNum"] = item.TagNum
 	updateParams["CreateTime"] = time.Now()
 	updateParams["ModifyTime"] = time.Now()
 	whereParam := map[string]interface{}{"company_id": item.CompanyId}
@@ -58,7 +60,7 @@ func UpdateCygxCompanyInteractionNum(item *CygxCompanyInteractionNum) (err error
 	return
 }
 
-//获取列表
+// 获取列表
 func GetCygxCompanyInteractionNumList() (items []*CygxCompanyInteractionNum, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_company_interaction_num   `
@@ -66,7 +68,7 @@ func GetCygxCompanyInteractionNumList() (items []*CygxCompanyInteractionNum, err
 	return
 }
 
-//批量添加用户互动信息
+// 批量添加用户互动信息
 func AddCygxCompanyInteractionNumList(items []*CygxCompanyInteractionNum) (lastId int64, err error) {
 	o := orm.NewOrm()
 	_, err = o.InsertMulti(1, items)

+ 11 - 0
models/company_report_permission.go

@@ -33,3 +33,14 @@ func GetCompanyReportPermissionDetailByCondition(condition string, pars []interf
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
 }
+
+// 列表
+func GetCompanyReportPermissionList(condition string, pars []interface{}) (items []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_report_permission  WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 1 - 0
models/company_user_type.go

@@ -9,6 +9,7 @@ type CygxCompanyUserType struct {
 	Id             int `orm:"column(id);pk" description:"分析师id"`
 	CompanyId      int
 	CustomerTypeId int       `description:"用户身份ID"`
+	PackageType    int       `description:"1:70万 2:45w"`
 	CreateTime     time.Time `description:"创建时间"`
 	ModifyTime     time.Time `description:"创建时间"`
 }

+ 1 - 0
models/db.go

@@ -98,6 +98,7 @@ func init() {
 		new(CygxUserFreeeButton),
 		new(UserInvitee),
 		new(CygxActivitySpecialSignup),
+		new(CygxActivitySpecialMeetingDetail),
 		new(CygxUserFollowSpecial),
 		new(CygxChart),
 		new(CygxChartCollect),

+ 0 - 16
models/industrial_activity_group_management.go

@@ -13,22 +13,6 @@ type CygxIndustrialActivityGroupManagement struct {
 	CreateTime             time.Time `description:"创建时间"`
 }
 
-type CygxIndustrialActivityGroupSubject struct {
-	Id                  int       `orm:"column(id);pk" description:"主键ID"`
-	ActivityId          int       `description:"活动ID"`
-	IndustrialSubjectId int       `description:"cygx_industrial_subject表的文章ID"`
-	Source              int       `description:"来源,1 活动,2专项调研"`
-	CreateTime          time.Time `description:"创建时间"`
-}
-
-type CygxIndustrialSubject struct {
-	IndustrialSubjectId    int       `orm:"column(industrial_subject_id);pk" description:"标的id"`
-	IndustrialManagementId int       `description:"产业id"`
-	SubjectName            string    `description:"标的名称"`
-	CreateTime             time.Time `description:"创建时间"`
-	Source                 int       `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
-}
-
 // 获取标的列表
 func GetCygxIndustrialSubjectList(subjectName string) (items []*CygxIndustrialSubject, err error) {
 	o := orm.NewOrm()

+ 34 - 0
models/industrial_activity_group_subject.go

@@ -0,0 +1,34 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxIndustrialActivityGroupSubject struct {
+	Id                  int       `orm:"column(id);pk" description:"主键ID"`
+	ActivityId          int       `description:"活动ID"`
+	IndustrialSubjectId int       `description:"cygx_industrial_subject表的文章ID"`
+	Source              int       `description:"来源,1 活动,2专项调研"`
+	CreateTime          time.Time `description:"创建时间"`
+}
+
+type SubjectActivityGroupManagementRep struct {
+	IndustrialSubjectId int    `description:"产业id"`
+	SubjectName         string `description:"标的名称"`
+}
+
+// GetCygxIndustrialActivityGroupSubjectList 获取列表
+func GetCygxIndustrialActivityGroupSubjectList(condition string, pars []interface{}) (list []*CygxIndustrialActivityGroupSubject, err error) {
+	sql := `SELECT
+			*
+			FROM
+			cygx_industrial_activity_group_subject
+			WHERE
+				1 = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 19 - 1
models/industrial_article_group_subject.go

@@ -23,7 +23,7 @@ type SubjectArticlGroupList struct {
 func GetSubjectArticleGroupManagementList(condition string, pars []interface{}) (items []*CygxIndustrialArticleGroupSubject, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			ag.industrial_subject_id 
+				* 
 			FROM
 			cygx_industrial_article_group_subject AS ag
 			WHERE
@@ -46,3 +46,21 @@ func GetSubjectArticlGroupList(condition string, pars []interface{}) (items []*S
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 标的列表
+func GetIndustrialArticleGroupSubjectListByHz(IndustrialManagementId int) (items []*IndustrialSubject, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			i.* 
+		FROM
+			cygx_industrial_subject AS i
+			INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.industrial_subject_id = i.industrial_subject_id
+			INNER JOIN cygx_article AS a ON a.article_id = sg.article_id 
+		WHERE
+			i.industrial_management_id = ? 
+			AND a.article_type_id = 0 
+		GROUP BY
+			i.industrial_subject_id `
+	_, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
+	return
+}

+ 12 - 0
models/industrial_management.go

@@ -21,6 +21,18 @@ type IndustrialManagementRep struct {
 	IndustryNewLabel       bool   `description:"是否产业新标签"`
 }
 
+// 列表
+func GetIndustrialManagementRepList(condition string, pars []interface{}, startSize, pageSize int) (items []*IndustrialManagementRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_industrial_management as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?  `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
 type IndustrialManagementCount struct {
 	IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
 }

+ 24 - 0
models/industrial_subject.go

@@ -0,0 +1,24 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxIndustrialSubject struct {
+	IndustrialSubjectId    int       `orm:"column(industrial_subject_id);pk" description:"标的id"`
+	IndustrialManagementId int       `description:"产业id"`
+	SubjectName            string    `description:"标的名称"`
+	CreateTime             time.Time `description:"创建时间"`
+	Source                 int       `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
+}
+
+// 获取标的列表
+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
+}

+ 4 - 0
models/micro_roadshow.go

@@ -53,6 +53,7 @@ type MicroRoadShowPageList struct {
 	ChartPermissionId   int    `description:"行业ID"`
 	ChartPermissionName string `description:"行业名称"`
 	IndustryName        string `description:"产业名称"`
+	IndustryId          int    `description:"产业id"`
 	PlaySeconds         string `description:"音视频时长"`
 	ActivityId          int    `description:"活动ID"`
 	IsCollect           bool   `description:"是否收藏"`
@@ -75,6 +76,7 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			video_duration AS play_seconds,
 			img_url AS background_img,            
 			industry_name,
+			industry_id,
 			share_img_url AS share_img,
 			"" as  activity_id
 		FROM
@@ -102,6 +104,7 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			"" AS play_seconds,
 			"" AS background_img,
 			"" AS industry_name,
+			"",
 			"" AS share_img,
 			v.activity_id
 		FROM
@@ -128,6 +131,7 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			a.voice_play_seconds AS play_seconds,
 			a.img_url AS background_img,
 			"" AS industry_name,
+			"",
 			"" AS share_img,
 			a.activity_id 
 		FROM

+ 55 - 13
models/report.go

@@ -1126,17 +1126,19 @@ WHERE
 }
 
 type TimeLineReportItem struct {
-	Id              int    `description:"文章或晨报点评id"`
-	Title           string `description:"标题"`
-	PublishTime     string `description:"发布时间"`
-	Content         string `description:"内容"`
-	VideoUrl        string `description:"视频链接"`
-	IsHaveVideo     bool   `description:"是否包含视频"`
-	ImgUrlPc        string `description:"pc图片"`
-	SubCategoryName string `description:"二级分类"`
-	IsRed           bool   `description:"是否标红"`
-	Readnum         int    `description:"阅读数量"`
-	Resource        int    `description:"来源类型,1:文章、2:产品内测、3:晨报点评"`
+	Id               int    `description:"文章或晨报点评id"`
+	Title            string `description:"标题"`
+	PublishTime      string `description:"发布时间"`
+	Content          string `description:"内容"`
+	VideoUrl         string `description:"视频链接"`
+	VoiceUrl         string `description:"音频链接"`
+	VoicePlaySeconds string `description:"音频时长"`
+	IsHaveVideo      bool   `description:"是否包含视频"`
+	ImgUrlPc         string `description:"pc图片"`
+	SubCategoryName  string `description:"二级分类"`
+	IsRed            bool   `description:"是否标红"`
+	Readnum          int    `description:"阅读数量"`
+	Resource         int    `description:"来源类型,1:文章、2:产品内测、3:晨报点评 4:活动回放视频 5:活动回放音频 "`
 }
 
 // 获取产业报告+晨会点评列表
@@ -1151,9 +1153,11 @@ FROM
 		a.title,
 		a.publish_date AS publish_time,
 		a.video_url,
+		'' AS voice_url,
 		a.sub_category_name,
 		'' AS content,
 		1 AS resource,
+		'' AS voice_play_seconds,
 		( 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_article AS a
@@ -1167,9 +1171,11 @@ FROM
 		'' AS title,
 		mm.publish_time AS publish_time,
 		'' AS video_url,
+		'' AS voice_url,
 		'时间线' AS sub_category_name,
 		mmc.content,
 		3 AS resource,
+	'' AS voice_play_seconds,
 		0  AS readnum 
 	FROM
 		cygx_morning_meeting_review_chapter AS mmc
@@ -1183,9 +1189,11 @@ FROM
 		p.title,
 		p.publish_time,
 		'' AS video_url,
+		'' AS voice_url,
 		'' AS sub_category_name,
 		'' AS content,
 		2 AS resource,
+		'' AS voice_play_seconds,
 		0 AS readnum 
 	FROM
 		cygx_product_interior AS p
@@ -1193,12 +1201,46 @@ FROM
 	WHERE
 		p.product_interior_id = pm.product_interior_id 
 		AND p.visible_range = 1 
-	AND pm.industrial_management_id = ? 
+	AND pm.industrial_management_id = ? UNION ALL
+ 	SELECT 
+		ca.activity_id AS id,
+		cav.video_name AS title,
+		ca.activity_time AS publish_time,
+		cav.video_url AS video_url,
+		'' AS voice_url,
+		'' AS sub_category_name,
+		'' AS content,
+		4 AS resource,
+		'' AS voice_play_seconds,
+		( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum 
+	FROM 
+		cygx_activity AS ca 
+		INNER JOIN cygx_activity_video AS cav ON ca.activity_id = cav.activity_id 
+		INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
+	WHERE 
+		cam.industrial_management_id = ? AND cam.source = 1  UNION ALL
+ 	SELECT 
+		ca.activity_id AS id,
+		cavo.voice_name AS title,
+		ca.activity_time AS publish_time,
+		'' AS video_url,
+		cavo.voice_url AS voice_url,
+		'' AS sub_category_name,
+		'' AS content,
+		5 AS resource,
+		cavo.voice_play_seconds AS voice_play_seconds,
+		( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum 
+	FROM 
+		cygx_activity AS ca 
+		INNER JOIN cygx_activity_voice AS cavo ON ca.activity_id = cavo.activity_id 
+		INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
+	WHERE 
+		cam.industrial_management_id = ? AND cam.source = 1 
 	) AS t 
 `
 	sql += ` ORDER BY 
 	t.publish_time DESC LIMIT ?,? `
-	_, err = o.Raw(sql, industrialManagementId, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
+	_, err = o.Raw(sql, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
 	return
 }
 

+ 3 - 0
models/resource_data.go

@@ -19,6 +19,8 @@ type CygxResourceData struct {
 
 type CygxResourceDataResp struct {
 	Id                 int                                     `orm:"column(id);pk"`
+	BodyHighlight      []string                                `description:"搜索高亮展示结果"`
+	IsSummary          int                                     `description:"是否是纪要"`
 	SourceId           int                                     `description:"资源ID"`
 	Source             string                                  `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
 	PublishDate        string                                  `description:"发布时间"`
@@ -33,6 +35,7 @@ type CygxResourceDataResp struct {
 	Minutessummary     *CygxReportSelectionRep                 `description:"上周纪要汇总"`
 	Meetingreviewchapt *CygxMorningMeetingGatherDetailListResp `description:"晨会精华"`
 	ProductInterior    *CygxProductInteriorResp                `description:"产品内测"`
+	IndustrialResource *IndustrialManagementHotResp            `description:"产业资源包"`
 }
 
 // Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`

+ 6 - 4
models/user_interaction_num.go

@@ -22,18 +22,19 @@ type CygxUserInteractionNum struct {
 	ActivityVideoNum    int       `description:"活动视频播放量"`
 	ActivityVoiceNum    int       `description:"活动音频播放量"`
 	RoadshowNum         int       `description:"路演播放总数量"`
+	TagNum              int       `description:"标签点击次数"`
 	CreateTime          time.Time `description:"创建时间"`
 	ModifyTime          time.Time `description:"更新时间"`
 }
 
-//添加
+// 添加
 func AddCygxUserInteractionNum(item *CygxUserInteractionNum) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
 	return
 }
 
-//修改
+// 修改
 func UpdateCygxUserInteractionNum(item *CygxUserInteractionNum) (err error) {
 	updateParams := make(map[string]interface{})
 	updateParams["UserId"] = item.UserId
@@ -51,6 +52,7 @@ func UpdateCygxUserInteractionNum(item *CygxUserInteractionNum) (err error) {
 	updateParams["ActivityVideoNum"] = item.ActivityVideoNum
 	updateParams["ActivityVoiceNum"] = item.ActivityVoiceNum
 	updateParams["RoadshowNum"] = item.RoadshowNum
+	updateParams["TagNum"] = item.TagNum
 	updateParams["CreateTime"] = time.Now()
 	updateParams["ModifyTime"] = time.Now()
 	whereParam := map[string]interface{}{"user_id": item.UserId}
@@ -58,7 +60,7 @@ func UpdateCygxUserInteractionNum(item *CygxUserInteractionNum) (err error) {
 	return
 }
 
-//获取列表
+// 获取列表
 func GetCygxUserInteractionNumList() (items []*CygxUserInteractionNum, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_user_interaction_num   `
@@ -66,7 +68,7 @@ func GetCygxUserInteractionNumList() (items []*CygxUserInteractionNum, err error
 	return
 }
 
-//批量添加用户互动信息
+// 批量添加用户互动信息
 func AddCygxUserInteractionNumList(items []*CygxUserInteractionNum) (lastId int64, err error) {
 	o := orm.NewOrm()
 	_, err = o.InsertMulti(1, items)

+ 31 - 13
models/user_record.go

@@ -25,14 +25,14 @@ type UserRecord struct {
 	UserId         int       `description:"用户id"`
 }
 
-//根据openid获取用户关系
+// 根据openid获取用户关系
 func GetUserRecordByOpenId(openId string) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE open_id=? `
 	err = orm.NewOrm().Raw(sql, openId).QueryRow(&item)
 	return
 }
 
-//根据openid解除绑定用户关系
+// 根据openid解除绑定用户关系
 func UnBindUserRecordByOpenid(openId string) (err error) {
 	o := orm.NewOrm()
 	msql := ` UPDATE user_record SET user_id = 0,bind_account="" WHERE open_id = ? `
@@ -40,14 +40,14 @@ func UnBindUserRecordByOpenid(openId string) (err error) {
 	return
 }
 
-//根据用户id和平台id获取用户关系
+// 根据用户id和平台id获取用户关系
 func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE user_id=? AND create_platform = ?`
 	err = orm.NewOrm().Raw(sql, userId, platform).QueryRow(&item)
 	return
 }
 
-//根据用户id和平台id获取用户关系
+// 根据用户id和平台id获取用户关系
 func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *OpenIdList, err error) {
 	sql := `SELECT
 			cr.open_id,
@@ -63,14 +63,14 @@ func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *OpenIdList,
 	return
 }
 
-//添加用户关系
+// 添加用户关系
 func AddUserRecord(record *UserRecord) (recordId int64, err error) {
 	o := orm.NewOrm()
 	recordId, err = o.Insert(record)
 	return
 }
 
-//根据openid绑定用户关系
+// 根据openid绑定用户关系
 func BindUserRecordByOpenid(userId int, openId, bindAccount string) (err error) {
 	o := orm.NewOrm()
 	msql := " UPDATE user_record SET user_id = ?,bind_account=? WHERE open_id = ? "
@@ -78,7 +78,7 @@ func BindUserRecordByOpenid(userId int, openId, bindAccount string) (err error)
 	return
 }
 
-//修改用户微信信息
+// 修改用户微信信息
 func ModifyUserRecordInfo(openId, nickName, headimgUrl, city, province, country, sessionKey string, sex, userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE user_record SET nick_name=?,headimgurl=?,sex=?,city=?,province=?,country=?,session_key=? WHERE user_id=? and open_id=? `
@@ -86,7 +86,7 @@ func ModifyUserRecordInfo(openId, nickName, headimgUrl, city, province, country,
 	return
 }
 
-//修改用户微信信息
+// 修改用户微信信息
 func ModifyUserRecordByDetail(openId, unionId, nickName, headimgUrl, city, province, country string, sex, userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE user_record SET union_id=?, nick_name=?,headimgurl=?,sex=?,city=?,province=?,country=? WHERE user_id=? and open_id=? `
@@ -94,7 +94,7 @@ func ModifyUserRecordByDetail(openId, unionId, nickName, headimgUrl, city, provi
 	return
 }
 
-//修改用户微信信息
+// 修改用户微信信息
 func ModifyUserRecordSessionKey(openId, sessionKey string) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE user_record SET session_key=? WHERE open_id=? `
@@ -102,7 +102,7 @@ func ModifyUserRecordSessionKey(openId, sessionKey string) (err error) {
 	return
 }
 
-//根据用户id和平台id获取用户关系
+// 根据用户id和平台id获取用户关系
 func GetUserRecordByMobile(platform int, bindAccount string) (item *OpenIdList, err error) {
 
 	var sql string
@@ -119,14 +119,14 @@ func GetUserRecordByMobile(platform int, bindAccount string) (item *OpenIdList,
 	return
 }
 
-//获取该用户第一个的 三方信息(微信头像信息)
+// 获取该用户第一个的 三方信息(微信头像信息)
 func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE user_id = ? order by user_record_id asc`
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
 	return
 }
 
-//根据手机号获取用户的openid
+// 根据手机号获取用户的openid
 func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenIdList, err error) {
 	var sql string
 	//if utils.RunMode == "release" {
@@ -144,7 +144,7 @@ func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenI
 	return
 }
 
-//获取单个用户openid
+// 获取单个用户openid
 func GetOpenIdDetailByMobile(platform int, bindAccount string) (item *OpenIdList, err error) {
 	o := orm.NewOrm()
 	var sql string
@@ -166,3 +166,21 @@ func GetOpenIdByUserIds(ids string) (item []*OpenIdList, err error) {
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
+
+// 根据手机号获取用户的openid
+func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
+	lenarr := len(bindAccount)
+	if lenarr == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition = ` AND u.bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, bindAccount)
+	sql := `SELECT cr.open_id,u.user_id
+			FROM user_record  as u 
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
+			WHERE u.create_platform=4 ` + condition
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 2 - 0
models/wx_user.go

@@ -517,6 +517,7 @@ type CygxUserInteractionNumDetail struct {
 	RoadshowVideoNum    int    `description:"产业视频播放量"`
 	ActivityVideoNum    int    `description:"活动视频播放量"`
 	ActivityVoiceNum    int    `description:"活动音频播放量"`
+	TagNum              int    `description:"标签点击次数"`
 	PackageType         int    `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
 	TryStage            int    `description:"试用客户子标签:0全部、1未分类、2 推进、3 跟踪、4 预备"`
 }
@@ -549,6 +550,7 @@ func GetCygxCompanyUserUserInteraction(userIds string) (items []*CygxUserInterac
 			WHERE
 				man.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_fllow AS f WHERE f.user_id = u.user_id  AND f.type = 1 ) 
 			) AS labels,
+			( SELECT COUNT( 1 ) FROM cygx_tag_history AS h WHERE h.user_id = u.user_id  ) AS tag_num,
 			(
 			SELECT
 				GROUP_CONCAT( DISTINCT man.label SEPARATOR ',' ) 

+ 9 - 0
routers/commentsRouter.go

@@ -1285,6 +1285,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:SearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:SearchController"],
+        beego.ControllerComments{
+            Method: "ComprehensiveList",
+            Router: `/comprehensive/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:SearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:SearchController"],
         beego.ControllerComments{
             Method: "SearchList",

+ 1 - 0
routers/router.go

@@ -96,6 +96,7 @@ func init() {
 			web.NSInclude(
 				&controllers.ActivityCoAntroller{},
 				&controllers.ActivityABaseController{},
+				&controllers.ActivityNoLoginController{},
 			),
 		),
 		web.NSNamespace("/research",

+ 156 - 94
services/activity.go

@@ -83,48 +83,85 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 	return
 }
 
+//func init() {
+//	SendActivityBeginMsgMeeting()
+//}
+
 // 推送会议开始消息提醒15分钟前
 func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
+	//func SendActivityBeginMsgMeeting() (err error) {
 	defer func() {
 		if err != nil {
 			go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
 			fmt.Println("发送失败,Err:", err.Error())
 		}
 	}()
+	var condition string
+	var pars []interface{}
 	endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
-	listActivity, err := models.GetActivitySendMsgListAllMeeting(endDate)
-	if err != nil {
-		fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
+	condition = ` AND activity_time <= ? AND activity_time >= NOW()  AND  publish_status = 1 `
+	pars = append(pars, endDate)
+	listActivity, e := models.GetCygxActivityList(condition, pars, 0, 100000)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivityList, Err: " + e.Error())
 		return
 	}
 	if len(listActivity) == 0 {
 		return
 	}
-	var signupIds string
+	//var signupIds string
 	var remark = "点击查看活动详情"
+
+	var activityIds []int
+	//同一时间举办的活动不多所以这里循环查询
 	for _, v := range listActivity {
-		signupIds += strconv.Itoa(v.Id) + ","
-		var reserveResults string
-		var first string
-		openIdItem := new(models.OpenIdList)
-		openIdItem.OpenId = v.OpenId
-		openIdItem.UserId = v.UserId
+		activityIds = append(activityIds, v.ActivityId)
+		var mobiles []string
+		pars = make([]interface{}, 0)
+		condition = ` AND activity_id = ?  AND is_send_wx_msg = 0 `
+		pars = append(pars, v.ActivityId)
+		//获取设置消息提醒的用户列表
+		listxReminder, e := models.GetCygxReminderListByUser(condition, pars)
+		if e != nil {
+			err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
+			return
+		}
+		for _, vReminder := range listxReminder {
+			mobiles = append(mobiles, vReminder.Mobile)
+		}
+
+		pars = make([]interface{}, 0)
+		condition = ` AND do_fail_type = 0 AND activity_id  = ? AND signup_type = 1  AND is_send_wx_msg = 0 `
+		pars = append(pars, v.ActivityId)
+		//获取设置预约外呼的用户列表
+		listSignup, e := models.GetActivitySignupList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetActivitySignupList, Err: " + e.Error())
+			return
+		}
+		for _, vSignup := range listSignup {
+			mobiles = append(mobiles, vSignup.Mobile)
+		}
+		//获取这些手机号对应的Openid
+		listOpenid, e := models.GetUserRecordListByMobileArr(mobiles)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetUserRecordListByMobileArr, Err: " + e.Error())
+			return
+		}
 		openIdList := make([]*models.OpenIdList, 0)
-		openIdList = append(openIdList, openIdItem)
+		for _, vOpenid := range listOpenid {
+			openIdItem := new(models.OpenIdList)
+			openIdItem.OpenId = vOpenid.OpenId
+			openIdItem.UserId = vOpenid.UserId
+			openIdList = append(openIdList, openIdItem)
+		}
+		var reserveResults string
+		var keyword2 string
 		reserveResults = "--"
-		first = "将在15分钟后开始"
-		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
-	}
-	if len(signupIds) == 0 {
-		return
-	}
-	signupIds = strings.TrimRight(signupIds, ",")
-	err = models.UPdateSendedMsgMeetingStatus(signupIds)
-	if err != nil {
-		var msg string
-		go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-		utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		keyword2 = "将在15分钟后开始"
+		SendWxMsgWithFrequency(keyword2, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
 	}
+	err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
 	return
 }
 
@@ -1112,6 +1149,11 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 
 // 根据用户身份处理活动可见
 func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower int) (conditionActivity string, err error) {
+	// cygx_10.9 未绑定联系方式的客户可以看到部分活动
+	if user.UserId == 0 || user.CompanyId == 1 {
+		conditionActivity = ` AND art.publish_status = 1  AND art.visible_range != 1 AND (art.is_limit_people = 0 OR (art.is_limit_people=1 AND art.is_all_customer_type=1))   ` + condition
+		return
+	}
 	condition += `   AND art.publish_status = 1 `
 	conditionActivity = condition
 	//弘则可以查看所有活动
@@ -2107,16 +2149,37 @@ func ArticleUserRemind(user *models.WxUserItem, articleDetail *models.ArticleDet
 func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.ActivityDetail, source int) (err error) {
 	defer func() {
 		if err != nil {
-			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ActivityUserRemind ErrMsg:"+err.Error(), utils.EmailSendToUsers)
 		}
 	}()
-	countUser, err := models.GetUserRemind(user.UserId)
-	if err != nil {
-		return err
+
+	//获取销售手机号
+
+	countUser, e := models.GetUserRemind(user.UserId)
+	if e != nil {
+		err = errors.New("GetUserRemind, Err: " + e.Error())
+		return
 	}
-	if countUser == 0 {
-		return err
+	//获取销售手机号
+	sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+		return
+	}
+	if sellerItemQy == nil {
+		err = nil
+		return
+	}
+	//某销售下的所有客户活动报名/预约外呼时,模板消息提醒该销售(可设置销售范围,随时增减销售)
+	conf, e := models.GetConfigByCode("tpl_msg_seller_mobile")
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error())
+		return
+	}
+	//如果用户没有设置消息提醒,而且销售的手机号也没有添加到配置中,那么就不推送模版消息
+	if countUser == 0 && !strings.Contains(conf.ConfigValue, sellerItemQy.Mobile) {
+		err = nil
+		return
 	}
 	var sourceMsg string
 	if source == 1 {
@@ -2128,24 +2191,16 @@ func ActivityUserRemind(user *models.WxUserItem, activityDetail *models.Activity
 	} else if source == 4 {
 		sourceMsg = "活动报名"
 	}
-
-	//获取销售手机号
-	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	openIdList, e := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
+	if e != nil {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
 		return err
 	}
-	if sellerItemQy != nil {
-		openIdList, err := models.GetUserRecordListByMobile(4, sellerItemQy.Mobile)
-		if err != nil {
-			fmt.Println(err)
-			return err
-		}
-		var keyword1 string
-		var keyword2 string
-		keyword1 = activityDetail.ActivityName
-		keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
-		SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
-	}
+	var keyword1 string
+	var keyword2 string
+	keyword1 = activityDetail.ActivityName
+	keyword2 = fmt.Sprint("互动:", sourceMsg, ",", user.RealName, "--", user.CompanyName)
+	SendWxMsgWithActivityUserRemind(keyword1, keyword2, openIdList, activityDetail.ActivityId)
 	return
 }
 
@@ -2220,108 +2275,115 @@ func DoActivityOnenIdWxTemplateMsg(cont context.Context) (err error) {
 	return
 }
 
-func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.ActivityDetail) {
+func ActivityButtonShow(item *models.ActivityDetail) (activityDetail *models.ActivityDetail) {
 	if item.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
 		item.IsResearch = true
 	}
-	articleDetail = item
+	activityDetail = item
 	//IsShowAppointment       bool                       `description:"是否展示预约纪要"`
 	//IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
 	//IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
 	//IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
 	//IsShowSignup            bool                       `description:"是否展示我要报名"`
-	if articleDetail.SiginupDeadline == utils.FormatDateTimeInit { //报名截止时间处理
-		articleDetail.SiginupDeadline = ""
+
+	activityPointsByUserAllMap := GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
+	activityDetail.IsResearchPoints = activityPointsByUserAllMap[activityDetail.ActivityId]
+	if activityDetail.SiginupDeadline == utils.FormatDateTimeInit { //报名截止时间处理
+		activityDetail.SiginupDeadline = ""
+	}
+	//如果报名截止时间不规范,或者是非研选扣点活动就把截止时间设置为空
+	if activityDetail.CancelDeadline == utils.FormatDateTimeInit || !activityDetail.IsResearchPoints {
+		activityDetail.CancelDeadline = ""
 	}
-	activityTimeText := articleDetail.ActivityTimeText
+	activityTimeText := activityDetail.ActivityTimeText
 	activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
 	activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
-	articleDetail.ActivityTimeText = activityTimeText
-	if articleDetail.SourceType != 2 {
-		articleDetail.SourceType = 1
+	activityDetail.ActivityTimeText = activityTimeText
+	if activityDetail.SourceType != 2 {
+		activityDetail.SourceType = 1
 	}
-	articleDetail.IsShowAppointment = false
+	activityDetail.IsShowAppointment = false
 	//易董的操作按钮都隐藏
-	if articleDetail.YidongActivityId != "" {
-		articleDetail.SourceType = 1
-		articleDetail.IsShowSignup = false
-		articleDetail.IsShowDetails = true
+	if activityDetail.YidongActivityId != "" {
+		activityDetail.SourceType = 1
+		activityDetail.IsShowSignup = false
+		activityDetail.IsShowDetails = true
 		return
 	}
 
 	//专家电话会 1
-	if articleDetail.ActivityTypeId == 1 && articleDetail.IsLimitPeople == 0 && (articleDetail.ActiveState == "1" || articleDetail.ActiveState == "2") {
-		articleDetail.IsShowHelpSsk = true
+	if activityDetail.ActivityTypeId == 1 && activityDetail.IsLimitPeople == 0 && (activityDetail.ActiveState == "1" || activityDetail.ActiveState == "2") {
+		activityDetail.IsShowHelpSsk = true
 	}
 	//新的是否展示规则
-	if articleDetail.IsCanAppointmentMinutes == 1 {
-		articleDetail.IsShowAppointment = true
+	if activityDetail.IsCanAppointmentMinutes == 1 {
+		activityDetail.IsShowAppointment = true
 	} else {
-		articleDetail.IsShowAppointment = false
+		activityDetail.IsShowAppointment = false
 	}
-	if articleDetail.ActiveState == "1" {
+	if activityDetail.ActiveState == "1" {
 		//专家电话会 1
 		//专家电话会限制人数的展示我要报名,不限制的展示预约外外呼
-		if articleDetail.ActivityTypeId == 1 {
+		if activityDetail.ActivityTypeId == 1 {
 			//articleDetail.IsShowOutboundCall = true
-			if articleDetail.LimitPeopleNum == 0 {
-				articleDetail.IsShowOutboundCall = true
+			if activityDetail.LimitPeopleNum == 0 {
+				activityDetail.IsShowOutboundCall = true
 				//articleDetail.IsShowHelpSsk = true
 			} else {
-				articleDetail.IsShowSignup = true
+				activityDetail.IsShowSignup = true
 			}
-			articleDetail.IsShowMeetingReminder = true
-			articleDetail.IsShowHelpSsk = true
+			activityDetail.IsShowMeetingReminder = true
+			activityDetail.IsShowHelpSsk = true
 		}
 
 		//分析师电话会 2
-		if articleDetail.ActivityTypeId == 2 {
-			if articleDetail.LimitPeopleNum == 0 {
-				articleDetail.IsShowOutboundCall = true
+		if activityDetail.ActivityTypeId == 2 {
+			if activityDetail.LimitPeopleNum == 0 {
+				activityDetail.IsShowOutboundCall = true
 				//articleDetail.IsShowHelpSsk = true
 			} else {
-				articleDetail.IsShowSignup = true
+				activityDetail.IsShowSignup = true
 			}
-			articleDetail.IsShowMeetingReminder = true
+			activityDetail.IsShowMeetingReminder = true
 		}
 
 		//公司调研电话会 3
-		if articleDetail.ActivityTypeId == 3 {
-			if articleDetail.IsResearchPoints || articleDetail.LimitPeopleNum > 0 {
-				articleDetail.IsShowSignup = true
+		if activityDetail.ActivityTypeId == 3 {
+			if activityDetail.IsResearchPoints || activityDetail.LimitPeopleNum > 0 {
+				activityDetail.IsShowSignup = true
 			} else {
-				articleDetail.IsShowMeetingReminder = true
-				articleDetail.IsShowOutboundCall = true
+				activityDetail.IsShowMeetingReminder = true
+				activityDetail.IsShowOutboundCall = true
 			}
 		}
 
 		//公司线下调研 4
-		if articleDetail.ActivityTypeId == 4 {
-			articleDetail.IsShowSignup = true
+		if activityDetail.ActivityTypeId == 4 {
+			activityDetail.IsShowSignup = true
 		}
 
 		//专家线下沙龙 5
-		if articleDetail.ActivityTypeId == 5 {
-			articleDetail.IsShowSignup = true
+		if activityDetail.ActivityTypeId == 5 {
+			activityDetail.IsShowSignup = true
 		}
 
 		//分析师线下沙龙 6
-		if articleDetail.ActivityTypeId == 6 {
-			articleDetail.IsShowSignup = true
+		if activityDetail.ActivityTypeId == 6 {
+			activityDetail.IsShowSignup = true
 		}
 
 		//分析师电话会(C类) 7
-		if articleDetail.ActivityTypeId == 7 {
-			articleDetail.IsShowSignup = true
-			articleDetail.IsShowMeetingReminder = true
-			articleDetail.ActivityTypeName = "分析师电话会"
+		if activityDetail.ActivityTypeId == 7 {
+			activityDetail.IsShowSignup = true
+			activityDetail.IsShowMeetingReminder = true
+			activityDetail.ActivityTypeName = "分析师电话会"
 		}
 	}
 
 	//如果是易董创建的活动,展示我要报名,不展示预约外呼
-	if articleDetail.IsYidongConduct {
-		articleDetail.IsShowSignup = true
-		articleDetail.IsShowOutboundCall = false
+	if activityDetail.IsYidongConduct {
+		activityDetail.IsShowSignup = true
+		activityDetail.IsShowOutboundCall = false
 	}
 
 	return

+ 41 - 0
services/activity_points.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
+	"strconv"
 	"time"
 )
 
@@ -13,6 +14,45 @@ import (
 //	GetActivityPointsAll()
 //}
 
+// GetActivityPointsByUserAllMap 获取所有针对用户扣点的活动
+func GetActivityPointsByUserAllMap() (mapResp map[int]bool) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("GetActivityPointsByUserAllMap,Err:"+err.Error(), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	//获取所有研选类型的活动
+	condition = `  AND chart_permission_id =   ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN)
+	listActivity, e := models.GetActivityListByCondition(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivityListByCondition, Err: " + e.Error())
+		return
+	}
+	var activityIds []int
+	condition = ""
+	pars = make([]interface{}, 0)
+	for _, v := range listActivity {
+		activityIds = append(activityIds, v.ActivityId)
+	}
+	condition += ` AND  points_object  IN  (1,3) `
+	condition += ` AND activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)   `
+	pars = append(pars, activityIds)
+	list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetList, Err: " + e.Error())
+		return
+	}
+	mapResp = make(map[int]bool, 0)
+	for _, v := range list {
+		mapResp[v.ActivityId] = true
+	}
+	return
+}
+
 // GetActivityPointsAll 获取所有带有扣点的活动
 func GetActivityPointsAll() (mapResp map[int]bool, err error) {
 	defer func() {
@@ -840,6 +880,7 @@ func YanXuanActivityPointsBillSubmitMeetingReduce(log models.YanXuanActivityPoin
 
 // 6:研选审批通过的时候研选扣点更新
 func YanXuanCompanyApprovalReduce(log models.YanXuanActivityPointsRedis) (err error) {
+	time.Sleep(5 * time.Second) // 延迟5秒处理
 	defer func() {
 		if err != nil {
 			fmt.Println(err)

+ 45 - 0
services/activity_signup.go

@@ -125,6 +125,51 @@ func CheckActivityUserEmail(activityInfo *models.ActivityDetail, wxUser *models.
 	return
 }
 
+// 处理取消报名截止时间的弹窗文案
+func ActivityCancelDeadlineMsg(activityInfo *models.ActivityDetail) (popupMsg string, err error) {
+	if !activityInfo.IsResearchPoints {
+		return
+	}
+	activityId := activityInfo.ActivityId
+	//获取活动是否扣点以及扣点规则明细
+	activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
+	if e != nil {
+		err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
+		return
+	}
+	cancelDeadlineType := activityPointsSetDetail.CancelDeadlineType
+	popupMsg = "活动开始前1小时取消报名,可返还点数"
+	//if activityInfo.CancelDeadlineType == 0 {
+	//	popupMsg = "活动开始前1小时取消报名,可返还点数"
+	//}
+	if cancelDeadlineType == 1 && activityInfo.SiginupDeadline != utils.FormatDateTimeInit && activityInfo.SiginupDeadline != "" {
+		siginupDeadline := utils.GetTimeDateRemoveYearAndSecond(activityInfo.SiginupDeadline)
+		popupMsg = siginupDeadline + "前取消报名,可返还点数"
+	}
+	if cancelDeadlineType == 2 {
+		popupMsg = "活动开始前24小时取消报名,可返还点数"
+	}
+	if cancelDeadlineType == 3 {
+		popupMsg = "活动开始前48小时取消报名,可返还点数"
+	}
+	return
+}
+
+// 校验取消报名截止时间
+func CheckCancelDeadline(activityInfo *models.ActivityDetail) (popupMsg string) {
+	if !activityInfo.IsResearchPoints {
+		return
+	}
+	//获取活动是否扣点以及扣点规则明细
+	if activityInfo.CancelDeadline != utils.FormatDateTimeInit {
+		timeResp := utils.StrTimeToTime(activityInfo.CancelDeadline)
+		if timeResp.Before(time.Now()) {
+			popupMsg = "当前时间点已无法取消报名,\n\n若想取消,请联系对口销售"
+		}
+	}
+	return
+}
+
 // // 校验报名顺序 截止时间>点数>邮箱
 func CheckActivityUserAll(activityInfo *models.ActivityDetail, wxUser *models.WxUserItem) (popupMsg string, err error) {
 	_, popupMsg = CheckSiginupDeadline(activityInfo)

+ 32 - 13
services/activity_special_trip.go

@@ -57,7 +57,7 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 	//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
 	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
 	//var tripTota int
-	var airborneTota int
+	//var airborneTota int
 	//userType, _, e := GetActivitySpecialUserType(user.CompanyId)
 	userType, _, e := GetUserType(user.CompanyId)
 	if e != nil {
@@ -77,11 +77,11 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 		condition += ` AND company_id = ? `
 		pars = append(pars, user.CompanyId)
 
-		airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-		if e != nil {
-			err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-			return
-		}
+		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+		//if e != nil {
+		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+		//	return
+		//}
 		//condition += ` AND is_valid = 1 `
 		//查询当年的数据
 		condition += ` AND create_time >= ?  `
@@ -95,7 +95,25 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 		for _, v := range listTripBill {
 			TripBillNum += v.BillDetailed
 		}
-		tripRemaining = 10 - airborneTota + TripBillNum
+		var packageType int
+		//大套餐客户,数据库添加标识,
+		companyUserTypeDetail, errs := models.GetCygxCompanyUserType(user.CompanyId)
+		if errs != nil && errs.Error() != utils.ErrNoRow() {
+			err = errs
+			return
+		}
+		if companyUserTypeDetail != nil {
+			packageType = companyUserTypeDetail.PackageType
+			if companyUserTypeDetail.CustomerTypeId != 0 {
+				userType = companyUserTypeDetail.CustomerTypeId
+				return
+			}
+		}
+
+		packageTypeMap := map[int]int{1: 16, 2: 10}
+		totalTrip := packageTypeMap[packageType]
+		//tripRemaining = 10 - airborneTota + TripBillNum
+		tripRemaining = totalTrip + TripBillNum
 		if tripRemaining <= 0 {
 			errMsg = msgTemplate
 			return
@@ -111,11 +129,11 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 		condition += ` AND chart_permission_id = ? `
 		pars = append(pars, activityInfo.ChartPermissionId)
 
-		airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-		if e != nil {
-			err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-			return
-		}
+		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+		//if e != nil {
+		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+		//	return
+		//}
 		//查询当年的数据
 		condition += ` AND create_time >= ?  `
 		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
@@ -128,7 +146,8 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 		for _, v := range listTripBill {
 			TripBillNum += v.BillDetailed
 		}
-		tripRemaining = 5 - airborneTota + TripBillNum
+		//tripRemaining = 5 - airborneTota + TripBillNum
+		tripRemaining = 5 + TripBillNum
 		if tripRemaining <= 0 {
 			errMsg = msgTemplate
 			return

+ 90 - 0
services/activity_wx_template_msg.go

@@ -150,3 +150,93 @@ func SendActivitieSignTemplateMsg(user *models.WxUserItem, activityDetail *model
 	}
 	return
 }
+
+// SendActivitieCancelSignTemplateMsg 取消活动给销售和内容组四人发模版消息
+func SendActivitieCancelSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
+		}
+	}()
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+	openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
+		return
+	}
+	keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName +")"
+	keyword2 := user.Mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := "取消报名" + "【" +activityDetail.ActivityName+"】"
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = user.Mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}
+
+// SendNeiRongZuActivitieSignTemplateMsg 报名活动给销售和内容组四人发模版消息
+func SendNeiRongZuActivitieSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
+		}
+	}()
+	//获取销售手机号
+	sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+	openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
+		return
+	}
+	keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName +")"
+	keyword2 := user.Mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := "报名"  + "【" +activityDetail.ActivityName+"】"
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = user.Mobile
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}

+ 7 - 3
services/article.go

@@ -694,7 +694,10 @@ func GetArticleListByApi(cont context.Context) (err error) {
 //	//	for _, v := range allList {
 //	//		HandleArticleListByApi(v.ArticleId)
 //	//	}
-//	HandleArticleListByApi(8785)
+//
+//	for i := 8648; i < 9004; i++ {
+//		HandleArticleListByApi(i)
+//	}
 //
 //}
 
@@ -1156,8 +1159,9 @@ func HandleArticleListByApi(artcleId int) (err error) {
 		//}
 	}
 	go models.UpdateCygxArticleCeluePush(artcleId)
-
-	GetSummarytoEs(artcleId)
+	AddComprehensiveArticle(artcleId)                // 同步到综合页面的搜索引擎
+	AddComprehensiveIndustrialSource("Yx", artcleId) // 同步到综合页面的搜索引擎(添加产业资源包)
+	GetSummarytoEs(artcleId)                         // 同步到ES搜索引擎
 	GetIndustrialManagementArticleNewPublishData()
 	if len(listArticleData) > 0 {
 		for _, v := range listArticleData {

+ 2 - 0
services/chart.go

@@ -587,6 +587,8 @@ func GetChartDetailByApi(chartId int) (err error) {
 			}
 		}
 	}
+
+	go AddComprehensiveChart(chartId) //同步图表到综合页面的搜索
 	return
 
 }

+ 1474 - 0
services/es_comprehensive.go

@@ -0,0 +1,1474 @@
+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 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)
+	}
+}
+
+// 添加晨会精华
+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)
+	}
+}
+
+// 新增和修改数据
+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{}{"</font>"},
+		"pre_tags":      []interface{}{"<font color='red'>"},
+		"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)
+	//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 // 研选产业资源包
+	//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)
+		}
+	}
+	//处理文章
+	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 := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+		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
+		}
+	}
+
+	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
+		}
+
+		var activityListRersp []*models.ActivityDetail
+		for _, v := range activityList {
+			v.SignupType = mapActivitySignup[v.ActivityId]
+			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 {
+			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) > 0 {
+
+		audioIdstr := strings.Join(activityvoiceIds, ",")
+		ideoIdsStr := strings.Join(roadshowIds, ",")
+		activityVideoIdsStr := strings.Join(activityvideoIds, ",")
+
+		list, _, e := GetMicroRoadShowMycollect(len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds), 0, audioIdstr, ideoIdsStr, activityVideoIdsStr)
+		if e != nil {
+			err = errors.New("GetMicroRoadShowMycollect, Err: " + e.Error())
+			return
+		}
+
+		for _, item := range list {
+			if item.Type == 1 {
+				//音频
+				count, e := models.GetVoiceCollectCount(user.UserId, item.Id)
+				if e != nil {
+					err = errors.New("GetVoiceCollectCount, Err: " + e.Error())
+					return
+				}
+				if count > 0 {
+					item.IsCollect = true
+				}
+			} else if item.Type == 2 {
+				//活动视频
+				count, e := models.GetActivityVideoCollectCount(user.UserId, item.Id)
+				if e != nil {
+					err = errors.New("GetActivityVideoCollectCount, Err: " + e.Error())
+					return
+				}
+				if count > 0 {
+					item.IsCollect = true
+				}
+			} else if item.Type == 3 {
+				//微路演视频
+				count, e := models.GetVideoCollectCount(user.UserId, item.Id)
+				if e != nil {
+					err = errors.New("GetVideoCollectCount, Err: " + e.Error())
+					return
+				}
+				if count > 0 {
+					item.IsCollect = true
+				}
+			}
+		}
+		// 用户权限
+		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
+			}
+		}
+	}
+
+	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 {
+				continue
+			}
+			if v.Article != nil && v.SourceId == vList.SourceId {
+				v.Article.Title = vList.Title
+			}
+			if v.Newchart != nil && v.SourceId == vList.SourceId {
+				v.Newchart.Title = vList.Title
+			}
+			if v.Roadshow != nil && v.SourceId == vList.SourceId {
+				v.Roadshow.Title = vList.Title
+			}
+			if v.Activity != nil && v.SourceId == vList.SourceId {
+				v.Activity.ActivityName = vList.Title
+			}
+			if v.Activityvideo != nil && v.SourceId == vList.SourceId {
+				v.Activityvideo.Title = vList.Title
+			}
+			if v.Activityvoice != nil && v.SourceId == vList.SourceId {
+				v.Activityvoice.Title = vList.Title
+			}
+
+			if v.Activityspecial != nil && v.SourceId == vList.SourceId {
+				v.Activityspecial.ResearchTheme = vList.Title
+			}
+			if v.Researchsummary != nil && v.SourceId == vList.SourceId {
+				v.Researchsummary.Title = vList.Title
+			}
+			if v.Minutessummary != nil && v.SourceId == vList.SourceId {
+				v.Minutessummary.Title = vList.Title
+			}
+			if v.ProductInterior != nil && v.SourceId == vList.SourceId {
+				v.ProductInterior.Title = vList.Title
+			}
+			//if v.IndustrialResource != nil && v.SourceId == vList.SourceId {
+			//	v.IndustrialResource.UpdateTime = vList.PublishDate
+			//}
+			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
+}

+ 47 - 1
services/industrial_management.go

@@ -41,7 +41,7 @@ func UpdateIndustrialManagementLabel(cont context.Context) (err error) {
 	return
 }
 
-// 修改活动状态
+// 修改状态
 func UpdateIndustrialManagementSubjectNnames() (err error) {
 	defer func() {
 		if err != nil {
@@ -750,3 +750,49 @@ func GetLyjhArticleMap() (mapResp map[int]bool, err error) {
 	}
 	return
 }
+
+// 获取所有的产业id与名称的map关联
+func GetIndustrialManagementRespMap() (itemMap map[int]string, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetIndustrialManagementRespMap ErrMsg:"+err.Error(), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	itemMap = make(map[int]string, 0)
+	industrialList, e := models.GetIndustrialManagementRepList(condition, pars, 0, 999999)
+	if e != nil {
+		err = errors.New("GetIndustrialManagementRepList, Err: " + e.Error())
+		return
+	}
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			itemMap[v.IndustrialManagementId] = v.IndustryName
+		}
+	}
+	return
+}
+
+// 获取所有的标的id与名称的map关联
+func GetCygxIndustrialSubjectMap() (itemMap map[int]string, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetCygxIndustrialSubjectMap ErrMsg:"+err.Error(), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	itemMap = make(map[int]string, 0)
+	list, e := models.GetCygxIndustrialSubjectListCondition(condition, pars)
+	if e != nil {
+		err = errors.New("GetIndustrialManagementRepList, Err: " + e.Error())
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			itemMap[v.IndustrialSubjectId] = v.SubjectName
+		}
+	}
+	return
+}

+ 17 - 0
services/init_10.5.1.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	"fmt"
+	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"time"
@@ -455,3 +456,19 @@ func init5555() {
 		fmt.Println(err, "555")
 	}
 }
+
+func init10_12() {
+	var condition string
+	var pars []interface{}
+	condition = " AND active_state = 1 "
+	listAct, err := models.GetCygxActivityList(condition, pars, 0, 100000)
+	fmt.Println(err)
+	for _, v := range listAct {
+		resultTime := utils.StrTimeToTime(v.ActivityTime)                             //时间字符串格式转时间格式
+		cancelDeadline := resultTime.Add(-time.Hour * 1).Format(utils.FormatDateTime) //默认一小时
+		o := orm.NewOrm()
+		sql := `UPDATE cygx_activity SET cancel_deadline = ? WHERE activity_id  = ? `
+		_, err = o.Raw(sql, cancelDeadline, v.ActivityId).Exec()
+		fmt.Println(err)
+	}
+}

+ 3 - 0
services/keyword.go

@@ -96,6 +96,9 @@ func SearchKeywordUserRmind(user *models.WxUserItem, keyWord string) (err error)
 			err = errors.New("GetSellerByAdminId, Err: " + e.Error())
 			return
 		}
+		if len(openIdList) == 0 {
+			return
+		}
 		first = fmt.Sprint("互动:搜索,", user.RealName, "--", user.CompanyName)
 		keyword1 = "搜索关键词:" + keyWord
 		keyword2 = first

+ 38 - 14
services/send_company_user.go

@@ -108,15 +108,20 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 }
 
 func DotongbuShangHai(cont context.Context) (err error) {
-	//func DotongbuShangHai() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("把权限信息同步到上海策略品台失败,DotongbuShangHai:"+err.Error(), 2)
+		}
+	}()
 	//先删除被禁用的用户
 	DeleteUserDotongbuShangHaiApi()
 	var condition string
 	updateTime := time.Now().Add(-time.Minute * 22).Format("2006-01-02 15:04:05")
-	listUpdateUser, err := models.GetWxUserOpLog(updateTime)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		fmt.Println(err)
-		return err
+	listUpdateUser, e := models.GetWxUserOpLog(updateTime)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetWxUserOpLog, Err: " + e.Error())
+		return
 	}
 	var companyIds string
 	if len(listUpdateUser) > 0 {
@@ -125,9 +130,10 @@ func DotongbuShangHai(cont context.Context) (err error) {
 		}
 	}
 	////获取冻结跟流失的客户
-	listFreezeAndLoss, err := models.GetCompanyFreezeAndLoss(updateTime)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return err
+	listFreezeAndLoss, e := models.GetCompanyFreezeAndLoss(updateTime)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyFreezeAndLoss, Err: " + e.Error())
+		return
 	}
 	if len(listFreezeAndLoss) > 0 {
 		for _, v := range listFreezeAndLoss {
@@ -135,9 +141,10 @@ func DotongbuShangHai(cont context.Context) (err error) {
 		}
 	}
 
-	listDeleteUser, err := models.GetWxUserOpLogDelete(updateTime)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return err
+	listDeleteUser, e := models.GetWxUserOpLogDelete(updateTime)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetWxUserOpLogDelete, Err: " + e.Error())
+		return
 	}
 
 	////获取删除客户
@@ -148,9 +155,10 @@ func DotongbuShangHai(cont context.Context) (err error) {
 	}
 
 	//获取指定时间内被移动的客户
-	listOperationRecord, err := models.GetCompanyOperationRecord(updateTime)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		return err
+	listOperationRecord, e := models.GetCompanyOperationRecord(updateTime)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyOperationRecord, Err: " + e.Error())
+		return
 	}
 	if len(listOperationRecord) > 0 {
 		for _, v := range listOperationRecord {
@@ -158,6 +166,22 @@ func DotongbuShangHai(cont context.Context) (err error) {
 		}
 	}
 
+	//获取正式转试用的客户ID
+	var conditionPer string
+	var parsPer []interface{}
+	conditionPer += "  AND product_id = 2  AND modify_time > ?  GROUP BY company_id   "
+	parsPer = append(parsPer, updateTime)
+	companyReportPermissionList, e := models.GetCompanyReportPermissionList(conditionPer, parsPer)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyReportPermissionList, Err: " + e.Error())
+		return
+	}
+	if len(companyReportPermissionList) > 0 {
+		for _, v := range companyReportPermissionList {
+			companyIds += strconv.Itoa(v.CompanyId) + ","
+		}
+	}
+
 	condition = ` AND p.is_suspend = 0  AND a.modify_time > ` + "'" + updateTime + "'"
 	companyIds = strings.TrimRight(companyIds, ",")
 

+ 8 - 2
services/wx_user.go

@@ -537,7 +537,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 				//处理用户的互动量
 				if len(userUserInteractionList) > 0 {
 					for _, vsplit := range userUserInteractionList {
-						interactionNum = vsplit.HistoryNum + vsplit.CountNum + vsplit.IndustryFllowNum + vsplit.DepartmentFollowNum + vsplit.KeyWordNum + vsplit.OnLineNum + vsplit.OfficeNum + vsplit.ChartCountNum + vsplit.TripNum + vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
+						interactionNum = vsplit.HistoryNum + vsplit.CountNum + vsplit.IndustryFllowNum + vsplit.DepartmentFollowNum + vsplit.KeyWordNum + vsplit.OnLineNum + vsplit.OfficeNum + vsplit.ChartCountNum + vsplit.TripNum + vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum + vsplit.TagNum
 						if interactionNum > 0 {
 							//更改用户的互动量
 							err = models.UpdateUserInteractionNum(interactionNum, int(vsplit.UserId))
@@ -562,6 +562,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 							itemInteraction.RoadshowVideoNum = vsplit.RoadshowVideoNum
 							itemInteraction.ActivityVideoNum = vsplit.ActivityVideoNum
 							itemInteraction.ActivityVoiceNum = vsplit.ActivityVoiceNum
+							itemInteraction.TagNum = vsplit.TagNum
 							itemInteraction.RoadshowNum = vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 							itemInteraction.CreateTime = time.Now()
 							itemInteraction.ModifyTime = time.Now()
@@ -583,6 +584,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 								itemCompanyInteraction.RoadshowVideoNum = vsplit.RoadshowVideoNum
 								itemCompanyInteraction.ActivityVideoNum = vsplit.ActivityVideoNum
 								itemCompanyInteraction.ActivityVoiceNum = vsplit.ActivityVoiceNum
+								itemCompanyInteraction.TagNum = vsplit.TagNum
 								itemCompanyInteraction.RoadshowNum = vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 								mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
 								mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
@@ -603,6 +605,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 								mapCompanyInteractionItem[vsplit.CompanyId].RoadshowVideoNum += vsplit.RoadshowVideoNum
 								mapCompanyInteractionItem[vsplit.CompanyId].ActivityVideoNum += vsplit.ActivityVideoNum
 								mapCompanyInteractionItem[vsplit.CompanyId].ActivityVoiceNum += vsplit.ActivityVoiceNum
+								mapCompanyInteractionItem[vsplit.CompanyId].TagNum += vsplit.TagNum
 								mapCompanyInteractionItem[vsplit.CompanyId].RoadshowNum += vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 
 							}
@@ -636,7 +639,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 			//处理用户的互动量
 			if len(userUserInteractionList) > 0 {
 				for _, vsplit := range userUserInteractionList {
-					interactionNum = vsplit.HistoryNum + vsplit.CountNum + vsplit.IndustryFllowNum + vsplit.DepartmentFollowNum + vsplit.KeyWordNum + vsplit.OnLineNum + vsplit.OfficeNum + vsplit.ChartCountNum + vsplit.TripNum + vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
+					interactionNum = vsplit.HistoryNum + vsplit.CountNum + vsplit.IndustryFllowNum + vsplit.DepartmentFollowNum + vsplit.KeyWordNum + vsplit.OnLineNum + vsplit.OfficeNum + vsplit.ChartCountNum + vsplit.TripNum + vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum + vsplit.TagNum
 					if interactionNum > 0 {
 						err = models.UpdateUserInteractionNum(interactionNum, int(vsplit.UserId))
 						if err != nil {
@@ -660,6 +663,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 						itemInteraction.RoadshowVideoNum = vsplit.RoadshowVideoNum
 						itemInteraction.ActivityVideoNum = vsplit.ActivityVideoNum
 						itemInteraction.ActivityVoiceNum = vsplit.ActivityVoiceNum
+						itemInteraction.TagNum = vsplit.TagNum
 						itemInteraction.RoadshowNum = vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 
 						//如果这个切片下的结构体没有值就给他初始值,如果有就跟后面的相加
@@ -679,6 +683,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 							itemCompanyInteraction.RoadshowVideoNum = vsplit.RoadshowVideoNum
 							itemCompanyInteraction.ActivityVideoNum = vsplit.ActivityVideoNum
 							itemCompanyInteraction.ActivityVoiceNum = vsplit.ActivityVoiceNum
+							itemCompanyInteraction.TagNum = vsplit.TagNum
 							itemCompanyInteraction.RoadshowNum = vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 							mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
 							mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
@@ -698,6 +703,7 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 							mapCompanyInteractionItem[vsplit.CompanyId].RoadshowVideoNum += vsplit.RoadshowVideoNum
 							mapCompanyInteractionItem[vsplit.CompanyId].ActivityVideoNum += vsplit.ActivityVideoNum
 							mapCompanyInteractionItem[vsplit.CompanyId].ActivityVoiceNum += vsplit.ActivityVoiceNum
+							mapCompanyInteractionItem[vsplit.CompanyId].TagNum += vsplit.TagNum
 							mapCompanyInteractionItem[vsplit.CompanyId].RoadshowNum += vsplit.RoadshowVideoNum + vsplit.ActivityVideoNum + vsplit.ActivityVoiceNum
 						}
 

+ 14 - 0
utils/common.go

@@ -854,3 +854,17 @@ func GetTimeDateRemoveYear(strTime string) (dataStr string) {
 	dataStr = strings.TrimRight(dataStr, "-")
 	return dataStr
 }
+
+// 时间格式去掉年和秒
+func GetTimeDateRemoveYearAndSecond(strTime string) (dataStr string) {
+	slicePublishTime := strings.Split(strTime, "-")
+	for k, v := range slicePublishTime {
+		if k == 0 {
+			continue
+		}
+		dataStr += v + "-"
+	}
+	dataStr = strings.TrimRight(dataStr, "-")
+	dataStr = dataStr[:len(dataStr)-3]
+	return
+}

+ 3 - 0
utils/config.go

@@ -58,6 +58,7 @@ var (
 var (
 	IndexName                 string
 	IndexNameArticleHistory   string //文章阅读记录Es索引
+	IndexNameComprehensive    string //综合搜索Es索引
 	OnlineTime                string
 	SummaryArticleId          int
 	YanxSummaryPermissionId   int    //研选纪要分类ID
@@ -163,6 +164,7 @@ func init() {
 		WxPublicId = "gh_b67e0049fb8c"
 		IndexName = "cygx_article_v03_23"
 		IndexNameArticleHistory = "cygx_article_history_v07_08"
+		IndexNameComprehensive = "cygx_comprehensive"
 
 		//接收附件邮箱
 		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;hwang@hzinsights.com;rli@hzinsights.com"       //科技行业专家邮箱
@@ -199,6 +201,7 @@ func init() {
 		WxPublicId = "gh_5dc508325c6f"
 		IndexName = "cygx_article_v1"
 		IndexNameArticleHistory = "cygx_article_history_v1"
+		IndexNameComprehensive = "cygx_comprehensive_test"
 
 		//接收附件邮箱
 		EmailTechnology = "jhwang@hzinsights.com;cxzhang@hzinsights.com"  //科技行业专家邮箱

+ 1 - 0
utils/constants.go

@@ -214,4 +214,5 @@ const (
 	TPL_MSG_WANG_YANG           = "tpl_msg_wang_yang"           //汪洋手机号地址参数
 	TPL_MSG_WANG_FANG_WANG_YANG = "tpl_msg_wang_fang_wang_yang" //权限模板消息接收人,王芳,汪洋
 	TPL_MSG                     = "tpl_msg"                     //王芳手机号地址参数
+	TPL_MSG_NEI_RONG_ZU         = "tpl_msg_nei_rong_zu"         //内容组四人
 )

+ 11 - 0
utils/elastic.go

@@ -14,9 +14,20 @@ const (
 )
 
 func init() {
+	//errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
+	//file := ""
+	//if RunMode == "release" {
+	//	//file = `/data/rdlucklog/hongze_cygx/eslog.log`
+	//	file = `./rdlucklog/eslog.log`
+	//} else {
+	//	file = `./rdlucklog/eslog.log`
+	//}
+	//logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
 	client, err := elastic.NewClient(
 		elastic.SetURL(ES_URL),
 		elastic.SetBasicAuth(ES_USERNAME, ES_PASSWORD),
+		//elastic.SetTraceLog(log.New(logFile, "ES-TRACE: ", 0)),
+		//elastic.SetSniff(false), elastic.SetErrorLog(errorlog))
 		elastic.SetSniff(false))
 	Client = client
 	if err != nil {