Răsfoiți Sursa

Merge branch 'master' into cygx/7.4

hsun 2 ani în urmă
părinte
comite
06bcd76d6c

+ 214 - 18
controllers/activity.go

@@ -65,6 +65,8 @@ func (this *ActivityCoAntroller) List() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsShowJurisdiction   query   int  false       "是否仅展示有权限的,1是,2否 默认为零"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /list [get]
 func (this *ActivityCoAntroller) ActivityList() {
@@ -90,6 +92,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	keyWordSearch := this.GetString("KeyWord")
 	activeState := this.GetString("ActiveState")
 	label := this.GetString("Label")
+	playBack, _ := this.GetInt("PlayBack")
 	//入参为 undefined 时的处理
 	if chartPermissionIds == "undefined" {
 		chartPermissionIds = ""
@@ -277,7 +280,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	}
 
 	condition += ` AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
-	total, err := models.GetActivityCount(condition, pars)
+	total, err := models.GetActivityCount(condition, playBack, pars)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -288,7 +291,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	} else {
 		condition += ` ORDER BY art.active_state ASC, art.activity_time ASC  `
 	}
-	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
+	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
 	if errList != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + errList.Error()
@@ -317,6 +320,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -356,6 +360,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 		}
 		expertTxt, _ := services.GetReportContentTextSub(v.Expert)
 		list[k].Expert = expertTxt
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
 	if keyWordSearch != "" {
 		keyWordItem := new(models.CygxUserSearchKeyWord)
@@ -376,8 +381,21 @@ func (this *ActivityCoAntroller) ActivityList() {
 		}
 	}
 	resp := new(models.GetCygxActivityListRep)
+
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+	}
+	fmt.Println(mapActivityId)
+	fmt.Println(mapActivityVoice)
 	//处理列表的标签是否展示逻辑
-	for _, v := range list {
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -518,6 +536,7 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -564,7 +583,9 @@ func (this *ActivityCoAntroller) ScheduleList() {
 		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
 			list[k].IsCClassMeeting = true
 		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
+
 	//添加我的日程访问记录
 	item := new(models.CygxPageHistoryRecord)
 	item.UserId = user.UserId
@@ -576,10 +597,23 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	item.PageType = "MySchedule"
 	go models.AddCygxPageHistoryRecord(item)
 	resp := new(models.GetCygxActivityListRep)
-	//处理列表的标签是否展示逻辑
-	for _, v := range list {
+
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
+		//处理列表的标签是否展示逻辑
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
+
 	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
@@ -937,8 +971,29 @@ func (this *ActivityCoAntroller) Detail() {
 		activityInfo.Listndustrial = industrialList
 		if activityInfo.YidongActivityId != "" {
 			ydTgc, _ := services.GetYiDongCreateUserInfo(user)
-			activityInfo.YidongActivityUrl += "?source=11&fromHz=true&tgc=" + ydTgc
+			yidongLongLink, err := services.GetYiDongOriginalLink(activityInfo)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "GetYiDongOriginalLink,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				return
+			}
+			//yidongKwy := activityInfo.YidongActivityUrl
+			activityInfo.YidongActivityUrl = yidongLongLink + "?source=11&fromHz=true&tgc=" + ydTgc
 		}
+		//处理音频回放
+		var mapActivityId []int
+		mapActivityId = append(mapActivityId, activityId)
+		mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+			return
+		}
+		if mapActivityVoice[activityId] != nil {
+			activityInfo.AudioLink = true
+			activityInfo.VoiceList = mapActivityVoice[activityId]
+		}
+
 		//处理按钮是否展示问题
 		resp.Detail = services.ActivityButtonShow(activityInfo)
 
@@ -2700,6 +2755,9 @@ func (this *ActivityCoAntroller) LabelMoreList() {
 // @Param   ActiveState   query   string  false       "活动进行状态 未开始:1、进行中2、已结束3"
 // @Param   ActivityTypeId   query   string  false     "活动类型id 多个用 , 隔开"
 // @Param   Source   query   int  false     "来源 0手机 ,1Pc 默认0"
+// @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /listNew [get]
 func (this *ActivityCoAntroller) ActivityListNew() {
@@ -2723,6 +2781,8 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	whichDay := this.GetString("WhichDay")
 	activeState := this.GetString("ActiveState")
 	activityTypeId := this.GetString("ActivityTypeId")
+	keyWord := this.GetString("KeyWord")
+	playBack, _ := this.GetInt("PlayBack")
 	if label == "undefined" {
 		label = ""
 	}
@@ -2754,8 +2814,39 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	//userType, permissionStr, err := services.GetUserType(user.CompanyId)
 	var condition string
 	var pars []interface{}
+	var activityList []*models.ActivityDetail
+	mapDingActivityId := make(map[int]int)
+	//进行中的活动拍在最上面
+	//if keyWord != "" {
+	//	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, strconv.Itoa(2), label, 0, source, keyWord)
+	//	if err != nil && err.Error() != utils.ErrNoRow() {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	if source == 1 {
+	//		condition += ` AND art.yidong_activity_id = '' `
+	//	}
+	//	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
+	//	condition += ` ORDER BY art.activity_time ASC   `
+	//	listDing, err := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
+	//	if err != nil && err.Error() != utils.ErrNoRow() {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	if len(listDing) > 0 {
+	//		for _, v := range listDing {
+	//			activityList = append(activityList, v)
+	//			mapDingActivityId[v.ActivityId] = v.ActivityId
+	//		}
+	//	}
+	//	return
+	//	fmt.Println("len", len(listDing))
+	//}
+	condition = ""
 	//活动可见限制
-	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source)
+	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -2765,20 +2856,32 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 		condition += ` AND art.yidong_activity_id = '' `
 	}
 	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
-	total, err := models.GetActivityCount(condition, pars)
+	total, err := models.GetActivityCount(condition, playBack, pars)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+
+	var conditionOrder string
 	if activeState == "2" || activeState == "3" {
-		condition += ` ORDER BY art.activity_time DESC  `
+		conditionOrder = ` ORDER BY art.activity_time DESC  `
 	} else if activeState == "2,3" {
-		condition += ` ORDER BY art.active_state ASC, art.activity_time DESC  `
+		conditionOrder = ` ORDER BY art.active_state ASC, art.activity_time DESC  `
 	} else {
-		condition += ` ORDER BY art.activity_time ASC ,  art.active_state ASC   `
+		conditionOrder = ` ORDER BY art.activity_time DESC ,  art.active_state ASC   `
+	}
+
+	if label != "" && activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
+	}
+
+	if activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
 	}
-	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
+
+	condition += conditionOrder
+	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
 	if errList != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + errList.Error()
@@ -2807,6 +2910,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	var chartName string
 	var imgUrl string
 	var imgUrlChart string
+	var mapActivityId []int
 	for _, v := range addressList {
 		vslice := strings.Split(v, "_")
 		cityName = vslice[0]
@@ -2853,6 +2957,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
 			list[k].IsCClassMeeting = true
 		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.GetCygxActivityListRep)
@@ -2870,8 +2975,24 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 			resp.Label = detail.ActivityTypeName
 		}
 	}
-	//处理列表的标签是否展示逻辑
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
 	for _, v := range list {
+		if mapDingActivityId[v.ActivityId] == 0 {
+			activityList = append(activityList, v)
+		}
+	}
+
+	for k, v := range activityList {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
 		resp.List = append(resp.List, services.ActivityButtonShow(v))
 	}
 
@@ -2901,6 +3022,11 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 		}
 	}
 
+	//添加活动搜索记录
+	if keyWord != "" {
+		go services.AddActivitykeyWordSearch(keyWord, user)
+	}
+
 	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
@@ -3347,7 +3473,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		return
 	}
 	var startSize int
-	pageSize = 40
+	pageSize = 8
 	var sortTime string
 	var pars []interface{}
 	//活动可见限制
@@ -3398,7 +3524,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			continue
 		}
 		var condition string
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 0)
+		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 0, "")
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -3461,6 +3587,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		for k2, v2 := range specialList {
 			specialList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
 			specialList[k2].ImgUrlBg = "https://hzstatic.hzinsights.com/static/temp/20220426202204/20220426/XDLLsjC9XAAy8LIzQr7GsjrBbtX6.png"
+			specialList[k2].ImgUrlBg = utils.ACTIVITY_ZXDY_ImgUrl3
 		}
 
 		itemList := new(models.ActivityTypeHome)
@@ -3468,8 +3595,10 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		itemList.Resource = 2
 		itemList.List = specialList
 		itemList.ActivityTypeId = 7
-		itemList.ImgUrl = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/b2Bj3fGakP16iJRFKisQohCWnCNl.png"
-		itemList.ImgUrlBg = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/OkunjfKEgo5KRLifzwwLX8cDZnnN.png"
+		//itemList.ImgUrl = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/b2Bj3fGakP16iJRFKisQohCWnCNl.png"
+		itemList.ImgUrl = utils.ACTIVITY_ZXDY_ImgUrl1
+		//itemList.ImgUrlBg = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/OkunjfKEgo5KRLifzwwLX8cDZnnN.png"
+		itemList.ImgUrlBg = utils.ACTIVITY_ZXDY_ImgUrl2
 		list = append(list, itemList)
 	}
 
@@ -4413,7 +4542,7 @@ func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
 		}
 		var condition string
 
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 1)
+		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 1, "")
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -4870,3 +4999,70 @@ func (this *ActivityCoAntroller) ActivityAppointmentCancel() {
 	br.Msg = "已取消"
 	br.Data = resp
 }
+
+// @Title 记录用户浏览音频回放接口
+// @Description 记录用户浏览音频回放接口
+// @Param	request	body models.ActivityIdRep true "type json string"
+// @Success Ret=200 {object} models.AppointmentResp
+// @router /voiceHistory/add [post]
+func (this *ActivityCoAntroller) ActivityVoiceHistoryAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	var req models.ActivityIdRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	activityId := req.ActivityId
+	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
+	if activityInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+	var sellerName string
+	sellerName, err = models.GetCompanySellerName(user.CompanyId)
+	if err != nil {
+		br.Msg = "报名失败!"
+		br.ErrMsg = "获取对应销售失败,Err:" + err.Error()
+		return
+	}
+	item := new(models.CygxActivityVoiceHistory)
+	item.UserId = uid
+	item.ActivityId = activityId
+	item.CreateTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.SellerName = sellerName
+	item.RealName = user.RealName
+	err = models.AddCygxActivityVoiceHistory(item)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	return
+}

+ 1 - 1
controllers/home.go

@@ -523,7 +523,7 @@ func (this *HomeController) ListHomeArtAndChart() {
 			item := list[k]
 			//如果文章一开始的内容是图片,优先展示第一张图片
 			imgurl, _ := services.FixArticleImgUrl(html.UnescapeString(list[k].Body))
-			newBody, _ := services.GetReportContentTextSub(item.Body)
+			newBody, _ := services.GetReportContentTextSubByarticle(item.Body, item.Annotation, item.ArticleId)
 			list[k].Body = newBody
 			if imgurl != "" {
 				list[k].BodyHtml = imgurl

+ 163 - 18
controllers/user.go

@@ -108,7 +108,7 @@ func (this *UserController) Login() {
 		}
 	} else {
 		br.Msg = "无效的登录方式"
-		br.ErrMsg = "无效的登录方式,Err:" + err.Error()
+		br.ErrMsg = "无效的登录方式,Err:"
 		return
 	}
 	if len(req.Mobile) >= 11 && req.CountryCode == "" {
@@ -409,11 +409,56 @@ func (this *UserController) CollectList() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	resp := new(models.ArticleReportBillboardLIstPageResp)
+	if len(list) == 0 {
+		page := paging.GetPaging(currentIndex, pageSize, total)
+		resp.List = list
+		resp.Paging = page
+		br.Msg = "获取成功!"
+		br.Ret = 200
+		br.Success = true
+		br.Data = resp
+		return
+	}
+	var condition string
+	var pars []interface{}
 	var articleIds []string
 	for _, v := range list {
 		articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
 	}
 	articleIdStr := strings.Join(articleIds, ",")
+
+	//获取文章关联的产业
+	pars = make([]interface{}, 0)
+	condition = ` AND mg.article_id IN (  ` + utils.GetOrmInReplace(len(articleIds)) + ` )  `
+	pars = append(pars, articleIds)
+	industrialList, err := models.GetIndustrialListByarticleId(pars, condition)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetSubjectList Err:" + err.Error()
+		return
+	}
+	industrialMap := make(map[int][]*models.IndustrialManagementIdInt)
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			item := new(models.IndustrialManagementIdInt)
+			item.ArticleId = v.ArticleId
+			if v.ArticleId > utils.SummaryArticleId {
+				item.IsResearch = true
+			}
+			item.IndustrialManagementId = v.IndustrialManagementId
+			item.IndustryName = v.IndustryName
+			industrialMap[v.ArticleId] = append(industrialMap[v.ArticleId], item)
+		}
+	}
+	for k, v := range list {
+		if len(industrialMap[v.ArticleId]) > 0 {
+			list[k].List = industrialMap[v.ArticleId]
+		} else {
+			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
+		}
+	}
+
 	articleMap := make(map[int]*models.ArticleDetail)
 	if articleIdStr != "" {
 		articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
@@ -428,22 +473,48 @@ func (this *UserController) CollectList() {
 			}
 		}
 	}
+
+	//处理文章PV收藏等数量
+	mapArticleCollectNum := make(map[int]*models.CygxArticleNum)
+	if len(articleIds) > 0 {
+		articleCollectNumList, err := models.GetArticleCollectNum(articleIds, userId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetArticleCollectNum Err:" + err.Error()
+			return
+		}
+		for _, v := range articleCollectNumList {
+			mapArticleCollectNum[v.ArticleId] = v
+		}
+	}
+
 	lenList := len(list)
 	for i := 0; i < lenList; i++ {
 		item := list[i]
 		article := articleMap[item.ArticleId]
 		list[i].Title = article.Title
-		list[i].TitleEn = article.TitleEn
-		list[i].UpdateFrequency = article.UpdateFrequency
-		list[i].CreateDate = article.CreateDate
+		list[i].DepartmentId = article.DepartmentId
+		list[i].NickName = article.NickName
 		list[i].PublishDate = article.PublishDate
-		list[i].Body, _ = services.GetReportContentTextSub(article.Body)
-		list[i].Abstract = article.Abstract
-		list[i].CategoryName = article.CategoryName
-		list[i].SubCategoryName = article.SubCategoryName
+		if article.ArticleId < utils.SummaryArticleId {
+			list[i].Source = 1
+		} else {
+			list[i].Source = 2
+		}
+		if mapArticleCollectNum[article.ArticleId] != nil {
+			list[i].CollectNum = mapArticleCollectNum[article.ArticleId].CollectNum
+			list[i].Pv = mapArticleCollectNum[article.ArticleId].Pv
+			list[i].IsCollect = mapArticleCollectNum[article.ArticleId].IsCollect
+		}
+		//list[i].TitleEn = article.TitleEn
+		//list[i].UpdateFrequency = article.UpdateFrequency
+		//list[i].CreateDate = article.CreateDate
+		//list[i].Body, _ = services.GetReportContentTextSub(article.Body)
+		//list[i].Abstract = article.Abstract
+		//list[i].CategoryName = article.CategoryName
+		//list[i].SubCategoryName = article.SubCategoryName
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(models.ArticleCollectListResp)
 	resp.List = list
 	resp.Paging = page
 	br.Msg = "获取成功!"
@@ -571,11 +642,57 @@ func (this *UserController) BrowseHistoryList() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	resp := new(models.ArticleReportBillboardLIstPageResp)
+	if len(list) == 0 {
+		page := paging.GetPaging(currentIndex, pageSize, total)
+		resp.List = list
+		resp.Paging = page
+		br.Msg = "获取成功!"
+		br.Ret = 200
+		br.Success = true
+		br.Data = resp
+		return
+	}
+
 	var articleIds []string
+	var condition string
+	var pars []interface{}
 	for _, v := range list {
 		articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
 	}
 	articleIdStr := strings.Join(articleIds, ",")
+
+	//获取文章关联的产业
+	pars = make([]interface{}, 0)
+	condition = ` AND mg.article_id IN (  ` + utils.GetOrmInReplace(len(articleIds)) + ` )  `
+	pars = append(pars, articleIds)
+	industrialList, err := models.GetIndustrialListByarticleId(pars, condition)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetSubjectList Err:" + err.Error()
+		return
+	}
+	industrialMap := make(map[int][]*models.IndustrialManagementIdInt)
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			item := new(models.IndustrialManagementIdInt)
+			item.ArticleId = v.ArticleId
+			if v.ArticleId > utils.SummaryArticleId {
+				item.IsResearch = true
+			}
+			item.IndustrialManagementId = v.IndustrialManagementId
+			item.IndustryName = v.IndustryName
+			industrialMap[v.ArticleId] = append(industrialMap[v.ArticleId], item)
+		}
+	}
+	for k, v := range list {
+		if len(industrialMap[v.ArticleId]) > 0 {
+			list[k].List = industrialMap[v.ArticleId]
+		} else {
+			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
+		}
+	}
+
 	articleMap := make(map[int]*models.ArticleDetail)
 	if articleIdStr != "" {
 		articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
@@ -590,24 +707,52 @@ func (this *UserController) BrowseHistoryList() {
 			}
 		}
 	}
+
+	//处理文章PV收藏等数量
+	mapArticleCollectNum := make(map[int]*models.CygxArticleNum)
+	if len(articleIds) > 0 {
+		articleCollectNumList, err := models.GetArticleCollectNum(articleIds, userId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetArticleCollectNum Err:" + err.Error()
+			return
+		}
+		for _, v := range articleCollectNumList {
+			mapArticleCollectNum[v.ArticleId] = v
+		}
+	}
+
 	lenList := len(list)
 	for i := 0; i < lenList; i++ {
 		item := list[i]
 		article := articleMap[item.ArticleId]
 		if article != nil {
 			list[i].Title = article.Title
-			list[i].TitleEn = article.TitleEn
-			list[i].UpdateFrequency = article.UpdateFrequency
-			list[i].CreateDate = article.CreateDate
-			list[i].PublishDate = article.PublishDate
-			list[i].Body, _ = services.GetReportContentTextSub(article.Body)
-			list[i].Abstract = article.Abstract
-			list[i].CategoryName = article.CategoryName
-			list[i].SubCategoryName = article.SubCategoryName
+			list[i].PublishDate = utils.TimeRemoveHms2(article.PublishDate)
+			list[i].DepartmentId = article.DepartmentId
+			list[i].NickName = article.NickName
+			if article.ArticleId < utils.SummaryArticleId {
+				list[i].Source = 1
+			} else {
+				list[i].Source = 2
+			}
+
+			if mapArticleCollectNum[article.ArticleId] != nil {
+				list[i].CollectNum = mapArticleCollectNum[article.ArticleId].CollectNum
+				list[i].Pv = mapArticleCollectNum[article.ArticleId].Pv
+				list[i].IsCollect = mapArticleCollectNum[article.ArticleId].IsCollect
+			}
+			//list[i].TitleEn = article.TitleEn
+			//list[i].UpdateFrequency = article.UpdateFrequency
+			//list[i].CreateDate = article.CreateDate
+			//list[i].Body, _ = services.GetReportContentTextSub(article.Body)
+			//list[i].Abstract = article.Abstract
+			//list[i].CategoryName = article.CategoryName
+			//list[i].SubCategoryName = article.SubCategoryName
 		}
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
-	resp := new(models.ArticleBrowseHistoryListResp)
+
 	resp.List = list
 	resp.Paging = page
 	br.Msg = "获取成功!"

+ 27 - 15
models/activity.go

@@ -182,6 +182,8 @@ type ActivityDetail struct {
 	IsCanAppointmentMinutes int                        `description:"是否可预约纪要 1是 ,0 否 默认0 "`
 	YidongActivityId        string                     `description:"易董活动ID"`
 	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceList               *CygxActivityVoiceReq      `description:"音频数据"`
 }
 
 type CygxActivityResp struct {
@@ -270,7 +272,11 @@ type GetCygxActivityListRep struct {
 }
 
 //列表
-func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*ActivityDetail, err error) {
+func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize, playBack int) (items []*ActivityDetail, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
 	o := orm.NewOrm()
 	sql := `SELECT art.* ,t.activity_type,t.img_url_text,c.image_url as  img_url,
 		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
@@ -279,8 +285,7 @@ func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pa
 		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = art.activity_id AND ap.user_id = ? ) AS is_appointment
 		FROM cygx_activity as art
 		INNER JOIN cygx_activity_type  as t ON t.activity_type_id = art.activity_type_id
-		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id 
-		WHERE 1= 1 `
+		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id ` + sqlJiontable + ` WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
 	}
@@ -303,8 +308,12 @@ func GetActivityListByDateTime(startDate, endDate, activityIds, activityIdsLongT
 }
 
 //获取数量
-func GetActivityCount(condition string, pars []interface{}) (count int, err error) {
-	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art WHERE 1= 1  `
+func GetActivityCount(condition string, playBack int, pars []interface{}) (count int, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art ` + sqlJiontable + ` WHERE 1= 1  `
 	if condition != "" {
 		sqlCount += condition
 	}
@@ -533,16 +542,19 @@ WHERE
 func GetActivityIdToSendFile(endDate string) (items []*ActivityIdRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-	* 
-FROM
-	cygx_activity AS a
-	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
-WHERE
-	1 = 1 
-	AND s.signup_type = 1 
-	AND s.fail_type = 0 
-	AND a.is_send_file_toemail = 0 
-	AND a.activity_time <= ? AND a.activity_time >= NOW() 	GROUP BY a.activity_id `
+			* 
+		FROM
+			cygx_activity AS a
+			INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
+			INNER JOIN cygx_activity_type AS t ON a.activity_type_id = t.activity_type_id
+		WHERE
+			1 = 1 
+			AND s.signup_type = 1 
+			AND a.yidong_activity_id = '' 
+			AND t.activity_type = 1
+			AND s.fail_type = 0 
+			AND a.is_send_file_toemail = 0 
+			AND a.activity_time <= ? AND a.activity_time >= NOW() 	GROUP BY a.activity_id `
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }

+ 41 - 0
models/activity_voice.go

@@ -0,0 +1,41 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// ActivityVoice 活动语音表结构体
+type CygxActivityVoice struct {
+	ActivityVoiceId  int       `orm:"column(activity_voice_id);pk" description:"活动音频ID"`
+	ActivityId       int       ` description:"活动ID"`
+	VoiceUrl         string    `description:"音频地址"`
+	VoiceName        string    `description:"音频名称"`
+	VoicePlaySeconds string    `description:"音频时长"`
+	CreateTime       time.Time `description:"创建时间"`
+}
+
+// ActivityVoiceReq 音频数据
+type CygxActivityVoiceReq struct {
+	ActivityId  int    ` description:"活动ID"`
+	Url         string `description:"音频资源url地址"`
+	Name        string `description:"音频名称"`
+	PlaySeconds int    `description:"音频时长"`
+}
+
+// GetCygxActivityVoiceReqList 获取活动ID的音频
+func GetCygxActivityVoiceReqList(activityIds []int) (items []*CygxActivityVoiceReq, err error) {
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	sql := `SELECT 
+			activity_id ,
+			voice_url AS url,
+			voice_name AS name,
+			voice_play_seconds AS play_seconds  FROM cygx_activity_voice  WHERE activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityIds).QueryRows(&items)
+	return
+}

+ 26 - 0
models/activity_voice_history.go

@@ -0,0 +1,26 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivityVoiceHistory struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	SellerName  string    `description:"所属销售"`
+}
+
+//添加
+func AddCygxActivityVoiceHistory(item *CygxActivityVoiceHistory) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 4 - 1
models/article.go

@@ -101,6 +101,7 @@ type HomeArticle struct {
 	HttpUrl          string `description:"文章链接跳转地址"`
 	IsNeedJump       bool   `description:"是否需要跳转链接地址"`
 	Source           int    `description:"来源  1:文章, 2:图表"`
+	Annotation       string `description:"核心观点"`
 }
 
 type ArticleDetail struct {
@@ -185,7 +186,9 @@ func GetArticleDetailByIdMd5(articleIdMd5 string) (item *ArticleDetail, err erro
 
 func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_article WHERE article_id IN(` + articleIdStr + `) `
+	sql := `SELECT 	art.*,d.nick_name FROM
+			cygx_article AS art
+			LEFT JOIN cygx_article_department AS d ON d.department_id = art.department_id  WHERE article_id IN(` + articleIdStr + `) `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 27 - 0
models/article_collect.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"time"
 )
 
@@ -122,3 +123,29 @@ func UpdateArticleCollectCountNum(num, articleId int) (err error) {
 	_, err = o.Raw(sql, num, articleId).Exec()
 	return
 }
+
+type CygxArticleNum struct {
+	ArticleId  int  `description:"文章ID"`
+	IsCollect  bool `description:"本人是否收藏"`
+	Pv         int  `description:"PV"`
+	CollectNum int  `description:"收藏人数"`
+}
+
+// GetArticleCollectNum 根据文章ID获取收藏数量的列表
+func GetArticleCollectNum(articleId []string, uid int) (items []*CygxArticleNum, err error) {
+	lenarticleId := len(articleId)
+	if lenarticleId == 0 {
+		return
+	}
+	sql := `SELECT
+			a.article_id,
+			( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
+			( SELECT count( 1 ) FROM cygx_article_collect AS ac  INNER JOIN wx_user as u ON  u.user_id = ac.user_id  WHERE ac.article_id = a.article_id  ) AS collect_num, 
+			( SELECT count( 1 ) FROM cygx_article_collect AS ac  INNER JOIN wx_user as u ON  u.user_id = ac.user_id  WHERE ac.article_id = a.article_id AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( ac.create_time )  ) AS collect_num_order, 
+			( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id  AND user_id = ? ) AS is_collect
+		FROM
+			cygx_article AS a WHERE  1 = 1  AND  article_id IN  (` + utils.GetOrmInReplace(lenarticleId) + `) `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, uid, articleId).QueryRows(&items)
+	return
+}

+ 1 - 0
models/db.go

@@ -116,6 +116,7 @@ func init() {
 		new(CygxYidongActivityMeetingApiLog),
 		new(CygxIndustrialActivityGroupManagement),
 		new(CygxIndustrialActivityGroupSubject),
+		new(CygxActivityVoiceHistory),
 		new(CygxThreeApiLog),
 		new(CygxIndustrialArticleGroupManagement),
 		new(ArticleTopHistoryRecord),

+ 1 - 0
models/industrial_management.go

@@ -237,6 +237,7 @@ type IndustrialManagementIdInt struct {
 	IndustryName           string `description:"产业名称"`
 	SubjectName            string `description:"标的名称"`
 	ArticleId              int    `description:"文章ID"`
+	IsResearch             bool   `description:"是否属于研选"`
 }
 
 type IndustrialManagementIdInts struct {

+ 13 - 2
models/report.go

@@ -312,10 +312,10 @@ type ArticleCollectionResp struct {
 	IndustryName           string `description:"产业名称"`
 	DepartmentId           int    `description:"作者Id"`
 	NickName               string `description:"作者昵称"`
-	Pv                     int    `description:"PV"`
-	CollectNum             int    `description:"收藏人数"`
 	MyCollectNum           int    `description:"本人是否收藏"`
 	IsCollect              bool   `description:"本人是否收藏"`
+	Pv                     int    `description:"PV"`
+	CollectNum             int    `description:"收藏人数"`
 	Source                 int    `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
 }
 
@@ -701,6 +701,12 @@ type ArticleReportBillboardResp struct {
 	Title          string `description:"标题"`
 	PublishDate    string `description:"发布时间"`
 	PermissionName string `description:"行业名称"`
+	DepartmentId   int    `description:"作者Id"`
+	NickName       string `description:"作者昵称"`
+	IsCollect      bool   `description:"本人是否收藏"`
+	Pv             int    `description:"PV"`
+	CollectNum     int    `description:"收藏人数"`
+	Source         int    `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
 	List           []*IndustrialManagementIdInt
 }
 
@@ -708,6 +714,11 @@ type ArticleReportBillboardLIstResp struct {
 	List []*ArticleReportBillboardResp
 }
 
+type ArticleReportBillboardLIstPageResp struct {
+	List   []*ArticleReportBillboardResp
+	Paging *paging.PagingItem
+}
+
 //报告收藏榜单列表
 func GetReportCollectionBillboardList(limit int, pars []interface{}, condition string) (items []*ArticleReportBillboardResp, err error) {
 	o := orm.NewOrm()

+ 4 - 4
models/user.go

@@ -153,7 +153,7 @@ func GetArticleUserCollectCount(userId int) (count int, err error) {
 	return
 }
 
-func GetArticleUserCollectList(startSize, pageSize, userId int) (items []*ArticleCollectList, err error) {
+func GetArticleUserCollectList(startSize, pageSize, userId int) (items []*ArticleReportBillboardResp, err error) {
 	sql := `SELECT a.* FROM cygx_article_collect AS a INNER JOIN cygx_article as art ON art.article_id = a.article_id
 			WHERE a.user_id=? 
            ORDER BY a.create_time DESC LIMIT ?,? `
@@ -193,10 +193,10 @@ func GetArticleUserBrowseHistoryCount(userId int, endDate string) (count int, er
 	return
 }
 
-func GetArticleUserBrowseHistoryList(startSize, pageSize, userId int, endDate string) (items []*ArticleInterviewApplyList, err error) {
-	sql := `SELECT a.* FROM cygx_article_history_record AS a
+func GetArticleUserBrowseHistoryList(startSize, pageSize, userId int, endDate string) (items []*ArticleReportBillboardResp, err error) {
+	sql := `SELECT a.* ,	MAX( a.id ) AS mid   FROM cygx_article_history_record AS a
 			WHERE a.user_id=? AND a.create_time>=?  GROUP BY a.article_id
-           ORDER BY a.id DESC LIMIT ?,? `
+           ORDER BY mid  DESC LIMIT ?,? `
 	_, err = orm.NewOrm().Raw(sql, userId, endDate, startSize, pageSize).QueryRows(&items)
 	return
 }

+ 8 - 0
models/yidong.go

@@ -129,3 +129,11 @@ type ApifoxModalSingUpClass struct {
 type SingUpMap struct {
 	Msg string `json:"msg"` // 请求信息,成功信息
 }
+
+type ApifoxgetOriginalLink struct {
+	Result    string  `json:"result"`    // 结果Map
+	Success   bool    `json:"success"`   // 成功标识,可作为请求是否成功标识
+	ErrorCode *string `json:"errorCode"` // 错误码,001:活动不存在;002:该活动不支持此渠道报名;003:该手机号或邮箱已经被其他账号提交报名;004:不在报名时间;005:报名人数已满
+	ErrorMsg  *string `json:"errorMsg"`  // 错误信息
+	Timestamp float64 `json:"timestamp"` // 时间戳
+}

+ 9 - 0
routers/commentsRouter.go

@@ -232,6 +232,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
+        beego.ControllerComments{
+            Method: "ActivityVoiceHistoryAdd",
+            Router: `/voiceHistory/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:AdviceController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:AdviceController"],
         beego.ControllerComments{
             Method: "ApplyApprove",

+ 69 - 14
services/activity.go

@@ -423,6 +423,10 @@ func GetHavePower(activityInfo *models.ActivityDetail, permissionStr, companyDet
 	if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
 		havePower = true
 	}
+	//如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
+	if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+		havePower = true
+	}
 	return
 }
 
@@ -433,7 +437,9 @@ func GetHavePower(activityInfo *models.ActivityDetail, permissionStr, companyDet
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
-func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int) (conditionActivity string, err error) {
+// @Param   PlayBack   query   int  false       "是否仅展示回放 1:是、0:否 默认0"
+// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
+func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int, keyWord string) (conditionActivity string, err error) {
 	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
 	if err != nil {
 		return
@@ -485,10 +491,12 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	}
 	sqlExport += `) `
 	// 如果是C类电话会就不展示内容,且合并到分析师电话会
-	if activityTypeId == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
-		condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + activityTypeId + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
-	} else {
-		condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + activityTypeId
+	if activityTypeId != "" {
+		if activityTypeId == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
+			condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + activityTypeId + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
+		} else {
+			condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + activityTypeId
+		}
 	}
 	//活动仅决策人可见
 	if isMaker == 0 {
@@ -511,6 +519,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	if source == 1 {
 		condition += ` AND art.yidong_activity_id = '' `
 	}
+
 	var conditionOr string
 	if whichDay != "" {
 		var startDate string
@@ -528,17 +537,23 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 		condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
 		condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
 	}
-	if activeState != "" {
-		// 默认查看未开始跟进行中
-		if activeState == "1" {
-			condition += ` AND art.active_state  IN (1,2)`
+
+	//有搜索条件传过来时,不判进行状态条件
+	if keyWord != "" {
+		condition += ` AND (art.label  LIKE '%` + keyWord + `%' OR art.activity_name  LIKE '%` + keyWord + `%' ) `
+	} else {
+		if activeState != "" {
+			// 默认查看未开始跟进行中
+			if activeState == "1" {
+				condition += ` AND art.active_state  IN (1,2)`
+			} else {
+				condition += ` AND art.active_state  IN (` + activeState + `)`
+			}
 		} else {
-			condition += ` AND art.active_state  IN (` + activeState + `)`
+			condition += ` AND art.active_state  IN (1,2)`
 		}
-	} else {
-		condition += ` AND art.active_state  IN (1,2)`
 	}
-	conditionAdmin = condition
+
 	//查询全部可见的数据(是否全部客户可见)
 	condition += ` AND art.visible_range != 1  AND art.publish_status = 1 `
 
@@ -561,6 +576,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 			conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
 		}
 	}
+	conditionAdmin = condition
 	if adminIds != "" {
 		conditionOr += ` OR (  art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` + ` AND  art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
 		if companyProduct != nil {
@@ -1443,4 +1459,43 @@ func GetActivityNewLabelMap(activityIds []int) (labelMap map[int]bool, industryN
 	}
 
 	return
-}
+}
+
+//GetActivityVoiceResp 处理活动音频回放
+func GetActivityVoiceResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVoiceReq, err error) {
+	activityVoiceList, err := models.GetCygxActivityVoiceReqList(mapActivityId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+
+	mapActivityVoice := make(map[int]*models.CygxActivityVoiceReq)
+	if len(activityVoiceList) > 0 {
+		for _, v := range activityVoiceList {
+			mapActivityVoice[v.ActivityId] = v
+		}
+	}
+	mapItem = mapActivityVoice
+	return
+}
+
+//AddActivitykeyWordSearch 添加活动搜索记录
+func AddActivitykeyWordSearch(keyWordSearch string, user *models.WxUserItem) {
+	if keyWordSearch != "" {
+		keyWordItem := new(models.CygxUserSearchKeyWord)
+		keyWordItem.UserId = user.UserId
+		keyWordItem.KeyWord = keyWordSearch
+		keyWordItem.PageType = "ActivitSearch"
+		keyWordItem.CreateTime = time.Now()
+		go models.AddUserSearchKeyWord(keyWordItem)
+
+		cacheKey := fmt.Sprint("Search_uid:", user.UserId, "_KeyWord:", keyWordSearch, "_Source:", 6)
+		isExist := utils.Rc.IsExist(cacheKey)
+		if !isExist {
+			setNX := utils.Rc.SetNX(cacheKey, keyWordSearch, time.Minute*1)
+			if !setNX {
+				go utils.SendAlarmMsg("记录用户搜索活动关键词失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
+			}
+			go AddUserSearchLog(user, keyWordSearch, 6)
+		}
+	}
+}

+ 59 - 23
services/article.go

@@ -13,6 +13,7 @@ import (
 	"strconv"
 	"strings"
 	"time"
+	"unicode/utf8"
 )
 
 func GetReportContentSub(content string) (contentSub string, err error) {
@@ -57,14 +58,47 @@ func GetReportContentTextSub(content string) (contentSub string, err error) {
 
 func GetReportContentTextSubNew(content string) (contentSub string, err error) {
 	content = html.UnescapeString(content)
-	doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+	doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(content))
+	if errdoc != nil {
+		err = errdoc
+		return
+	}
 	docText := doc.Text()
 	bodyRune := []rune(docText)
 	bodyRuneLen := len(bodyRune)
 	body := string(bodyRune[:bodyRuneLen])
 	contentSub = body
-	contentSub = strings.Replace(body, "Powered by Froala Editor", "", -1)
+	contentSub = strings.Replace(contentSub, "Powered by Froala Editor", "", -1)
+	contentSub = strings.Replace(contentSub, " ", "", -1)
+	contentSub = strings.Replace(contentSub, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sanered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
+	return
+}
+
+//GetReportContentTextSubByarticle 解析文章内容
+func GetReportContentTextSubByarticle(content, abstract string, articleId int) (contentSub string, err error) {
+	var lenabstract int
+	//如果不是研选就这么展示
+	if articleId < utils.SummaryArticleId {
+		abstract = html.UnescapeString(abstract)
+		doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(abstract))
+		if errdoc != nil {
+			err = errdoc
+			return
+		}
+		docabstract := doc.Text()
+		lenabstract = utf8.RuneCountInString(docabstract)
+		if lenabstract >= 20 {
+			contentSub = docabstract
+			return
+		} else {
+			contentSub, err = GetReportContentTextSubNew(content)
+		}
+	} else {
+		contentSub, err = GetReportContentTextSubNew(content)
+	}
+
 	return
+
 }
 
 //解析文章内容
@@ -1530,9 +1564,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 		}
 
 		//获取提交过推送规则的用户的 openid 并推送模版消息
-		openIditem := new(models.OpenIdList)
-		first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
-		keyword1 := "所属赛道:" + industryName
+
 		//mapActivityUserId := make(map[int]string)
 		//if articleInfo.IsSummary == 1 {
 		//	sliceSubjectId, _ := models.GetSubjectIds(articleId)
@@ -1565,24 +1597,28 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 		//	//	mapAlreadySend[openIditem.UserId] = openIditem.UserId
 		//	//}
 		//}
-		var ids []string
-		for k, _ := range mapUserIdChooseSendTypeNoPermission {
-			ids = append(ids, strconv.Itoa(k))
-		}
-		if len(ids) > 0 {
-			idStr := strings.Join(ids, ",")
-			openidIlist, err := models.GetCygxXzsChooseSendOpenIdByUserIds(idStr)
-			if err != nil {
-				return err
-			}
-			for _, item := range openidIlist {
-				openIditem.OpenId = item.OpenId
-				openIditem.UserId = item.UserId
-				if _, ok := mapAlreadySend[openIditem.UserId]; !ok {
-					SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
-				}
-			}
-		}
+
+		//openIditem := new(models.OpenIdList)
+		//first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
+		//keyword1 := "所属赛道:" + industryName
+		//var ids []string
+		//for k, _ := range mapUserIdChooseSendTypeNoPermission {
+		//	ids = append(ids, strconv.Itoa(k))
+		//}
+		//if len(ids) > 0 {
+		//	idStr := strings.Join(ids, ",")
+		//	openidIlist, err := models.GetCygxXzsChooseSendOpenIdByUserIds(idStr)
+		//	if err != nil {
+		//		return err
+		//	}
+		//	for _, item := range openidIlist {
+		//		openIditem.OpenId = item.OpenId
+		//		openIditem.UserId = item.UserId
+		//		if _, ok := mapAlreadySend[openIditem.UserId]; !ok {
+		//			SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
+		//		}
+		//	}
+		//}
 	}
 	utils.Rc.Put(cacheKey, articleId, time.Hour*12)
 	return

+ 1 - 1
services/wx_template_msg.go

@@ -88,7 +88,7 @@ func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.
 	sendMap := make(map[string]interface{})
 	sendData := make(map[string]interface{})
 	sendMap["template_id"] = templateId
-	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
 	//sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "path": "article/detail?ArticleId=1000001"}
 	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
 	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}

+ 73 - 3
services/yidong.go

@@ -258,8 +258,15 @@ func GetYiDongActivity(cont context.Context) (err error) {
 			item.ActivityTypeId = 3
 			item.ActivityTypeName = "公司调研电话会"
 			sliceCompanyInfo := strings.Split(v.Title, "(")
+			sliceActivityTitle := strings.Split(v.Title, ")")
 			companyInfo := sliceCompanyInfo[0]
-			item.ActivityName = v.Title
+			if len(sliceActivityTitle) > 1 {
+				item.ActivityName = companyInfo + sliceActivityTitle[len(sliceActivityTitle)-1]
+			} else {
+				item.ActivityName = v.Title
+			}
+			//fmt.Println(item.ActivityName)
+			//return err
 			item.LastUpdatedTime = time.Now()
 			item.Label = companyInfo
 			item.TemporaryLabel = companyInfo
@@ -283,7 +290,7 @@ func GetYiDongActivity(cont context.Context) (err error) {
 				item.DistinguishedGuest += vdetail.PersonName + " " + vdetail.JobName + ","
 			}
 			item.DistinguishedGuest = strings.TrimRight(item.DistinguishedGuest, ",")
-			item.Body = "<p>" + "【" + v.Title + "】" + "<p>时间:" + v.Start + "</p>嘉宾:" + item.DistinguishedGuest + "</p>"
+			item.Body = "<p>" + "【" + item.ActivityName + "】" + "<p>时间:" + item.ActivityTimeText + "</p>嘉宾:" + item.DistinguishedGuest + "</p>"
 			//fmt.Println(item.Body)
 			//return err
 			if mapOldYiDong[v.ID] == "" {
@@ -304,7 +311,7 @@ func GetYiDongActivity(cont context.Context) (err error) {
 					updateParams["ActivityName"] = item.ActivityName
 					updateParams["Body"] = item.Body
 					updateParams["Label"] = item.Label
-					updateParams["TemporaryLabel"] = item.TemporaryLabel
+					//updateParams["TemporaryLabel"] = item.TemporaryLabel
 					updateParams["DistinguishedGuest"] = item.DistinguishedGuest
 					updateParams["ChartPermissionId"] = item.ChartPermissionId
 					updateParams["ChartPermissionName"] = item.ChartPermissionName
@@ -434,6 +441,68 @@ func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error
 	return
 }
 
+//GetYiDongOriginalLink 将易懂的短连接转为长链接
+func GetYiDongOriginalLink(item *models.ActivityDetail) (yidongLongLink string, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("将易懂的短连接转为长链接 失败:"+err.Error(), 2)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	sliceYidongActivityUrl := strings.Split(item.YidongActivityUrl, "/")
+	var shortLink string
+	if len(sliceYidongActivityUrl) > 1 {
+		shortLink = sliceYidongActivityUrl[len(sliceYidongActivityUrl)-1]
+	}
+	var token string
+	token, err = GetYiDongToken()
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	url := utils.YiDonggetOriginalLink + shortLink + "&access_token=" + token
+	fmt.Println(url)
+	method := "GET"
+
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, nil)
+
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	defer res.Body.Close()
+
+	var ApifoxModal *models.ApifoxgetOriginalLink
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	lingLink := ApifoxModal.Result
+
+	slicelingLink := strings.Split(lingLink, "redirect_uri=")
+	//var shortLink string
+	if len(slicelingLink) > 1 {
+		lingLink = slicelingLink[len(slicelingLink)-1]
+	}
+	yidongLongLink = lingLink
+	return
+}
+
 //处理易董这边过来的时间格式
 func GetActivityTextTime(timeYidong string) (timeText string) {
 	strTime := timeYidong
@@ -579,6 +648,7 @@ func YidongActivityGroup(subjectName string, activityId int) (err error) {
 	if len(subjectList) == 0 {
 		return err
 	}
+	fmt.Println("去掉临时标签的活动", activityId)
 	err = models.UpdateActivityshowSubject(activityId)
 	if err != nil {
 		go utils.SendAlarmMsg("UpdateActivityshowSubject :根据易董推过来的匹配信息,判断临时标签是否展示失败"+err.Error(), 2)

+ 3 - 0
utils/config.go

@@ -78,6 +78,7 @@ var (
 	YiDongZhengTongYunAppid   string //易董 证通云请求appid
 	YiDongZhengTongYunSecret  string //易董 证通云请求secret
 	YiDongHuaWeiYunUrl        string //易董 华为云请求域名
+	YiDonggetOriginalLink     string //易董 短连接转为长链接
 )
 
 func init() {
@@ -232,11 +233,13 @@ func YiDongApiConfig() {
 		YiDongZhengTongYunAppid = "ca86a257ebb46fce"
 		YiDongZhengTongYunSecret = "338db2b2ca86a257ebb46fced9003f53"
 		YiDongHuaWeiYunUrl = "https://achievement.valueonline.cn/"
+		YiDonggetOriginalLink = "https://services.easy-board.com.cn/short-link/getOriginalLink?shortKey="
 	} else {
 		YiDongZhengTongYunUrl = "https://services-dev.valueonline.cn/"
 		YiDongZhengTongYunAppid = "d9bfb79627ac30d0"
 		YiDongZhengTongYunSecret = "96a61dd2d9bfb79627ac30d02188bbe2"
 		YiDongHuaWeiYunUrl = "https://achievement-test.valueonline.cn/"
+		YiDonggetOriginalLink = "https://services-dev.valueonline.cn/short-link/getOriginalLink?shortKey="
 	}
 }
 

+ 11 - 0
utils/constants.go

@@ -102,3 +102,14 @@ const (
 const (
 	YD_TOKEN = "yidong_token"
 )
+
+const (
+	//专项调研背景图片
+	//ACTIVITY_ZXDY_ImgUrl1 = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/b2Bj3fGakP16iJRFKisQohCWnCNl.png"
+	//ACTIVITY_ZXDY_ImgUrl2 = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/OkunjfKEgo5KRLifzwwLX8cDZnnN.png"
+	//ACTIVITY_ZXDY_ImgUrl3 = "https://hzstatic.hzinsights.com/static/temp/20220426202204/20220426/XDLLsjC9XAAy8LIzQr7GsjrBbtX6.png"
+
+	ACTIVITY_ZXDY_ImgUrl1 = "https://hzstatic.hzinsights.com/static/temp/20220830202208/20220830/2c4YHXzwb0uqvIfgPvBV4MZtKNX9.png"
+	ACTIVITY_ZXDY_ImgUrl2 = "https://hzstatic.hzinsights.com/static/temp/20220830202208/20220830/UERktOWyQQEoPeckdy01TEZP09Pu.png"
+	ACTIVITY_ZXDY_ImgUrl3 = "https://hzstatic.hzinsights.com/static/temp/20220830202208/20220830/Db2eF5jffaJlLqq1KtOgrBkddoxZ.png"
+)