xingzai před 2 roky
rodič
revize
1f1d45c3bb

+ 88 - 281
controllers/activity.go

@@ -159,7 +159,7 @@ func (this *ActivityController) ActivityListNew() {
 	var condition string
 	var pars []interface{}
 	//var activityList []*models.ActivityDetail
-	mapDingActivityId := make(map[int]int)
+	//mapDingActivityId := make(map[int]int)
 	condition = ""
 	//活动可见限制
 	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord, playBack, whichTime)
@@ -275,7 +275,7 @@ func (this *ActivityController) ActivityListNew() {
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.GetCygxActivityListRep)
-	var activityList []*models.ActivityDetail
+	var activityList []*models.ActivityListResp
 	resp.Label = label
 	if activityTypeId != "" {
 		activityTypeIdint, err := strconv.Atoi(activityTypeId)
@@ -306,12 +306,12 @@ func (this *ActivityController) ActivityListNew() {
 		return
 	}
 
-	for _, v := range list {
-		if mapDingActivityId[v.ActivityId] == 0 {
-			activityList = append(activityList, v)
-		}
-	}
-	for k, v := range activityList {
+	//for _, v := range list {
+	//	if mapDingActivityId[v.ActivityId] == 0 {
+	//		activityList = append(activityList, v)
+	//	}
+	//}
+	for k, v := range list {
 		if mapActivityVoice[v.ActivityId] != nil {
 			list[k].FileType = 1
 			list[k].AudioLink = true
@@ -367,60 +367,8 @@ func (this *ActivityController) ActivityListNew() {
 	//	go services.AddActivitykeyWordSearch(keyWord, user)
 	//}
 	//预处理返给前端的字段
-	for _, v := range activityList {
-		resp.List = append(resp.List, &models.ActivityListResp{
-			ActivityId:            v.ActivityId,
-			ActivityTypeId:        v.ActivityTypeId,
-			ActivityTypeName:      v.ActivityTypeName,
-			ChartPermissionId:     v.ChartPermissionId,
-			ChartPermissionName:   v.ChartPermissionName,
-			IsLimitPeople:         v.IsLimitPeople,
-			LimitPeopleNum:        v.LimitPeopleNum,
-			LastUpdatedTime:       v.LastUpdatedTime,
-			ActivityTime:          v.ActivityTime,
-			ActivityTimeText:      v.ActivityTimeText,
-			DistinguishedGuest:    v.DistinguishedGuest,
-			Host:                  v.Host,
-			Speaker:               v.Speaker,
-			MainlandTell:          v.MainlandTell,
-			HongKongTell:          v.HongKongTell,
-			TaiwanTell:            v.TaiwanTell,
-			AmericaTell:           v.AmericaTell,
-			ParticipationCode:     v.ParticipationCode,
-			Theme:                 v.Theme,
-			Expert:                v.Expert,
-			ActivityName:          v.ActivityName,
-			OnlineParticipation:   v.OnlineParticipation,
-			ReportLink:            v.ReportLink,
-			City:                  v.City,
-			Address:               v.Address,
-			Highlights:            v.Highlights,
-			Remarks:               v.Remarks,
-			IsSignup:              v.IsSignup,
-			IsAppointment:         v.IsAppointment,
-			ActiveState:           v.ActiveState,
-			IsShowSustainable:     v.IsShowSustainable,
-			Description:           v.Description,
-			IsResearch:            v.IsResearch,
-			IsHideAppointment:     v.IsHideAppointment,
-			IsCClassMeeting:       v.IsCClassMeeting,
-			Label:                 v.Label,
-			ImgUrl:                v.ImgUrl,
-			ImgUrlText:            v.ImgUrlText,
-			ActivityType:          v.ActivityType,
-			IsShowOutboundCall:    v.IsShowOutboundCall,
-			IsShowMeetingReminder: v.IsShowMeetingReminder,
-			IsShowHelpSsk:         v.IsShowHelpSsk,
-			IsShowSignup:          v.IsShowSignup,
-			IsShowAppointment:     v.IsShowAppointment,
-			IsShowDetails:         v.IsShowDetails,
-			AudioLink:             v.AudioLink,
-			VoiceList:             v.VoiceList,
-			VideoDetail:           v.VideoDetail,
-			FileType:              v.FileType,
-			SourceType:            v.SourceType,
-		})
-	}
+	resp.List = activityList
+	fmt.Println(len(resp.List))
 	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
@@ -452,10 +400,7 @@ func (this *ActivityController) Detail() {
 		br.Msg = "请输入活动ID"
 		return
 	}
-
 	resp := new(models.CygxActivityResp)
-	hasPermission := 0
-
 	activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取信息失败"
@@ -470,231 +415,88 @@ func (this *ActivityController) Detail() {
 	if activityInfo.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
 		activityInfo.IsCClassMeeting = true
 	}
-	//处理冻结客户,流失客户的弹窗提示
-
-	applyCount, err := models.GetApplyRecordCount(uid)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
-		return
-	}
-	//获取FICC销售信息 如果是FICC的客户类型,则默认他申请过
-	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		return
-	}
-	if user.CompanyId <= 1 {
-
-	} else {
-		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
-			return
-		}
-		if companyPermission == "" {
-			if applyCount > 0 {
-				hasPermission = 4
-			} else {
-				if sellerItem != nil {
-					hasPermission = 5
-				} else {
-					//获取权益销售信息 如果是FICC的客户类型,则默认他申请过
-					sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-					if err != nil && err.Error() != utils.ErrNoRow() {
-						br.Msg = "获取信息失败"
-						br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-						return
-					}
-					if sellerItemQy != nil {
-						hasPermission = 2
-						resp.SellerMobile = sellerItemQy.Mobile
-						resp.SellerName = sellerItemQy.RealName
-					} else {
-						hasPermission = 3
-					}
-				}
-			}
-			resp.HasPermission = hasPermission
-			resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
-			br.Ret = 200
-			br.Success = true
-			br.Msg = "获取成功"
-			br.Data = resp
-			return
-		}
-		companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
-		if err != nil {
-			br.Msg = "获取信息失败!"
-			br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
-			return
-		}
-		if companyDetail == nil {
-			br.Msg = "获取信息失败!"
-			br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId)
-			return
-		}
-	}
-	userType, permissionStr, err := services.GetUserType(user.CompanyId)
+	havePower, err := services.GetActivityDetailUserPower(user, activityInfo)
 	if err != nil {
 		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+		br.ErrMsg = "校验用户权限失败,Err:" + err.Error()
 		return
 	}
-	if activityInfo.IsLimitPeople > 0 {
-		noPower, err := services.GetShareNoPowe(activityInfo, permissionStr, userType, user)
+	if havePower {
+		resp.HasPermission = 1
+		detailResp := services.ActivityButtonShow(activityInfo)
+		detailResp, err = services.ActivityDetaailShow(detailResp)
 		if err != nil {
 			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			br.ErrMsg = "ActivityDetaailShow Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 			return
 		}
-
-		//获取用户的产业规模,判断是否允许可见
-		companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
+		//处理活动关联的产业
+		industrialList, err := models.GetIndustrialActivityGroupManagementList(activityId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 			return
 		}
-		if companyProduct != nil {
-			if companyProduct.Scale != "" {
-				if strings.Count(activityInfo.Scale, companyProduct.Scale) > 0 {
-					noPower = false
+		industrialList = make([]*models.IndustrialManagementRep, 0)
+		if activityInfo.TemporaryLabel != "" {
+			item := new(models.IndustrialManagementRep)
+			item.IndustryName = activityInfo.Label
+			industrialList = append(industrialList, item)
+		} else {
+			industryIds := make([]int, 0)
+			var industrialManagementId string
+			for k, v := range industrialList {
+				if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+					industrialList[k].IsResearch = true
 				}
+				industryIds = append(industryIds, v.IndustrialManagementId)
+				industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
 			}
-		}
-		if noPower {
-			br.Msg = "您暂无查看该活动权限"
-			br.ErrMsg = "被分享客户不可见,获取信息失败"
-			return
-		}
-	}
-
-	if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, "研选") {
-		br.Msg = "您暂无查看该活动权限"
-		br.ErrMsg = "被分享客户不可见,永续客户无法查看研选行业"
-		return
-	}
 
-	detail, errDetail := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId)
-	if errDetail != nil {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + errDetail.Error()
-		return
-	}
-	//if activityInfo.IsSignup > 0 {
-	//	detail, errDetail := models.GetActivitySignupDetail(activityId, uid)
-	//	if errDetail != nil {
-	//		br.Msg = "获取信息失败"
-	//		br.ErrMsg = "获取信息失败,Err:" + errDetail.Error()
-	//		return
-	//	}
-	//	activityInfo.SignupType = detail.SignupType
-	//}
-	activityInfo.ShowType = detail.ShowType
-
-	//判断是否已经申请过
-
-	if user.CompanyId > 1 {
-		permissionStr, err := models.GetCompanyPermissionByUser(user.CompanyId)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取客户权限信息失败,Err:" + err.Error()
-			return
-		}
-		companyItem, err := models.GetCompanyDetailById(user.CompanyId)
-		fmt.Println(companyItem)
-		fmt.Println(permissionStr)
-		//冻结客户
-		if err != nil {
-			if err.Error() == utils.ErrNoRow() {
-				if applyCount > 0 {
-					hasPermission = 4
-				} else {
-					if sellerItem != nil {
-						hasPermission = 5
-					} else {
-						//获取权益销售信息 如果是FICC的客户类型,则默认他申请过
-						sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-						if err != nil && err.Error() != utils.ErrNoRow() {
-							br.Msg = "获取信息失败"
-							br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-							return
-						}
-						if sellerItemQy != nil {
-							hasPermission = 2
-							resp.SellerMobile = sellerItemQy.Mobile
-							resp.SellerName = sellerItemQy.RealName
-						} else {
-							hasPermission = 3
-						}
-					}
-				}
-				resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
-				br.Ret = 200
-				br.Success = true
-				br.Msg = "获取成功"
-				br.Data = resp
-				return
-			} else {
+			// 查研观向7.4-行业新标签
+			industryNewMap, e := services.GetIndustryNewLabelMap(industryIds)
+			if e != nil {
 				br.Msg = "获取信息失败"
-				br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error()
+				br.ErrMsg = "获取产业新标签失败, Err: " + e.Error()
 				return
 			}
-		}
-
-	} else { //潜在客户
-		if applyCount > 0 {
-			hasPermission = 4
-		} else {
-			if sellerItem != nil {
-				hasPermission = 5
-			} else {
-				hasPermission = 3
-			}
-		}
-		resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
-	}
-	if hasPermission == 1 {
-		//是否展示限免标签
-		if services.GetShowSustainable() && strings.Contains(activityInfo.ChartPermissionName, "研选") {
-			activityInfo.IsShowSustainable = true
-		}
-		configCode := "description_of_research"
-		detail, err := models.GetConfigByCode(configCode)
-		if err != nil {
-			br.Msg = "获取数据失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
-		}
-		activityInfo.Description = detail.ConfigValue
-		if activityInfo.SignupNum > activityInfo.LimitPeopleNum {
-			activityInfo.SignupNum = activityInfo.LimitPeopleNum
-		}
-		if activityInfo.ChartPermissionNames != "" {
-			activityInfo.ChartPermissionName = activityInfo.ChartPermissionNames
-		}
-
-		if activityInfo.ReportLink != "" {
-			artList := strings.Split(activityInfo.ReportLink, "{|}")
-			if len(artList) > 0 {
-				for _, v := range artList {
-					artitem := new(models.ActivityArticleResp)
-					artitem.ReportLink = v
-					artIdSlice := strings.Split(v, "/")
-					if len(artIdSlice) > 0 {
-						articleId, _ := strconv.Atoi(artIdSlice[len(artIdSlice)-1])
-						artitem.ArticleId = articleId
+			//判断产业下是否有关联的报告,并处理是否跳转
+			industrialManagementId = strings.TrimRight(industrialManagementId, ",")
+			if industrialManagementId != "" {
+				var condition string
+				condition = ` AND m.industrial_management_id IN (` + industrialManagementId + `)`
+				condition += ` AND a.article_id < ` + strconv.Itoa(utils.SummaryArticleId)
+				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].IsResearch {
+						industrialList[k].IsJump = true
 					}
-					activityInfo.ArticleList = append(activityInfo.ArticleList, artitem)
+					industrialList[k].IndustryNewLabel = industryNewMap[v.IndustrialManagementId]
 				}
 			}
-		} else {
-			activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
 		}
-		activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
+		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
+			}
+			detailResp.YidongActivityUrl = yidongLongLink + "%26source=11%26fromHz=true%26tgc=" + ydTgc
+		}
+		detailResp.Listndustrial = industrialList
 
 		//处理音频回放
 		var mapActivityId []int
@@ -706,11 +508,10 @@ func (this *ActivityController) Detail() {
 			return
 		}
 		if mapActivityVoice[activityId] != nil {
-			activityInfo.FileType = 1
-			activityInfo.AudioLink = true
-			activityInfo.VoiceList = mapActivityVoice[activityId]
+			detailResp.FileType = 1
+			detailResp.AudioLink = true
+			detailResp.VoiceDetail = mapActivityVoice[activityId]
 		}
-
 		//处理视频回放
 		mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
 		if err != nil {
@@ -718,20 +519,26 @@ func (this *ActivityController) Detail() {
 			br.ErrMsg = "GetActivityVideoResp,Err:" + err.Error()
 			return
 		}
+
 		if mapActivityVideo[activityId] != nil {
-			activityInfo.FileType = 2
-			activityInfo.AudioLink = true
-			activityInfo.VideoDetail = mapActivityVideo[activityId]
+			detailResp.FileType = 2
+			detailResp.AudioLink = true
+			detailResp.VideoDetail = mapActivityVideo[activityId]
 		}
 
-		//8.5 买方研选的活动去掉限免标签
-		if strings.Contains(activityInfo.ChartPermissionName, "研选") {
-			activityInfo.IsShowSustainable = false
+		resp.Detail = detailResp
+	} else {
+		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermission(user)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+			return
 		}
-		//处理按钮是否展示问题
-		resp.Detail = services.ActivityButtonShow(activityInfo)
+		resp.PopupMsg = popupMsg
+		resp.HasPermission = hasPermission
+		resp.SellerName = sellerName
+		resp.SellerMobile = sellerMobile
 	}
-	resp.HasPermission = hasPermission
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 56 - 51
models/activity.go

@@ -141,56 +141,61 @@ type ActivityDetail struct {
 
 //活动详情
 type ActivityListResp struct {
-	ActivityId            int                        `description:"活动ID "`
-	ActivityTypeId        int                        `description:"活动类型id"`
-	ActivityTypeName      string                     `description:"活动类型名称"`
-	ChartPermissionId     int                        `description:"行业id"`
-	ChartPermissionName   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:"备注"`
-	IsSignup              int                        `description:"是否已报名 1是 ,0 否"`
-	IsAppointment         int                        `description:"是否已预约纪要 1是 ,0 否"`
-	ActiveState           string                     `description:"活动进行状态 未开始:1、进行中2、已结束3"`
-	IsShowSustainable     bool                       `description:"是否展示限免标签"`
-	Description           string                     `description:"研选内容说明"`
-	IsResearch            bool                       `description:"是否属于研选"`
-	IsHideAppointment     int                        `description:"是否隐藏预约纪要按钮  1是,0 否"`
-	IsCClassMeeting       bool                       `description:"是否是c类电话会"`
-	Label                 string                     `description:"主题标签"`
-	ImgUrl                string                     `description:"行业图片链接"`
-	ImgUrlText            string                     `description:"活动类型图片链接"`
-	ActivityType          int                        `description:"活动线上线下类型 1线上,0 线下"`
-	IsShowOutboundCall    bool                       `description:"是否展示预约外呼"`
-	IsShowMeetingReminder bool                       `description:"是否展示会议提醒"`
-	IsShowHelpSsk         bool                       `description:"是否展示帮我带问"`
-	IsShowSignup          bool                       `description:"是否展示我要报名"`
-	IsShowAppointment     bool                       `description:"是否展示预约纪要"`
-	IsShowDetails         bool                       `description:"是否展示查看详情按钮"`
-	AudioLink             bool                       `description:"是否展示回放按钮"`
-	VoiceList             *CygxActivityVoiceReq      `description:"音频数据"`
-	VideoDetail           *CygxActivityVideoListResp `description:"视频数据"`
-	FileType              int                        `description:"类型: 1-音频; 2-视频"`
-	SourceType            int                        `description:"活动来源。 1:活动 、2:专项产业调研"`
+	ActivityId              int                        `description:"活动ID "`
+	ActivityTypeId          int                        `description:"活动类型id"`
+	ActivityTypeName        string                     `description:"活动类型名称"`
+	ChartPermissionId       int                        `description:"行业id"`
+	ChartPermissionName     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:"备注"`
+	IsSignup                int                        `description:"是否已报名 1是 ,0 否"`
+	SignupNum               int                        `description:"已报名人数"`
+	IsAppointment           int                        `description:"是否已预约纪要 1是 ,0 否"`
+	IsCancelMeetingReminder int                        `description:"是否添加了消息消息提醒   1是 ,0 否"`
+	ActiveState             string                     `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsShowSustainable       bool                       `description:"是否展示限免标签"`
+	Description             string                     `description:"研选内容说明"`
+	IsResearch              bool                       `description:"是否属于研选"`
+	IsHideAppointment       int                        `description:"是否隐藏预约纪要按钮  1是,0 否"`
+	IsCClassMeeting         bool                       `description:"是否是c类电话会"`
+	Label                   string                     `description:"主题标签"`
+	ImgUrl                  string                     `description:"行业图片链接"`
+	ImgUrlText              string                     `description:"活动类型图片链接"`
+	ActivityType            int                        `description:"活动线上线下类型 1线上,0 线下"`
+	IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
+	IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
+	IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
+	IsShowSignup            bool                       `description:"是否展示我要报名"`
+	IsShowAppointment       bool                       `description:"是否展示预约纪要"`
+	IsShowDetails           bool                       `description:"是否展示查看详情按钮"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceDetail             *CygxActivityVoiceReq      `description:"音频数据"`
+	VideoDetail             *CygxActivityVideoListResp `description:"视频数据"`
+	FileType                int                        `description:"类型: 1-音频; 2-视频"`
+	SourceType              int                        `description:"活动来源。 1:活动 、2:专项产业调研"`
+	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	ArticleList             []*ActivityArticleResp
+	Listndustrial           []*IndustrialManagementRep `description:"活动关联的产业信息"`
 }
 
 type ActivityArticleResp struct {
@@ -203,7 +208,7 @@ type CygxActivityResp struct {
 	PopupMsg      string `description:"权限弹窗信息"`
 	SellerMobile  string `description:"销售电话"`
 	SellerName    string `description:"销售姓名"`
-	Detail        *ActivityDetail
+	Detail        *ActivityListResp
 }
 
 //列表

+ 18 - 0
models/industrial_activity_group_management.go

@@ -83,3 +83,21 @@ func GetActivityIndustryRelationList(condition string, pars []interface{}) (list
 	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
 	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
+}

+ 1 - 0
models/industrial_management.go

@@ -16,6 +16,7 @@ type IndustrialManagementRep struct {
 	ArticleReadNum         int    `description:"文章阅读数量"`
 	IsResearch             bool   `description:"是否属于研选"`
 	IsJump                 bool   `description:"是否跳转"`
+	IndustryNewLabel       bool   `description:"是否产业新标签"`
 }
 
 type IndustrialManagementCount struct {

+ 2 - 1
models/wx_user.go

@@ -76,7 +76,8 @@ type WxUserItem struct {
 	OutboundCountryCode string    `description:"外呼手机号区号"`
 	IsMsgOutboundMobile int       `description:"是否弹窗过绑定外呼手机号区号"`
 	Source              int
-	IsMaker             int `description:"是否是决策人"`
+	IsMaker             int    `description:"是否是决策人"`
+	Position            string `description:"职务"`
 }
 
 func GetWxUserItemByUserId(userId int) (item *WxUserItem, err error) {

+ 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"` // 时间戳
+}

+ 143 - 36
services/activity.go

@@ -322,8 +322,8 @@ func GetActivityVideoResp(mapActivityId []int) (mapItem map[int]*models.CygxActi
 	return
 }
 
-func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.ActivityDetail) {
-	articleDetail = item
+func ActivityButtonShow(item *models.ActivityDetail) (itemActivity *models.ActivityListResp) {
+	articleDetail := item
 	//IsShowAppointment       bool                       `description:"是否展示预约纪要"`
 	//IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
 	//IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
@@ -396,7 +396,89 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 	activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
 	activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
 	articleDetail.ActivityTimeText = activityTimeText
+	v := articleDetail
+	itemActivity = &models.ActivityListResp{
+		ActivityId:              v.ActivityId,
+		ActivityTypeId:          v.ActivityTypeId,
+		ActivityTypeName:        v.ActivityTypeName,
+		ChartPermissionId:       v.ChartPermissionId,
+		ChartPermissionName:     v.ChartPermissionName,
+		IsLimitPeople:           v.IsLimitPeople,
+		LimitPeopleNum:          v.LimitPeopleNum,
+		LastUpdatedTime:         v.LastUpdatedTime,
+		ActivityTime:            v.ActivityTime,
+		ActivityTimeText:        v.ActivityTimeText,
+		DistinguishedGuest:      v.DistinguishedGuest,
+		Host:                    v.Host,
+		Speaker:                 v.Speaker,
+		MainlandTell:            v.MainlandTell,
+		HongKongTell:            v.HongKongTell,
+		TaiwanTell:              v.TaiwanTell,
+		AmericaTell:             v.AmericaTell,
+		ParticipationCode:       v.ParticipationCode,
+		Theme:                   v.Theme,
+		Expert:                  v.Expert,
+		ActivityName:            v.ActivityName,
+		OnlineParticipation:     v.OnlineParticipation,
+		ReportLink:              v.ReportLink,
+		City:                    v.City,
+		Address:                 v.Address,
+		Highlights:              v.Highlights,
+		Remarks:                 v.Remarks,
+		IsSignup:                v.IsSignup,
+		IsCancelMeetingReminder: v.IsCancelMeetingReminder,
+		IsAppointment:           v.IsAppointment,
+		ActiveState:             v.ActiveState,
+		IsShowSustainable:       v.IsShowSustainable,
+		Description:             v.Description,
+		IsResearch:              v.IsResearch,
+		IsHideAppointment:       v.IsHideAppointment,
+		IsCClassMeeting:         v.IsCClassMeeting,
+		Label:                   v.Label,
+		ImgUrl:                  v.ImgUrl,
+		ImgUrlText:              v.ImgUrlText,
+		ActivityType:            v.ActivityType,
+		IsShowOutboundCall:      v.IsShowOutboundCall,
+		IsShowMeetingReminder:   v.IsShowMeetingReminder,
+		IsShowHelpSsk:           v.IsShowHelpSsk,
+		IsShowSignup:            v.IsShowSignup,
+		IsShowAppointment:       v.IsShowAppointment,
+		IsShowDetails:           v.IsShowDetails,
+		AudioLink:               v.AudioLink,
+		VoiceDetail:             v.VoiceList,
+		VideoDetail:             v.VideoDetail,
+		FileType:                v.FileType,
+		SourceType:              v.SourceType,
+	}
+	return
+}
 
+func ActivityDetaailShow(activityInfo *models.ActivityListResp) (itemActivity *models.ActivityListResp, err error) {
+	itemActivity = activityInfo
+	if GetShowSustainable() && strings.Contains(itemActivity.ChartPermissionName, "研选") {
+		itemActivity.IsShowSustainable = true
+	}
+	if activityInfo.SignupNum > activityInfo.LimitPeopleNum {
+		activityInfo.SignupNum = activityInfo.LimitPeopleNum
+	}
+	if activityInfo.ReportLink != "" {
+		artList := strings.Split(activityInfo.ReportLink, "{|}")
+		if len(artList) > 0 {
+			for _, v := range artList {
+				artitem := new(models.ActivityArticleResp)
+				artitem.ReportLink = v
+				artIdSlice := strings.Split(v, "/")
+				if len(artIdSlice) > 0 {
+					articleId, _ := strconv.Atoi(artIdSlice[len(artIdSlice)-1])
+					artitem.ArticleId = articleId
+				}
+				activityInfo.ArticleList = append(activityInfo.ArticleList, artitem)
+			}
+		}
+	} else {
+		activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
+	}
+	activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
 	return
 }
 
@@ -495,44 +577,71 @@ func GetIndustryNewLabelMap(industryIds []int) (labelMap map[int]bool, err error
 }
 
 //GetSpecialDetailUserPower 处理用户查看专项调研详情的权限
-func GetSpecialDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) {
-	permissionStr, e := GetCompanyPermission(user.CompanyId)
+func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) {
+	var companyDetailStatus string
+	userType, permissionStr, e := GetUserType(user.CompanyId)
 	if e != nil {
 		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
 		return
 	}
-	fmt.Println(permissionStr)
-	//如果没有对应的升级权限,则返回
-	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+	if user.CompanyId <= 1 {
 		return
+	} else {
+		if permissionStr == "" {
+			return
+		} else {
+			companyDetail, e := models.GetCompanyDetailById(user.CompanyId)
+			if e != nil {
+				err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+				return
+			}
+			if companyDetail == nil {
+				err = errors.New("客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId))
+				return
+			}
+			companyDetailStatus = companyDetail.Status
+		}
+	}
+	if activityInfo.ChartPermissionId == 1 {
+		havePower = true
+		return
+	}
+	if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
+		havePower = true
+	} else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
+		havePower = true
+	} else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
+		havePower = true
+	} else if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 4 || activityInfo.ActivityTypeId == 5) && strings.Contains(permissionStr, "专家") {
+		havePower = true
+	}
+	if activityInfo.ActivityTypeId == 2 || activityInfo.ActivityTypeId == 6 || activityInfo.ActivityTypeId == 7 {
+		if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(主观)") {
+			havePower = true
+		}
+	} else {
+		if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(客观)") {
+			havePower = true
+		}
+	}
+	if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+		havePower = true
+	}
+	//如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
+	if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+		havePower = true
+	}
+	if havePower {
+		//对于一些特殊的活动,即使权限满足也不给产看
+		noPower, e := GetShareNoPowe(activityInfo, permissionStr, userType, user)
+		if e != nil {
+			err = errors.New("GetShareNoPowe, Err: " + e.Error())
+			return
+		}
+		if noPower {
+			havePower = false
+		}
 	}
-	//userType, e := GetSpecialUserType(user)
-	//if e != nil {
-	//	err = errors.New("GetSpecialUserType, Err: " + e.Error())
-	//	return
-	//}
-	//if userType == 0 {
-	//	return
-	//}
-	//var pars []interface{}
-	//var condition string
-	//var userTypes string
-	//condition += `  AND art.publish_status = 1 AND art.is_offline = 0   `
-	//userTypes = "%" + strconv.Itoa(userType) + "%"
-	//condition += ` AND art.customer_type_ids LIKE ? `
-	//pars = append(pars, userTypes)
-	//
-	//condition += ` AND art.activity_id = ? `
-	//pars = append(pars, activityInfo.ActivityId)
-	//
-	//total, e := models.GetActivitySpecialCount(condition, pars)
-	//if e != nil {
-	//	err = errors.New("GetSpecialUserType, Err: " + e.Error())
-	//	return
-	//}
-	//if total == 1 {
-	//	havePower = true
-	//}
 	return
 }
 
@@ -542,7 +651,6 @@ func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, u
 	if user.CompanyId == utils.HZ_COMPANY_ID {
 		return
 	}
-	//var noPower bool
 	if (userType == 1 || userType == 4 || userType == 5) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
 		noPower = true
 	}
@@ -591,6 +699,5 @@ func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *model
 			noPower = true
 		}
 	}
-	fmt.Println(noPower)
 	return
 }

+ 7 - 48
services/company_permission.go

@@ -31,7 +31,7 @@ func GetCompanyPermissionUpgrade(companyId int) (permissionStr string, err error
 
 //获取用户对应的权限申请状态
 func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
-	//HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
+	//HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下(ficc),3:无该品类权限,已提交过申请,4:无该品类权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
 	uid := user.UserId
 	applyCount, e := models.GetApplyRecordCount(uid)
 	if e != nil {
@@ -40,9 +40,9 @@ func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerNam
 	}
 	if user.CompanyId <= 1 {
 		if applyCount == 0 {
-			hasPermission = 3
+			hasPermission = 5
 		} else {
-			hasPermission = 4
+			hasPermission = 6
 		}
 	} else {
 		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
@@ -61,58 +61,17 @@ func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerNam
 					return
 				}
 				if sellerItemQy != nil {
-					hasPermission = 2
+					hasPermission = 3
 					sellerName = sellerItemQy.Mobile
 					sellerMobile = sellerItemQy.RealName
 				} else {
-					hasPermission = 5
+					hasPermission = 2
 				}
 			}
-		}
-	}
-	popupMsg = "需要升级行业套餐权限才可参与此活动,请联系对口销售"
-	return
-}
-
-//获取用户对应的权限申请状态 文章详情
-func GetUserHasPermissionArticle(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
-	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
-	uid := user.UserId
-	applyCount, e := models.GetApplyRecordCount(uid)
-	if e != nil {
-		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
-		return
-	}
-	if user.CompanyId <= 1 {
-		if applyCount == 0 {
-			hasPermission = 4
 		} else {
-			hasPermission = 5
-		}
-	} else {
-		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
-		if e != nil {
-			err = errors.New("GetCompanyPermission, Err: " + e.Error())
-			return
-		}
-		if companyPermission != "" {
-			if applyCount > 0 {
-				hasPermission = 2
-			} else {
-				hasPermission = 3
-				//获取权益销售信息 如果是FICC的客户类型,则默认他申请过
-				sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
-				if e != nil && e.Error() != utils.ErrNoRow() {
-					err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
-					return
-				}
-				if sellerItemQy != nil {
-					sellerName = sellerItemQy.Mobile
-					sellerMobile = sellerItemQy.RealName
-				}
-			}
+			hasPermission = 2
 		}
 	}
-	popupMsg = "需要升级行业套餐权限才可查看此报告,请联系对口销售"
+	popupMsg = "需要升级行业套餐权限才可参与此活动,请联系对口销售"
 	return
 }

+ 291 - 0
services/yidong.go

@@ -0,0 +1,291 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/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
+}
+
+//生成用户相关信息接口 获取用户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
+	//fmt.Println(lingLink)
+	//
+	//slicelingLink := strings.Split(lingLink, "redirect_uri=")
+	////var shortLink string
+	//if len(slicelingLink) > 1 {
+	//	lingLink = slicelingLink[len(slicelingLink)-1]
+	//}
+	yidongLongLink = lingLink
+	return
+}

+ 26 - 1
utils/config.go

@@ -34,8 +34,13 @@ var (
 	WxMsgTemplateIdApply          string //申请待处理
 	WxMsgTemplateIdAskMsgMobile   string //手机号用户【XXX】发送模板消息
 	WxMsgTemplateIdAskMsgXzs      string //手机号用户【XXX】发送模板消息模板ID(小助手)
+	IndexName                     string
 
-	IndexName string
+	YiDongZhengTongYunUrl    string //易董 证通云请求域名
+	YiDongZhengTongYunAppid  string //易董 证通云请求appid
+	YiDongZhengTongYunSecret string //易董 证通云请求secret
+	YiDongHuaWeiYunUrl       string //易董 华为云请求域名
+	YiDonggetOriginalLink    string //易董 短连接转为长链接
 )
 
 func init() {
@@ -103,6 +108,26 @@ func init() {
 		IndexName = "cygx_article_v1"
 	}
 	HeadimgurlDefault = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202202/20220225/XFBBOUmDC5AXkfxnHiuqKpPtoofH.png"
+
+	//易董开放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="
+	}
 }
 
 //http://webapi.brilliantstart.cn/api/

+ 4 - 0
utils/constants.go

@@ -114,3 +114,7 @@ const (
 	YI_YAO_QI_TA = "https://hzstatic.hzinsights.com/static/temp/20220922202209/20220922/2OQMBFplQE1R3bX1y3obX7JSwSuA.png"
 	YAN_XUAN_IMG = "https://hzstatic.hzinsights.com/static/temp/20221027202210/20221027/Dd8TrsMh8tNx2tGd5VeaQDyJVQfV.png"
 )
+
+const (
+	YD_TOKEN = "yidong_token"
+)