瀏覽代碼

活动列表相关

xingzai 2 年之前
父節點
當前提交
067b0821d4

+ 640 - 2
controllers/activity.go

@@ -1,9 +1,13 @@
 package controllers
 
 import (
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/services"
 	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -17,7 +21,6 @@ type ActivityController struct {
 // @Param   ActivityTypeIds   query   string  false     "活动类型id 多个用 , 隔开"
 // @Param   ActiveState   query   string  false       "活动进行状态 未开始:1、进行中2、已结束3 多个用 , 隔开"
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
-// @Param   WhichTime   query   string  false       " 本周:1 上周:2,本月:3上月:4"
 // @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
 // @Success 200 {object} models.ActivityTypeListHomeResp
 // @router /labelTypeList [get]
@@ -70,7 +73,7 @@ func (this *ActivityController) LabelTypeList() {
 	condition += `AND art.activity_time > ?  `
 	pars = append(pars, time.Now().AddDate(0, -3, 0).Format(utils.FormatDate))
 
-	conditionActivity, err := services.GetActivityonditionList(user, "", chartPermissionIds, whichDay, activeState, "", isPower, 0, "", 0)
+	conditionActivity, err := services.GetActivityonditionList(user, "", chartPermissionIds, whichDay, activeState, "", isPower, 0, "", 0, "")
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
@@ -99,3 +102,638 @@ func (this *ActivityController) LabelTypeList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 活动列表
+// @Description 获取活动列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
+// @Param   ChartPermissionIds   query   string  false     "行业id 多个用 , 隔开"
+// @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
+// @Param   WhichTime   query   string  false       " 本周:1 上周:2,本月:3上月:4"
+// @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       "搜索关键词 多个用 , 隔开"
+// @Param   ActivityId   query   int  false       "活动列表传过来的活动ID"
+// @Param   Filter			query	int		false	"筛选条件 0:全部 1:视频 2:音频"
+// @Success 200 {object} models.GetCygxActivityListRep
+// @router /list [get]
+func (this *ActivityController) ActivityListNew() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	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")
+	whichTime := this.GetString("WhichTime")
+	activeState := this.GetString("ActiveState")
+	activityTypeId := this.GetString("ActivityTypeId")
+	keyWord := this.GetString("KeyWord")
+	playBack, _ := this.GetInt("PlayBack")
+	filter, _ := this.GetInt("Filter")
+	activityId, _ := this.GetInt("ActivityId") // 仅用于判断【新】标签
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+	var condition string
+	var pars []interface{}
+	//var activityList []*models.ActivityDetail
+	mapDingActivityId := make(map[int]int)
+	condition = ""
+	//活动可见限制
+	conditionActivity, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord, playBack, whichTime)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
+		return
+	}
+	if source == 1 {
+		condition += ` AND art.yidong_activity_id = '' `
+	}
+
+	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
+	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" {
+		conditionOrder = ` ORDER BY art.activity_time DESC  `
+	} else if activeState == "2,3" {
+		conditionOrder = ` ORDER BY art.active_state ASC, art.activity_time DESC  `
+	} else {
+		conditionOrder = ` ORDER BY art.activity_time DESC ,  art.active_state ASC   `
+	}
+
+	if label != "" && activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
+	}
+
+	if activeState == "1" {
+		conditionOrder = ` ORDER BY art.activity_time ASC  `
+	}
+
+	condition += conditionOrder
+	list, errList := models.GetActivityListNew(condition, pars, uid, startSize, pageSize, playBack, filter)
+	if errList != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + errList.Error()
+		return
+	}
+	var isShow bool
+	isShow = services.GetShowSustainable()
+	detail, err := models.GetConfigByCode("city_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "城市配置信息失败,Err:" + err.Error()
+		return
+	}
+	detailChart, err := models.GetConfigByCode("chart_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
+		return
+	}
+
+	addressList := strings.Split(detail.ConfigValue, "{|}")
+	mapAddress := make(map[string]string)
+	chartList := strings.Split(detailChart.ConfigValue, "{|}")
+	mapChart := make(map[string]string)
+	var cityName string
+	var chartName string
+	var imgUrl string
+	var imgUrlChart string
+	var mapActivityId []int
+	for _, v := range addressList {
+		vslice := strings.Split(v, "_")
+		cityName = vslice[0]
+		imgUrl = vslice[len(vslice)-1]
+		mapAddress[cityName] = imgUrl
+	}
+	for _, v := range chartList {
+		vslice := strings.Split(v, "_")
+		chartName = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapChart[chartName] = imgUrlChart
+	}
+
+	for k, v := range list {
+		if strings.Contains(v.ActivityName, "【") {
+			list[k].IsBrackets = 1
+		}
+		if v.SignupNum > v.LimitPeopleNum {
+			list[k].SignupNum = v.LimitPeopleNum
+		}
+		if isShow && strings.Contains(v.ChartPermissionName, "研选") {
+			list[k].IsShowSustainable = true
+		}
+		if strings.Contains(v.ChartPermissionName, "研选") && v.ActivityTypeId == 1 {
+			list[k].ActivityTypeName = "买方研选电话会"
+			list[k].ImgUrlText = utils.YAN_XUAN_IMG
+		}
+		if v.ActivityType == 0 {
+			if mapAddress[v.City] != "" {
+				list[k].ImgUrl = mapAddress[v.City]
+			} else {
+				list[k].ImgUrl = mapAddress["其它"]
+			}
+		} else {
+			if mapChart[v.ChartPermissionName] != "" {
+				list[k].ImgUrl = mapChart[v.ChartPermissionName]
+			}
+		}
+		expertTxt, _ := services.GetReportContentTextSub(v.Expert)
+		list[k].Expert = expertTxt
+		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)
+	var activityList []*models.ActivityDetail
+	resp.Label = label
+	if activityTypeId != "" {
+		activityTypeIdint, err := strconv.Atoi(activityTypeId)
+		if err == nil {
+			detail, errDetail := models.GetActivityTypeDetailById(activityTypeIdint)
+			if errDetail != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + errDetail.Error()
+				return
+			}
+			resp.ImgUrl = detail.OnlineIco
+			resp.Label = detail.ActivityTypeName
+		}
+	}
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
+
+	//处理视频回放
+	mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVideoResp,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].FileType = 1
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
+		if mapActivityVideo[v.ActivityId] != nil {
+			list[k].FileType = 2
+			list[k].AudioLink = true
+			list[k].VideoDetail = mapActivityVideo[v.ActivityId]
+		}
+		activityList = append(activityList, services.ActivityButtonShow(v))
+	}
+
+	// 查研观向7.4-判断标签是否为产业, 为产业时是否跳转资源包
+	if label != "" {
+		industry, e := models.GetIndustryByName(label)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取标签产业失败, Err:" + e.Error()
+			return
+		}
+		if industry != nil {
+			sourceIndustry, e := models.GetSourceIndustryByName(label)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取标签产业资源包失败, Err:" + e.Error()
+				return
+			}
+			if sourceIndustry != nil {
+				resp.IndustrialManagementId = sourceIndustry.IndustrialManagementId
+				resp.IsJump = true
+				// 研选产业不跳资源包
+				if sourceIndustry.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+					resp.IsJump = false
+				}
+			}
+		}
+		// 新标签
+		if activityId > 0 {
+			activityIds := []int{activityId}
+			activityNewMap, _, e := services.GetActivityNewLabelMap(activityIds)
+			if e != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取活动新标签失败, Err: " + e.Error()
+				return
+			}
+			resp.IndustryNewLabel = activityNewMap[activityId]
+		}
+	}
+
+	//添加活动搜索记录
+	//if keyWord != "" {
+	//	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.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title  活动详情
+// @Description 获取活动详情接口
+// @Param   ActivityId   query   int  true       "活动ID"
+// @Success Ret=200 {object} models.CygxActivityResp
+// @router /detail [get]
+func (this *ActivityController) Detail() {
+	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
+	activityId, _ := this.GetInt("ActivityId")
+	if activityId < 1 {
+		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 = "获取信息失败"
+		br.ErrMsg = "获取活动详情信息失败,Err:" + err.Error()
+		return
+	}
+	if activityInfo == nil {
+		br.Msg = "活动不存在"
+		br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	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)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+		return
+	}
+	if activityInfo.IsLimitPeople > 0 {
+		noPower, err := services.GetShareNoPowe(activityInfo, permissionStr, userType, user)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			return
+		}
+
+		//获取用户的产业规模,判断是否允许可见
+		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 != "" {
+				if strings.Count(activityInfo.Scale, companyProduct.Scale) > 0 {
+					noPower = false
+				}
+			}
+		}
+		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 {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取客户公司信息失败,Err:" + err.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
+					}
+					activityInfo.ArticleList = append(activityInfo.ArticleList, artitem)
+				}
+			}
+		} else {
+			activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
+		}
+		activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "(C类)", "", -1)
+
+		//处理音频回放
+		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.FileType = 1
+			activityInfo.AudioLink = true
+			activityInfo.VoiceList = mapActivityVoice[activityId]
+		}
+
+		//处理视频回放
+		mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "GetActivityVideoResp,Err:" + err.Error()
+			return
+		}
+		if mapActivityVideo[activityId] != nil {
+			activityInfo.FileType = 2
+			activityInfo.AudioLink = true
+			activityInfo.VideoDetail = mapActivityVideo[activityId]
+		}
+
+		//8.5 买方研选的活动去掉限免标签
+		if strings.Contains(activityInfo.ChartPermissionName, "研选") {
+			activityInfo.IsShowSustainable = false
+		}
+		//处理按钮是否展示问题
+		resp.Detail = services.ActivityButtonShow(activityInfo)
+	}
+	resp.HasPermission = hasPermission
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 215 - 0
models/activity.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
 
@@ -58,6 +59,153 @@ type CygxActivity struct {
 	YidongActivityId        string    `description:"易董活动ID"`
 }
 
+//活动详情
+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     // 下面是列表添加的部分结构体
+	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:"是否展示我要报名"`
+	IsShowDetails           bool                       `description:"是否展示查看详情按钮"`
+	TemporaryLabel          string                     `description:"临时标签"`
+	IsCanAppointmentMinutes int                        `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string                     `description:"易董活动ID"`
+	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceList               *CygxActivityVoiceReq      `description:"音频数据"`
+	AdminId                 int                        `description:"管理员、销售ID "`
+	IsMakerShow             int                        `description:"是否仅决策人可见 0,否 、1,是"`
+	VisibleRange            int                        `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
+	VideoDetail             *CygxActivityVideoListResp `description:"视频数据"`
+	FileType                int                        `description:"类型: 1-音频; 2-视频"`
+	SourceType              int                        `description:"活动来源。 1:活动 、2:专项产业调研"`
+	TripImgLink             string                     `description:"专项产业调研行程链接"`
+	ActivityTimeEnd         string                     `description:"专项产业调研活动预期结束时间"`
+}
+
+//活动详情
+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:专项产业调研"`
+}
+
+type ActivityArticleResp struct {
+	ReportLink string `description:"报告链接"`
+	ArticleId  int    `description:"报告id(报告链接跳转使用)"`
+}
+
+type CygxActivityResp struct {
+	HasPermission int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下(ficc),3:无该品类权限,已提交过申请,4:无该品类权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	PopupMsg      string `description:"权限弹窗信息"`
+	SellerMobile  string `description:"销售电话"`
+	SellerName    string `description:"销售姓名"`
+	Detail        *ActivityDetail
+}
+
 //列表
 func GetCygxActivityList(condition string, pars []interface{}, sortTime string, startSize, pageSize int) (items []*CygxActivity, err error) {
 	o := orm.NewOrm()
@@ -70,3 +218,70 @@ func GetCygxActivityList(condition string, pars []interface{}, sortTime string,
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+//获取数量
+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
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//列表
+func GetActivityListNew(condition string, pars []interface{}, uid, startSize, pageSize, playBack, filter 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 `
+	}
+	if filter == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_video AS av ON av.activity_id = art.activity_id `
+	} else if filter == 2 {
+		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,
+		( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS signup_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.user_id = ?  AND m.is_cancel = 0  ) AS is_cancel_meeting_reminder,
+		( 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 ` + sqlJiontable + ` WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, uid, uid, uid, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type GetCygxActivityListRep struct {
+	Paging                 *paging.PagingItem `description:"分页数据"`
+	List                   []*ActivityListResp
+	Label                  string `description:"主题"`
+	ImgUrl                 string `description:"图片路径"`
+	IsResearch             bool   `description:"是否属于研选"`
+	IsJump                 bool   `description:"是否跳转"`
+	IndustrialManagementId int    `description:"产业ID"`
+	IndustryNewLabel       bool   `description:"产业是否新标签"`
+}
+
+//通过纪要ID获取活动详情
+func GetAddActivityInfoByIdShow(uid, ActivityId int) (item *ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *,( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
+			( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id  AND s.is_cancel = 0 AND s.do_fail_type = 0) AS signup_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = a.activity_id AND m.user_id = ?  AND m.is_cancel = 0 ) AS is_cancel_meeting_reminder,
+			( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = a.activity_id AND ap.user_id = ? ) AS is_appointment
+			FROM cygx_activity AS a  WHERE activity_id=? AND publish_status = 1 `
+	err = o.Raw(sql, uid, uid, uid, ActivityId).QueryRow(&item)
+	return
+}

+ 3 - 3
models/activity_type.go

@@ -37,8 +37,8 @@ type ActivityTypeListHomeResp struct {
 
 type ActivityTypeHome struct {
 	ActivityTypeId   int    `description:"活动类型id"`
-	Resource         int    `description:"位置 ,1:活动 ,2:专项产业调研"`
-	ActivityTypeName string `description:"活动名称"`
+	Resource         int    `description:"来源 ,1:活动 ,2:专项产业调研"`
+	ActivityTypeName string `description:"活动类型名称"`
 	OnlineIco        string `description:"线上线下Ico图标"`
 	ImgUrlBgPc       string `description:"Pc端背景图片"`
 	List             []*CygxActivityLabelList
@@ -49,7 +49,7 @@ type CygxActivityLabelList struct {
 	KeyWord          string `orm:"column(label)";description:"主题"`
 	ImgUrlBg         string `description:"背景图片"`
 	ActivityId       int    `description:"活动ID "`
-	Resource         int    `description:"位置 ,1:活动 ,2:专项产业调研"`
+	Resource         int    `description:"来源 ,1:活动 ,2:专项产业调研"`
 	IsNew            bool   `description:"是否为新:活动存在关联的的产业所关联的报告均在3个月内/无报告则标记新"`
 	YidongActivityId int    `description:"易董活动ID"`
 	IsExternalLabel  bool   `description:"是否为外部资源"`

+ 17 - 0
models/chart_permission.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"time"
 )
 
 type ChartPermissionResp struct {
@@ -15,6 +16,22 @@ type ChartPermission struct {
 	IsShowSustainable bool   `description:"是否展示限免标签"`
 }
 
+type CompanyReportPermission struct {
+	CompanyReportPermissionId int `orm:"column(company_report_permission_id);pk"`
+	CompanyId                 int `description:"客户id"`
+	ReportPermissionId        int `description:"报告权限id"`
+	CreatedTime               time.Time
+	LastUpdatedTime           time.Time
+	ChartPermissionId         int    `description:"权限id"`
+	StartDate                 string `description:"权限开始日期"`
+	EndDate                   string `description:"权限结束日期"`
+	ProductId                 int    `description:"产品id"`
+	ProductName               string `description:"产品名称"`
+	ModifyTime                string `description:"修改时间"`
+	CompanyContractId         string `description:"合同id"`
+	Status                    string `description:"状态  '正式','试用','关闭','永续','潜在' "`
+}
+
 type ChartPermissionListResp struct {
 	List []*ChartPermissionResp
 }

+ 127 - 0
models/company_activity_trip.go

@@ -0,0 +1,127 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+func GetCountCompanyDetailByIdGroupTrip(companyId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+	COUNT( 1 ) AS count 
+FROM
+	company AS a
+	INNER JOIN company_product AS b ON a.company_id = b.company_id
+	INNER JOIN company_report_permission AS p ON p.company_id = a.company_id
+	INNER JOIN chart_permission AS cp ON cp.chart_permission_id = p.chart_permission_id
+	LEFT JOIN admin AS c ON b.seller_id = c.admin_id 
+WHERE
+	a.company_id = ? 
+	AND b.product_id = 2 
+	AND b.status = '正式' 
+	AND p.is_upgrade =  1
+	OR (
+		a.company_id = ? 
+	AND b.product_id = 2 
+	AND b.status = '永续') `
+	err = o.Raw(sql, companyId, companyId).QueryRow(&count)
+	return
+}
+
+func GetCompanyDetailByIdGroupTrip(companyId int) (item *CompanyDetail, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT a.company_id,a.company_name,b.status,b.seller_id,b.seller_name,c.mobile ,b.is_suspend
+            FROM company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			INNER JOIN company_report_permission AS p ON p.company_id = a.company_id
+			INNER JOIN chart_permission AS cp ON cp.chart_permission_id = p.chart_permission_id
+			LEFT JOIN admin AS c ON b.seller_id=c.admin_id
+			WHERE a.company_id=? AND b.product_id = 2  
+			ORDER BY b.product_id DESC  LIMIT 0,1  `
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}
+
+func GetCompanyPermissionByUserTrip(companyId int) (permission string, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			GROUP_CONCAT( DISTINCT b.remark ORDER BY b.sort ASC SEPARATOR ',' ) AS permission 
+		FROM
+			company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id = c.company_id 
+			AND a.product_id = c.product_id 
+		WHERE
+			a.company_id = ? 
+			AND c.is_suspend = 0 
+			AND b.cygx_auth = 1 
+			AND a.is_upgrade = 1 
+			AND c.STATUS IN ( '正式' ) 
+			OR ( a.company_id = ? AND c.is_suspend = 0 AND b.cygx_auth = 1 AND c.STATUS IN ( '永续' ) ) 
+			OR ( a.company_id = ? AND c.is_suspend = 0 AND b.cygx_auth = 1 AND b.chart_permission_name = '策略' AND c.STATUS IN ( '正式' ) )`
+	err = o.Raw(sql, companyId, companyId, companyId).QueryRow(&permission)
+	return
+}
+
+//获取正式权限
+func GetCompanyPermissionByUserZhengShiTrip(companyId int) (permission string, err error) {
+	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
+			FROM company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
+			WHERE  a.company_id=?
+			AND c.is_suspend=0
+            AND b.cygx_auth=1
+			AND a.is_upgrade = 1 
+			AND c.status IN('正式')  `
+	o := orm.NewOrm()
+	err = o.Raw(sql, companyId).QueryRow(&permission)
+	return
+}
+
+//GetCompanyReportPermissionUpgrade 获取升级的权限类型
+func GetCompanyReportPermissionUpgrade(companyId, productId int) (items []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	re.*
+FROM
+	company_report_permission  as re 
+	INNER JOIN chart_permission as  c ON c.chart_permission_id = re.chart_permission_id
+WHERE
+	re.company_id = ? 
+	AND re.product_id = ? 
+	AND re.is_upgrade = 1 
+	AND c.permission_type = 1
+	AND STATUS = '正式' `
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	return
+}
+
+// GetChartPermissionByIds 主键获取权限
+func GetChartPermissionByIds(permissionIds []string) (list []*ChartPermission, err error) {
+	qb, _ := orm.NewQueryBuilder("mysql")
+	// 构建查询对象
+	qb.Select("*").From("chart_permission").
+		Where("chart_permission_id").In(permissionIds...)
+	// 导出 SQL 语句
+	sql := qb.String()
+
+	// 执行 SQL 语句
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+//GetCompanyPermissionNameCheck 通过名称判断客户是否开了某一类型的权限
+func GetCompanyPermissionNameCheck(companyId, productId int, permissionName string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			COUNT( 1 ) AS count 
+		FROM
+			company_report_permission AS a 
+			INNER JOIN chart_permission as  c  ON c.chart_permission_id = a.chart_permission_id
+		WHERE
+			a.company_id = ?
+			AND a.STATUS = '正式'
+			AND a.product_id = ? 
+			AND c.chart_permission_name = ? `
+	err = o.Raw(sql, companyId, productId, permissionName).QueryRow(&count)
+	return
+}

+ 85 - 0
models/industrial_activity_group_management.go

@@ -0,0 +1,85 @@
+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
+}
+
+// GetActivityIndustryRelationList 获取活动与产业关联列表
+func GetActivityIndustryRelationList(condition string, pars []interface{}) (list []*CygxIndustrialActivityGroupManagement, err error) {
+	sql := `SELECT
+				a.activity_id,
+				b.industrial_management_id
+			FROM
+				cygx_activity AS a
+			JOIN cygx_industrial_activity_group_management AS b ON a.activity_id = b.activity_id
+			WHERE
+				1 = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 41 - 0
models/industrial_article_group_management.go

@@ -0,0 +1,41 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxIndustrialArticleGroupManagement struct {
+	Id                     int       `orm:"column(id);pk" description:"主键ID"`
+	CygxArticleId          int       `description:"cygx_article表id"`
+	ArticleId              int       `description:"文章ID"`
+	IndustrialManagementId int       `description:"cygx_industrial_management表的主键ID"`
+	Source                 int       `description:"来源,1 活动,2专项调研"`
+	CreateTime             time.Time `description:"创建时间"`
+}
+
+// IndustryArticleMinMaxPublishTime 产业文章最大最小发布时间
+type IndustryArticleMinMaxPublishTime struct {
+	IndustrialManagementId int       `description:"产业ID"`
+	MinPublishTime         time.Time `description:"文章最小发布时间"`
+	MaxPublishTime         time.Time `description:"文章最大发布时间"`
+}
+
+// GetIndustryArticleMinMaxPublishTime 获取产业文章最大最小发布时间
+func GetIndustryArticleMinMaxPublishTime(condition string, pars []interface{}) (list []*IndustryArticleMinMaxPublishTime, err error) {
+	sql := `SELECT
+				a.industrial_management_id,
+				MIN(b.publish_date) AS min_publish_time,
+				MAX(b.publish_date) AS max_publish_time
+			FROM
+				cygx_industrial_article_group_management AS a
+			JOIN cygx_article AS b ON a.article_id = b.article_id
+			WHERE
+				1 = 1`
+	if condition != `` {
+		sql += condition
+	}
+	sql += `GROUP BY a.industrial_management_id`
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 25 - 0
models/industrial_management.go

@@ -341,3 +341,28 @@ func GetActiveArticleIndustryIds() (ids []int, err error) {
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&ids)
 	return
 }
+
+// GetIndustryByName 通过名称获取产业
+func GetIndustryByName(industryName string) (item *IndustrialManagement, err error) {
+	sql := `SELECT * FROM cygx_industrial_management WHERE industry_name = ? LIMIT 1`
+	err = orm.NewOrm().Raw(sql, industryName).QueryRow(&item)
+	return
+}
+
+// GetSourceIndustryByName 通过名称获取资源包产业
+func GetSourceIndustryByName(industryName string) (item *IndustrialManagement, err error) {
+	sql := `SELECT
+				m.industry_name,
+				m.industrial_management_id,
+				m.chart_permission_id
+			FROM
+				cygx_industrial_management AS m
+			INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
+			INNER JOIN cygx_article AS a ON a.article_id = mg.article_id AND a.article_type != 'lyjh'
+			WHERE
+				1 = 1 AND m.industry_name = ? AND a.publish_status = 1 AND a.article_id < 1000000
+			GROUP BY
+				m.industrial_management_id`
+	err = orm.NewOrm().Raw(sql, industryName).QueryRow(&item)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -16,6 +16,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityController"],
+        beego.ControllerComments{
+            Method: "ActivityListNew",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"],
         beego.ControllerComments{
             Method: "AskAdd",

+ 348 - 4
services/activity.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/utils"
@@ -14,11 +15,11 @@ import (
 // @Param   ActivityTypeIds   query   string  false     "活动类型id 多个用 , 隔开"
 // @Param   ActiveState   query   string  false       "活动进行状态 未开始:1、进行中2、已结束3"
 // @Param   WhichDay   query   string  false       "哪一天 今天:1、明天:2,多个用 , 隔开"
-// @Param   IsPower   query   int  false       "是否选择有权限行业 ,1是 0 否 默认0"
+// @Param   WhichTime   query   string  false       "已结束的时间筛选项 本周:1、上周:2 、本月:3、上月:4"
 // @Param   Label   query   string  false       "搜索主题 多个用 , 隔开"
 // @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, playBack int) (conditionActivity string, err error) {
+// @Param   KeyWord   query   string  false       "搜索关键词"
+func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermissionIds, whichDay, activeState, label string, isPower, source int, keyWord string, playBack int, whichTime string) (conditionActivity string, err error) {
 	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
 	if err != nil {
 		return
@@ -222,6 +223,24 @@ func HandleActivityPowerList(listActivity []*models.CygxActivity, user *models.W
 	return
 }
 
+//5.3版本活动标签字符串处理
+func LabelStr(label string, isShowSubjectName int, temporaryLabel string) (labelNew string) {
+	slicebr := strings.Split(label, "-")
+	if len(slicebr) > 1 {
+		if isShowSubjectName == 1 {
+			labelNew = slicebr[1]
+		} else {
+			labelNew = slicebr[0]
+		}
+	} else {
+		labelNew = label
+	}
+	if temporaryLabel != "" {
+		labelNew = temporaryLabel
+	}
+	return labelNew
+}
+
 //列表
 func HandleActivityTypeHomeList(listType []*models.ActivityTypeHome, listActivity []*models.CygxActivity, user *models.WxUserItem) (items []*models.ActivityTypeHome, err error) {
 	mapActivity := make(map[int][]*models.CygxActivityLabelList)
@@ -231,7 +250,7 @@ func HandleActivityTypeHomeList(listType []*models.ActivityTypeHome, listActivit
 			v.ActivityTypeId = 1
 		}
 		item := new(models.CygxActivityLabelList)
-		item.KeyWord = v.Label
+		item.KeyWord = LabelStr(v.Label, v.IsShowSubjectName, v.TemporaryLabel)
 		item.Resource = 1
 		if v.YidongActivityId != "" {
 			item.IsExternalLabel = true
@@ -245,9 +264,334 @@ func HandleActivityTypeHomeList(listType []*models.ActivityTypeHome, listActivit
 		v.Resource = 1
 		if len(mapActivity[v.ActivityTypeId]) > 0 {
 			v.List = mapActivity[v.ActivityTypeId]
+		} else {
+			v.List = make([]*models.CygxActivityLabelList, 0)
 		}
 	}
 	items = listType
 	fmt.Println(len(mapActivity))
 	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
+}
+
+//GetActivityVideoResp 处理活动视频频回放
+func GetActivityVideoResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVideoListResp, err error) {
+	var condition string
+	var ativityVIdstr string
+	for _, v := range mapActivityId {
+		ativityVIdstr += strconv.Itoa(v) + ","
+	}
+	if ativityVIdstr == "" {
+		return
+	}
+
+	ativityVIdstr = strings.TrimRight(ativityVIdstr, ",")
+	condition += ` AND art.activity_id IN  (` + ativityVIdstr + `) `
+	var pars []interface{}
+	//endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
+	//condition += ` AND art.activity_time > ? `
+	//pars = append(pars, endTime)
+	videoList, e := models.GetActivityVideoListAll(condition, pars, 0, 1000)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = e
+		return
+	}
+	mapActivityVideo := make(map[int]*models.CygxActivityVideoListResp)
+	if len(videoList) > 0 {
+		for _, v := range videoList {
+			mapActivityVideo[v.ActivityId] = v
+		}
+	}
+	mapItem = mapActivityVideo
+	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
+		articleDetail.IsShowDetails = true
+		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
+	}
+	activityTimeText := articleDetail.ActivityTimeText
+	activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
+	activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
+	articleDetail.ActivityTimeText = activityTimeText
+	return
+}
+
+// GetActivityNewLabelMap 获取活动【新】标签Map
+func GetActivityNewLabelMap(activityIds []int) (labelMap map[int]bool, industryNewMap map[int]bool, err error) {
+	labelMap = make(map[int]bool, 0)
+	industryNewMap = make(map[int]bool, 0)
+	if len(activityIds) == 0 {
+		return
+	}
+
+	// 获取活动关联的产业
+	var groupCond string
+	var groupPars []interface{}
+	groupCond += ` AND a.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
+	groupPars = append(groupPars, activityIds)
+	groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars)
+	if e != nil {
+		err = errors.New("获取活动产业关联列表失败, Err: " + e.Error())
+		return
+	}
+	activityIndustryMap := make(map[int][]int, 0)
+	industryIds := make([]int, 0)
+	for i := range groups {
+		industryIds = append(industryIds, groups[i].IndustrialManagementId)
+		activityIndustryMap[groups[i].ActivityId] = append(activityIndustryMap[groups[i].ActivityId], groups[i].IndustrialManagementId)
+	}
+
+	// 获取新产业Map
+	industryLabelMap, e := GetIndustryNewLabelMap(industryIds)
+	if e != nil {
+		err = errors.New("获取产业新标签Map失败, Err: " + e.Error())
+		return
+	}
+
+	// 判断活动是否为新
+	for k := range industryLabelMap {
+		for k2, v2 := range activityIndustryMap {
+			if labelMap[k2] {
+				continue
+			}
+			// 活动的产业ID中存在一个新产业即为新活动
+			if utils.InArrayByInt(v2, k) {
+				labelMap[k2] = true
+			}
+		}
+	}
+
+	return
+}
+
+// GetIndustryNewLabelMap 获取产业【新】标签Map
+func GetIndustryNewLabelMap(industryIds []int) (labelMap map[int]bool, err error) {
+	labelMap = make(map[int]bool, 0)
+	industryIdLen := len(industryIds)
+	if industryIdLen == 0 {
+		return
+	}
+
+	// 获取产业关联的报告最早发布时间及最近的发布时间
+	var timeCond string
+	var timePars []interface{}
+	timeCond += ` AND b.publish_status = 1`
+	if industryIdLen > 0 {
+		timeCond += ` AND a.industrial_management_id IN (` + utils.GetOrmInReplace(industryIdLen) + `)`
+		timePars = append(timePars, industryIds)
+	}
+	industryTimeList, e := models.GetIndustryArticleMinMaxPublishTime(timeCond, timePars)
+	if e != nil {
+		err = errors.New("获取产业文章最大最小发布时间失败, Err: " + e.Error())
+		return
+	}
+
+	// 判断产业是否为新
+	nowTime := time.Now().Local()
+	threeMonthBefore := nowTime.AddDate(0, -3, 0)
+	nullTime, _ := time.ParseInLocation(utils.FormatDateTime, "0001-01-01 00:00:00", time.Local)
+	industryMap := make(map[int]*models.IndustryArticleMinMaxPublishTime, 0)
+	for i := range industryTimeList {
+		industryMap[industryTimeList[i].IndustrialManagementId] = industryTimeList[i]
+	}
+	for i := range industryIds {
+		iid := industryIds[i]
+		item := industryMap[iid]
+		if item != nil {
+			// 最早发布时间为空 / 最早发布时间在三个月前之后
+			if item.MinPublishTime.Equal(nullTime) || (item.MinPublishTime.After(threeMonthBefore)) {
+				labelMap[iid] = true
+			}
+		} else {
+			// 产业无报告, 则为新产业
+			labelMap[iid] = true
+		}
+	}
+	return
+}
+
+//GetSpecialDetailUserPower 处理用户查看专项调研详情的权限
+func GetSpecialDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) {
+	permissionStr, e := GetCompanyPermission(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	fmt.Println(permissionStr)
+	//如果没有对应的升级权限,则返回
+	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+		return
+	}
+	//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
+}
+
+// 校验被分享的用户是否有查看详情的权限
+func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, userType int, user *models.WxUserItem) (noPower bool, err error) {
+	//如果是弘则的就不进行可见权限校验
+	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
+	}
+	//1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户
+	if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
+		noPower = true
+	}
+	if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
+		noPower = true
+	}
+	if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
+		noPower = true
+	}
+	if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
+		noPower = true
+	}
+	if !noPower {
+		noPower, err = CheckUserPowerByActivityChoose(user, activityInfo)
+	}
+	return
+}
+
+//处理活动本组们是否决策人权限
+func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *models.ActivityDetail) (noPower bool, err error) {
+	//处理 见范围 1,仅本组可见 、2,全部客户可见
+	if activityInfo.VisibleRange == 1 {
+		adminIds, errAdmin := models.GetSelleridWhichGroup(user.CompanyId, 2)
+		if errAdmin != nil {
+			err = errAdmin
+			return
+		}
+		sliceAdminIds := strings.Split(adminIds, ",")
+		var haveAdminId bool
+		for _, v := range sliceAdminIds {
+			if v == strconv.Itoa(activityInfo.AdminId) {
+				haveAdminId = true
+			}
+		}
+		if !haveAdminId {
+			noPower = true
+		}
+	}
+	//处理 是否仅决策人可见 0,否 、1,是
+	if activityInfo.IsMakerShow == 1 {
+		if user.IsMaker == 0 {
+			noPower = true
+		}
+	}
+	fmt.Println(noPower)
+	return
+}

+ 118 - 0
services/company_permission.go

@@ -0,0 +1,118 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"strings"
+)
+
+//GetCompanyPermission 获取公司对应的权限名称
+func GetCompanyPermission(companyId int) (permissionStr string, err error) {
+	permissionStr, err = models.GetCompanyPermission(companyId)
+	if err != nil {
+		return
+	}
+	permissionStr = strings.Replace(permissionStr, "(主观)", "", -1)
+	permissionStr = strings.Replace(permissionStr, "(客观)", "", -1)
+	return
+}
+
+//GetCompanyPermissionUpgrade 获取公司对应的升级权限名称
+func GetCompanyPermissionUpgrade(companyId int) (permissionStr string, err error) {
+	permissionStr, err = models.GetCompanyPermissionByUserTrip(companyId)
+	if err != nil {
+		return
+	}
+	permissionStr = strings.Replace(permissionStr, "(主观)", "", -1)
+	permissionStr = strings.Replace(permissionStr, "(客观)", "", -1)
+	return
+}
+
+//获取用户对应的权限申请状态
+func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
+	//HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
+	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 = 3
+		} else {
+			hasPermission = 4
+		}
+	} else {
+		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
+		if e != nil {
+			err = errors.New("GetCompanyPermission, Err: " + e.Error())
+			return
+		}
+		if companyPermission != "" {
+			if applyCount > 0 {
+				hasPermission = 4
+			} else {
+				//获取权益销售信息 如果是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 {
+					hasPermission = 2
+					sellerName = sellerItemQy.Mobile
+					sellerMobile = sellerItemQy.RealName
+				} else {
+					hasPermission = 5
+				}
+			}
+		}
+	}
+	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
+				}
+			}
+		}
+	}
+	popupMsg = "需要升级行业套餐权限才可查看此报告,请联系对口销售"
+	return
+}

+ 31 - 0
services/config.go

@@ -0,0 +1,31 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_clpt/models"
+)
+
+//是否展示限免标签
+func GetShowSustainable() (isShowSustainable bool) {
+	total, err := models.GetShowSustainable()
+	if err != nil {
+		fmt.Println("GetShowSustainable Err:", err.Error())
+		return
+	}
+	if total > 0 {
+		isShowSustainable = true
+	}
+	return
+}
+
+func GetShowSustainableNew() (isShowSustainable bool, err error) {
+	total, err := models.GetShowSustainable()
+	if err != nil {
+		fmt.Println("GetShowSustainable Err:", err.Error())
+		return
+	}
+	if total > 0 {
+		isShowSustainable = true
+	}
+	return
+}

+ 7 - 0
utils/constants.go

@@ -82,6 +82,7 @@ const (
 	OPEN_TOKEN_KEY                   string = "CLPT_OPEN_TOKEN_KEY" //策略品台开放平台的token key
 	OnlineTime                       string = "2021-06-01 00:00:01" //上线时间
 	HONG_GUAN_ID                     int    = 1
+	HZ_COMPANY_ID                    int    = 16
 )
 
 //模板消息推送类型
@@ -106,4 +107,10 @@ const (
 const (
 	C_CLASS_ACTIVITY_TYPE_ID      int = 7 //C类电话会会议ID
 	ANALYST_TELL_ACTIVITY_TYPE_ID int = 2 //分析师电话会ID
+
+)
+
+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"
 )