package controllers

import (
	"encoding/json"
	"fmt"
	"hongze/hongze_cygx/models"
	"hongze/hongze_cygx/services"
	"hongze/hongze_cygx/utils"
	"sort"
	"strconv"
	"strings"
	"time"

	"github.com/medivhzhan/weapp/v2"
	"github.com/rdlucklib/rdluck_tools/paging"
)

// 活动
type ActivityCoAntroller struct {
	BaseAuthController
}

type ActivityABaseController struct {
	BaseCommonController
}

type ActivityNoLoginController struct {
	BaseAuthMobileController
}

// @Title 活动类型列表
// @Description活动类型列表接口
// @Param   IsResearch   query   bool  true       "是否为研选"
// @Success 200 {object} models.ActivityTypeListResp
// @router /activityTypelist [get]
func (this *ActivityCoAntroller) List() {
	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"
		br.Ret = 408
		return
	}
	resp := new(models.ActivityTypeListResp)
	isResearch, _ := this.GetBool("IsResearch", false)
	var condition string

	//是否仅展示研选下的活动类型
	if isResearch {
		condition = " AND source_type IN (0,2) "
	}
	list, err := models.GetActivityTypeList(condition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 我的日程
// @Description 我的日程列表接口
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Param   Source   query   int  false     "来源 0:手机 ，1:Pc 默认0"
// @Success 200 {object} models.GetCygxActivityListRep
// @router /scheduleList [get]
func (this *ActivityCoAntroller) ScheduleList() {
	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")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)
	var condition string
	var conditionCount string
	var pars []interface{}
	condition += ` AND art.publish_status = 1    `
	if source == 1 {
		condition += ` AND art.yidong_activity_id = '' `
		conditionCount += ` AND art.yidong_activity_id = '' `
	}
	total, err := models.GetScheduleCount(conditionCount, uid)
	specialtotal, err := models.GetSpecialScheduleCount(uid)
	page := paging.GetPaging(currentIndex, pageSize, total+specialtotal)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	conditionCount = ` 	AND art.active_state = 2 `
	totalCount, err := models.GetScheduleCount(conditionCount, uid) //获取正在进行中的活动数量
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	var list []*models.ActivityDetail
	//全部都是进行中的活动
	if totalCount > currentIndex*pageSize {
		condition += ` AND art.active_state IN(2) `
		if source == 1 {
			condition += ` AND art.yidong_activity_id = '' `
		}
		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
		list = listHave
		if errList != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + errList.Error()
			return
		}
	} else if totalCount > currentIndex-1*pageSize && totalCount < currentIndex*pageSize { //部分是进行中的活动
		condition = `  AND art.publish_status = 1 AND art.active_state IN(2) `
		if source == 1 {
			condition += ` AND art.yidong_activity_id = '' `
		}
		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
		list = listHave
		if errList != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + errList.Error()
			return
		}
		pageSize = pageSize - len(listHave)
		condition = ` AND art.publish_status = 1 AND art.active_state IN(1,3) `
		if source == 1 {
			condition += ` AND art.yidong_activity_id = '' `
		}
		//listOther, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
		listOther, errList := services.GetScheduleAndSpecilList(user, condition, startSize, pageSize)
		if errList != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + errList.Error()
			return
		}
		if len(listOther) > 0 {
			for _, v := range listOther {
				list = append(list, v)
			}
		}
	} else {
		condition += ` AND art.active_state IN(1,3)` //全部都不是进行中的活动
		//listOther, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
		listOther, errList := services.GetScheduleAndSpecilList(user, condition, startSize, pageSize)
		list = listOther
		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.IsHideAppointment == 0 {
			list[k].IsShowAppointment = services.IsShowAppointment(v.ActivityTypeId, v.ChartPermissionName)
		}
		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
			list[k].IsCClassMeeting = true
		}
		mapActivityId = append(mapActivityId, v.ActivityId)
	}

	//添加我的日程访问记录
	//item := new(models.CygxPageHistoryRecord)
	//item.UserId = user.UserId
	//item.CreateTime = time.Now()
	//item.Mobile = user.Mobile
	//item.Email = user.Email
	//item.CompanyId = user.CompanyId
	//item.CompanyName = user.CompanyName
	//item.PageType = "MySchedule"
	//go models.AddCygxPageHistoryRecord(item)
	resp := new(models.GetCygxActivityListRep)

	//处理音频回放
	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
	}

	//处理不同的报名方式按钮回显
	mapActivitySignup, err := services.GetActivitySignupResp(mapActivityId, user)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetActivitySignupResp，Err:" + err.Error()
		return
	}
	for k, v := range list {
		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]
		}
		v.SignupType = mapActivitySignup[v.ActivityId]
		//处理列表的标签是否展示逻辑
		resp.List = append(resp.List, services.ActivityButtonShow(v))
	}
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title  活动详情
// @Description 获取活动详情接口
// @Param   ActivityId   query   int  true       "活动ID"
// @Param   Sence   query   int  true       "小程序二维码详情，扫码进入的详情ID"
// @Param   IsSendWx   query   int  false       "是否是通过微信模版进来的 1是，其它否"
// @Success Ret=200 {object} models.CygxActivityResp
// @router /detail [get]
func (this *ActivityCoAntroller) 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")
	isSendWx, _ := this.GetInt("IsSendWx")
	sence, _ := this.GetInt("Sence")
	if activityId == 0 && sence > 0 {
		activityId = sence
	}
	if activityId < 1 {
		br.Msg = "请输入活动ID"
		return
	}
	resp := new(models.CygxActivityResp)
	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 strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	signupCount, err := models.GetActivitySignupSuccessByUserCountNoHz(activityId)
	if err != nil {
		br.Msg = "获取信息"
		br.ErrMsg = "GetActivitySignupSuccessByUserCountNoHz，Err:" + err.Error()
		return
	}
	activityInfo.SignupNum = signupCount

	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		//是否展示限免标签
		if services.GetShowSustainable() && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
			activityInfo.IsShowSustainable = true
		}
		resp.HasPermission = 1
		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.IsHideAppointment == 0 {
			activityInfo.IsShowAppointment = services.IsShowAppointment(activityInfo.ActivityTypeId, activityInfo.ChartPermissionName)
		}
		activityInfo.ActivityTypeName = strings.Replace(activityInfo.ActivityTypeName, "（C类）", "", -1)

		//处理活动关联的产业
		industrialList, err := models.GetIndustrialActivityGroupManagementList(activityId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取活动关联的产业列表信息失败，Err:" + err.Error() + "activityId：" + strconv.Itoa(activityId)
			return
		}
		if activityInfo.TemporaryLabel != "" {
			industrialList = make([]*models.IndustrialManagementRep, 0)
			item := new(models.IndustrialManagementRep)
			item.IndustryName = activityInfo.Label
			industrialList = append(industrialList, item)
		} else {
			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) + ","
			}

			// 查研观向7.4-行业新标签
			industryNewMap, e := services.GetIndustryNewLabelMap(industryIds)
			if e != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取产业新标签失败, Err: " + e.Error()
				return
			}

			//判断产业下是否有关联的报告，并处理是否跳转
			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(user.UserId, condition, 0, 0)
				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
					}
					//非买方研选下的才展示New标签
					if activityInfo.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
						industrialList[k].IndustryNewLabel = industryNewMap[v.IndustrialManagementId]
					}
				}
			}
		}
		activityInfo.Listndustrial = industrialList
		if activityInfo.YidongActivityId != "" {
			ydTgc, _ := services.GetYiDongCreateUserInfo(user)
			yidongLongLink, err := services.GetYiDongOriginalLink(activityInfo)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "GetYiDongOriginalLink，Err:" + err.Error() + "activityId：" + strconv.Itoa(activityId)
				return
			}
			//yidongKwy := activityInfo.YidongActivityUrl
			//activityInfo.YidongActivityUrl = yidongLongLink + "?source=11&fromHz=true&tgc=" + ydTgc
			activityInfo.YidongActivityUrl = yidongLongLink + "%26source=11%26fromHz=true%26tgc=" + ydTgc
		}
		//处理音频回放
		var mapActivityId []int
		mapActivityId = append(mapActivityId, activityId)

		if activityInfo.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN { // 研选的音视频不在查研展示
			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 小程序活动详情页 除专家电话外 其余属于新产业的活动 ，不显示 new 标签
		if activityInfo.ActivityTypeName != "专家电话会" {
			for _, rep := range activityInfo.Listndustrial {
				rep.IndustryNewLabel = false
			}
		}
		//8.5 买方研选的活动去掉限免标签
		if strings.Contains(activityInfo.ChartPermissionName, "研选") {
			activityInfo.IsShowSustainable = false
		}
		//处理不同的报名方式按钮回显
		mapActivitySignup, err := services.GetActivitySignupResp(mapActivityId, user)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetActivitySignupResp，Err:" + err.Error()
			return
		}
		activityInfo.SignupType = mapActivitySignup[activityId]
		//处理活动关联的产业
		industrialListNew, err := models.GetIndustrialActivityGroupManagementList(activityId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取活动关联的产业列表信息失败，Err:" + err.Error() + "activityId：" + strconv.Itoa(activityId)
			return
		}
		//判断是不是通过微信模版推送消息进来的
		if isSendWx == 1 && len(industrialListNew) > 0 {
			industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "GetIndustryUserFollowMap，Err:" + err.Error()
				return
			}
			for _, v := range industrialListNew {
				if industryUserFollowMap[v.IndustrialManagementId] {
					activityInfo.IsFollowButton = true
				}
			}
			activityInfo.IsShowFollowButton = true
		}
		if activityInfo.ReportLink != "" {
			artList, err := services.GetActivityReportLinkToArticleList(activityInfo)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "解析文章关联的报告内容失败:" + activityInfo.ReportLink
				return
			}
			activityInfo.ArticleList = artList
		} else {
			activityInfo.ArticleList = make([]*models.ActivityArticleResp, 0)
		}
		if services.GetBelongingRai(user.Mobile) && activityInfo.SigninImg != "" {
			activityInfo.IsShowSigninButton = true
			activityInfo.IsShowSignUpDetail = true
		}
		//处理按钮是否展示问题
		//resp.Detail = services.ActivityButtonShow(activityInfo)
	} else {
		//用户未登录(绑定登录信息)的时候也能展示 v12.2.1
		if user.UserId == 0 {
			resp.HasPermission = 1
			//resp.Detail = services.ActivityButtonShow(activityInfo)
		} else {
			hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
				return
			}
			resp.PopupMsg = popupMsg
			resp.HasPermission = hasPermission
			resp.SellerName = sellerName
			resp.SellerMobile = sellerMobile
		}
	}

	//获取活动对应的封面图
	mapUrl := services.GetActivityImgMap([]*models.ActivityDetail{activityInfo})
	if mapUrl[activityId] != nil {
		activityInfo.ImgUrl = mapUrl[activityId].ImgUrl
	}

	activityInfo.HighlightsText, _ = services.GetReportContentTextSub(activityInfo.HighlightsText)
	activityInfo.ExpertText, _ = services.GetReportContentTextSub(activityInfo.Expert)
	activityInfo.ThemeText, _ = services.GetReportContentTextSub(activityInfo.Theme)
	//处理按钮是否展示问题
	resp.Detail = services.ActivityButtonShow(activityInfo)
	collectCount1, err := models.GetActivityVoiceCollectCount(uid, activityId)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "判断是否已收藏失败，Err:" + strconv.Itoa(uid) + ";activityId" + strconv.Itoa(activityId)
		return
	}
	collectCount2, err := models.GetActivityVideoCollectCountByActivityId(uid, activityId)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "判断是否已收藏失败，Err:" + strconv.Itoa(uid) + ";activityId" + strconv.Itoa(activityId)
		return
	}
	if collectCount1+collectCount2 > 0 {
		resp.Detail.IsCollect = true
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 活动报名
// @Description 活动报名接口
// @Param	request	body models.ActivitySingnupRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /signup/add [post]
func (this *ActivityCoAntroller) SignupAdd() {
	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
	signupStatus := ""
	var req models.ActivitySingnupRep
	resp := new(models.SignupStatus)
	//var total int
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	if user.Mobile == "" {
		user.Mobile = user.OutboundMobile
	}
	activityId := req.ActivityId
	signupType := req.SignupType
	hasPermission := 0
	if signupType == 1 && user.Mobile == "" && user.OutboundMobile == "" {
		resp.GoBindEmail = true
	}

	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	detailActivityType, err := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,GetActivityTypeDetailById Err:" + err.Error()
		return
	}
	// 如果是 易董办会 且没有勾选 可提供外呼 默认为自主入会
	if activityInfo.IsYidongConduct && activityInfo.IsCanOutboundCall == 0 {
		signupType = 4
	}
	item := new(models.CygxActivitySignup)

	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		hasPermission = 1
		signupStatus = "Success"
		resp.HasPermission = hasPermission
		resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
		if time.Now().After(resultTime.Add(-time.Minute * 60)) {
			signupStatus = "Overtime"
			resp.SignupType = signupType
			resp.SignupStatus = signupStatus
			resp.HasPermission = hasPermission
			resp.PopupMsg = "活动开始前1小时内无法预约，请联系对口销售处理"
			br.Ret = 200
			br.Success = true
			br.Msg = ""
			br.Data = resp
			return
		}
		//限制人数为1人的专家电话会 用户操作时的消息提示
		if activityInfo.LimitPeopleNum == 1 && activityInfo.ActivityTypeId == 1 {
			resp.HasPermission = hasPermission
			resp.SignupStatus = utils.FULLSTARFFED_MSG
			resp.PopupMsg = utils.ACTIVITY_ZJDHH_V1_MSG
			br.Ret = 200
			br.Success = true
			br.Msg = ""
			br.Data = resp
			return
		}

		var sellerName string
		sellerName, err = models.GetCompanySellerName(user.CompanyId)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
			return
		}

		popupMsg, err := services.CheckActivityUserAll(activityInfo, user)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "CheckActivityUserAll，Err:" + err.Error()
			return
		}
		if popupMsg != "" {
			br.Msg = popupMsg
			br.ErrMsg = fmt.Sprint("userId:", uid, "Activity:id", popupMsg)
			return
		}
		//人数已满：FullStarffed、单机构超过两人：TwoPeople、爽约次数过多：BreakPromise、超时：Overtime 、成功：Success"`
		//如果是下面几种情况则对报名信息做判断限制 （公司调研电话会（限制人数）、公司线下调研、专家/分析师线下沙龙）
		//if (activityInfo.ActivityTypeId == 3 && activityInfo.IsLimitPeople == 1) || activityInfo.ActivityTypeId > 3 {
		if activityInfo.IsLimitPeople == 1 {
			signupStatus, resp.PopupMsg, item.FailType, err = services.CheckActivitySignUpLimit(user, activityInfo)
			//判断优先级：总人数限制→单机构2人限制→爽约3次限制
			totalRestrict, err := models.GetUserRestrictCount(user.Mobile)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
				return
			}

			totalUserRestrictCount, err := models.GetActivitySignupByUserRestrictCount(uid, activityId)
			if err != nil {
				br.Msg = "获取失败"
				br.ErrMsg = "获取失败，Err:" + err.Error()
				return
			}
			//解除报名限制之后二次报名相同活动
			if totalUserRestrictCount > 0 && totalRestrict == 0 && resp.GoBindEmail != true {
				item.UserId = uid
				item.RealName = user.RealName
				item.SellerName = sellerName
				item.ActivityId = activityId
				item.CreateTime = time.Now()
				item.Mobile = user.Mobile
				item.Email = user.Email
				item.CompanyId = user.CompanyId
				item.CompanyName = user.CompanyName
				item.SignupType = signupType
				item.FailType = 0
				item.DoFailType = 0
				_, errSignup := models.AddActivitySignupByRestrict(item)
				if errSignup != nil {
					br.Msg = "操作失败"
					br.ErrMsg = "操作失败,Err:" + errSignup.Error()
					return
				}
				resp.HaqveJurisdiction = true
				resp.SignupType = signupType
				resp.SignupStatus = "Success"
				resp.HasPermission = hasPermission
				resp.ActivityId = activityId
				br.Ret = 200
				br.Success = true
				br.Msg = "操作成功"
				br.Data = resp
				return
			}
			totalMy, err := models.GetActivitySignupByUserCount(uid, activityId)
			if err != nil {
				br.Msg = "获取失败"
				br.ErrMsg = "获取失败，Err:" + err.Error()
				return
			}

			if signupStatus != "Success" && totalMy == 0 && resp.GoBindEmail != true {
				item.UserId = uid
				item.RealName = user.RealName
				item.SellerName = sellerName
				item.ActivityId = activityId
				item.CreateTime = time.Now()
				item.Mobile = user.Mobile
				item.Email = user.Email
				item.CompanyId = user.CompanyId
				item.CompanyName = user.CompanyName
				item.SignupType = signupType
				item.DoFailType = item.FailType
				if user.OutboundMobile != "" {
					item.OutboundMobile = user.OutboundMobile
					if user.OutboundCountryCode == "" {
						item.CountryCode = "86"
					} else {
						item.CountryCode = user.OutboundCountryCode
					}
				} else {
					item.OutboundMobile = user.Mobile
					if user.CountryCode == "" {
						item.CountryCode = "86"
					} else {
						item.CountryCode = user.CountryCode
					}
				}
				//添加报名信息，但是不加入日程
				_, errSignup := models.AddActivitySignupNoSchedule(item)
				if errSignup != nil {
					br.Msg = "操作失败"
					br.ErrMsg = "操作失败,Err:" + errSignup.Error()
					return
				}
			}
		}
		totalMySuccess, err := models.GetActivitySignupCount(uid, activityId)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		if totalMySuccess > 0 {
			br.Msg = "您已报名这个活动"
			return
		}
		if signupStatus == "Success" && resp.GoBindEmail != true {
			item.UserId = uid
			item.RealName = user.RealName
			item.SellerName = sellerName
			item.ActivityId = activityId
			item.CreateTime = time.Now()
			item.Mobile = user.Mobile
			item.Email = user.Email
			item.CompanyId = user.CompanyId
			item.CompanyName = user.CompanyName
			item.SignupType = signupType
			item.FailType = 0
			item.DoFailType = 0
			item.OutboundMobile = user.Mobile
			if user.OutboundMobile != "" {
				item.OutboundMobile = user.OutboundMobile
				if user.OutboundCountryCode == "" {
					item.CountryCode = "86"
				} else {
					item.CountryCode = user.OutboundCountryCode
				}
			} else {
				item.OutboundMobile = user.Mobile
				if user.CountryCode == "" {
					item.CountryCode = "86"
				} else {
					item.CountryCode = user.CountryCode
				}
			}
			_, errSignup := models.AddActivitySignup(item)
			if errSignup != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + errSignup.Error()
				return
			}
			resp.HaqveJurisdiction = true
			//1：预约外呼 、2：设置会议提醒 、 3：预约纪要 、4：活动报名
			if signupType == 1 {
				go services.ActivityUserRemind(user, activityInfo, 1)
				//resp.PopupMsg = "<b>预约成功，已加入您的活动日程</b><br/><br/>想要及时获取活动信息变更通知，请关注【查研观向小助手】公众号"
				resp.PopupMsg = "<b>预约成功，已加入您的活动日程</b><br/><br/>是否将活动日程加入您的系统日历，\n\n活动开始前获取手机日历提醒？"
			} else if signupType == 4 {
				go services.ActivityUserRemind(user, activityInfo, 4)
				//resp.PopupMsg = "<b>报名成功，请复制腾讯会议号打开腾讯会议app参会</b><br/>想要及时获取活动信息变更通知，请关注【查研观向小助手】公众号"
				resp.PopupMsg = "<b>报名成功，请复制腾讯会议号打开腾讯会议app参会</b><br/>是否将活动日程加入您的系统日历，\n\n活动开始前获取手机日历提醒？"
			} else {
				go services.ActivityUserRemind(user, activityInfo, 4)
				//resp.PopupMsg = "<b>报名成功，已加入您的活动日程</b><br/>想要及时获取活动信息变更通知，请关注【查研观向小助手】公众号"
				resp.PopupMsg = "<b>报名成功，已加入您的活动日程</b><br/>是否将活动日程加入您的系统日历，\n\n活动开始前获取手机日历提醒？"
				if activityInfo.IsZoom == 1 && activityInfo.IsLimitPeople > 0 {
					resp.PopupMsg = "<b>报名成功，已加入您的活动日程</b><br/><b>届时请通过zoom会议链接或app自主入会</b><br/>是否将活动日程加入您的系统日历，\n\n活动开始前获取手机日历提醒？"
				}
			}

			// 如果是买方研选下的专家沙龙，同时推给内容组四人
			if activityInfo.ActivityTypeId == 5 && activityInfo.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
				go services.SendNeiRongZuActivitieSignTemplateMsg(user, activityInfo)
				go services.SendNeiRongZuActivitieSignCategoryTemplateMsg(user, activityInfo)
			}
			go services.YanXuanActivityPointsBillSignupAdd(activityId, uid) // 用户报名添加到处理研选扣点
		}
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}

	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	//公司线下调研活动客户报名后给建会人，所属销售推送模板信息
	if signupStatus == "Success" {
		go services.SendResearchActivitiesTemplateMsg(user, activityInfo, "报名")
	}
	if signupType == 1 && user.IsMsgOutboundMobile == 0 {
		resp.GoOutboundMobile = true
		if user.Mobile != "" || user.OutboundMobile != "" {
			go models.ModifyWxUserIsMsgOutboundMobile(user.UserId)
		}
	}
	if user.OutboundMobile == "" {
		resp.Mobile = user.Mobile
		if user.CountryCode == "" && len(user.Mobile) == 11 {
			resp.CountryCode = "86"
		} else {
			resp.CountryCode = user.CountryCode
		}
	} else {
		resp.Mobile = user.OutboundMobile
		resp.CountryCode = user.OutboundCountryCode
	}
	//如果用户有绑定手机号，但是没有绑定外呼手机号
	if signupType == 1 && user.Mobile != "" && user.OutboundMobile == "" {
		var countryCode string
		if len(user.Mobile) == 8 {
			countryCode = "852"
		} else if len(user.Mobile) == 9 {
			countryCode = "886"
		} else if len(user.Mobile) == 10 {
			countryCode = "1"
		} else if len(user.Mobile) >= 11 {
			countryCode = "86"
		}
		models.BindUserOutboundMobileByMobile(user.Mobile, countryCode, uid)
	}
	resp.SignupType = signupType
	resp.SignupStatus = signupStatus
	//resp.HasPermission = hasPermission
	//if signupStatus == "Success" {
	resp.ActivityId = activityId
	resp.ActivityTypeName = activityInfo.ActivityName
	resp.ActivityTime = activityInfo.ActivityTime
	resp.ActivityType = detailActivityType.ActivityType
	//}

	//去关注12.6小程序添加日历 去关注公众号强制取消关注
	//total, err = models.GetUserSignupCount(user.UserId)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
	//	return
	//}
	//if total <= 1 {
	//	resp.GoFollow = true
	//}
	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	br.Data = resp
}

// @Title 活动取消报名
// @Description 活动取消报名接口
// @Param	request	body models.ActivitySingnupRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /signup/cancel [post]
func (this *ActivityCoAntroller) SignupCancel() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ActivitySingnupRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	signupType := req.SignupType
	item := new(models.CygxActivitySignup)
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	cancelDeadlineMsg := services.CheckCancelDeadline(activityInfo)
	if cancelDeadlineMsg != "" {
		br.Msg = cancelDeadlineMsg
		br.ErrMsg = cancelDeadlineMsg
		return
	}

	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
		if signupType == 1 {
			br.Msg = "活动开始前1小时内无法取消预约外呼，请联系对口销售处理"
		} else {
			br.Msg = "活动开始前1小时内无法取消报名，请联系对口销售处理"
		}
		return
	}
	total, err := models.GetActivitySignupCount(uid, activityId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	if total == 0 {
		br.Msg = "您暂未报名这个活动"
		return
	}
	item.UserId = uid
	item.ActivityId = activityId
	item.CreateTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	resp := new(models.SignupStatus)
	resp.ActivityId = activityId
	_, errSignup := models.CancelActivitySignup(item)
	if errSignup != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
		return
	}

	// 如果是买方研选下的专家沙龙，同时推给内容组四人
	if activityInfo.ActivityTypeId == 5 {
		go services.SendActivitieCancelSignTemplateMsg(user, activityInfo)
		go services.SendActivitieCancelSignCategoryTemplateMsg(user, activityInfo)
	}

	go services.SendResearchActivitiesTemplateMsg(user, activityInfo, "取消报名") //公司线下调研活动客户报名后给建会人，所属销售推送模板信息

	go services.YanXuanActivityPointsBillSignupCancel(activityId, uid) // 用户取消报名添加到处理研选扣点

	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	br.Data = resp
}

// @Title  用户搜索详情
// @Description 获取用户搜索详情接口
// @Param   IsShowJurisdiction   query   int  true       "是否仅展示有权限的，默认为0，1是，2否 "
// @Param   IsHideResearch   query   int  true       "是否隐藏研选行业 "
// @Success Ret=200 {object} models.ActivityUserSearchContentList
// @router /getUserSearchContent [get]
func (this *ActivityCoAntroller) GetUserSearchContent() {
	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
	}
	isHideResearch, _ := this.GetBool("IsHideResearch", false)
	uid := user.UserId
	detailSeearch := new(models.CygxActivityUserSearchContent)
	detailSeearch.IsShowJurisdiction = 0
	detailSeearch.ChartPermissionids = ""
	detailSeearch.ActiveState = ""
	resp := new(models.ActivityUserSearchContentList)
	detail, _ := models.GetUserSearchContentByUid(uid)
	if detail == nil {
		detail = detailSeearch
	}
	isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction")
	listActivityType, errActivityType := models.GetActivityTypeList("")
	if errActivityType != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败，Err:" + errActivityType.Error()
		return
	}
	var listChartPermissionid []*models.ActivityChartPermission
	var errChart error
	if isShowJurisdiction == 1 {
		listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId)
		listChartPermissionid = listChartPermissionidAll
		errChart = errChartAll
	} else if isShowJurisdiction == 2 {
		listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity()
		listChartPermissionid = listChartPermissionidAll
		errChart = errChartAll
	} else {
		if detail.IsShowJurisdiction == 1 {
			listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId)
			listChartPermissionid = listChartPermissionidAll
			errChart = errChartAll
		} else {
			listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity()
			listChartPermissionid = listChartPermissionidAll
			errChart = errChartAll
		}
	}

	if errChart != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + errChart.Error()
		return
	}
	if detail.IsShowJurisdiction == 1 {
		resp.IsShowJurisdiction = true
	}
	if isShowJurisdiction == 1 || detail.IsShowJurisdiction == 1 {
		resp.IsShowJurisdiction = true
		for k, _ := range listChartPermissionid {
			listChartPermissionid[k].IsChoose = true
		}
	}
	if isShowJurisdiction == 2 {
		resp.IsShowJurisdiction = false
	}
	activeStateList := []models.ActivityStaus{models.ActivityStaus{Id: 1, StatusName: "未开始", IsChoose: true}, models.ActivityStaus{Id: 2, StatusName: "进行中"}, models.ActivityStaus{Id: 3, StatusName: "已结束"}}
	list2, err := models.GetChartPermissionActivity()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}

	if activeStateList[1].IsChoose == activeStateList[2].IsChoose == false {
		activeStateList[0].IsChoose = true
	}
	var userType int
	userType, _, err = services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败！"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	var listChartPermissionidNew2 []*models.ActivityChartPermission
	for _, v := range list2 {
		if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
			v.PermissionName = utils.MAI_FANG_YAN_XUAN_NAME
		}
		if userType == 1 || isHideResearch {
			if !strings.Contains(v.PermissionName, "研选") {
				listChartPermissionidNew2 = append(listChartPermissionidNew2, v)
			}
		} else {
			listChartPermissionidNew2 = append(listChartPermissionidNew2, v)
		}
	}
	resp.ListChartPermission2 = listChartPermissionidNew2
	var listChartPermissionidNew []*models.ActivityChartPermission
	for _, v := range listChartPermissionid {
		if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
			v.PermissionName = utils.MAI_FANG_YAN_XUAN_NAME
		}
		if userType == 1 || isHideResearch {
			if !strings.Contains(v.PermissionName, "研选") {
				listChartPermissionidNew = append(listChartPermissionidNew, v)
			}
		} else {
			listChartPermissionidNew = append(listChartPermissionidNew, v)
		}
	}
	resp.ListActivityType = listActivityType
	resp.ListChartPermission = listChartPermissionidNew
	resp.ListActivityStaus = activeStateList
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 添加会议提醒
// @Description 添加会议提醒接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /meetingReminder/add [post]
func (this *ActivityCoAntroller) MeetingReminderAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	//var signupStatus string
	signupStatus := "Success"
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}

	//SignupStatus string `description:"报名状态：人数已满：FullStarffed、单机构超过两人：TwoPeople、爽约次数过多：BreakPromise、超时：Overtime 、成功：Success"`
	item := new(models.CygxActivityMeetingReminder)
	resp := new(models.SignupStatus)
	hasPermission := 0
	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
	if time.Now().After(resultTime.Add(-time.Minute * 15)) {
		br.Msg = "活动开始前15分钟无法设置会议提醒"
		return
	}

	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		hasPermission = 1
		signupStatus = "Success"

		//限制人数为1人的专家电话会 用户操作时的消息提示
		if activityInfo.LimitPeopleNum == 1 && activityInfo.ActivityTypeId == 1 {
			resp.HasPermission = hasPermission
			resp.SignupStatus = utils.FULLSTARFFED_MSG
			resp.PopupMsg = utils.ACTIVITY_ZJDHH_V1_MSG
			br.Ret = 200
			br.Success = true
			br.Msg = ""
			br.Data = resp
			return
		}

		totalMeeting, errMeeting := models.GetActivityMeetingReminderCount(uid, activityId)
		if errMeeting != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + errMeeting.Error()
			return
		}
		if totalMeeting > 0 {
			br.Msg = "您已预约，请勿重复预约"
			return
		}
		item.UserId = uid
		item.ActivityId = activityId
		item.CreateTime = time.Now()
		item.Mobile = user.Mobile
		item.Email = user.Email
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		resp.HasPermission = hasPermission
		_, errSignup := models.AddActivityMeetingReminder(item)
		if errSignup != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + errSignup.Error()
			return
		}
		resp.HaqveJurisdiction = true
		//1：预约外呼 、2：设置会议提醒 、 3：预约纪要 、4：活动报名
		go services.ActivityUserRemind(user, activityInfo, 2)
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}

	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	resp.SignupStatus = signupStatus
	resp.ActivityId = activityId
	//var total int
	//total, err = models.GetUserActivityMeetingReminderCount(user.UserId)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
	//	return
	//}
	//if total <= 1 {
	//	resp.GoFollow = true
	//}
	detailActivityType, err := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,GetActivityTypeDetailById Err:" + err.Error()
		return
	}
	resp.ActivityTypeName = activityInfo.ActivityName
	resp.ActivityTime = activityInfo.ActivityTime
	resp.ActivityType = detailActivityType.ActivityType
	br.Ret = 200
	br.Success = true
	if hasPermission == 1 {
		br.Msg = "设置成功，会前15分钟会为您推送微信消息提醒"
		resp.PopupMsg = "设置成功，会前15分钟会为您推送微信消息提醒<br/><br/>是否将活动日程加入您的系统日历，\n\n活动开始前获取手机日历提醒？"
		//resp.PopupMsg = "设置成功，会前15分钟会为您推送微信消息提醒<br/><br/>请关注【查研观向小助手】公众号，以获取微信消息提醒"
	}
	br.Data = resp
}

// @Title 取消会议提醒
// @Description 取消会议提醒接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /meetingReminder/cancel [post]
func (this *ActivityCoAntroller) MeetingReminderCancel() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	signupStatus := "Success"
	item := new(models.CygxActivityMeetingReminder)
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}

	//if signupStatus == "Success" {
	total, err := models.GetActivityMeetingReminderCount(uid, activityId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	if total == 0 {
		br.Msg = "您暂未添加该活动会议提醒"
		return
	}
	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
	if time.Now().After(resultTime.Add(-time.Minute * 15)) {
		br.Msg = "活动开始前15分钟无法取消会议提醒"
		return
	}
	item.UserId = uid
	item.ActivityId = activityId
	item.CreateTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	_, errSignup := models.CancelActivityMeetingReminder(item)
	if errSignup != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
		return
	}
	//}
	resp := new(models.SignupStatus)
	resp.SignupStatus = signupStatus
	resp.ActivityId = activityId
	br.Ret = 200
	br.Success = true
	br.Msg = "会议提醒已取消"
	br.Data = resp
}

// @Title 敏捷搜索关键词的列表
// @Description 获取敏捷搜索关键词的列表接口
// @Success 200 {object} models.ActivityFastsearchKeywordsListResp
// @router /fastSearchKeWord [get]
func (this *ActivityABaseController) FastSearch() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()

	resp := new(models.ActivityFastsearchKeywordsListResp)
	list, err := models.GetActivityFastsearchKeywordsList()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 活动带问
// @Description 新增活动带问接口
// @Param	request	body models.AddCygxActivityHelpAsk true "type json string"
// @Success Ret=200 新增成功
// @router /askAdd [post]
func (this *ActivityCoAntroller) AskAdd() {
	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"
		br.Ret = 408
		return
	}
	var req models.CygxActivityHelpAsk
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	if req.Content == "" {
		br.Msg = "建议内容不可为空"
		return
	}
	content := req.Content
	itemToken, err := services.WxGetToken()
	if err != nil {
		br.Msg = "GetWxAccessToken Err:" + err.Error()
		return
	}
	if itemToken.AccessToken == "" {
		br.Msg = "accessToken is empty"
		return
	}
	commerr, err := weapp.MSGSecCheck(itemToken.AccessToken, content)
	if err != nil {
		br.Msg = "内容校验失败！"
		br.ErrMsg = "内容校验失败，Err:" + err.Error()
		return
	}
	if commerr.ErrCode != 0 {
		br.Msg = "内容违规,请重新提交！"
		br.ErrMsg = "颜文字内容违规，Err:" + commerr.ErrMSG
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	//resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
	//if activityInfo.ActivityTypeId == 1 && activityInfo.ChartPermissionId != 31 {
	//	if time.Now().After(resultTime.Add(-time.Minute * 15)) {
	//		br.Msg = "活动开始前15分钟内无法提交问题"
	//		return
	//	}
	//} else {
	//	if time.Now().After(resultTime.Add(-time.Minute * 60)) {
	//		br.Msg = "活动开始前1小时内无法提交问题"
	//		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)
		return
	}
	item := new(models.CygxActivityHelpAsk)
	item.UserId = user.UserId
	item.ActivityId = req.ActivityId
	item.CompanyId = user.CompanyId
	item.CompanyName = companyDetail.CompanyName
	item.CreateTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.Content = content
	msgId, err := models.AddActivityHelpAsk(item)
	if err != nil {
		br.Msg = "提交失败"
		br.ErrMsg = "提交带问失败,Err:" + err.Error()
		return
	}

	var isSendMsg bool
	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
	if activityInfo.ActivityTypeId == 1 && activityInfo.ChartPermissionId != 31 {
		if time.Now().After(resultTime.Add(-time.Minute * 15)) {
			isSendMsg = true
		}
	} else {
		if time.Now().After(resultTime.Add(-time.Minute * 60)) {
			isSendMsg = true
		}
	}
	if isSendMsg {
		listEmail, err := models.GetAskEmail()
		if err != nil {
			br.Msg = "提交失败"
			br.ErrMsg = "提交带问失败,Err:" + err.Error()
			return
		}
		var sendMobile string
		for _, v := range listEmail {
			if strings.Index(activityInfo.Host, v.Name) > 0 {
				sendMobile = v.Mobile
			}
		}
		//如果是研选的就推送给汪洋
		if activityInfo.ChartPermissionId == 31 {
			sendMobile = utils.ActSendMsgMobile
		}

		//获取销售信息
		sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "提交失败"
			br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
			return
		}
		//给研究员发送消息
		if sendMobile != "" {
			openIpItem, _ := models.GetUserRecordByMobile(4, sendMobile)
			if openIpItem != nil && openIpItem.OpenId != "" {
				if sellerItem != nil {
					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "提问："+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
				}
			}
		}
		// 给所属销售发送消息
		if sellerItem != nil {
			openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
			if openIpItem != nil && openIpItem.OpenId != "" {
				services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "提问："+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
			}
			go services.SendWxCategoryMsgWithAsk(user, activityInfo, content, int(msgId))
		}
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "提交成功"
}

// @Title 更多主题列表（4.3版本）
// @Description 获取活动更多主题列表接口（4.3版本）
// @Success 200 {object} models.GetCygxActivityLabelListRep
// @router /labelMoreList [get]
func (this *ActivityCoAntroller) LabelMoreList() {
	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
	}
	userType, permissionStr, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	var startSize, pageSize int
	pageSize = 24
	var condition string
	var sortTime string
	//var conditionStatus string
	var pars []interface{}
	//活动可见限制
	var sqlExport string
	resp := new(models.GetCygxActivityLabelListRep)
	slicePer := strings.Split(permissionStr, ",")
	var permissionSqlStr string
	for _, v := range slicePer {
		if userType == 1 {
			//if v != "研选" {
			if !strings.Contains(v, "研选") {
				permissionSqlStr += "'" + v + "',"
			}
		} else {
			permissionSqlStr += "'" + v + "',"
		}
	}
	permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
	permissionSqlStr = strings.Replace(permissionSqlStr, "(主观)", "", -1)
	permissionSqlStr = strings.Replace(permissionSqlStr, "(客观)", "", -1)
	permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionSqlStr + `)`
	sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
	if userType == 2 {
		sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
	}
	if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
		sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
	}
	sqlExport += `) `

	//进行中的活动
	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.active_state = 2 `
	var conditionOr string
	if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
	}
	if (userType == 5) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
	}
	if userType == 1 {
		conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) `
	} else {
		conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
	}
	//判断客户规模是否属于可见范围的活动
	companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}

	if companyProduct != nil {
		if companyProduct.Scale != "" {
			conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
		}
	}
	condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr

	//进行中的活动
	sortTime = ` mintimesort ASC `
	list, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
	if errList != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + errList.Error()
		return
	}

	//已结束的活动
	conditionOr = ""
	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.active_state = 3 `
	if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
	}
	if (userType == 5) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
	}
	if userType == 1 {
		conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + permissionSqlStr + `) `
	} else {
		conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) `
	}
	condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
	startSize = 0
	pageSize = 24 - len(list)

	//已结束的活动
	sortTime = ` timesort DESC `
	listEnd, err := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	for _, v := range listEnd {
		list = append(list, v)
	}
	//标签字段关联的产业与标签处理
	for k, v := range list {
		list[k].KeyWord = services.LabelStr(v.KeyWord)
	}
	//添加更多主题访问记录
	item := new(models.CygxPageHistoryRecord)
	item.UserId = user.UserId
	item.CreateTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	item.PageType = "LabelMore"
	go models.AddCygxPageHistoryRecord(item)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 活动列表（4.3版本）
// @Description 获取活动列表接口（4.3版本）
// @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明天，3本周，4上周，5本月，6上月 多个用 , 隔开"
// @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:音频"
// @Param   TypeName   query   string  false       "电话会类型 ，1专家电话会 2分析师电话会"
// @Param   IsExternalLabel   query   int  false       "是否仅展示外部资源 1：是、0：否 默认0"
// @Param   IsResearchPoints   query   string  false       "是否仅展示研选扣点 1：展示研选扣点、2：展示外部资源 ，1,2两者都展示" //兼容前端
// @Param   IsResearch   query   bool  true       "是否为研选"
// @Success 200 {object} models.GetCygxActivityListRep
// @router /listNew [get]
func (this *ActivityCoAntroller) 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")
	isPower, _ := this.GetInt("IsPower")
	activityId, _ := this.GetInt("ActivityId") // 仅用于判断【新】标签
	//isExternalLabel, _ := this.GetInt("IsExternalLabel")   //
	isResearchPoints := this.GetString("IsResearchPoints") //
	isResearch, _ := this.GetBool("IsResearch", false)     // 是否为研选 查研观向11.0 （研选活动独立显示）
	if label == "undefined" {
		label = ""
	}
	if chartPermissionIds == "undefined" {
		chartPermissionIds = ""
	}
	// 查研观向7.4-始终查询宏观的活动
	if chartPermissionIds != "" {
		chartPermissionIds += ",1"
	}

	if whichDay == "undefined" {
		whichDay = ""
	}
	if activeState == "undefined" {
		activeState = ""
	}
	if activityTypeId == "undefined" {
		activityTypeId = ""
	}

	if activityTypeId == "5" {
		activityTypeId = "5,8" //专家线下沙龙可以查看买方线下交流
	}
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)
	//userType, permissionStr, err := services.GetUserType(user.CompanyId)
	var condition string
	var conditioninit string //初始化搜索条件
	var pars []interface{}
	var activityList []*models.ActivityDetail
	mapDingActivityId := make(map[int]int)

	//主题
	if label != "" {
		conditioninit += ` AND art.label  LIKE "%` + label + `%" `
	}
	//是否是研选
	if isResearch {
		chartPermissionIds = strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN)
	} else {
		conditioninit += ` AND ( art.chart_permission_id  !=  ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `  OR  ( art.is_show_hz = 1 AND art.chart_permission_id  =  ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `)  )`

		conditioninit += ` AND IF (	 art.active_state = 3, art.chart_permission_id != ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `, 1 = 1 ) ` //V 11.0 研选活动结束后就不在已结束页面展示了
	}

	//行业名称 易董过来的会，按照 副行业来筛选
	if len(chartPermissionIds) > 0 {
		//conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
		conditioninit += `  AND IF ( art.yidong_activity_id != '' , art.chart_permission_id_deputy  IN (` + chartPermissionIds + `) ,1=1 ) `
		conditioninit += `  AND IF ( art.yidong_activity_id = '' , art.chart_permission_id  IN (` + chartPermissionIds + `) ,1=1 ) `
	}
	//哪一天
	if whichDay != "" {
		var startDate string
		var endDate string
		if whichDay == "1" {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = startDate
		} else if whichDay == "2" {
			startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
			endDate = startDate
		} else if whichDay == "3" {
			startDate = utils.GetNowWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetLastWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5" {
			startDate = utils.GetNowMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetLastMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "1,2" {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
		} else if whichDay == "3,4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5,6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
		}
		conditioninit += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
		conditioninit += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
	}

	//活动状态搜索
	if activeState != "" {
		// 默认查看未开始跟进行中
		if activeState == "1" {
			conditioninit += ` AND art.active_state  IN (1,2)`
		} else {
			conditioninit += ` AND art.active_state  IN (` + activeState + `)`
		}
	} else {
		conditioninit += ` AND art.active_state  IN (1,2)`
	}

	// 如果是分析师电话会，那么可以连同C类一起查看
	if activityTypeId != "" {
		if activityTypeId == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
			conditioninit += `  AND art.activity_type_id IN (` + activityTypeId + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
		} else {
			conditioninit += `  AND art.activity_type_id IN (` + activityTypeId + `)`
		}
	}

	//关键词搜索
	if keyWord != "" {
		conditioninit += ` AND (art.label   REGEXP '` + keyWord + `' OR art.activity_name  REGEXP '` + keyWord + `' ) `
	}

	//回放
	if playBack == 1 {
		//获取所有带回放的活动ID
		playBackActivityIds, err := services.GetActivityPlayBackActivityIds()
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		conditioninit += ` AND art.activity_id IN ( ` + playBackActivityIds + `) `
	}

	//音频视频  1:视频 2:音频
	if filter > 0 {
		videoOrVoiceActivityIds, err := services.GetActivityVideoOrVoiceActivityIds(filter)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		conditioninit += ` AND art.activity_id IN ( ` + videoOrVoiceActivityIds + `) `
	}
	//外部资源，研选扣点的并集搜索
	if isResearchPoints == "1,2" || isResearchPoints == "2,1" {
		conditioninit += ` AND ( art.is_external_label = 1  OR art.is_research_points = 1 )`
	} else {
		// 是否为研选扣点
		if isResearchPoints == "1" {
			conditioninit += ` AND art.is_research_points = 1 `
		}
		//是否为外部资源
		if isResearchPoints == "2" {
			conditioninit += ` AND art.is_external_label = 1 `
		}
	}

	//活动可见限制
	//conditionActivityAll, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord, playBack, 3)
	conditionActivity, err := services.ActivityConditioninitSql(user, conditioninit, isPower)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取活动权限数据失败，Err:" + err.Error()
		return
	}
	condition += `  AND art.publish_status = 1 ` + conditionActivity
	//var conditionCount string
	//conditionCount = condition + conditionActivityAll
	total, err := models.GetActivityCount(condition, playBack, pars, filter)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	//搜索关键词初始化
	//conditionActivityKey, err := services.GetActivityonditionList(user, activityTypeId, chartPermissionIds, whichDay, activeState, label, 0, source, keyWord, playBack, 1)
	//if err != nil && err.Error() != utils.ErrNoRow() {
	//	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" || activeState == "1,2" || activeState == "" {
		conditionOrder = ` ORDER BY  art.top_time DESC , art.activity_time ASC  `
	}
	//conditionActivityKey += condition + conditionOrder
	condition += conditionOrder
	//fmt.Println(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 = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
			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.IsHideAppointment == 0 {
			list[k].IsShowAppointment = services.IsShowAppointment(v.ActivityTypeId, v.ChartPermissionName)
		}
		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)
	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
	}
	//处理不同的报名方式按钮回显
	mapActivitySignup, err := services.GetActivitySignupResp(mapActivityId, user)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetActivitySignupResp，Err:" + err.Error()
		return
	}
	for _, v := range list {
		if mapDingActivityId[v.ActivityId] == 0 {
			activityList = append(activityList, v)
		}
		v.SignupType = mapActivitySignup[v.ActivityId]
	}
	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]
		}
		//resp.List = append(resp.List, services.ActivityButtonShow(v))
	}
	resp.List = services.ActivityArrButtonShow(activityList)
	// 查研观向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)
	//}

	if activityTypeId == "3" || activityTypeId == "5" {
		resp.IsShowResearchPoints = true
	}
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 校验活动带问是否有权限
// @Description 校验活动带问是否有权限接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /checkAsk [post]
func (this *ActivityCoAntroller) CheckAsk() {
	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
	}
	var signupStatus string
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	resp := new(models.SignupStatus)
	hasPermission := 0
	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		hasPermission = 1
		signupStatus = "Success"
		//限制人数为1人的专家电话会 用户操作时的消息提示
		if activityInfo.LimitPeopleNum == 1 && activityInfo.ActivityTypeId == 1 {
			resp.HasPermission = hasPermission
			resp.SignupStatus = utils.FULLSTARFFED_MSG
			resp.PopupMsg = utils.ACTIVITY_ZJDHH_V1_MSG
			br.Ret = 200
			br.Success = true
			br.Msg = ""
			br.Data = resp
			return
		}
		resp.HaqveJurisdiction = true
		resp.HasPermission = hasPermission
		resp.SignupStatus = signupStatus
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}
	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	resp.ActivityId = activityId
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// @Title 活动类型下的主题列表（5.3版本）
// @Description 获取活动类型下的主题列表接口（5.3版本）
// @Param   ChartPermissionIds   query   string  false     "行业id 多个用 , 隔开"
// @Param   ActivityTypeIds   query   string  false     "活动类型id 多个用 , 隔开"
// @Param   ActiveState   query   string  false       "活动进行状态 未开始：1、进行中2、已结束3"
// @Param   WhichDay   query   string  false       "哪一天 今天：1、明天:2，多个用 , 隔开"
// @Param   WhichWeek   query   string  false       "哪一周 本周：1 上周：2"
// @Param   WhichMonth   query   string  false       "哪一月 本月：1 上月：2"
// @Param   WhichMonth   query   string  false       "哪一月 本月：1 上月：2"
// @Param   IsPower   query   int  false       "是否选择有权限行业 ，1是 0 否 默认0"
// @Param   IsResearch   query   bool  true       "是否为研选"
// @Success 200 {object} models.ActivityTypeListHomeResp
// @router /labelTypeListV5 [get]
func (this *ActivityCoAntroller) LabelTypeListV5() {
	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
	}
	pageSize, _ := this.GetInt("PageSize")
	isPower, _ := this.GetInt("IsPower")
	chartPermissionIds := this.GetString("ChartPermissionIds")
	whichDay := this.GetString("WhichDay")
	activeState := this.GetString("ActiveState")
	isResearch, _ := this.GetBool("IsResearch", false) // 是否为研选 查研观向11.0 （研选活动独立显示）
	//入参为 undefined 时的处理
	if chartPermissionIds == "undefined" {
		chartPermissionIds = ""
	}
	if whichDay == "undefined" {
		whichDay = ""
	}
	if activeState == "undefined" || activeState == "" {
		activeState = "1"
	}

	// 查研观向7.4-始终查询宏观的活动
	if chartPermissionIds != "" {
		chartPermissionIds += ",1"
	}

	userType, _, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	var startSize int
	pageSize = 1000
	var sortTime string
	var conditioninit string
	var pars []interface{}
	//活动可见限制

	permissionZhengShiStr, err := models.GetCompanyPermissionByUserZhengShi(user.CompanyId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	slicePer := strings.Split(permissionZhengShiStr, ",")
	//var permissionSqlStr string
	var permissionNameStr string
	for _, v := range slicePer {
		if userType == 1 {
			//if v != "研选" {
			if !strings.Contains(v, "研选") {
				permissionNameStr += "'" + v + "',"
			}
		} else {
			permissionNameStr += "'" + v + "',"
		}
	}
	permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1)
	permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1)
	permissionNameStr = strings.TrimRight(permissionNameStr, ",")

	if isResearch {
		chartPermissionIds = strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN)
	} else {
		conditioninit += ` AND ( art.chart_permission_id  !=  '` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `'  OR  ( art.is_show_hz = 1 AND art.chart_permission_id  =  '` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `')  )`

		conditioninit += ` AND IF (	 art.active_state = 3, art.chart_permission_id != ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `, 1 = 1 ) ` //V 11.0 研选活动结束后就不在已结束页面展示了
	}
	//行业名称
	//易董过来的会，按照 副行业来筛选
	if len(chartPermissionIds) > 0 {
		//conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
		conditioninit += `  AND IF ( art.yidong_activity_id != '' , art.chart_permission_id_deputy  IN (` + chartPermissionIds + `) ,1=1 ) `
		conditioninit += `  AND IF ( art.yidong_activity_id = '' , art.chart_permission_id  IN (` + chartPermissionIds + `) ,1=1 ) `
	}
	//哪一天
	if whichDay != "" {
		var startDate string
		var endDate string
		if whichDay == "1" {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = startDate
		} else if whichDay == "2" {
			startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
			endDate = startDate
		} else if whichDay == "3" {
			startDate = utils.GetNowWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetLastWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5" {
			startDate = utils.GetNowMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetLastMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "1,2" {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
		} else if whichDay == "3,4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5,6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else {
			startDate = time.Now().Format(utils.FormatDate)
			endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate)
		}
		conditioninit += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
		conditioninit += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
	}

	//活动状态搜索
	if activeState != "" {
		// 默认查看未开始跟进行中
		if activeState == "1" {
			conditioninit += ` AND art.active_state  IN (1,2)`
		} else {
			conditioninit += ` AND art.active_state  IN (` + activeState + `)`
		}
	} else {
		conditioninit += ` AND art.active_state  IN (1,2)`
	}
	var condition string
	//conditionActivity, err := services.GetActivityonditionList(user, "", chartPermissionIds, whichDay, activeState, "", isPower, 0, "", 0, 1)

	conditionActivity, err := services.ActivityConditioninitSql(user, conditioninit, isPower)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取活动权限数据失败，Err:" + err.Error()
		return
	}
	//condition += `AND art.is_limit_people = 1 ` + conditionActivity
	condition += conditionActivity
	sortTime = ` mintimesort ASC `
	listActivity, err := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	mapCity, err := services.GetActivityCityResp()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	mapActivity := make(map[int][]*models.CygxActivityLabelList)
	mapkeyWord := make(map[string]string)
	activityPointsByUserAllMap := services.GetActivityPointsByUserAllMap() // 获取对用户进行研选扣点的活动
	for _, v := range listActivity {
		if v.KeyWord == "" {
			continue
		}
		// 如果是C类电话会就不展示内容，且合并到分析师电话会
		if v.ActivityTypeId == 7 {
			v.ActivityTypeId = 2
		}

		// 如果是买方线下交流的活动，合并到专家线下交流
		if v.ActivityTypeId == 8 {
			v.ActivityTypeId = 5
		}
		item := new(models.CygxActivityLabelList)
		item.IsResearchPoints = activityPointsByUserAllMap[v.ActivityId]
		item.City = mapCity[fmt.Sprint(v.KeyWord, "{|}", v.ActivityTypeId)]
		item.KeyWord = services.LabelStrV5(v.KeyWord, v.IsShowSubjectName, v.TemporaryLabel)
		if _, ok := mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)]; ok {
			continue
		}
		item.Resource = 1
		item.ActivityId = v.ActivityId
		if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
			item.IsResearch = true
		}

		//易董同步过来的活动只展示外部资源标签
		if v.YidongActivityId != "" {
			item.IsResearchPoints = false
			item.IsResearch = false
		}
		item.IsExternalLabel = v.IsExternalLabel

		mapActivity[v.ActivityTypeId] = append(mapActivity[v.ActivityTypeId], item)
		mapkeyWord[fmt.Sprint(v.ActivityTypeId, "-", item.KeyWord)] = item.KeyWord
	}
	//
	var conditionType string
	var parsType []interface{}
	if isResearch {
		conditionType = "  AND  source_type IN (0,2) "
	} else {
		conditionType = " AND source_type IN (0,1) "
	}
	list, err := models.GetActivityTypeHomeList(conditionType, parsType)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp := new(models.ActivityTypeListHomeResp)
	for k, v := range list {
		if len(mapActivity[v.ActivityTypeId]) > 0 {
			for _, v2 := range mapActivity[v.ActivityTypeId] {
				v2.ImgUrlBg = v.ImgUrlBgs
			}
		}
		list[k].List = mapActivity[v.ActivityTypeId]
		list[k].Resource = 1
	}

	//获取对应活动的数量并排序
	activityIds := make([]int, 0) // 用于查询活动【新】标签Map
	intArr := make([]int, 0)
	var items []*models.ActivityTypeHome
	for _, v := range list {
		item := new(models.ActivityTypeHome)
		if len(v.List) > 0 {
			for i := range v.List {
				activityIds = append(activityIds, v.List[i].ActivityId)
			}
			item.List = v.List
			item.ActivityTypeName = v.ActivityTypeName
			item.ActivityTypeId = v.ActivityTypeId
			item.ImgUrlBg = v.ImgUrlBg
			item.ImgUrl = v.ImgUrl
			item.Resource = v.Resource
			items = append(items, item)
			intArr = append(intArr, len(v.List))
		}
	}
	sort.Sort(sort.Reverse(sort.IntSlice(intArr)))

	// 活动【新】标签Map
	newLabelMap, _, e := services.GetActivityNewLabelMap(activityIds)
	if e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取活动【新】标签Map失败, Err: " + e.Error()
		return
	}
	for k, _ := range list {
		for k2 := range list[k].List {
			list[k].List[k2].IsNew = newLabelMap[list[k].List[k2].ActivityId]
		}
	}

	var itemsNew []*models.ActivityTypeHome
	activityMap := make(map[int]int)
	for _, v := range intArr {
		for _, v2 := range items {
			item := new(models.ActivityTypeHome)
			if len(v2.List) > 0 && v == len(v2.List) && activityMap[v2.ActivityTypeId] == 0 {
				item.List = v2.List
				item.ActivityTypeName = v2.ActivityTypeName
				item.ActivityTypeId = v2.ActivityTypeId
				item.ImgUrlBg = v2.ImgUrlBg
				item.ImgUrl = v2.ImgUrl
				item.Resource = v2.Resource
				itemsNew = append(itemsNew, item)
				activityMap[v2.ActivityTypeId] = len(v2.List)
			}
		}
	}
	var lenList int
	//按照像素进行排序
	rowHeight := 83     //每一行的行高
	basicsHeight := 178 // 基础高度
	position := 1       // 初始化位置 ，1，左边， 2 右边
	var leftPx, rightPx int
	for k, v := range itemsNew {
		if leftPx <= rightPx {
			position = 1
		} else {
			position = 2
		}
		itemsNew[k].Position = position
		lenList = len(v.List)
		if lenList > 8 {
			lenList = 8
		}
		if position == 1 {
			leftPx += basicsHeight + rowHeight*lenList
			if lenList > 8 {
				lenList = leftPx - 41
			}
		} else {
			rightPx += basicsHeight + rowHeight*lenList
			if lenList > 8 {
				lenList = leftPx - 41
			}
		}
	}
	//研选互动不展示专项产业调研
	if !isResearch {
		//专项产业调研未开始状态不查询
		if activeState == "1" {
			activeState = ""
		}
		conditionActivitySpecial := services.ActivityLabelSpecialSql(chartPermissionIds, whichDay, activeState)
		//查询专项产业调研展示权限 仅对大套餐客户跟永续客户展示
		//if whichDay == "" {

		//speciaItem, err := services.GetActivityLabelSpecialList(user, isPower, chartPermissionIds, permissionNameStr)
		speciaItem, err := services.GetActivityLabelSpecialList(user, conditionActivitySpecial, activeState)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		if speciaItem != nil {
			if leftPx > rightPx {
				speciaItem.Position = 2
			} else {
				speciaItem.Position = 1
			}
			if len(speciaItem.List) > 0 {
				itemsNew = append(itemsNew, speciaItem)
			}
		}
		//}
	}
	//记录用户搜索的筛选条件
	item := new(models.CygxActivitySearchHistory)
	item.UserId = user.UserId
	item.Mobile = user.Mobile
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	item.CreateTime = time.Now()
	item.ChartPermissionIds = chartPermissionIds
	item.IsPower = isPower
	item.WhichDay = whichDay
	go models.AddCygxActivitySearchHistory(item)
	resp.List = itemsNew
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 专项产业调研列表
// @Description 获取专项产业调研列表接口
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} models.GetCygxActivitySpecialDetailListResp
// @router /special/del_list [get]
func (this *ActivityCoAntroller) SpecialList() {
	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")
	userType, permissionStr, err := services.GetUserType(user.CompanyId)

	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 sqlExport string
	slicePer := strings.Split(permissionStr, ",")
	var permissionSqlStr string
	for _, v := range slicePer {
		if userType == 1 {
			//if v != "研选" {
			if !strings.Contains(v, "研选") {
				permissionSqlStr += "'" + v + "',"
			}
		} else {
			permissionSqlStr += "'" + v + "',"
		}
	}

	//判断客户规模是否属于可见范围的活动
	companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}
	permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
	permissionSqlStr = strings.Replace(permissionSqlStr, "(主观)", "", -1)
	permissionSqlStr = strings.Replace(permissionSqlStr, "(客观)", "", -1)
	permissionSqlStr = ` AND art.chart_permission_name  IN (` + permissionSqlStr + `)`
	sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
	if userType == 2 {
		sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
	}
	if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
		sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
	}
	sqlExport += `) `
	condition += ` AND art.publish_status = 1 `
	condition = ` AND art.publish_status = 1  AND art.label != '' `
	var conditionOr string

	if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (1=1 AND   art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
	}
	if (userType == 5) && strings.Contains(permissionStr, "专家") {
		conditionOr += ` OR (1=1 AND art.customer_type_ids LIKE '%5%'	 ` + condition + `) `
	}
	if userType == 1 {
		conditionOr += ` OR ( 1=1` + condition + permissionSqlStr + `) `
	}
	if companyProduct != nil {
		if companyProduct.Scale != "" {
			conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
		}
	}
	if companyProduct != nil {
		if companyProduct.Scale != "" {
			conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'	 ` + condition + `) `
		}
	}
	condition += sqlExport + conditionOr
	total, err := models.GetActivitySpecialCount(condition, pars)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	list, errList := models.GetCygxActivitySpecialDetailList(condition, pars, uid, startSize, pageSize)
	if errList != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + errList.Error()
		return
	}
	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
	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 {
		list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
		if mapChart[v.ChartPermissionName] != "" {
			list[k].ImgUrl = mapChart[v.ChartPermissionName]
		}
		list[k].ActivityTypeName = "专项调研"

	}
	page := paging.GetPaging(currentIndex, pageSize, total)
	resp := new(models.GetCygxActivitySpecialDetailListResp)
	count, err := models.GetCygxUserFollowSpecial(user.UserId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
		return
	}
	if count == 1 && user.UserId > 0 {
		resp.IsFollow = true
	}
	if user.Mobile != "" {
		resp.IsBindingMobile = true
	}
	resp.List = list
	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.CygxActivitySpecialResp
// @router /special/detail [get]
func (this *ActivityCoAntroller) SpecialDetail() {
	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.CygxActivitySpecialResp)
	hasPermission := 0

	activityInfo, err := models.GetCygxActivitySpecialDetailById(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
	}
	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 {
		//companyDetailStatus = ""
	} 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.OperationMode = "Apply"
			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
	}
	itemAct := new(models.ActivityDetail)
	itemAct.CustomerTypeIds = activityInfo.CustomerTypeIds
	noPower, err := services.GetShareNoPowe(itemAct, 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 = "被分享客户不可见，获取信息失败"
		br.IsSendEmail = false
		return
	}

	if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, "研选") {
		br.Msg = "您暂无查看该活动权限"
		br.ErrMsg = "被分享客户不可见，永续客户无法查看研选行业"
		return
	}
	//判断是否已经申请过
	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)
		//冻结客户
		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.HasPermission = hasPermission
				resp.OperationMode = "Apply"
				resp.PopupMsg = "您暂无权限参加此活动，若想参加可以申请开通对应的试用权限"
				br.Ret = 200
				br.Success = true
				br.Msg = "获取成功"
				br.Data = resp
				return
			} else {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error()
				return
			}
		}
		var havePower bool
		if strings.Contains(permissionStr, activityInfo.ActivityTypeName) {
			havePower = true
		}
		if havePower {
			hasPermission = 1
			resp.HaqveJurisdiction = true
		} else {
			if permissionStr == "专家" {
				resp.PopupMsg = "您暂无权限参加此活动，若想参加可以申请开通对应的试用权限"
				resp.MsgType = "Type"
			} else {
				resp.PopupMsg = "您暂无权限参加此活动，若想参加可以申请开通对应的试用权限"
				resp.MsgType = "Industry"
			}
			if companyItem.ProductId == 2 {
				resp.SellerMobile = companyItem.Mobile
				resp.SellerName = companyItem.SellerName
				resp.OperationMode = "Call"
				hasPermission = 2
			} else {
				hasPermission = 5
			}
		}
	} else { //潜在客户
		if applyCount > 0 {
			hasPermission = 4
		} else {
			if sellerItem != nil {
				hasPermission = 5
			} else {
				hasPermission = 3
			}
		}
		resp.OperationMode = "Apply"
		resp.PopupMsg = "您暂无权限参加此活动，若想参加可以申请开通对应的试用权限"
	}
	if hasPermission == 1 {
		count, err := models.GetCygxUserFollowSpecial(user.UserId)
		if err != nil {
			br.Msg = "获取数据失败！"
			br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
			return
		}
		if count == 1 {
			resp.IsFollow = true
		}
		activityInfo.ActivityTypeName = "专项调研"
		resp.Detail = activityInfo
	}
	resp.HasPermission = hasPermission
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 感兴趣、不感兴趣
// @Description 感兴趣、不感兴趣接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupSpecialStatus
// @router /special/signup/add [post]
func (this *ActivityCoAntroller) SpecialSignupAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ActivityIdRep
	resp := new(models.SignupSpecialStatus)
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetCygxActivitySpecialDetail(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	//havePower, err := services.GetSpecialDetailUserPower(user, activityInfo)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
	//	return
	//}

	var havePower bool
	havePower = true
	//判断有没有对应的权限，如果没有则给出对应的状态码
	if havePower {
		resp.HasPermission = 1
		total, err := models.GetUserCygxActivitySpecialSignup(user.UserId, activityId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
			return
		}
		resp.SignupStatus = 1
		//判断是删除还是添加
		if total == 0 {
			//获取销售信息
			sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
				return
			}
			item := new(models.CygxActivitySpecialSignup)
			item.UserId = uid
			item.RealName = user.RealName
			item.ActivityId = activityId
			item.CreateTime = time.Now()
			item.Mobile = user.Mobile
			item.Email = user.Email
			item.CompanyId = user.CompanyId
			item.CompanyName = user.CompanyName
			if sellerItem != nil {
				item.SellerName = sellerItem.RealName
			}
			err = models.AddCygxActivitySpecialSignup(item)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + err.Error()
				return
			}
			resp.Status = 1
			resp.PopupMsg = "感谢反馈"
			resp.PopupMsg2 = "此调研具体行程尚未确认，待预报名人数满10人后弘则会确定行程并推送给您活动日期，只有在确认行程中再次报名才完成占位。"
			//给所属销售发送消息
			//if sellerItem.Mobile != "" {
			//	openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
			//	if openIpItem != nil && openIpItem.OpenId != "" {
			//		if sellerItem != nil {
			//			go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, "sale", openIpItem)
			//		}
			//	}
			//}
			// 给芳姐发消息
			//cnf, _ := models.GetConfigByCode("tpl_msg")
			actList, _ := models.GetActivityListSpecialByActivityId(activityId)
			//if cnf != nil {
			//	openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue)
			//	if openIpItem != nil && openIpItem.OpenId != "" {
			//		if len(actList) == 5 {
			//			var companyName string
			//			for _, v := range actList {
			//				companyName += "【" + v.CompanyName + "】"
			//			}
			//			go services.SendSpecialTemplateMsg(companyName, "", "", activityInfo.ResearchTheme, "", openIpItem)
			//		}
			//	}
			//}
			//感兴趣人数到达10人时，模板消息发送给活动负责人
			if len(actList) == 10 {
				go services.SendWxMsgActivitySpecial10(activityInfo)
			}

			//用户专项调研操作行为，模板消息推送
			//go services.SpecialActivityUserRemind(user, activityInfo, 1)

			//用户相关行为，给对应销售发模板消息
			go services.ActivitySpecialUserRmind(user, activityId, 1)
		} else {
			err = models.DeleteCygxActivitySpecialSignup(user.UserId, activityId)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + err.Error()
				return
			}
			resp.Status = 2
		}
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermission(user)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	br.Data = resp
}

// @Title 新调研通知取消跟添加
// @Description 新调研通知取消跟添加接口
// @Param	request	body models.ArticleCollectResp true "type json string"
// @Success 200
// @router /special/follow [post]
func (this *ActivityCoAntroller) SpecialMsg() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请重新登录"
		br.Ret = 408
		return
	}
	resp := new(models.ArticleCollectResp)
	count, err := models.GetCygxUserFollowSpecial(user.UserId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
		return
	}
	if count == 0 {
		item := new(models.CygxUserFollowSpecial)
		item.UserId = user.UserId
		item.RealName = user.RealName
		item.CreateTime = time.Now()
		item.Mobile = user.Mobile
		item.Email = user.Email
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		item.CreateTime = time.Now()
		err := models.AddUserFollowSpecial(item)
		if err != nil {
			br.Msg = "操作失败！"
			br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
			return
		}
		resp.Status = 1
	} else {
		err := models.DeleteCygxUserFollowSpecial(user.UserId)
		if err != nil {
			br.Msg = "操作失败！"
			br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
			return
		}
		resp.Status = 2
	}
	br.Ret = 200
	br.Data = resp
	br.Success = true
	br.Msg = "操作成功！"
}

// @Title 活动类型下的主题列表（6.0Pc版本）
// @Description  获取活动类型下的主题列表接口（6.0Pc版本）
// @Param   ChartPermissionIds   query   string  false     "行业id 多个用 , 隔开"
// @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"
// @Success 200 {object} models.ActivityTypeListHomeRespPc
// @router /labelTypeListV6Pc_del [get]
func (this *ActivityCoAntroller) LabelTypeListV6Pc() {
	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
	}
	pageSize, _ := this.GetInt("PageSize")
	isPower, _ := this.GetInt("IsPower")
	playBack, _ := this.GetInt("PlayBack")
	//currentIndex, _ := this.GetInt("CurrentIndex")
	chartPermissionIds := this.GetString("ChartPermissionIds")
	//activityTypeIds := this.GetString("ActivityTypeIds")
	whichDay := this.GetString("WhichDay")
	activeState := this.GetString("ActiveState")
	//入参为 undefined 时的处理
	if chartPermissionIds == "undefined" {
		chartPermissionIds = ""
	}
	// 查研观向7.4-始终查询宏观的活动
	if chartPermissionIds != "" {
		chartPermissionIds += ",1"
	}
	if whichDay == "undefined" {
		whichDay = ""
	}
	if activeState == "undefined" || activeState == "" || activeState == "1" {
		activeState = "1,2"
	}

	//adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
	//if err != nil {
	//	br.Msg = "获取失败"
	//	br.ErrMsg = "获取本组下的销售失败，Err:" + err.Error()
	//	return
	//}
	userType, permissionStr, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	//isMaker := user.IsMaker

	var startSize int
	pageSize = 8
	var sortTime string
	var pars []interface{}
	//活动可见限制
	slicePer := strings.Split(permissionStr, ",")
	var permissionNameStr string
	for _, v := range slicePer {
		if userType == 1 {
			//if v != "研选" {
			if !strings.Contains(v, "研选") {
				permissionNameStr += "'" + v + "',"
			}
		} else {
			permissionNameStr += "'" + v + "',"
		}
	}
	permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1)
	permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1)
	permissionNameStr = strings.TrimRight(permissionNameStr, ",")

	// 查研观向7.4-始终查询宏观的权限(无论是否有权限)
	if permissionNameStr == `` {
		permissionNameStr = `'宏观'`
	} else {
		permissionNameStr += `, '宏观'`
	}

	list, err := models.GetActivityTypeHomeListPc()
	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
	//}
	var sqlExport string
	//处理专家权限的查询
	sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
	if userType == 2 {
		sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
	}
	if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
		sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
	}
	sqlExport += `) `
	resp := new(models.ActivityTypeListHomeRespPc)
	for k, v := range list {
		// 如果是C类电话会就不展示内容，且合并到分析师电话会
		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
			continue
		}
		var condition string

		conditionActivity, err := services.GetActivityonditionList(user, strconv.Itoa(v.ActivityTypeId), chartPermissionIds, whichDay, activeState, "", isPower, 1, "", playBack, 1)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取活动权限数据失败，Err:" + err.Error()
			return
		}
		//condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr
		condition += `AND art.is_limit_people = 1 AND art.yidong_activity_id = '' ` + conditionActivity
		sortTime = ` mintimesort ASC `
		labelList, err := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		//标签字段关联的产业与标签处理
		for k2, v2 := range labelList {
			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
			labelList[k2].Resource = 1
		}
		list[k].List = labelList
		list[k].Resource = 1
	}

	//if whichDay == "" {
	//	//查询专项产业调研展示权限
	//	//var scale string
	//	//if companyProduct != nil {
	//	//	scale = companyProduct.Scale
	//	//}
	//	speciaItem, err := services.GetActivityLabelSpecialList(user, isPower, chartPermissionIds, permissionNameStr)
	//	if err != nil {
	//		br.Msg = "获取失败"
	//		br.ErrMsg = "获取失败，Err:" + err.Error()
	//		return
	//	}
	//	if len(speciaItem.List) > 0 {
	//		itemList := new(models.ActivityTypeHomePc)
	//		itemList.ActivityTypeName = "专项产业调研"
	//		itemList.Resource = 2
	//		itemList.List = speciaItem.List
	//		itemList.ActivityTypeId = 7
	//		itemList.OnlineIco = "https://hzstatic.hzinsights.com/static/temp/20220707202207/20220707/0H4md6VgZMuIttggMUnJxgrlayxC.png"
	//		itemList.ImgUrlBgPc = "https://hzstatic.hzinsights.com/static/temp/20220707202207/20220707/rFwAM1c4fIMJM0EGoUkUYl25XH9L.png"
	//		list = append(list, itemList)
	//	}
	//}
	// 查研观向7.4-活动【新】标签
	activityIds := make([]int, 0)
	for _, v := range list {
		if len(v.List) > 0 {
			for i := range v.List {
				activityIds = append(activityIds, v.List[i].ActivityId)
			}
		}
	}
	newLabelMap, _, e := services.GetActivityNewLabelMap(activityIds)
	if e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取活动【新】标签Map失败, Err: " + e.Error()
		return
	}
	for k := range list {
		for k2 := range list[k].List {
			list[k].List[k2].IsNew = newLabelMap[list[k].List[k2].ActivityId]
		}
	}

	//记录用户搜索的筛选条件
	{
		item := new(models.CygxActivitySearchHistory)
		item.UserId = user.UserId
		item.Mobile = user.Mobile
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		item.CreateTime = time.Now()
		item.ChartPermissionIds = chartPermissionIds
		item.IsPower = isPower
		item.WhichDay = whichDay
		go models.AddCygxActivitySearchHistory(item)
	}

	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 预约纪要
// @Description 预约纪要接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.AppointmentResp
// @router /appointment/add [post]
func (this *ActivityCoAntroller) ActivityAppointmentAdd() {
	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
	signupStatus := "Success"
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	//判断是否已经预约过
	totalAppointment, err := models.GetUserCygxActivityAppointmentCount(uid, activityId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	if totalAppointment > 0 {
		br.Msg = "您已预约！"
		return
	}

	//SignupStatus string `description:"报名状态：人数已满：FullStarffed、单机构超过两人：TwoPeople、爽约次数过多：BreakPromise、超时：Overtime 、成功：Success"`
	item := new(models.CygxActivityAppointment)
	resp := new(models.SignupStatus)
	hasPermission := 0
	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		hasPermission = 1
		signupStatus = "Success"
		//限制人数为1人的专家电话会 用户操作时的消息提示
		if activityInfo.LimitPeopleNum == 1 && activityInfo.ActivityTypeId == 1 {
			resp.HasPermission = hasPermission
			resp.SignupStatus = utils.FULLSTARFFED_MSG
			resp.PopupMsg = utils.ACTIVITY_ZJDHH_V1_MSG
			br.Ret = 200
			br.Success = true
			br.Msg = ""
			br.Data = resp
			return
		}
		totalMeeting, errMeeting := models.GetUserCygxActivityAppointmentCount(uid, activityId)
		if errMeeting != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + errMeeting.Error()
			return
		}
		if totalMeeting > 0 {
			br.Msg = "您已预约，请勿重复预约"
			return
		}
		var sellerName string
		sellerName, err = models.GetCompanySellerName(user.CompanyId)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
			return
		}
		item.UserId = uid
		item.ActivityId = activityId
		item.CreateTime = time.Now()
		item.Mobile = user.Mobile
		item.Email = user.Email
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		item.SellerName = sellerName
		item.RealName = user.RealName
		err = models.AddCygxActivityAppointment(item)
		if err != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + err.Error()
			return
		}
		resp.HaqveJurisdiction = true
		//1：预约外呼 、2：设置会议提醒 、 3：预约纪要 、4：活动报名
		go services.ActivityUserRemind(user, activityInfo, 3)
		resp.HasPermission = hasPermission
		resp.SignupStatus = signupStatus
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}

	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}

	resp.ActivityId = activityId
	//var total int
	//total, err = models.GetUserCygxActivityAppointmentCountByUid(user.UserId)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
	//	return
	//}
	//if total <= 1 {
	//	resp.GoFollow = true
	//}
	detailActivityType, err := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,GetActivityTypeDetailById Err:" + err.Error()
		return
	}
	resp.ActivityTypeName = activityInfo.ActivityName
	resp.ActivityTime = activityInfo.ActivityTime
	resp.ActivityType = detailActivityType.ActivityType
	br.Ret = 200
	br.Success = true
	if hasPermission == 1 {
		br.Msg = "请关注【查研观向小助手】公众号，若有调研纪要发布/更新，将及时为您推送微信消息"
		resp.PopupMsg = "会议纪要预约成功<br/><br/>请关注【查研观向小助手】公众号，若有调研纪要发布/更新，将及时为您推送微信消息"
	}
	br.Data = resp
}

// @Title 取消预约纪要
// @Description 取消预约纪要接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /appointment/cancel [post]
func (this *ActivityCoAntroller) ActivityAppointmentCancel() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	signupStatus := "Success"
	item := new(models.CygxActivityAppointment)
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	total, err := models.GetUserCygxActivityAppointmentCount(uid, activityId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	if total == 0 {
		br.Msg = "您暂未预约该纪要"
		return
	}

	item.UserId = uid
	item.ActivityId = activityId
	item.CreateTime = time.Now()
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	_, errSignup := models.CancelcygxActivityAppointment(item)
	if errSignup != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errSignup.Error()
		return
	}
	resp := new(models.SignupStatus)
	resp.SignupStatus = signupStatus
	resp.ActivityId = activityId
	br.Ret = 200
	br.Success = true
	br.Msg = "已取消"
	br.Data = resp
}

// @Title 记录用户浏览音频回放接口
// @Description 记录用户浏览音频回放接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.AppointmentResp
// @router /voiceHistory/add [post]
func (this *ActivityCoAntroller) ActivityVoiceHistoryAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}

	activityId := req.ActivityId
	playSeconds := req.PlaySeconds

	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}

	go services.AddActivityVoiceHistory(user, activityId, playSeconds)
	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	return
}

// @Title 记录用户浏览视频回放接口
// @Description 记录用户浏览音频回放接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.AppointmentResp
// @router /videoHistory/add [post]
func (this *ActivityCoAntroller) ActivityVideoHistoryAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}

	activityId := req.ActivityId
	activityInfo, errInfo := models.GetCygxActivityVideoByActivityId(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	var sellerName string
	sellerName, err = models.GetCompanySellerName(user.CompanyId)
	if err != nil {
		br.Msg = "报名失败！"
		br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
		return
	}
	item := models.CygxActivityVideoHistory{
		ActivityId:  activityId,
		VideoId:     activityInfo.VideoId,
		UserId:      uid,
		CreateTime:  time.Now(),
		Mobile:      user.Mobile,
		Email:       user.Email,
		CompanyId:   user.CompanyId,
		CompanyName: user.CompanyName,
		RealName:    user.RealName,
		SellerName:  sellerName,
		ModifyTime:  time.Now(),
	}

	err = models.AddCygxActivityVideoHistory(&item)
	if err != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + err.Error()
		return
	}
	err = models.UpdateActivityVideoCounts(activityId)
	if err != nil {
		br.Msg = "更新失败"
		br.ErrMsg = "更新失败,Err:" + err.Error()
		return
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	return
}

// @Title 活动、专项调研搜索
// @Description 活动、专项调研搜索接口
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Param   KeyWord   query   string  false       "搜索关键词 多个用 , 隔开"
// @Param   IsResearch   query   bool  true       "是否为研选"
// @Success 200 {object} models.GetCygxActivityListRep
// @router /listSearch [get]
func (this *ActivityCoAntroller) ActivityListSearch() {
	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
	}
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	source, _ := this.GetInt("Source")
	keyWord := this.GetString("KeyWord")
	playBack, _ := this.GetInt("PlayBack")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)
	var condition string
	//活动可见限制
	conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "", "", 0, 1, keyWord, playBack, 1)
	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.publish_status = 1 ` + conditionActivity
	list, total, err := services.GetActivitySpecialSearcheList(user, condition, startSize, pageSize, keyWord)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	page := paging.GetPaging(currentIndex, pageSize, total)
	resp := new(models.GetCygxActivityListRep)
	//添加活动搜索记录
	if keyWord != "" {
		go services.AddActivitykeyWordSearch(keyWord, user)
	}
	resp.Paging = page
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 已结束的活动
// @Description 获取已结束的活动接口
// @Param   ChartPermissionIds   query   string  false     "行业id 多个用 , 隔开"
// @Param   WhichDay   query   string  false       "哪一天 3本周、4上周，5本月，6上月 可多选"
// @Param   IsPower   query   string  false       "是否选择有权限行业 ，1是 0 否 默认0"
// @Param   TypeName   query   string  false       "电话会类型 ，1专家电话会 2分析师电话会"
// @Success 200 {object} models.GetCygxActivityLabelListRep
// @router /overActivityList [get]
func (this *ActivityCoAntroller) OverActivityList() {
	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
	}

	isPower, _ := this.GetInt("IsPower")
	chartPermissionIds := this.GetString("ChartPermissionIds")
	whichDay := this.GetString("WhichDay")
	typeName := this.GetString("TypeName")

	//入参为 undefined 时的处理
	if chartPermissionIds == "undefined" {
		chartPermissionIds = ""
	}
	if whichDay == "undefined" {
		whichDay = ""
	}
	resp := new(models.GetCygxActivityLabelListRep)
	if user.CompanyId <= 1 && user.UserId > 0 {
		resp.List = make([]*models.CygxActivityLabelList, 0)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	var condition string
	var conditionSpecialinit string
	var conditionSpecial string
	var sortTime string
	var pars []interface{}
	//已结束的活动  不展示研选 11.0
	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.active_state = 3  AND art.chart_permission_id !=  ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN)
	if whichDay != "" {
		var startDate string
		var endDate string
		if whichDay == "3" {
			startDate = utils.GetNowWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetLastWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5" {
			startDate = utils.GetNowMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetLastMonthLastDay().Format(utils.FormatDate)
		} else if whichDay == "3,4" {
			startDate = utils.GetLastWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		} else if whichDay == "5,6" {
			startDate = utils.GetLastMonthFirstDay().Format(utils.FormatDate)
			endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
		} else {
			startDate = utils.GetNowWeekMonday().Format(utils.FormatDate)
			endDate = utils.GetNowWeekSunday().Format(utils.FormatDate)
		}
		condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
		condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"

		conditionSpecialinit += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'"
		conditionSpecialinit += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"

	}
	if len(chartPermissionIds) > 0 {
		condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
	}

	// 如果是C类电话会就不展示内容，且合并到分析师电话会
	if typeName == "1" || typeName == "2" {
		if typeName == strconv.Itoa(utils.ANALYST_TELL_ACTIVITY_TYPE_ID) {
			condition += ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + typeName + "," + strconv.Itoa(utils.C_CLASS_ACTIVITY_TYPE_ID) + `)`
		} else {
			condition += ` AND art.publish_status = 1  AND art.label != ''  AND art.activity_type_id IN (` + typeName + `)`
		}
		conditionSpecialinit += ` AND  art.activity_id = 0 `
	}

	conditionActivity, err := services.ActivityConditioninitSql(user, condition, isPower)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取活动权限数据失败，Err:" + err.Error()
		return
	}
	sortTime = ` activity_time DESC `
	//如果是永续的就按照普通的权限逻辑来查，如果不是就按照升级的逻辑来查

	if user.UserId > 0 { // v12.2.1
		companyDetail, err := models.GetCompanyDetailByIdGroupTrip(user.CompanyId)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		if companyDetail.Status == "永续" {
			conditionSpecial, err = services.HandleActivityLabelSpecialPermission(user)
		} else {
			conditionSpecial, _, err = services.HandleActivityLabelSpecialTripPermission(user)
		}
	}
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	conditionSpecial += ` AND art.days >0  AND art.publish_status =1   AND art.is_offline = 0  `
	conditionSpecial += ` AND art.activity_time_end <  ` + "'" + time.Now().Format(utils.FormatDateTime) + "'"
	condition += conditionActivity
	list, err := models.GetActivityLabelListAllNoLimit(condition, sortTime, pars, conditionSpecialinit+conditionSpecial)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	//标签字段关联的产业与标签处理
	mapKeyWord := make(map[string]string)
	for _, v := range list {
		keyWord := services.LabelStr(v.KeyWord)
		if _, ok := mapKeyWord[keyWord]; ok {
			continue
		}
		if keyWord == "" {
			continue
		}
		v.KeyWord = keyWord
		resp.List = append(resp.List, v)
		mapKeyWord[keyWord] = keyWord
	}
	if len(list) == 0 {
		resp.List = make([]*models.CygxActivityLabelList, 0)
	}
	//添加更多主题访问记录
	//item := new(models.CygxPageHistoryRecord)
	//item.UserId = user.UserId
	//item.CreateTime = time.Now()
	//item.Mobile = user.Mobile
	//item.Email = user.Email
	//item.CompanyId = user.CompanyId
	//item.CompanyName = user.CompanyName
	//item.PageType = "OverActivity"
	//go models.AddCygxPageHistoryRecord(item)
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 活动报名之前的校验（权限、时间、点数、邮箱）
// @Description 活动报名之前的校验（权限、时间、点数、邮箱）接口
// @Param	request	body models.ActivityIdRep true "type json string"
// @Success Ret=200 {object} models.SignupStatus
// @router /check [post]
func (this *ActivityCoAntroller) Check() {
	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
	}
	var req models.ActivityIdRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	activityId := req.ActivityId
	activityInfo, errInfo := models.GetAddActivityInfoById(activityId)
	if activityInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "活动ID错误,不存在activityId：" + strconv.Itoa(activityId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}
	//这里的文案顺序提示 权限>时间>研选扣点>邮箱绑定。
	resp := new(models.ActivityCheck)
	resp.CancelPopupMsg, err = services.ActivityCancelDeadlineMsg(activityInfo) //处理取消报名截止时间的弹窗文案
	if err != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + err.Error()
		return
	}
	hasPermission := 0
	havePower, isResearchSpecial, err := services.GetActivityDetailUserPower(user, activityInfo)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "校验用户权限失败，Err:" + err.Error()
		return
	}
	resp.IsResearchSpecial = isResearchSpecial
	if havePower {
		hasPermission = 1
		resp.CheckPermission = true
		resp.HasPermission = hasPermission
	} else {
		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
			return
		}
		resp.PopupMsg = popupMsg
		resp.HasPermission = hasPermission
		resp.SellerName = sellerName
		resp.SellerMobile = sellerMobile
	}
	if resp.CheckPermission {
		//如果权限通过了校验，那么就来校验时间
		resp.CheckTime, resp.PopupMsg = services.CheckSiginupDeadline(activityInfo)
	}
	if resp.CheckTime {
		// 如果时间通过校验就校验点数
		resp.CheckPoints, resp.PopupMsg, resp.CompanyPoints, resp.ActivityPoints, err = services.CheckActivityPoints(activityInfo, user)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "CheckActivityPoints，Err:" + err.Error()
			return
		}
	}
	if resp.CheckPoints {
		//如果通过点数的校验，就来校验邮箱
		resp.CheckEmail, resp.PopupMsg = services.CheckActivityUserEmail(activityInfo, user)
	}
	// 判断是否属于研选类型的活动
	if strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
		resp.IsResearch = true
	}
	br.Ret = 200
	br.Success = true
	br.Data = resp
}
