Bladeren bron

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into htgj_8.15

xingzai 2 jaren geleden
bovenliggende
commit
b534ea89c7

+ 300 - 276
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 = ""
@@ -273,7 +276,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()
@@ -284,7 +287,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()
@@ -313,6 +316,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]
@@ -352,6 +356,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)
@@ -371,8 +376,25 @@ func (this *ActivityCoAntroller) ActivityList() {
 			go services.AddUserSearchLog(user, keyWordSearch, 6)
 		}
 	}
-	page := paging.GetPaging(currentIndex, pageSize, total)
 	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 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)
 	resp.List = list
 	resp.Paging = page
 	br.Ret = 200
@@ -386,6 +408,7 @@ func (this *ActivityCoAntroller) ActivityList() {
 // @Description 我的日程列表接口
 // @Param   PageSize   query   int  true       "每页数据条数"
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   Source   query   int  false     "来源 0:手机 ,1:Pc 默认0"
 // @Success 200 {object} models.GetCygxActivityListRep
 // @router /scheduleList [get]
 func (this *ActivityCoAntroller) ScheduleList() {
@@ -403,6 +426,7 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	uid := user.UserId
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
+	source, _ := this.GetInt("Source")
 	var startSize int
 	if pageSize <= 0 {
 		pageSize = utils.PageSize20
@@ -415,6 +439,10 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	var conditionCount string
 	var pars []interface{}
 	condition += ` AND art.publish_status = 1    `
+	if source == 1 {
+		condition += ` AND art.yidong_activity_id = '' `
+		conditionCount += ` AND art.yidong_activity_id = '' `
+	}
 	total, err := models.GetScheduleCount(conditionCount, uid)
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	if err != nil {
@@ -429,10 +457,13 @@ func (this *ActivityCoAntroller) ScheduleList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	var list []*models.CygxActivityList
+	var list []*models.ActivityDetail
 	//全部都是进行中的活动
 	if totalCount > currentIndex*pageSize {
 		condition += ` AND art.active_state IN(2) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
 		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
 		list = listHave
 		if errList != nil {
@@ -442,6 +473,9 @@ func (this *ActivityCoAntroller) ScheduleList() {
 		}
 	} else if totalCount > currentIndex-1*pageSize && totalCount < currentIndex*pageSize { //部分是进行中的活动
 		condition = `  AND art.publish_status = 1 AND art.active_state IN(2) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
 		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
 		list = listHave
 		if errList != nil {
@@ -451,6 +485,9 @@ func (this *ActivityCoAntroller) ScheduleList() {
 		}
 		pageSize = pageSize - len(listHave)
 		condition = ` AND art.publish_status = 1 AND art.active_state IN(1,3) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
 		listOther, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
 		if errList != nil {
 			br.Msg = "获取失败"
@@ -495,6 +532,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]
@@ -541,7 +579,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
@@ -552,9 +592,24 @@ func (this *ActivityCoAntroller) ScheduleList() {
 	item.CompanyName = user.CompanyName
 	item.PageType = "MySchedule"
 	go models.AddCygxPageHistoryRecord(item)
-
 	resp := new(models.GetCygxActivityListRep)
-	resp.List = 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
@@ -786,13 +841,6 @@ func (this *ActivityCoAntroller) Detail() {
 				resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
 				resp.MsgType = "Type"
 			} else {
-				//if strings.Contains("医药,消费,科技,智造", activityInfo.ChartPermissionName) {
-				//	if activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 5 || activityInfo.ActivityTypeId == 6 {
-				//		activityInfo.ChartPermissionName += "(主观)"
-				//	} else {
-				//		activityInfo.ChartPermissionName += "(客观)"
-				//	}
-				//}
 				resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
 				resp.MsgType = "Industry"
 			}
@@ -804,7 +852,6 @@ func (this *ActivityCoAntroller) Detail() {
 			} else {
 				hasPermission = 5
 			}
-
 		}
 	} else { //潜在客户
 		if applyCount > 0 {
@@ -859,7 +906,79 @@ func (this *ActivityCoAntroller) Detail() {
 			activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
 		}
 		activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
-		resp.Detail = activityInfo
+
+		//处理活动关联的产业
+		industrialList, err := models.GetIndustrialActivityGroupManagementList(activityId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+			return
+		}
+		if activityInfo.TemporaryLabel != "" {
+			industrialList = make([]*models.IndustrialManagementRep, 0)
+			item := new(models.IndustrialManagementRep)
+			item.IndustryName = activityInfo.Label
+			industrialList = append(industrialList, item)
+		} else {
+			var industrialManagementId string
+			for k, v := range industrialList {
+				if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+					industrialList[k].IsResearch = true
+				}
+				industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
+			}
+			//判断产业下是否有关联的报告,并处理是否跳转
+			industrialManagementId = strings.TrimRight(industrialManagementId, ",")
+			if industrialManagementId != "" {
+				var condition string
+				condition = ` AND m.industrial_management_id IN (` + industrialManagementId + `)`
+				listIndustrialGrop, err := models.GetSearchResourceList(condition)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "GetSearchResourceList,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					return
+				}
+				mapIndustrial := make(map[int]int)
+				if len(listIndustrialGrop) > 0 {
+					for _, v := range listIndustrialGrop {
+						mapIndustrial[v.IndustrialManagementId] = v.IndustrialManagementId
+					}
+				}
+				for k, v := range industrialList {
+					if mapIndustrial[v.IndustrialManagementId] > 0 {
+						industrialList[k].IsJump = true
+					}
+				}
+			}
+		}
+		activityInfo.Listndustrial = industrialList
+		if activityInfo.YidongActivityId != "" {
+			ydTgc, _ := services.GetYiDongCreateUserInfo(user)
+			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)
 	}
 	resp.HasPermission = hasPermission
 	br.Ret = 200
@@ -1891,7 +2010,7 @@ func (this *ActivityABaseController) FastSearch() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开 (空为活动主题,非空为更多主题)"
 // @Success 200 {object} models.GetCygxActivityLabelListRep
-// @router /labelList [get]
+// @router /labelList_deltest [get]
 func (this *ActivityCoAntroller) LabelList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -2244,7 +2363,7 @@ func (this *ActivityCoAntroller) AskAdd() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
 // @Success 200 {object} models.ActivityTypeListHomeResp
-// @router /labelTypeList [get]
+// @router /labelTypeList_deltest [get]
 func (this *ActivityCoAntroller) LabelTypeList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -2609,6 +2728,10 @@ func (this *ActivityCoAntroller) LabelMoreList() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @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() {
@@ -2626,11 +2749,14 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	uid := user.UserId
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
+	source, _ := this.GetInt("Source")
 	label := this.GetString("Label")
 	chartPermissionIds := this.GetString("ChartPermissionIds")
 	whichDay := this.GetString("WhichDay")
 	activeState := this.GetString("ActiveState")
 	activityTypeId := this.GetString("ActivityTypeId")
+	keyWord := this.GetString("KeyWord")
+	playBack, _ := this.GetInt("PlayBack")
 	if label == "undefined" {
 		label = ""
 	}
@@ -2657,120 +2783,74 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 	//userType, permissionStr, err := services.GetUserType(user.CompanyId)
 	var condition string
 	var pars []interface{}
-	//活动可见限制
-	//var sqlExport string
-	//slicePer := strings.Split(permissionStr, ",")
-	//var permissionSqlStr string
-	//for _, v := range slicePer {
-	//	if userType == 1 {
-	//		//if v != "研选" {
-	//		if !strings.Contains(v, "研选") {
-	//			permissionSqlStr += "'" + v + "',"
-	//		}
-	//	} else {
-	//		permissionSqlStr += "'" + v + "',"
+	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
 	//	}
-	//}
-	//permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
-	//permissionSqlStr = strings.Replace(permissionSqlStr, "(主观)", "", -1)
-	//permissionSqlStr = strings.Replace(permissionSqlStr, "(客观)", "", -1)
-	//permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionSqlStr + `)`
-	//sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
-	//if userType == 2 {
-	//	sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
-	//}
-	//if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
-	//	sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
-	//}
-	//sqlExport += `) `
-	//
-	////主题
-	//if label != "" {
-	//	condition = ` AND art.label  LIKE '%` + label + `%' `
-	//}
-	//if whichDay != "" {
-	//	var startDate string
-	//	var endDate string
-	//	if whichDay == "1" {
-	//		startDate = time.Now().Format(utils.FormatDate)
-	//		endDate = startDate
-	//	} else if whichDay == "2" {
-	//		startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
-	//		endDate = startDate
-	//	} else {
-	//		startDate = time.Now().Format(utils.FormatDate)
-	//		endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
+	//	if source == 1 {
+	//		condition += ` AND art.yidong_activity_id = '' `
 	//	}
-	//	condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
-	//	condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
-	//}
-	////行业名称
-	//if len(chartPermissionIds) > 0 {
-	//	condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
-	//}
-	//if activeState != "" {
-	//	if activeState == "1" {
-	//		condition += ` AND art.active_state  IN (1,2)`
-	//	} else {
-	//		condition += ` AND art.active_state  IN (` + activeState + `)`
+	//	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
 	//	}
-	//} else {
-	//	condition += ` AND art.active_state  IN (1)`
-	//}
-	//if activityTypeId != "" {
-	//	condition += ` AND art.activity_type_id  IN (` + activityTypeId + `)`
-	//}
-	//
-	//condition += ` AND art.publish_status = 1 `
-	//var conditionOr string
-	//// 有专家权限的这几种用户,不做行业权限校验
-	//if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
-	//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
-	//}
-	//if (userType == 5) && strings.Contains(permissionStr, "专家") {
-	//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
-	//}
-	//if userType == 1 {
-	//	conditionOr += `	OR ( art.is_limit_people = 0 	  ` + condition + permissionSqlStr + `) `
-	//} else {
-	//	conditionOr += `	OR ( art.is_limit_people = 0 	  ` + condition + `) `
-	//}
-	////判断客户规模是否属于可见范围的活动
-	//companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
-	//if err != nil && err.Error() != utils.ErrNoRow() {
-	//	br.Msg = "获取信息失败"
-	//	br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
-	//	return
-	//}
-	//if companyProduct != nil {
-	//	if companyProduct.Scale != "" {
-	//		conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
+	//	if len(listDing) > 0 {
+	//		for _, v := range listDing {
+	//			activityList = append(activityList, v)
+	//			mapDingActivityId[v.ActivityId] = v.ActivityId
+	//		}
 	//	}
+	//	return
+	//	fmt.Println("len", len(listDing))
 	//}
-
-	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0)
+	condition = ""
+	//活动可见限制
+	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()
 		return
 	}
-
-	//condition += ` AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
-	condition += ` AND art.is_limit_people = 1 ` + conditionActivity
-	total, err := models.GetActivityCount(condition, pars)
+	if source == 1 {
+		condition += ` AND art.yidong_activity_id = '' `
+	}
+	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
+	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   `
 	}
-	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize)
+
+	if label != "" && activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
+	}
+
+	if activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
+	}
+
+	condition += conditionOrder
+	list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize, playBack)
 	if errList != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + errList.Error()
@@ -2799,6 +2879,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]
@@ -2845,6 +2926,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)
@@ -2862,7 +2944,30 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 			resp.Label = detail.ActivityTypeName
 		}
 	}
-	resp.List = list
+	//处理音频回放
+	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))
+	}
+	//添加活动搜索记录
+	if keyWord != "" {
+		go services.AddActivitykeyWordSearch(keyWord, user)
+	}
 	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
@@ -2878,7 +2983,7 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
 // @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
 // @Success 200 {object} models.ActivityTypeListHomeRespPc
-// @router /labelTypeListPc [get]
+// @router /labelTypeListPc_deltest [get]
 func (this *ActivityCoAntroller) LabelTypeListPc() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -3298,7 +3403,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		return
 	}
 	var startSize int
-	pageSize = 40
+	pageSize = 8
 	var sortTime string
 	var pars []interface{}
 	//活动可见限制
@@ -3341,91 +3446,12 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			continue
 		}
 		var condition string
-		//var conditionAdmin string
-		//permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionNameStr + `)`
-		//sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
-		//if userType == 2 {
-		//	sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
-		//}
-		//if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
-		//	sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
-		//}
-		//sqlExport += `) `
-		//if v.ActivityTypeId == utils.ANALYST_TELL_ACTIVITY_TYPE_ID {
-		//	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + strconv.Itoa(v.ActivityTypeId) + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
-		//} else {
-		//	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + strconv.Itoa(v.ActivityTypeId)
-		//}
-		////活动仅决策人可见
-		//if isMaker == 0 {
-		//	condition += ` AND art.is_maker_show = 0  `
-		//}
-		//
-		//if isPower == 1 {
-		//	condition += permissionSqlStr
-		//}
-		////行业名称
-		//if len(chartPermissionIds) > 0 {
-		//	condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
-		//}
-		//var conditionOr string
-		//if whichDay != "" {
-		//	var startDate string
-		//	var endDate string
-		//	if whichDay == "1" {
-		//		startDate = time.Now().Format(utils.FormatDate)
-		//		endDate = startDate
-		//	} else if whichDay == "2" {
-		//		startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
-		//		endDate = startDate
-		//	} else {
-		//		startDate = time.Now().Format(utils.FormatDate)
-		//		endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
-		//	}
-		//	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)`
-		//	} else {
-		//		condition += ` AND art.active_state  IN (` + activeState + `)`
-		//	}
-		//} else {
-		//	condition += ` AND art.active_state  IN (1,2)`
-		//}
-		//conditionAdmin = condition
-		////查询全部可见的数据(是否全部客户可见)
-		//condition += ` AND art.visible_range != 1  `
-		//
-		//if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
-		//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
-		//}
-		//if (userType == 5) && strings.Contains(permissionStr, "专家") {
-		//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
-		//}
-		//if userType == 1 {
-		//	conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) `
-		//} else {
-		//	conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
-		//}
-		//if companyProduct != nil {
-		//	if companyProduct.Scale != "" {
-		//		conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
-		//	}
-		//}
-		//if adminIds != "" {
-		//	conditionOr += ` OR ( art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
-		//}
-
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower)
+		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()
 			return
 		}
-		//fmt.Println(conditionActivity)
 		condition += `AND art.is_limit_people = 1 ` + conditionActivity
 		sortTime = ` mintimesort ASC `
 		labelList, err := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
@@ -3436,7 +3462,7 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		}
 		//标签字段关联的产业与标签处理
 		for k2, v2 := range labelList {
-			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName)
+			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
 			labelList[k2].ImgUrlBg = v.ImgUrlBgs
 		}
 		list[k].List = labelList
@@ -3481,8 +3507,9 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 			return
 		}
 		for k2, v2 := range specialList {
-			specialList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName)
+			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)
@@ -3490,8 +3517,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)
 	}
 	//获取对应活动的数量并排序
@@ -3701,10 +3730,6 @@ func (this *ActivityCoAntroller) SpecialList() {
 		mapChart[chartName] = imgUrlChart
 	}
 	for k, v := range list {
-		//if v.ChartPermissionName == "研选" {
-		//	list[k].ActivityTypeName = "研选电话会"
-		//	list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
-		//}
 		list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
 		if mapChart[v.ChartPermissionName] != "" {
 			list[k].ImgUrl = mapChart[v.ChartPermissionName]
@@ -4406,83 +4431,15 @@ func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
 			continue
 		}
 		var condition string
-		//var conditionAdmin string
-		//permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionNameStr + `)`
-		//if v.ActivityTypeId == utils.ANALYST_TELL_ACTIVITY_TYPE_ID {
-		//	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + strconv.Itoa(v.ActivityTypeId) + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
-		//} else {
-		//	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + strconv.Itoa(v.ActivityTypeId)
-		//}
-		////活动仅决策人可见
-		//if isMaker == 0 {
-		//	condition += ` AND art.is_maker_show = 0  `
-		//}
-		//
-		////condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id = ` + strconv.Itoa(v.ActivityTypeId)
-		//if isPower == 1 {
-		//	condition += permissionSqlStr
-		//}
-		////行业名称
-		//if len(chartPermissionIds) > 0 {
-		//	condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
-		//}
-		//var conditionOr string
-		//if whichDay != "" {
-		//	var startDate string
-		//	var endDate string
-		//	if whichDay == "1" {
-		//		startDate = time.Now().Format(utils.FormatDate)
-		//		endDate = startDate
-		//	} else if whichDay == "2" {
-		//		startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
-		//		endDate = startDate
-		//	} else {
-		//		startDate = time.Now().Format(utils.FormatDate)
-		//		endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
-		//	}
-		//	condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
-		//	condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
-		//}
-		//
-		//if activeState != "" {
-		//	condition += ` AND art.active_state  IN (` + activeState + `)`
-		//} else {
-		//	condition += ` AND art.active_state  IN (1,2)`
-		//}
-		//
-		//conditionAdmin = condition
-		////查询全部可见的数据(是否全部客户可见)
-		//condition += ` AND art.visible_range != 1  `
-		//
-		//if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
-		//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
-		//}
-		//if (userType == 5) && strings.Contains(permissionStr, "专家") {
-		//	conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
-		//}
-		//if userType == 1 {
-		//	conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) `
-		//} else {
-		//	conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
-		//}
-		//
-		//if companyProduct != nil {
-		//	if companyProduct.Scale != "" {
-		//		conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
-		//	}
-		//}
-		//
-		//if adminIds != "" {
-		//	conditionOr += ` OR ( art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
-		//}
-		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower)
+
+		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()
 			return
 		}
 		//condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
-		condition += `AND art.is_limit_people = 1 ` + conditionActivity
+		condition += `AND art.is_limit_people = 1 AND art.yidong_activity_id = '' ` + conditionActivity
 		sortTime = ` mintimesort ASC `
 		labelList, err := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
 		if err != nil {
@@ -4492,7 +4449,7 @@ func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
 		}
 		//标签字段关联的产业与标签处理
 		for k2, v2 := range labelList {
-			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName)
+			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
 			labelList[k2].Resource = 1
 		}
 		list[k].List = labelList
@@ -4536,7 +4493,7 @@ func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
 			return
 		}
 		for k2, v2 := range specialList {
-			specialList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName)
+			specialList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
 			specialList[k2].Resource = 2
 		}
 
@@ -4908,3 +4865,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
+}

+ 4 - 1
controllers/chart.go

@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"encoding/json"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/services"
@@ -88,6 +89,7 @@ func (this *ChartController) Collection() {
 	var listCollection []*models.HomeChartListResp
 	var total int
 	//var err error
+	fmt.Println(user)
 	chartUserTokenByMobile, _ := services.GetUserTokenByMobile(mobile)
 	if chartUserTokenByMobile != "" {
 		list, err, _ := services.GetChartCollectionByApi(mobile, 9999, 0)
@@ -96,6 +98,7 @@ func (this *ChartController) Collection() {
 			br.ErrMsg = "获取图表分类失败 Err:" + err.Error()
 			return
 		}
+		fmt.Println(len(list))
 		var chartIds string
 		var condition string
 		var pars []interface{}
@@ -109,7 +112,7 @@ func (this *ChartController) Collection() {
 			chartIds = "0"
 		}
 		condition = ` AND a.chart_id IN (` + chartIds + `) `
-		total, err = models.GetChartCount(condition, pars)
+		total, err = models.GetChartCollentCount(condition, pars)
 		if err != nil {
 			br.Msg = "获取信息失败"
 			br.Msg = "获取帖子总数失败,Err:" + err.Error()

+ 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

+ 1 - 1
controllers/report.go

@@ -1139,9 +1139,9 @@ func (this *ReportController) IsShow() {
 	}
 	total, _ := models.GetUserIsAdminCount(mobile)
 	if total > 0 {
-		resp.IsShow = true
 		resp.IsShowList = true
 	}
+	resp.IsShow = true
 	br.Ret = 200
 	br.Success = true
 	br.Data = resp

+ 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 = "获取成功!"

+ 356 - 0
controllers/yidong.go

@@ -0,0 +1,356 @@
+package controllers
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+)
+
+type BaseYidongController struct {
+	BaseCommonController
+}
+
+// @Title 取得TOKEN API
+// @Description 取得TOKEN API
+// @Success 200 {object} models.ConfigResp
+// @router /get_token [get]
+func (this *BaseYidongController) GetToken() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type Ydtoklen struct {
+		Success     string `json:"success"`
+		ExpiresIn   int    `json:"expires_in"`
+		AccessToken string `json:"access_token"`
+	}
+	var ydtoklen Ydtoklen
+
+	//url := utils.YiDongZhengTongYunUrl + "oauth/token?grant_type=client_credentials&response_type=token&client_id=" + utils.YiDongZhengTongYunAppid + "&client_secret=" + utils.YiDongZhengTongYunSecret
+	//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()
+	//
+	//
+	//body, err := ioutil.ReadAll(res.Body)
+	//if err != nil {
+	//	fmt.Println(err)
+	//	return
+	//}
+	////fmt.Println(body)
+	//err = json.Unmarshal(body, &ydtoklen)
+	//if err != nil {
+	//	fmt.Println("Getres.PublicGetDate Err:", err.Error())
+	//}
+	//services.GetYiDongActivity()
+
+	//cacheKey := utils.YD_TOKEN
+	//utils.Rc.Put(cacheKey, ydtoklen.AccessToken, time.Second*7000)
+	//utils.FileLog.Info(string(body))
+	////fmt.Println(body)
+	//fmt.Println(string(body))
+	ydtoklen.AccessToken, _ = services.GetYiDongToken()
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ydtoklen
+}
+
+// @Title 获取路演列表数据
+// @Description 获取路演列表数据
+// @Success 200 {object} models.ConfigResp
+// @router /get/activity/list [get]
+func (this *BaseYidongController) Ativitylist() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	token, _ := services.GetYiDongToken()
+	//url := "https://services-dev.valueonline.cn/interact/activityManageApi/getRoadshowList?access_token=" + Ydtoklen
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	//payload := strings.NewReader(`{"meetingStatus":"0,1","conveneStartStr":"2022-05-06","conveneEndStr":"2022-05-14",
+	//"lastUpdateTime":"2022-05-08 12:00:00"}`)
+
+	payload := strings.NewReader(`{
+    "meetingStatus": "0"
+}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)")
+	req.Header.Add("Content-Type", "application/json")
+
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModal
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	//fmt.Println(body)
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+
+	//fmt.Println(body)
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ApifoxModal
+}
+
+// @Title 获取路演详细信息
+// @Description 获取路演详细信息
+// @Success 200 {object} models.ConfigResp
+// @router /get/activity/detail [get]
+func (this *BaseYidongController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	cacheKey := utils.YD_TOKEN
+	Ydtoklen, _ := utils.Rc.RedisString(cacheKey)
+	url := "https://services-dev.valueonline.cn/interact/activityManageApi/getRoadshowDetail?access_token=" + Ydtoklen
+	method := "POST"
+	payload := strings.NewReader(`{"activityId":"9395325920258067463"}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModaldetail
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	fmt.Println(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	//fmt.Println(body)
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ApifoxModal
+}
+
+// @Title 获取参会人员信息
+// @Description 获取参会人员信息
+// @Success 200 {object} models.ConfigResp
+// @router /get/activity/userList [get]
+func (this *BaseYidongController) UserList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	activityId := this.GetString("ActivityId")
+	cacheKey := utils.YD_TOKEN
+	Ydtoklen, _ := utils.Rc.RedisString(cacheKey)
+	url := "https://services-dev.valueonline.cn/interact/activityManageApi/getAttendPersonList?access_token=" + Ydtoklen
+	method := "POST"
+	payload := strings.NewReader(`{"activityId":"` + activityId + `"}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModaluser
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	fmt.Println(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	//fmt.Println(body)
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ApifoxModal
+}
+
+// @Title 生成用户相关信息接口
+// @Description 生成用户相关信息接口
+// @Success 200 {object} models.ConfigResp
+// @router /get/activity/createUserInfo [get]
+func (this *BaseYidongController) CreateUserInfo() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	url := "https://achievement-test.valueonline.cn/app/hz/createUserInfo"
+	method := "POST"
+	payload := strings.NewReader(`{
+  "phone": "15557270714",
+  "mobileCountryCode": "+86",
+  "sourceFrom": "01"
+}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModalUserTgc
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	fmt.Println(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	//fmt.Println(body)
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ApifoxModal
+}
+
+// @Title 生成用户相关信息接口
+// @Description 生成用户相关信息接口
+// @Success 200 {object} models.ConfigResp
+// @router /get/activity/userSingnUp [get]
+func (this *BaseYidongController) UserSingnUp() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	url := "https://achievement-test.valueonline.cn/app/hz/signAppointmentsForThird"
+	method := "POST"
+
+	payload := strings.NewReader(`{
+    "activityId": "9395325920258067463",
+    "personTelephone": "15557270714",
+    "personName": "沈大爷",
+    "companyName": "弘则研究",
+    "mobileCountryCode": "+86",
+    "thirdPartySource": "01"
+}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModalSingUpClass
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	fmt.Println(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	//fmt.Println(body)
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = ApifoxModal
+}

+ 214 - 69
models/activity.go

@@ -9,6 +9,63 @@ import (
 	"time"
 )
 
+//活动详情
+type CygxActivity struct {
+	ActivityId              int       `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int       `description:"活动类型id"`
+	ActivityTypeName        string    `description:"活动类型名称"`
+	ChartPermissionId       int       `description:"行业id"`
+	ChartPermissionName     string    `description:"行业名称"`
+	ChartPermissionNames    string    `description:"行业名称辅助字段,区分研选子分类"`
+	Body                    string    `description:"内容"`
+	CreateTime              time.Time `description:"创建时间"`
+	IsLimitPeople           int       `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int       `description:"限制的人数数量"`
+	CustomerTypeIds         string    `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	PublishStatus           int       `description:"发布状态 1已发布,0未发布"`
+	LastUpdatedTime         time.Time `description:"更新时间"`
+	ActivityTime            string    `description:"活动时间"`
+	ActivityTimeText        string    `description:"活动时间带文字"`
+	DistinguishedGuest      string    `description:"嘉宾"`
+	Host                    string    `description:"主持人"`
+	MainlandTell            string    `description:"大陆拨入号"`
+	HongKongTell            string    `description:"香港拨入号"`
+	TaiwanTell              string    `description:"台湾拨入号"`
+	AmericaTell             string    `description:"美国拨入号"`
+	ParticipationCode       string    `description:"参会密码"`
+	Theme                   string    `description:"主题"`
+	Expert                  string    `description:"专家"`
+	ActivityName            string    `description:"活动名称"`
+	ActivityNameTask        string    `description:"活动名称定时任务同步的时候使用"`
+	OnlineParticipation     string    `description:"网络参会"`
+	ReportLink              string    `description:"报告链接"`
+	City                    string    `description:"城市"`
+	Address                 string    `description:"活动地址"`
+	Highlights              string    `description:"活动亮点"`
+	Remarks                 string    `description:"备注"`
+	Speaker                 string    `description:"主讲人"`
+	ArticleId               int       `description:"关联报告id"`
+	Label                   string    `description:"标签"`
+	LinkParticipants        string    `description:"链接参会"`
+	AppAttendance           string    `description:"App参会"`
+	ConferencePassword      string    `description:"会议密码"`
+	TemporaryLabel          string    `description:"临时标签"`
+	IsMakerShow             int       `description:"是否仅决策人可见 0,否 、1,是"`
+	VisibleRange            int       `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
+	Scale                   string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	IsShowSubjectName       int       `description:"小程序内是否展示标的名称 1是 ,0 否 默认0 "`
+	IsHideAppointment       int       `description:"是否隐藏预约纪要按钮 1是 ,0 否 默认0 "`
+	AdminId                 int       `description:"销售/管理员ID"`
+	AdminName               string    `description:"销售/管理员姓名"`
+	IsCanAppointmentMinutes int       `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string    `description:"易董活动ID"`
+	YidongActivityUrl       string    `description:"易董活动跳转地址"`
+	YidongActivityEndTime   string    `description:"易董活动截止时间"`
+	ActivityJoinType        string    `description:"活动入会类型01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会"`
+	YidongSignUpEnd         string    `description:"易董活动截止时间"` // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
+	YidongSignUpStart       string    `description:"易董活动截止时间"` // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
+}
+
 type Activity struct {
 	ActivityTypeId   int    `description:"活动类型id"`
 	ActivityTypeName string `description:"活动名称"`
@@ -60,56 +117,73 @@ type ActivityArticleResp struct {
 
 //活动详情
 type ActivityDetail struct {
-	ActivityId              int    `orm:"column(activity_id);pk";description:"活动ID "`
-	ActivityTypeId          int    `description:"活动类型id"`
-	ActivityTypeName        string `description:"活动类型名称"`
-	ChartPermissionId       int    `description:"行业id"`
-	ChartPermissionName     string `description:"行业名称"`
-	ChartPermissionNames    string `description:"行业名称辅助字段,区分研选子分类"`
-	Body                    string `description:"内容"`
-	CreateTime              string `description:"创建时间"`
-	IsLimitPeople           int    `description:"是否限制人数 1是,0否"`
-	LimitPeopleNum          int    `description:"限制的人数数量"`
-	LastUpdatedTime         string `description:"更新时间"`
-	ActivityTime            string `description:"活动时间"`
-	ActivityTimeText        string `description:"活动时间带文字"`
-	DistinguishedGuest      string `description:"嘉宾"`
-	Host                    string `description:"主持人"`
-	Speaker                 string `description:"主讲人"`
-	MainlandTell            string `description:"大陆拨入号"`
-	HongKongTell            string `description:"香港拨入号"`
-	TaiwanTell              string `description:"台湾拨入号"`
-	AmericaTell             string `description:"美国拨入号"`
-	ParticipationCode       string `description:"参会密码"`
-	Theme                   string `description:"主题"`
-	Expert                  string `description:"专家"`
-	ActivityName            string `description:"活动名称"`
-	OnlineParticipation     string `description:"网络参会"`
-	ReportLink              string `description:"报告链接"`
-	City                    string `description:"城市"`
-	Address                 string `description:"活动地址"`
-	Highlights              string `description:"活动亮点"`
-	Remarks                 string `description:"备注"`
-	ShowType                string `description:"人数限制类型,1不展示限制,2可选限制,3强制限制"`
-	IsSignup                int    `description:"是否已报名 1是 ,0 否"`
-	IsAppointment           int    `description:"是否已预约纪要 1是 ,0 否"`
-	SignupNum               int    `description:"已报名人数"`
-	SignupType              int    `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
-	ActiveState             string `description:"活动进行状态 未开始:1、进行中2、已结束3"`
-	IsCancelMeetingReminder int    `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
-	ArticleId               int    `description:"报告id(报告链接跳转使用)"`
-	CustomerTypeIds         string `description:"活动可见的客户类型,多个ID用 , 隔开"`
-	IsShowSustainable       bool   `description:"是否展示限免标签"`
-	Description             string `description:"研选内容说明"`
-	IsResearch              bool   `description:"是否属于研选"`
-	LinkParticipants        string `description:"链接参会"`
-	AppAttendance           string `description:"App参会"`
-	ConferencePassword      string `description:"会议密码"`
-	Scale                   string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
-	IsShowAppointment       bool   `description:"是否展示预约纪要"`
-	IsHideAppointment       int    `description:"是否隐藏预约纪要按钮  1是,0 否"`
-	IsCClassMeeting         bool   `description:"是否是c类电话会"`
-	ArticleList             []*ActivityArticleResp
+	ActivityId              int                        `orm:"column(activity_id);pk";description:"活动ID "`
+	ActivityTypeId          int                        `description:"活动类型id"`
+	ActivityTypeName        string                     `description:"活动类型名称"`
+	ChartPermissionId       int                        `description:"行业id"`
+	ChartPermissionName     string                     `description:"行业名称"`
+	ChartPermissionNames    string                     `description:"行业名称辅助字段,区分研选子分类"`
+	Body                    string                     `description:"内容"`
+	CreateTime              string                     `description:"创建时间"`
+	IsLimitPeople           int                        `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int                        `description:"限制的人数数量"`
+	LastUpdatedTime         string                     `description:"更新时间"`
+	ActivityTime            string                     `description:"活动时间"`
+	ActivityTimeText        string                     `description:"活动时间带文字"`
+	DistinguishedGuest      string                     `description:"嘉宾"`
+	Host                    string                     `description:"主持人"`
+	Speaker                 string                     `description:"主讲人"`
+	MainlandTell            string                     `description:"大陆拨入号"`
+	HongKongTell            string                     `description:"香港拨入号"`
+	TaiwanTell              string                     `description:"台湾拨入号"`
+	AmericaTell             string                     `description:"美国拨入号"`
+	ParticipationCode       string                     `description:"参会密码"`
+	Theme                   string                     `description:"主题"`
+	Expert                  string                     `description:"专家"`
+	ActivityName            string                     `description:"活动名称"`
+	OnlineParticipation     string                     `description:"网络参会"`
+	ReportLink              string                     `description:"报告链接"`
+	City                    string                     `description:"城市"`
+	Address                 string                     `description:"活动地址"`
+	Highlights              string                     `description:"活动亮点"`
+	Remarks                 string                     `description:"备注"`
+	ShowType                string                     `description:"人数限制类型,1不展示限制,2可选限制,3强制限制"`
+	IsSignup                int                        `description:"是否已报名 1是 ,0 否"`
+	IsAppointment           int                        `description:"是否已预约纪要 1是 ,0 否"`
+	SignupNum               int                        `description:"已报名人数"`
+	SignupType              int                        `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
+	ActiveState             string                     `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsCancelMeetingReminder int                        `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
+	ArticleId               int                        `description:"报告id(报告链接跳转使用)"`
+	CustomerTypeIds         string                     `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	IsShowSustainable       bool                       `description:"是否展示限免标签"`
+	Description             string                     `description:"研选内容说明"`
+	IsResearch              bool                       `description:"是否属于研选"`
+	LinkParticipants        string                     `description:"链接参会"`
+	AppAttendance           string                     `description:"App参会"`
+	ConferencePassword      string                     `description:"会议密码"`
+	Scale                   string                     `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	IsShowAppointment       bool                       `description:"是否展示预约纪要"`
+	IsHideAppointment       int                        `description:"是否隐藏预约纪要按钮  1是,0 否"`
+	IsCClassMeeting         bool                       `description:"是否是c类电话会"`
+	ArticleList             []*ActivityArticleResp     // 下面是列表添加的部分结构体
+	IsBrackets              int                        `description:"是否有方括号 1是 ,0 否"`
+	Label                   string                     `description:"主题标签"`
+	ImgUrl                  string                     `description:"图片链接"`
+	ImgUrlText              string                     `description:"图片链接文字"`
+	ActivityType            int                        `description:"活动线上线下类型 1线上,0 线下"`
+	JmcjRoadshowTitle       string                     `description:"进门财经手动匹配的活动名称"`
+	Listndustrial           []*IndustrialManagementRep `description:"活动关联的产业信息"`
+	IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
+	IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
+	IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
+	IsShowSignup            bool                       `description:"是否展示我要报名"`
+	TemporaryLabel          string                     `description:"临时标签"`
+	IsCanAppointmentMinutes int                        `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string                     `description:"易董活动ID"`
+	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceList               *CygxActivityVoiceReq      `description:"音频数据"`
 }
 
 type CygxActivityResp struct {
@@ -151,7 +225,7 @@ func GetAddActivityInfoByIdShow(uid, ActivityId int) (item *ActivityDetail, err
 	return
 }
 
-//活动详情
+//活动列表
 type CygxActivityList struct {
 	ActivityId              int    `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
 	ActivityTypeId          int    `description:"活动类型id"`
@@ -188,13 +262,17 @@ type CygxActivityList struct {
 
 type GetCygxActivityListRep struct {
 	Paging *paging.PagingItem `description:"分页数据"`
-	List   []*CygxActivityList
+	List   []*ActivityDetail
 	Label  string `description:"主题"`
 	ImgUrl string `description:"图片路径"`
 }
 
 //列表
-func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*CygxActivityList, 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,
@@ -203,8 +281,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
 	}
@@ -227,8 +304,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
 	}
@@ -253,7 +334,7 @@ func GetScheduleCount(condition string, uid int) (count int, err error) {
 }
 
 //我的日程列表
-func GetScheduleList(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*CygxActivityList, err error) {
+func GetScheduleList(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*ActivityDetail, err error) {
 	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,
@@ -457,16 +538,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
 }
@@ -524,12 +608,13 @@ type CygxActivityLabelList struct {
 	ActivityId        int    `description:"活动ID "`
 	IsShowSubjectName int    `description:"小程序内是否展示标的名称 1是 ,0否 默认0 "`
 	Resource          int    `description:"位置 ,1:活动 ,2:专项产业调研"`
+	TemporaryLabel    string `description:"临时标签"`
 }
 
 //主题列表
 func GetActivityLabelListAll(condition, sortTime string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityLabelList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT	label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort 
+	sql := `SELECT	label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort 
 		FROM cygx_activity as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -758,3 +843,63 @@ func GetActivityWeekPermission() (permission string, err error) {
 	err = o.Raw(sql).QueryRow(&permission)
 	return
 }
+
+//列表
+func GetIndustrialActivityGroupManagementList(activityId int) (items []*IndustrialManagementRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			p.permission_name,
+			p.chart_permission_id,
+			m.industrial_management_id,
+			m.industry_name 
+			FROM
+			cygx_industrial_activity_group_management AS am
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = am.industrial_management_id
+			INNER JOIN chart_permission AS p ON p.chart_permission_id = m.chart_permission_id 
+			WHERE
+			am.activity_id = ? AND am.source = 1`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+//GetActivityListByYiDong 获取易董同步过来的活动列表
+func GetActivityListByYiDong() (items []*CygxActivity, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//AddCygxActivity 添加活动
+func AddCygxActivity(item *CygxActivity) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//列表
+func GetActivityListByYidong(condition string) (items []*ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//UpdateCygxActivitySubmitMeetingByYidong  ,跟易董返回的用户状态修改活动以提交到会状态
+func UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE yidong_activity_id=?  `
+	_, err = o.Raw(sql, yidongActivityId).Exec()
+	return
+}
+
+//UpdateActivityshowSubject 根据易董推过来的匹配信息,判断临时标签是否展示
+func UpdateActivityshowSubject(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_show_subject_name= 1 , temporary_label = ''  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 8 - 0
models/activity_signup.go

@@ -563,3 +563,11 @@ func UpdateCygxActivitySignup(wxUser *WxUserItem) (err error) {
 	_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
 	return
 }
+
+//UpdateCygxActivitySignupisMeet 修改易董的活动,用户已到会
+func UpdateCygxActivitySignupisMeet(activityId int, mobile string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_signup SET is_meeting=1 WHERE activity_id=?  AND mobile = ? `
+	_, err = o.Raw(sql, activityId, mobile).Exec()
+	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
+}

+ 16 - 4
models/article.go

@@ -43,6 +43,7 @@ type CygxArticle struct {
 	VideoPlaySeconds string `description:"音频播放时长"`
 	Stock            string `description:"个股标签"`
 	FieldName        string `description:"产业标签"`
+	Annotation       string `description:"核心观点"`
 }
 
 type CygxArticleEs struct {
@@ -100,6 +101,7 @@ type HomeArticle struct {
 	HttpUrl          string `description:"文章链接跳转地址"`
 	IsNeedJump       bool   `description:"是否需要跳转链接地址"`
 	Source           int    `description:"来源  1:文章, 2:图表"`
+	Annotation       string `description:"核心观点"`
 }
 
 type ArticleDetail struct {
@@ -184,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
 }
@@ -522,6 +526,7 @@ type ArticleResultApidate struct {
 	Type          ArticleResultApiType     `json:"type"`
 	Stock         []string                 `json:"stock"`
 	Field         ArticleField             `json:"field"`
+	Corpus        Corpus                   `json:"corpus"`
 }
 
 type ArticleField struct {
@@ -531,13 +536,20 @@ type ArticleField struct {
 	IndustryId  int    `json:"industry_id"`
 }
 
+type Corpus struct {
+	Id        int    `json:"id"`
+	ArticleId int    `json:"article_id"`
+	Corpus    string `json:"corpus"`
+}
+
 type ArticleSeries struct {
 	Name string `json:"name"`
 }
 type ArticleResultApiContent struct {
-	ArticleId int    `json:"id"`
-	Body      string `json:"body"`
-	Abstract  string `json:"abstract"`
+	ArticleId  int    `json:"id"`
+	Body       string `json:"body"`
+	Abstract   string `json:"abstract"`
+	Annotation string `json:"annotation"`
 }
 
 type ArticleResultApiAuthor struct {

+ 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
+}

+ 13 - 0
models/chart.go

@@ -264,6 +264,19 @@ func GetChartCount(condition string, pars []interface{}) (count int, err error)
 	return
 }
 
+//获取图表数量
+func GetChartCollentCount(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS count
+                FROM cygx_chart_all AS a
+                WHERE a.publish_status=1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
 func GetChartDetailById(chartId, uid int) (item *CygxChartDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * ,( SELECT COUNT( 1 ) FROM cygx_chart_collect AS c WHERE c.chart_id = a.chart_id AND c.user_id = ? ) AS collection_num

+ 6 - 0
models/db.go

@@ -112,6 +112,12 @@ func init() {
 		new(CygxChartAll),
 		new(CygxSessionMobile),
 		new(CygxSearchKeyWordLog),
+		new(CygxActivity),
+		new(CygxYidongActivityMeetingApiLog),
+		new(CygxIndustrialActivityGroupManagement),
+		new(CygxIndustrialActivityGroupSubject),
+		new(CygxActivityVoiceHistory),
+		new(CygxThreeApiLog),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 68 - 0
models/industrial_activity_group_management.go

@@ -0,0 +1,68 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxIndustrialActivityGroupManagement struct {
+	Id                     int       `orm:"column(id);pk" description:"主键ID"`
+	ActivityId             int       `description:"活动ID"`
+	IndustrialManagementId int       `description:"cygx_industrial_management表的主键ID"`
+	Source                 int       `description:"来源,1 活动,2专项调研"`
+	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()
+	sql := `SELECT
+				s.*
+			FROM
+				cygx_industrial_subject as s 
+				INNER JOIN  cygx_industrial_management as m ON  m.industrial_management_id = s.industrial_management_id
+			WHERE
+				subject_name = ? `
+	_, err = o.Raw(sql, subjectName).QueryRows(&items)
+	return
+}
+
+// AddCygxActiuvityGroupMulti 批量添加
+func AddCygxActiuvityGroupMulti(items []*CygxIndustrialActivityGroupManagement, itemsSubject []*CygxIndustrialActivityGroupSubject) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	if len(items) > 0 {
+		//批量添加关联的产业
+		_, err = o.InsertMulti(len(items), items)
+	}
+	if len(itemsSubject) > 0 {
+		//批量添加关联的标的
+		_, err = o.InsertMulti(len(itemsSubject), itemsSubject)
+	}
+	return
+}

+ 3 - 0
models/industrial_management.go

@@ -16,6 +16,8 @@ type IndustrialManagementRep struct {
 	RecommendedIndex       int    `description:"推荐指数"`
 	LayoutTime             string `description:"布局时间"`
 	ArticleReadNum         int    `description:"文章阅读数量"`
+	IsResearch             bool   `description:"是否属于研选"`
+	IsJump                 bool   `description:"是否跳转"`
 }
 
 type IndustrialManagementCount struct {
@@ -234,6 +236,7 @@ type IndustrialManagementIdInt struct {
 	IndustryName           string `description:"产业名称"`
 	SubjectName            string `description:"标的名称"`
 	ArticleId              int    `description:"文章ID"`
+	IsResearch             bool   `description:"是否属于研选"`
 }
 
 type IndustrialManagementIdInts struct {

+ 18 - 7
models/report.go

@@ -203,7 +203,7 @@ func GetWhichDepartmentCount(condition string) (count int, err error) {
 }
 
 type IsShow struct {
-	IsShow          bool   `description:"是否展示"`
+	IsShow          bool   `description:"绝密内参按钮是否展示"`
 	IsShowResearch  bool   `description:"研选是否展示限免"`
 	IsShowChart     bool   `description:"图表是否展示限免"`
 	IsShowList      bool   `description:"榜单是否展示"`
@@ -307,10 +307,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:研选主题(报告)"`
 }
 
@@ -692,16 +692,27 @@ type ReportBillboardTableListResp struct {
 
 //报告榜单start
 type ArticleReportBillboardResp struct {
-	ArticleId   int    `description:"文章id"`
-	Title       string `description:"标题"`
-	PublishDate string `description:"发布时间"`
-	List        []*IndustrialManagementIdInt
+	ArticleId    int    `description:"文章id"`
+	Title        string `description:"标题"`
+	PublishDate  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
 }
 
 type ArticleReportBillboardLIstResp struct {
 	List []*ArticleReportBillboardResp
 }
 
+type ArticleReportBillboardLIstPageResp struct {
+	List   []*ArticleReportBillboardResp
+	Paging *paging.PagingItem
+}
+
 //报告收藏榜单列表
 func GetReportCollectionBillboardList(pars []interface{}, condition string) (items []*ArticleReportBillboardResp, err error) {
 	o := orm.NewOrm()

+ 30 - 0
models/three_api_log.go

@@ -0,0 +1,30 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxThreeApiLog struct {
+	Id         int       `orm:"column(id);pk"`
+	Url        string    `description:"链接"`
+	Body       string    `description:"请求参数"`
+	Result     string    `description:"返回参数"`
+	CreateTime time.Time `description:"活动模板,带P标签"`
+	Source     int       `description:"来源1,易董"`
+}
+
+//添加日志记录
+func AddCygxThreeApiLog(item *CygxThreeApiLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//三十天之后的日志自行删除
+func DeleteCygxThreeApiLog() (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE FROM cygx_three_api_log WHERE  DATE_SUB(CURDATE(), INTERVAL 30 DAY) > date(create_time)`
+	_, err = o.Raw(sql).Exec()
+	return
+}

+ 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
 }

+ 1 - 0
models/wx_user.go

@@ -84,6 +84,7 @@ type WxUserItem struct {
 	OutboundCountryCode string    `description:"外呼手机号区号"`
 	IsMsgOutboundMobile int       `description:"是否弹窗过绑定外呼手机号区号"`
 	IsMaker             int       `description:"是否是决策人"`
+	Position            string    `description:"职务"`
 	Source              int
 }
 

+ 139 - 0
models/yidong.go

@@ -0,0 +1,139 @@
+package models
+
+type ApifoxModal struct {
+	ErrorCode interface{} `json:"errorCode"`
+	ErrorMsg  interface{} `json:"errorMsg"`
+	Result    []Result    `json:"result"`
+	Success   bool        `json:"success"`
+	Timestamp int64       `json:"timestamp"`
+}
+
+type Result struct {
+	ActivityJoinType               string  `json:"activityJoinType"`               // 活动入会类型,01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会
+	Banner                         string  `json:"banner"`                         // 宣传图
+	BusinessCardOpen               string  `json:"businessCardOpen"`               // 上传名片是否开启,1是 0否
+	BusinessCardRequired           string  `json:"businessCardRequired"`           // 上传名片是否必填,1是 0否
+	CertificateInformationOpen     string  `json:"certificateInformationOpen"`     // 证件信息是否开启,1是 0否
+	CertificateInformationRequired string  `json:"certificateInformationRequired"` // 证件信息是否必填,1是 0否
+	CompanyCodeOpen                string  `json:"companyCodeOpen"`                // 公司代码是否开启,1是 0否
+	CompanyCodeRequired            string  `json:"companyCodeRequired"`            // 公司代码是否必填,1是 0否
+	CompanyInfo                    string  `json:"companyInfo"`                    // 公司名称
+	CompanyShortNameOpen           string  `json:"companyShortNameOpen"`           // 公司名称是否开启,1是 0否
+	CompanyShortNameRequired       string  `json:"companyShortNameRequired"`       // 公司名称是否必填,1是 0否
+	End                            string  `json:"end"`                            // 活动结束时间
+	ID                             string  `json:"id"`                             // 活动主键id
+	IndustrySwName                 string  `json:"industrySwName"`                 // 行业
+	InviteeOpen                    *string `json:"inviteeOpen"`                    // 邀请机构是否开启,1是 0否
+	InviteeRequired                *string `json:"inviteeRequired"`                // 邀请机构是否必填,1是 0否
+	JobNameOpen                    string  `json:"jobNameOpen"`                    // 职务是否开启,1是 0否
+	JobNameRequired                string  `json:"jobNameRequired"`                // 职务是否必填,1是 0否
+	MailOpen                       string  `json:"mailOpen"`                       // 邮箱是否开启,1是 0否
+	MailRequired                   string  `json:"mailRequired"`                   // 邮箱是否必填,1是 0否
+	PersonNameOpen                 string  `json:"personNameOpen"`                 // 姓名是否开启,1是 0否
+	PersonNameRequired             string  `json:"personNameRequired"`             // 姓名是否必填,1是 0否
+	PersonTelephoneOpen            string  `json:"personTelephoneOpen"`            // 手机号是否开启,1是 0否
+	PersonTelephoneRequired        string  `json:"personTelephoneRequired"`        // 手机号是否必填,1是 0否
+	SignUpEnd                      string  `json:"signUpEnd"`                      // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
+	SignUpStart                    string  `json:"signUpStart"`                    // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
+	Start                          string  `json:"start"`                          // 活动开始时间
+	SyncFlag                       string  `json:"syncFlag"`                       // 同步有效性,同步有效性 1有效,0失效
+	Title                          string  `json:"title"`                          // 活动主题
+	Type                           string  `json:"type"`                           // 路演类型
+	URL                            string  `json:"url"`                            // 活动短链接
+}
+
+type ApifoxModalDetail struct {
+	ErrorCode interface{} `json:"errorCode"`
+	ErrorMsg  interface{} `json:"errorMsg"`
+	Result    Result      `json:"result"`
+	Success   bool        `json:"success"`
+	Timestamp int64       `json:"timestamp"`
+}
+
+type ResultDetail struct {
+	GuestIntroduceType string     `json:"guestIntroduceType"` // 嘉宾类型,嘉宾类型(0-列表,1-图片)
+	GuestPersonList    []UserList `json:"guestPersonList"`    // 嘉宾列表,适用列表类型
+	GuestPicURL        string     `json:"guestPicUrl"`        // 嘉宾图片链接,适用图片类型
+}
+
+type UserList struct {
+	CompanyName        string  `json:"companyName"`        // 公司
+	HeadPortraitURL    string  `json:"headPortraitUrl"`    // 头像
+	ID                 string  `json:"id"`                 // 嘉宾主键id
+	JobName            string  `json:"jobName"`            // 职务
+	PersonIntroduction *string `json:"personIntroduction"` // 嘉宾介绍
+	PersonName         string  `json:"personName"`         // 姓名
+}
+
+type ApifoxModaldetail struct {
+	ErrorCode    interface{}  `json:"errorCode"`
+	ErrorMsg     interface{}  `json:"errorMsg"`
+	Resultdetail Resultdetail `json:"result"`
+	Success      bool         `json:"success"`
+	Timestamp    int64        `json:"timestamp"`
+}
+
+type Resultdetail struct {
+	GuestIntroduceType string `json:"guestIntroduceType"` // 嘉宾类型,嘉宾类型(0-列表,1-图片)
+	GuestPersonList    []嘉宾列表 `json:"guestPersonList"`    // 嘉宾列表,适用列表类型
+	GuestPicURL        string `json:"guestPicUrl"`        // 嘉宾图片链接,适用图片类型
+}
+
+type 嘉宾列表 struct {
+	CompanyName        string  `json:"companyName"`        // 公司
+	HeadPortraitURL    string  `json:"headPortraitUrl"`    // 头像
+	ID                 string  `json:"id"`                 // 嘉宾主键id
+	JobName            string  `json:"jobName"`            // 职务
+	PersonIntroduction *string `json:"personIntroduction"` // 嘉宾介绍
+	PersonName         string  `json:"personName"`         // 姓名
+}
+
+type ApifoxModaluser struct {
+	ErrorCode interface{}  `json:"errorCode"`
+	ErrorMsg  interface{}  `json:"errorMsg"`
+	Result    []Resultuser `json:"result"`
+	Success   bool         `json:"success"`
+	Timestamp int64        `json:"timestamp"`
+}
+
+type Resultuser struct {
+	DeviceType      *int64  `json:"deviceType"`                // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序
+	Duration        *string `json:"duration"`                  // 参会时长
+	EndTime         string  `json:"endTime"`                   // 最后退会时间
+	ID              string  `json:"id,omitempty"`              // 主键id
+	PersonTelephone string  `json:"personTelephone,omitempty"` // 用户手机号
+	StartTime       string  `json:"startTime"`                 // 最早入会时间
+	Status          string  `json:"status"`                    // 状态,D表示被删除
+	UserID          string  `json:"userId,omitempty"`          // 用户id
+}
+
+type ApifoxModalUserTgc struct {
+	Result  结果Map `json:"result"`  // 结果Map
+	Success bool  `json:"success"` // 成功标识,可作为请求是否成功标识
+}
+
+// 结果Map
+type 结果Map struct {
+	Tgc    string `json:"tgc"`    // tgc,跳转H5时拼接用
+	UserID string `json:"userId"` // 用户ID
+}
+
+type ApifoxModalSingUpClass struct {
+	ErrorCode *string   `json:"errorCode"` // 错误码,001:活动不存在;002:该活动不支持此渠道报名;003:该手机号或邮箱已经被其他账号提交报名;004:不在报名时间;005:报名人数已满
+	ErrorMsg  *string   `json:"errorMsg"`  // 错误信息
+	Result    SingUpMap `json:"result"`    // 结果Map,成功
+	Success   bool      `json:"success"`   // 成功标识,true:成功;false:失败。可作为判断报名是否成功的标识
+	Timestamp float64   `json:"timestamp"` // 时间戳
+}
+
+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"` // 时间戳
+}

+ 20 - 0
models/yidong_activity_meeting_api_log.go

@@ -0,0 +1,20 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxYidongActivityMeetingApiLog struct {
+	Id               int       `orm:"column(id);pk"`
+	Data             string    `description:"返回结果数据"`
+	YidongActivityId string    `description:"易董活动ID"`
+	CreateTime       time.Time `description:"本地创建时间"`
+}
+
+//新增
+func AddCygxYidongActivityMeetingApiLog(item *CygxYidongActivityMeetingApiLog) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 72 - 9
routers/commentsRouter.go

@@ -82,7 +82,7 @@ func init() {
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
             Method: "LabelList",
-            Router: `/labelList`,
+            Router: `/labelList_deltest`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -99,8 +99,8 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "LabelTypeList",
-            Router: `/labelTypeList`,
+            Method: "LabelTypeListPc",
+            Router: `/labelTypeListPc_deltest`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -108,8 +108,8 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "LabelTypeListPc",
-            Router: `/labelTypeListPc`,
+            Method: "LabelTypeListV5",
+            Router: `/labelTypeListV5`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -117,8 +117,8 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "LabelTypeListV5",
-            Router: `/labelTypeListV5`,
+            Method: "LabelTypeListV6Pc",
+            Router: `/labelTypeListV6Pc`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -126,8 +126,8 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "LabelTypeListV6Pc",
-            Router: `/labelTypeListV6Pc`,
+            Method: "LabelTypeList",
+            Router: `/labelTypeList_deltest`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -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",
@@ -448,6 +457,60 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "CreateUserInfo",
+            Router: `/get/activity/createUserInfo`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/get/activity/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "Ativitylist",
+            Router: `/get/activity/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "UserList",
+            Router: `/get/activity/userList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "UserSingnUp",
+            Router: `/get/activity/userSingnUp`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
+        beego.ControllerComments{
+            Method: "GetToken",
+            Router: `/get_token`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ChartController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ChartController"],
         beego.ControllerComments{
             Method: "ChartCollect",

+ 5 - 0
routers/router.go

@@ -114,6 +114,11 @@ func init() {
 				&controllers.ReportBillboardController{},
 			),
 		),
+		web.NSNamespace("/yidong",
+			web.NSInclude(
+				&controllers.BaseYidongController{},
+			),
+		),
 		web.NSNamespace("/htgj",
 			web.NSInclude(
 				&controllers.BaseHtgjController{},

+ 166 - 18
services/activity.go

@@ -427,7 +427,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 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
@@ -461,7 +463,7 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	var condition string
 	var conditionAdmin string
 	var sqlExport string // 专家权限处理
-	permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionNameStr + `)`
+	permissionSqlStr = `  AND art.chart_permission_name  IN (` + permissionNameStr + `)`
 	sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
 	if userType == 2 {
 		sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
@@ -471,10 +473,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 {
@@ -492,6 +496,11 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	if len(chartPermissionIds) > 0 {
 		condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
 	}
+	//如果是PC的,则不看易董的
+	if source == 1 {
+		condition += ` AND art.yidong_activity_id = '' `
+	}
+
 	var conditionOr string
 	if whichDay != "" {
 		var startDate string
@@ -509,19 +518,25 @@ 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  `
+	condition += ` AND art.visible_range != 1  AND art.publish_status = 1 `
 
 	if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
 		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
@@ -542,6 +557,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 {
@@ -735,7 +751,7 @@ func LabelStr(label string) (labelNew string) {
 }
 
 //5.3版本活动标签字符串处理
-func LabelStrV5(label string, isShowSubjectName int) (labelNew string) {
+func LabelStrV5(label string, isShowSubjectName int, temporaryLabel string) (labelNew string) {
 	slicebr := strings.Split(label, "-")
 	if len(slicebr) > 1 {
 		if isShowSubjectName == 1 {
@@ -746,6 +762,9 @@ func LabelStrV5(label string, isShowSubjectName int) (labelNew string) {
 	} else {
 		labelNew = label
 	}
+	if temporaryLabel != "" {
+		labelNew = temporaryLabel
+	}
 	return labelNew
 }
 
@@ -1125,6 +1144,21 @@ func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAp
 	return
 }
 
+//判断预约纪要按钮是否显示
+func IsShowAppointmentByactivityInfo(item *models.ActivityDetail, chartPermissionName string) (isShowAppointment bool) {
+	activityTypeId := item.ActivityTypeId
+	if activityTypeId == 1 || activityTypeId == 3 || activityTypeId == 4 {
+		isShowAppointment = true
+	}
+	if activityTypeId == 5 && chartPermissionName == "医药" {
+		isShowAppointment = true
+	}
+	if activityTypeId == 2 && item.IsLimitPeople == 0 {
+		isShowAppointment = true
+	}
+	return
+}
+
 //用户报告操作行为,模板消息推送 (先放在活动模块下,避免代码冲突)
 func ArticleUserRemind(user *models.WxUserItem, articleDetail *models.ArticleDetail, source int) (err error) {
 	defer func() {
@@ -1277,10 +1311,124 @@ func DoActivityOnenIdWxTemplateMsg(cont context.Context) (err error) {
 		return err
 	}
 	first := "近期所有行业活动预告,欢迎参与"
-	keyword1 := "--"
-	keyword2 := "--"
+	keyword1 := "下周活动预告"
+	keyword2 := "已发布"
 	keyword3 := ""
 	keyword4 := "点击查看下周活动列表"
 	SendActivityOnenIdWxTemplateMsg(first, keyword1, keyword2, keyword3, keyword4, openidPowerList)
 	return
 }
+
+func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.ActivityDetail) {
+	articleDetail = item
+	//IsShowAppointment       bool                       `description:"是否展示预约纪要"`
+	//IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
+	//IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
+	//IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
+	//IsShowSignup            bool                       `description:"是否展示我要报名"`
+
+	//如果后台在添加活的时候,关联的报告类型不隐藏预约纪要按钮,而且满足以下展示预约纪要按钮类型就展示
+	//if articleDetail.IsHideAppointment == 0 {
+	//	articleDetail.IsShowAppointment = IsShowAppointmentByactivityInfo(articleDetail, articleDetail.ChartPermissionName)
+	//}
+	articleDetail.IsShowAppointment = false
+	//易董的操作按钮都隐藏
+	if articleDetail.YidongActivityId != "" {
+		articleDetail.IsShowSignup = false
+		return
+	}
+	//新的是否展示规则
+	if articleDetail.IsCanAppointmentMinutes == 1 {
+		articleDetail.IsShowAppointment = true
+	} else {
+		articleDetail.IsShowAppointment = false
+	}
+
+	//专家电话会 1
+	if articleDetail.ActivityTypeId == 1 {
+		articleDetail.IsShowOutboundCall = true
+		if articleDetail.LimitPeopleNum == 0 {
+			articleDetail.IsShowMeetingReminder = true
+			articleDetail.IsShowHelpSsk = true
+		}
+	}
+
+	//分析师电话会 2
+	if articleDetail.ActivityTypeId == 2 {
+		articleDetail.IsShowOutboundCall = true
+		if articleDetail.LimitPeopleNum == 0 {
+			articleDetail.IsShowMeetingReminder = true
+		}
+	}
+
+	//公司调研电话会 3
+	if articleDetail.ActivityTypeId == 3 {
+		if articleDetail.LimitPeopleNum == 0 {
+			articleDetail.IsShowMeetingReminder = true
+			articleDetail.IsShowOutboundCall = true
+		} else {
+			articleDetail.IsShowSignup = true
+		}
+	}
+
+	//公司线下调研 4
+	if articleDetail.ActivityTypeId == 4 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//专家线下沙龙 5
+	if articleDetail.ActivityTypeId == 5 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//分析师线下沙龙 6
+	if articleDetail.ActivityTypeId == 6 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//分析师电话会(C类) 7
+	if articleDetail.ActivityTypeId == 7 {
+		articleDetail.IsShowSignup = true
+	}
+
+	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)
+		}
+	}
+}

+ 69 - 25
services/article.go

@@ -13,6 +13,7 @@ import (
 	"strconv"
 	"strings"
 	"time"
+	"unicode/utf8"
 )
 
 func GetReportContentSub(content string) (contentSub string, err error) {
@@ -57,16 +58,49 @@ 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
+
+}
+
 //解析文章内容
 func GetArticleAll() {
 	var err error
@@ -637,6 +671,11 @@ func GetArticleListByApi(cont context.Context) (err error) {
 	return
 }
 
+//func init() {
+//
+//	HandleArticleListByApi(7214)
+//}
+
 //处理同步过来的文章
 func HandleArticleListByApi(artcleId int) (err error) {
 	defer func() {
@@ -718,8 +757,9 @@ func HandleArticleListByApi(artcleId int) (err error) {
 		item.CreateDate = articleResult.CreateDate
 		item.PublishDate = articleResult.PublishDate.Add(time.Hour * 8)
 		item.PublishStatus = 1
-		item.Body = articleResult.Content.Body
+		item.Body = articleResult.Corpus.Corpus
 		item.Abstract = articleResult.Content.Abstract
+		item.Annotation = articleResult.Content.Annotation
 		item.CategoryName = articleResult.Industry.Name
 		item.CategoryId = exitMap[articleResult.SeriesId]
 		item.SubCategoryName = articleResult.Series.Name
@@ -739,7 +779,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 		listAuthor = append(listAuthor, itemAuthor)
 	} else {
 		// 如果这篇文章没有发布,那么就不作处理。
-		err = models.UpdateArticlePublish(0, artcleId)
+		err = models.UpdateArticlePublish(artcleId, 0)
 		if err != nil {
 			fmt.Println("UpdateArticlePublish Err:", err.Error())
 			return err
@@ -885,6 +925,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			updateParams["FileLink"] = v.File
 			updateParams["Stock"] = v.Stock
 			updateParams["FieldName"] = v.FieldName
+			updateParams["Annotation"] = v.Annotation
 			whereParam := map[string]interface{}{"article_id": v.ArticleId}
 			err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
 			if err != nil {
@@ -923,6 +964,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			item.MatchTypeName = matchTypeName
 			item.Stock = v.Stock
 			item.FieldName = v.FieldName
+			item.Annotation = v.Annotation
 			newId, err := models.AddCygxArticles(item)
 			if err != nil {
 				fmt.Println("AddCygxArticle Err:", err.Error())
@@ -1522,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)
@@ -1557,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

+ 6 - 0
services/task.go

@@ -84,6 +84,12 @@ func Task() {
 		updateCygxActivitySpecialSignupNum := task.NewTask("updateCygxActivitySpecialSignupNum", "0 25 0 * * *", UpdateCygxActivitySpecialSignupNum) //修改专项调研,用户与公司的参与数量
 		task.AddTask("updateCygxActivitySpecialSignupNum", updateCygxActivitySpecialSignupNum)
 
+		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
+		task.AddTask("getYiDongActivity", getYiDongActivity)
+
+		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */10 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
+		task.AddTask("getYiDongActivityMeeting", getYiDongActivityMeeting)
+
 	}
 	if utils.RunMode != "release" {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章

+ 684 - 0
services/yidong.go

@@ -0,0 +1,684 @@
+package services
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+	"time"
+)
+
+//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int) {
+	mapIndustrySwName := map[string]int{
+		"家用电器": utils.XIAO_FEI_ID,
+		"纺织服饰": utils.XIAO_FEI_ID,
+		"休闲服务": utils.XIAO_FEI_ID,
+		"食品饮料": utils.XIAO_FEI_ID,
+		"美容护理": utils.XIAO_FEI_ID,
+		//消费
+
+		"汽车":   utils.ZHI_ZAO_ID,
+		"机械设备": utils.ZHI_ZAO_ID,
+		"电力设备": utils.ZHI_ZAO_ID,
+		//智造
+
+		"电子":  utils.KE_JI_ID,
+		"计算机": utils.KE_JI_ID,
+		"通信":  utils.KE_JI_ID,
+		//科技
+
+		"医药生物": utils.YI_YAO_ID,
+		//医药
+
+		"策略": utils.CE_LUE_ID,
+		//策略
+
+		"非银金融": utils.CHART_PERMISSION_ID_YANXUAN,
+		"建筑装饰": utils.CHART_PERMISSION_ID_YANXUAN,
+		"基础化工": utils.CHART_PERMISSION_ID_YANXUAN,
+		"农林牧渔": utils.CHART_PERMISSION_ID_YANXUAN,
+		"传媒":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"公用事业": utils.CHART_PERMISSION_ID_YANXUAN,
+		"建筑材料": utils.CHART_PERMISSION_ID_YANXUAN,
+		"房地产":  utils.CHART_PERMISSION_ID_YANXUAN,
+		"采掘":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"轻工制造": utils.CHART_PERMISSION_ID_YANXUAN,
+		"钢铁":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"交通运输": utils.CHART_PERMISSION_ID_YANXUAN,
+		"国防军工": utils.CHART_PERMISSION_ID_YANXUAN,
+		"银行":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"有色金属": utils.CHART_PERMISSION_ID_YANXUAN,
+		"综合":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"商业贸易": utils.CHART_PERMISSION_ID_YANXUAN,
+
+		"宏观":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"金融工程": utils.CHART_PERMISSION_ID_YANXUAN,
+		"商贸零售": utils.CHART_PERMISSION_ID_YANXUAN,
+		"社会服务": utils.CHART_PERMISSION_ID_YANXUAN,
+		"煤炭":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"石油石化": utils.CHART_PERMISSION_ID_YANXUAN,
+		"环保":   utils.CHART_PERMISSION_ID_YANXUAN,
+		//研选
+	}
+	chartPermissionId = mapIndustrySwName[industrySwName]
+	return
+}
+
+//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName string) {
+	mapIndustrySwName := map[string]string{
+		"家用电器": utils.XIAO_FEI_NAME,
+		"纺织服饰": utils.XIAO_FEI_NAME,
+		"休闲服务": utils.XIAO_FEI_NAME,
+		"食品饮料": utils.XIAO_FEI_NAME,
+		"美容护理": utils.XIAO_FEI_NAME,
+		//消费
+
+		"汽车":   utils.ZHI_ZAO_NAME,
+		"机械设备": utils.ZHI_ZAO_NAME,
+		"电力设备": utils.ZHI_ZAO_NAME,
+		//智造
+
+		"电子":  utils.KE_JI_NAME,
+		"计算机": utils.KE_JI_NAME,
+		"通信":  utils.KE_JI_NAME,
+		//科技
+
+		"医药生物": utils.YI_YAO_NAME,
+		//医药
+
+		"策略": utils.CE_LUE_NAME,
+		//策略
+
+		"非银金融": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"建筑装饰": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"基础化工": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"农林牧渔": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"传媒":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"公用事业": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"建筑材料": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"房地产":  utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"采掘":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"轻工制造": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"钢铁":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"交通运输": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"国防军工": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"银行":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"有色金属": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"综合":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"商业贸易": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+
+		"宏观":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"金融工程": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"商贸零售": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"社会服务": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"煤炭":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"石油石化": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"环保":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		//研选
+	}
+	chartPermissionName = mapIndustrySwName[industrySwName]
+	return
+}
+
+//获取易董token
+func GetYiDongToken() (token string, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	cacheKey := utils.YD_TOKEN
+	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
+	if ttlTime > 0 {
+		token, _ = utils.Rc.RedisString(cacheKey)
+	}
+	if token == "" {
+		url := utils.YiDongZhengTongYunUrl + "oauth/token?grant_type=client_credentials&response_type=token&client_id=" + utils.YiDongZhengTongYunAppid + "&client_secret=" + utils.YiDongZhengTongYunSecret
+		method := "GET"
+		client := &http.Client{}
+		req, errReq := http.NewRequest(method, url, nil)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		res, errReq := client.Do(req)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		defer res.Body.Close()
+
+		type Ydtoklen struct {
+			Success     bool   `json:"success"`
+			ExpiresIn   int    `json:"expires_in"`
+			AccessToken string `json:"access_token"`
+		}
+		var ydtoklen Ydtoklen
+		body, errReq := ioutil.ReadAll(res.Body)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		errReq = json.Unmarshal(body, &ydtoklen)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		token = ydtoklen.AccessToken
+		utils.Rc.Put(cacheKey, ydtoklen.AccessToken, time.Second*7000)
+	}
+	return
+}
+
+//获取易董活动列表
+func GetYiDongActivity(cont context.Context) (err error) {
+	//func GetYiDongActivity() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("获取易董活动列表失败:"+err.Error(), 2)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	payload := strings.NewReader(`{
+    "meetingStatus": "0"
+}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModal
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(models.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go models.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	OldActYIdongList, err := models.GetActivityListByYiDong()
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(string(err.Error()))
+		return
+	}
+	mapOldYiDong := make(map[string]string)
+	mapOldYiDongBody := make(map[string]string)
+	for _, v := range OldActYIdongList {
+		mapOldYiDong[v.YidongActivityId] = v.YidongActivityId
+		mapOldYiDongBody[v.YidongActivityId] = fmt.Sprint(v.ActivityName, v.Label, v.ChartPermissionId, v.ActivityTime, v.YidongActivityEndTime, v.DistinguishedGuest)
+	}
+	var itemsAdd []*models.CygxActivity
+	if len(ApifoxModal.Result) > 0 {
+		actList := ApifoxModal.Result
+		for _, v := range actList {
+			//同步有效性 1有效,0失效
+			if v.SyncFlag == "0" {
+				continue
+			}
+			var item = new(models.CygxActivity)
+			item.YidongActivityId = v.ID
+			item.ActivityTypeId = 3
+			item.ActivityTypeName = "公司调研电话会"
+			sliceCompanyInfo := strings.Split(v.Title, "(")
+			sliceActivityTitle := strings.Split(v.Title, ")")
+			companyInfo := sliceCompanyInfo[0]
+			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
+			item.ChartPermissionId = GetActivityTypeIdWithYiDong(v.IndustrySwName)
+			item.ChartPermissionName = GetActivityTypeNameWithYiDong(v.IndustrySwName)
+			item.ChartPermissionNames = GetActivityTypeNameWithYiDong(v.IndustrySwName)
+			item.ActivityTime = v.Start
+			item.YidongActivityEndTime = v.End
+			item.YidongSignUpStart = v.SignUpStart
+			item.YidongSignUpEnd = v.SignUpEnd
+			item.YidongActivityEndTime = v.End
+			item.ActivityTimeText = GetActivityTextTime(v.Start)
+			item.YidongActivityUrl = v.URL
+			item.ActivityJoinType = v.ActivityJoinType
+			detailYidng, err := GetYiDongActivityDetail(v.ID)
+			if err != nil {
+				return err
+			}
+			detailList := detailYidng.Resultdetail.GuestPersonList
+			for _, vdetail := range detailList {
+				item.DistinguishedGuest += vdetail.PersonName + " " + vdetail.JobName + ","
+			}
+			item.DistinguishedGuest = strings.TrimRight(item.DistinguishedGuest, ",")
+			item.Body = "<p>" + "【" + item.ActivityName + "】" + "<p>时间:" + item.ActivityTimeText + "</p>嘉宾:" + item.DistinguishedGuest + "</p>"
+			//fmt.Println(item.Body)
+			//return err
+			if mapOldYiDong[v.ID] == "" {
+				itemsAdd = append(itemsAdd, item)
+				newId, err := models.AddCygxActivity(item)
+				if err != nil {
+					fmt.Println(err)
+					utils.FileLog.Info(string(err.Error()))
+					return err
+				}
+
+				//把公司名称当做标的 对活动进行产业标的的关联
+				YidongActivityGroup(companyInfo, int(newId))
+			} else {
+				//如果内容主体有做变更,就修改内容
+				if mapOldYiDongBody[v.ID] != fmt.Sprint(item.ActivityName+"12", item.Label, item.ChartPermissionId, item.ActivityTime, item.YidongActivityEndTime, item.DistinguishedGuest) {
+					updateParams := make(map[string]interface{})
+					updateParams["ActivityName"] = item.ActivityName
+					updateParams["Body"] = item.Body
+					updateParams["Label"] = item.Label
+					//updateParams["TemporaryLabel"] = item.TemporaryLabel
+					updateParams["DistinguishedGuest"] = item.DistinguishedGuest
+					updateParams["ChartPermissionId"] = item.ChartPermissionId
+					updateParams["ChartPermissionName"] = item.ChartPermissionName
+					updateParams["ChartPermissionNames"] = item.ChartPermissionNames
+					updateParams["ActivityTime"] = item.ActivityTime
+					updateParams["YidongActivityEndTime"] = item.YidongActivityEndTime
+					updateParams["ActivityTimeText"] = item.ActivityTimeText
+					updateParams["YidongActivityUrl"] = item.YidongActivityUrl
+					updateParams["ActivityJoinType"] = item.ActivityJoinType
+					updateParams["YidongSignUpStart"] = item.YidongSignUpStart
+					updateParams["YidongSignUpEnd"] = item.YidongSignUpEnd
+					updateParams["LastUpdatedTime"] = time.Now()
+					whereParam := map[string]interface{}{"yidong_activity_id": item.YidongActivityId}
+					err = models.UpdateByExpr(models.CygxActivity{}, whereParam, updateParams)
+					if err != nil {
+						return err
+					}
+				}
+			}
+		}
+	}
+	return
+}
+
+//获取易董活动详情
+func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetail, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("获取易董活动详情失败:"+err.Error(), 2)
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowDetail?access_token=" + token
+	method := "POST"
+	payload := strings.NewReader(`{"activityId":"` + activityId + `"}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModaldetail
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(models.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go models.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	detail = ApifoxModal
+	return
+}
+
+//生成用户相关信息接口 获取用户tgc
+func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("生成用户相关信息接口 获取用户tgc失败:"+err.Error(), 2)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	url := utils.YiDongHuaWeiYunUrl + "app/hz/createUserInfo"
+	method := "POST"
+	payload := strings.NewReader(`{
+  "phone": "` + user.Mobile + `",
+  "personName": "` + user.RealName + `",
+  "companyName": "` + user.CompanyName + `",
+  "jobName": "` + user.Position + `",
+  "mobileCountryCode": "+` + user.CountryCode + `",
+  "sourceFrom": "01"
+}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModalUserTgc
+	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
+	}
+	userTgc = ApifoxModal.Result.Tgc
+	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
+	startTime := utils.StrTimeToTime(strTime)
+	week := utils.StrDateTimeToWeek(strTime)
+	timeStrYmd := startTime.Format(utils.FormatDate)
+	timeStrHmm := startTime.Format(utils.FormatTime)
+	timeYmd := utils.StrTimeToTime(timeStrYmd + " 12:00:00") //拼接当天中午12点的时间
+	var amOrPm string
+	if startTime.After(timeYmd) {
+		amOrPm = " PM"
+	} else {
+		amOrPm = " AM"
+	}
+	timeText = timeStrYmd + "(" + week + ")" + timeStrHmm + amOrPm
+	return
+}
+
+func init232() {
+	//YidongActivityGroup("美团", 1623)
+	//GetYiDongActivityMeeting()
+	//GetYiDongActivity()
+	//var timeText string
+	//strTime := "2022-08-18 12:34:00"
+	//startTime := utils.StrTimeToTime(strTime)
+	//week := utils.StrDateTimeToWeek(strTime)
+	//timeStrYmd := startTime.Format(utils.FormatDate)
+	//timeStrHmm := startTime.Format(utils.FormatTime)
+	//timeYmd := utils.StrTimeToTime(timeStrYmd + " 12:00:00") //拼接当天中午12点的时间
+	//var amOrPm string
+	//if startTime.After(timeYmd) {
+	//	amOrPm = " PM"
+	//} else {
+	//	amOrPm = " AM"
+	//}
+	//timeText = timeStrYmd + "(" + week + ")" + timeStrHmm
+	//fmt.Println(week)
+	//fmt.Println(amOrPm)
+	//fmt.Println(strTime)
+	//fmt.Println(timeText)
+}
+
+//GetYiDongActivityMeeting获取易董到会详情
+func GetYiDongActivityMeeting(cont context.Context) (err error) {
+	var condition string
+
+	startDate := time.Now().AddDate(0, 0, -2).Format(utils.FormatDateTime)
+	endDate := time.Now().Add(-time.Minute * 120).Format(utils.FormatDateTime)
+	condition += ` AND   activity_time > ` + "'" + startDate + "'"
+	condition += ` AND  activity_time < ` + "'" + endDate + "'"
+	//fmt.Println(startDate)
+	//fmt.Println(endDate)
+	artivityListYidong, err := models.GetActivityListByYidong(condition)
+	if err != nil {
+		fmt.Println("GetActivityListByYidong Err:", err.Error())
+		return err
+	}
+	//return err
+	if len(artivityListYidong) == 0 {
+		return err
+	}
+	var token string
+	token, _ = GetYiDongToken()
+
+	for _, v := range artivityListYidong {
+		defer func() {
+			if err != nil {
+				go utils.SendAlarmMsg("获取易董到会详情失败:"+err.Error(), 2)
+			}
+		}()
+
+		url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getAttendPersonList?access_token=" + token
+		method := "POST"
+		payload := strings.NewReader(`{"activityId":"` + v.YidongActivityId + `"}`)
+		client := &http.Client{}
+		req, err := http.NewRequest(method, url, payload)
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+			return err
+		}
+		req.Header.Add("Content-Type", "application/json")
+		res, err := client.Do(req)
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+			return err
+		}
+		defer res.Body.Close()
+		var ApifoxModal *models.ApifoxModaluser
+		body, err := ioutil.ReadAll(res.Body)
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+			return err
+		}
+		//utils.FileLog.Info(string(body))
+		//fmt.Println(string(body))
+		err = json.Unmarshal(body, &ApifoxModal)
+		if err != nil {
+			fmt.Println("Getres.PublicGetDate Err:", err.Error())
+			utils.FileLog.Info(err.Error())
+			return err
+		}
+
+		//跟易董返回的用户状态修改活动以提交到会状态
+		err = models.UpdateCygxActivitySubmitMeetingByYidong(v.YidongActivityId)
+		if err != nil {
+			fmt.Println("UpdateCygxActivitySubmitMeetingByYidong Err:", err.Error())
+			return err
+		}
+		if len(ApifoxModal.Result) > 0 {
+			itemlog := new(models.CygxYidongActivityMeetingApiLog)
+			itemlog.YidongActivityId = v.YidongActivityId
+			itemlog.Data = string(body)
+			itemlog.CreateTime = time.Now()
+			err = models.AddCygxYidongActivityMeetingApiLog(itemlog)
+			if err != nil {
+				fmt.Println("AddCygxYidongActivityMeetingApiLog Err:", err.Error())
+				return err
+			}
+			for _, vresult := range ApifoxModal.Result {
+				if vresult.EndTime != "" {
+					err = models.UpdateCygxActivitySignupisMeet(v.ActivityId, vresult.PersonTelephone)
+					if err != nil {
+						fmt.Println("UpdateCygxActivitySignupisMeet Err:", err.Error())
+						return err
+					}
+				}
+			}
+		}
+	}
+	return
+}
+
+//YidongActivityGroup 添加活动与产业标的的关联
+func YidongActivityGroup(subjectName string, activityId int) (err error) {
+	subjectList, err := models.GetCygxIndustrialSubjectList(subjectName)
+	if err != nil {
+		fmt.Println(err)
+		return err
+	}
+	if len(subjectList) == 0 {
+		return err
+	}
+	fmt.Println("去掉临时标签的活动", activityId)
+	err = models.UpdateActivityshowSubject(activityId)
+	if err != nil {
+		go utils.SendAlarmMsg("UpdateActivityshowSubject :根据易董推过来的匹配信息,判断临时标签是否展示失败"+err.Error(), 2)
+	}
+	var industrialActivityItems []*models.CygxIndustrialActivityGroupManagement
+	var subjectActivityItems []*models.CygxIndustrialActivityGroupSubject
+	mapSubjectName := make(map[string]string)
+	for _, v := range subjectList {
+		industrialActivityItem := new(models.CygxIndustrialActivityGroupManagement)
+		subjectActivityItem := new(models.CygxIndustrialActivityGroupSubject)
+
+		industrialActivityItem.ActivityId = activityId
+		industrialActivityItem.IndustrialManagementId = v.IndustrialManagementId
+		industrialActivityItem.Source = 1
+		industrialActivityItem.CreateTime = time.Now()
+		industrialActivityItems = append(industrialActivityItems, industrialActivityItem)
+
+		subjectActivityItem.ActivityId = activityId
+		subjectActivityItem.IndustrialSubjectId = v.IndustrialSubjectId
+		subjectActivityItem.Source = 1
+		subjectActivityItem.CreateTime = time.Now()
+
+		if mapSubjectName[v.SubjectName] == "" {
+			subjectActivityItems = append(subjectActivityItems, subjectActivityItem)
+			mapSubjectName[v.SubjectName] = v.SubjectName
+		}
+	}
+	err = models.AddCygxActiuvityGroupMulti(industrialActivityItems, subjectActivityItems)
+	if err != nil {
+		go utils.SendAlarmMsg("AddCygxActiuvityGroupMulti :批量添加易董活动关联的活动标签失败"+err.Error(), 2)
+	}
+	return
+}

+ 26 - 0
utils/common.go

@@ -706,3 +706,29 @@ func GetLocalIP() (ip string, err error) {
 	}
 	return
 }
+
+//字符串类型时间转周几
+func StrDateTimeToWeek(strTime string) string {
+	var WeekDayMap = map[string]string{
+		"Monday":    "周一",
+		"Tuesday":   "周二",
+		"Wednesday": "周三",
+		"Thursday":  "周四",
+		"Friday":    "周五",
+		"Saturday":  "周六",
+		"Sunday":    "周日",
+	}
+	var ctime = StrTimeToTime(strTime).Format("2006-01-02")
+	startday, _ := time.Parse("2006-01-02", ctime)
+	staweek_int := startday.Weekday().String()
+	return WeekDayMap[staweek_int]
+}
+
+//ReplaceSpaceAndWrap 去除空格跟换行
+func ReplaceSpaceAndWrap(str string) string {
+	// 去除空格
+	str = strings.Replace(str, " ", "", -1)
+	// 去除换行符
+	str = strings.Replace(str, "\n", "", -1)
+	return str
+}

+ 31 - 0
utils/config.go

@@ -74,6 +74,11 @@ var (
 	ActSendMsgMobile          string //活动带问发送模板消息接收者的手机号
 	StrategyPlatform          string //策略品台跳转链接地址
 	ArticleTaskClassMobile    string //策略平台报告自动归类消息通知对象
+	YiDongZhengTongYunUrl     string //易董 证通云请求域名
+	YiDongZhengTongYunAppid   string //易董 证通云请求appid
+	YiDongZhengTongYunSecret  string //易董 证通云请求secret
+	YiDongHuaWeiYunUrl        string //易董 华为云请求域名
+	YiDonggetOriginalLink     string //易董 短连接转为长链接
 )
 
 func init() {
@@ -216,8 +221,34 @@ func init() {
 		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"   ////预约取消提醒(小助手)
 		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"          //产品运行报告通知-模板ID(小助手)
 	}
+
+	//易董开放api配置
+	YiDongApiConfig()
 }
 
+// YiDongApiConfig 易董开放api配置
+func YiDongApiConfig() {
+	if RunMode == "release" {
+		YiDongZhengTongYunUrl = "https://services.valueonline.cn/"
+		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="
+	}
+}
+
+//
+//YiDongZhengTongYunUrl     string //易董 证通云请求域名
+//YiDongZhengTongYunAppid   string //易董 证通云请求appid
+//YiDongZhengTongYunSecret  string //易董 证通云请求secret
+//YiDongHuaWeiYunUrl        string //易董 华为云请求域名
+
 //http://webapi.brilliantstart.cn/api/
 //http://webapi.brilliantstart.cn/swagger/
 //http://139.196.122.219:8603/swagger/

+ 15 - 0
utils/constants.go

@@ -98,3 +98,18 @@ const (
 const (
 	YAN_XUAN__EXPLAIN = "买方研选内容实行阶段,限时免费。也欢迎您向我们提宝贵建议。"
 )
+
+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"
+)