package cygx

import (
	"encoding/json"
	"fmt"
	"github.com/rdlucklib/rdluck_tools/paging"
	"github.com/tealeg/xlsx"
	"hongze/hz_crm_api/controllers"
	"hongze/hz_crm_api/models"
	"hongze/hz_crm_api/models/company"
	"hongze/hz_crm_api/models/cygx"
	"hongze/hz_crm_api/models/roadshow"
	"hongze/hz_crm_api/models/system"
	"hongze/hz_crm_api/services"
	cygxService "hongze/hz_crm_api/services/cygx"
	"hongze/hz_crm_api/utils"
	"os"
	"path/filepath"
	"sort"
	"strconv"
	"strings"
	"time"
)

// 权益用户管理
type UserController struct {
	controllers.BaseAuthController
}

// List
// @Title 用户列表
// @Description 用户列表接口
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
// @Param   Status   query   string  true       "状态:”试用','永续','冻结','流失','正式'"
// @Param   IsMaker   query   int  false       "是否决策人,1:是,0:否 ,2:全部'"
// @Param   IsRegister   query   int  false       "是否决策人,1:是,0:否 ,2:全部'"
// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   Label   query   string  true       "搜索用户标签"
// @Param   TryStage   query   int  false       "试用客户子标签:0全部、1未分类、2 推进、3 跟踪、4 预备。正式:套餐类型,0:无,1:大套餐,2:小套餐"
// @Param   SortType   query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
// @Param   IsSubscribeCygx   query   int  true       "是否关注了查研观向小助手公众号: -1-默认全部; 0-未关注; 1-已关注"
// @Success 200 {object} cygx.CompanyUserListResp
// @router /user/list [get]
func (this *UserController) List() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	roleTypeCode := sysUser.RoleTypeCode
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	isMaker, _ := this.GetInt("IsMaker")
	isRegister, _ := this.GetInt("IsRegister")
	status := this.GetString("Status")
	adminId := this.GetString("AdminId")
	keyWord := this.GetString("KeyWord")
	label := this.GetString("Label")
	tryStage, _ := this.GetInt("TryStage") //试用客户标签
	sortType := this.GetString("SortType") //试用客户标签
	// 套餐类型
	//packageType, _ := this.GetInt("PackageType")
	keyWord = strings.Trim(keyWord, " ")
	keyWord = strings.Replace(keyWord, "'", "", -1)
	isSubscribeCygx, _ := this.GetInt("IsSubscribeCygx", -1)

	if status == "X类试用" {
		status = "永续"
	}
	var total int
	page := paging.GetPaging(currentIndex, pageSize, total)

	//statusItems := make([]*company.CompanyStatus, 0)
	//var statusArr = [...]string{"全部", "试用", "正式", "冻结", "流失", "永续"}

	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	var condition string
	var sqlOrder string
	var usercondition string
	var kwywordcondition string
	var pars []interface{}
	var parsUser []interface{}

	//流失
	var lossCondition string
	//var lossPars []interface{}

	//状态分类查询条件
	//var permissionCondition string
	if adminId != "" {
		condition += ` AND b.seller_id IN (` + adminId + `) `
	}

	lossCondition = condition
	//lossPars = pars
	//permissionCondition = condition

	//流失客户统计
	lossCondition += ` AND status='流失' `

	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { //权益销售的查询逻辑
		condition += ` AND ( cp.seller_id = ` + strconv.Itoa(sysUser.AdminId) + `  OR cp.share_seller_id = ` + strconv.Itoa(sysUser.AdminId) + `)`
	} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP { // 权益销售组长查询逻辑
		adminList, err := system.GetAdminListByGroupId(sysUser.GroupId)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败,GetAdminListByGroupIdErr:" + err.Error()
			return
		}
		var adminIds []string
		var companyIdsStr []string
		for _, v := range adminList {
			adminIds = append(adminIds, strconv.Itoa(v.AdminId))
		}
		//再获取组员下被共享的公司
		var parsShare []interface{}
		var conditionShare string
		conditionShare = "  AND  share_seller_id  IN (" + strings.Join(adminIds, ",") + ")  "
		listCompanyProduct, err := company.GetCompanyProductList(conditionShare, parsShare)
		if err != nil {
			br.Msg = "获取失败"
			br.ErrMsg = "获取失败,GetCompanyProductList:" + err.Error()
			return
		}
		for _, v := range listCompanyProduct {
			companyIdsStr = append(companyIdsStr, strconv.Itoa(v.CompanyId))
		}
		companyIdsStr = append(companyIdsStr, "0")
		//本组的或者被分享到本组下面的公司
		condition += ` AND (cp.group_id = ` + strconv.Itoa(sysUser.GroupId) + `  OR cp.company_id IN (` + strings.Join(companyIdsStr, ",") + `) )`
	}

	//状态控制
	if status != "" && status != "全部" {
		condition += ` AND b.status= '` + status + `'`
		usercondition += ` AND cp.status= '` + status + `'`
	} else {
		condition += ` AND b.status IN ('正式','试用','冻结','永续') `
	}

	// 试用客户标签
	if (status == "试用" || status == "永续") && tryStage > 0 {
		condition += ` AND b.try_stage= '` + strconv.Itoa(tryStage) + `'`
		usercondition += ` AND cp.try_stage= '` + strconv.Itoa(tryStage) + `'`
	}
	//套餐类型 权益客户除了大套餐就是小套餐
	if status == "正式" && tryStage > 0 {
		if tryStage == 1 {
			condition += ` AND b.package_type= '` + strconv.Itoa(tryStage) + `'`
			usercondition += ` AND cp.package_type= '` + strconv.Itoa(tryStage) + `'`
		} else {
			condition += ` AND b.package_type!= 1 `
			usercondition += ` AND cp.package_type != 1 `
		}
	}

	if isMaker != 2 {
		if isMaker == 1 {
			usercondition += ` AND u.is_maker = 1 `
		} else {
			//部分脏数据
			usercondition += ` AND u.is_maker != 1 `
		}
		//parsUser = append(parsUser, isMaker)
	}

	if isRegister != 2 {
		if isRegister == 1 {
			usercondition += `  AND u.register_time IS NOT NULL`
		} else {
			//部分脏数据
			usercondition += ` AND u.register_time IS NULL`
		}

		//parsUser = append(parsUser, isRegister)
	}
	kwywordcondition = condition
	if keyWord != "" {
		companyIdStr, err := company.GetCompanyIdByKeyWord(keyWord)
		if err != nil {
			br.Msg = "获取客户信息失败"
			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
			return
		}
		if companyIdStr != "" {
			condition += ` AND (a.company_name LIKE '%` + keyWord + `%' OR a.credit_code LIKE '%` + keyWord + `%' AND  a.company_id IN(` + companyIdStr + `)) `
		} else {
			condition += ` AND (a.company_name LIKE '%` + keyWord + `%' OR a.credit_code LIKE '%` + keyWord + `%' ) `
		}
	}
	if label != "" {
		usercondition += ` AND u.user_label LIKE '%` + label + `%'`
	}
	//
	usercondition += ` AND cp.product_id = 2  	AND sr.product_id = 2  `

	// 是否关注弘则研究公众号
	if isSubscribeCygx == 0 {
		usercondition += ` AND (u.cygx_subscribe = 0 OR ISNULL(u.cygx_subscribe)) `
	}
	if isSubscribeCygx == 1 {
		usercondition += ` AND u.cygx_subscribe = 1 `
	}
	condition += ` AND cp.product_id = 2  `
	total, err := cygx.GetCompanyListCount(usercondition, keyWord, kwywordcondition, condition, roleTypeCode, pars)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据总数失败,Err:" + err.Error()
		return
	}
	if sortType == "" {
		sqlOrder = ` GROUP by u.user_id  ORDER BY c.created_time  DESC, u.register_time  DESC `
	} else {
		if sortType == "asc" {
			sqlOrder = ` GROUP by u.user_id  ORDER BY u.interaction_num  ASC , u.register_time  DESC `
		} else {
			sqlOrder = ` GROUP by u.user_id  ORDER BY u.interaction_num  DESC , u.register_time  DESC  `
		}
	}

	list, err := cygx.GetCygxCompanyUserList(usercondition, keyWord, kwywordcondition, condition, roleTypeCode, sqlOrder, parsUser, startSize, pageSize)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}
	var userIds string
	var userIdArr []int
	var companyIds []int
	var mobilesSlice []string
	if list != nil {
		for k, v := range list {
			if v.RegisterTime != "" {
				list[k].IsRegister = true
			} else {
				list[k].IsRegister = false
			}
			if v.IsShowSeeNum > 0 {
				list[k].IsShowSee = true
			}
			if v.Status == "正式" {
				if v.PackageType == 1 {
					list[k].Status += "(大套餐)"
				} else {
					list[k].Status += "(小套餐)"
				}
			}
			if v.Status == "试用" {
				if v.TryStage == 1 {
					list[k].Status += "(未分类)"
				} else if v.TryStage == 2 {
					list[k].Status += "(推进)"
				} else if v.TryStage == 3 {
					list[k].Status += "(跟踪)"
				} else if v.TryStage == 4 {
					list[k].Status += "(预备)"
				}
			}
			if v.Status == "永续" {
				v.Status = "X类试用"
			}
			userIds += strconv.Itoa(int(v.UserId)) + ","
			userIdArr = append(userIdArr, int(v.UserId))

			if !isAdminRole {
				list[k].CompanyInteractionNum = v.CompanyInteractionNumSeller
			}
			companyIds = append(companyIds, v.CompanyId)

			if v.Mobile != "" {
				mobilesSlice = append(mobilesSlice, v.Mobile)
			}
		}
		userIds = strings.TrimRight(userIds, ",")
		splitList, err := cygx.GetCygxCompanyUserListSplit(userIds)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取数据失败,Err:" + err.Error()
			return
		}
		//用户备注
		userRemarksList, err := cygx.GetUserRemarksListByUserIds(userIds)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取数据失败,Err:" + err.Error()
			return
		}
		mapUserRemarks := make(map[int]string)
		for _, v := range userRemarksList {
			if mapUserRemarks[v.UserId] == "" {
				mapUserRemarks[v.UserId] = v.Content
			}
		}

		UserRemindListMap := cygxService.GetCygxUserRemindListMap(userIdArr)
		mapIsUserMaker := cygxService.GetCompanyProductIsUserMakerByCompanyIds(companyIds) //根据公司ID获取近四周之内有决策人互动的客户
		userHaveMoveMap := services.GetWxUserHaveMoveMap(mobilesSlice)                     // 处理用户是否移动过按钮回显

		for k, v := range list {
			for _, vsplit := range splitList {
				if vsplit.UserId == v.UserId {
					list[k].HistoryNum = vsplit.HistoryNum
					list[k].CountNum = vsplit.CountNum
					list[k].IndustryFllowNum = vsplit.IndustryFllowNum
					list[k].DepartmentFollowNum = vsplit.DepartmentFollowNum
					list[k].KeyWordNum = vsplit.KeyWordNum
					list[k].OnLineNum = vsplit.OnLineNum
					list[k].OfficeNum = vsplit.OfficeNum
					list[k].ChartNum = vsplit.ChartNum
					list[k].TripNum = vsplit.TripNum
					list[k].RoadshowVideoNum = vsplit.RoadshowVideoNum
					list[k].ActivityVideoNum = vsplit.ActivityVideoNum
					list[k].ActivityVoiceNum = vsplit.ActivityVoiceNum
					list[k].YanxuanspecialNum = vsplit.YanxuanspecialNum
				}
			}
			if mapUserRemarks[int(v.UserId)] != "" {
				list[k].Content = mapUserRemarks[int(v.UserId)]
			}
			list[k].IsRemind = UserRemindListMap[int(v.UserId)]
			list[k].IsUserMaker = mapIsUserMaker[v.CompanyId]
			if v.Mobile != "" {
				v.HaveMoveButton = userHaveMoveMap[v.Mobile]
			}
		}
		for k := range list {
			list[k].InteractionNum = list[k].HistoryNum + list[k].CountNum + list[k].IndustryFllowNum + list[k].DepartmentFollowNum + list[k].KeyWordNum + list[k].OnLineNum + list[k].OfficeNum + list[k].ChartNum + list[k].TripNum + list[k].RoadshowVideoNum + list[k].ActivityVideoNum + list[k].ActivityVoiceNum + list[k].YanxuanspecialNum
		}
	} else {
		list = make([]*cygx.CygxCompanyUser, 0)
	}
	page = paging.GetPaging(currentIndex, pageSize, total)
	resp := new(cygx.CompanyUserListResp)
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 新增备注接口
// @Description 新增备注
// @Param	request	body cygx.UserRemarAddReq true "type json string"
// @Success 200 新增成功
// @router /user/addRemarks [post]
func (this *UserController) Add() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	var req cygx.UserRemarAddReq
	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
	}
	item := new(cygx.UserRemarks)
	item.UserId = req.UserId
	item.AdminId = sysUser.AdminId
	item.Content = req.Content
	item.CreateTime = time.Now()
	err = cygx.AddUserRemarks(item)
	if err != nil {
		br.Msg = "新增失败."
		br.ErrMsg = "新增失败,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "新增成功"
}

// @Title 备注列表
// @Description 备注列表接口
// @Param  UserId   query   int  true       "用户id"
// @Success 200 {object} cygx.UserRemarksListResp
// @router /user/remark/list [get]
func (this *UserController) RemarkList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	list, err := cygx.GetUserRemarksList(userId)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取备注信息失败,Err:" + err.Error()
		return
	}
	resp := new(cygx.UserRemarksListResp)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp

}

// @Title 互动详情table栏
// @Description 互动详情table栏接口
// @Param  UserId   query   int  true       "用户id"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.UserRemarksListResp
// @router /user/table/list [get]
func (this *UserController) TableList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	classType, _ := this.GetInt("ClassType", 1)
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取信息失败"
		return
	}
	comanyDetail, err := company.GetCompanyDetailById(wxUser.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}

	resp := new(cygx.CygxUserTableListRep)
	if classType == 1 {
		countDetail, err := cygx.GetUserInteractionTableCount(userId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取各个阅读总数失败,Err:" + err.Error()
			return
		}

		calendarTotal, err := roadshow.GetRsCalendarMeetingUserCountByUserId(userId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetCygxUserFeedbackCountByUserId,Err:" + err.Error()
			return
		}
		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: countDetail.HistoryNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: countDetail.OnLineNum + countDetail.OfficeNum},
			{PermissionName: "专项调研", Source: 8, TotalNum: countDetail.TripNum},
			{PermissionName: "1v1路演", Source: 15, TotalNum: calendarTotal},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: countDetail.CountNum},
			{PermissionName: "收藏的图表", Source: 4, TotalNum: countDetail.ChartNum},
			{PermissionName: "关注的产业", Source: 5, TotalNum: countDetail.IndustryFllowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: countDetail.KeyWordNum},
			{PermissionName: "音视频播放", Source: 9, TotalNum: countDetail.RoadshowVideoNum + countDetail.ActivityVideoNum + countDetail.ActivityVoiceNum},
			{PermissionName: "首页标签点击", Source: 10, TotalNum: countDetail.TagNum},
			{PermissionName: "交流反馈", Source: 14, TotalNum: countDetail.FeedbackNum}}
		resp.List = List
	} else {
		countDetail, err := cygx.GetUserInteractionTableCountByYanXuan(userId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取各个阅读总数失败,Err:" + err.Error()
			return
		}

		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: countDetail.HistoryNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: countDetail.OnLineNum + countDetail.OfficeNum},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: countDetail.CountNum},
			{PermissionName: "关注的产业", Source: 5, TotalNum: countDetail.IndustryFllowNum},
			{PermissionName: "关注的作者", Source: 6, TotalNum: countDetail.DepartmentFollowNum},
			{PermissionName: "专栏文章阅读记录", Source: 11, TotalNum: countDetail.YanxuanSpecialNum},
			{PermissionName: "收藏的专栏文章", Source: 12, TotalNum: countDetail.YanxuanSpecialCollectNum},
			{PermissionName: "关注的专栏作者", Source: 13, TotalNum: countDetail.YanxuanSpecialFollowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: countDetail.KeyWordNum}}
		resp.List = List
	}

	//阅读记录总数

	resp.UserName = wxUser.RealName
	resp.Mobile = wxUser.Mobile
	resp.ComapnyName = comanyDetail.CompanyName
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 互动详情
// @Description 互动详情接口
// @Param  UserId   query   int  true       "用户id"
// @Param  Source   query   int  true       "来源"
// @Param   IdentityType   query   int  true       "身份类型,1:用户,2机构。默认1 (图表分页使用)"
// @Param   IsMeeting   query   string  true       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  true       "参会方式 1线上,2线下 默认为线上"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
// @Param   StartDate   query   string  true       "开始时间"
// @Param   EndDate   query   string  true       "结束时间"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
// @Success 200 {object} cygx.UserInteractionListResp
// @router /user/interaction/detail [get]
func (this *UserController) TableDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	userId, _ := this.GetInt("UserId")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	keyWord := this.GetString("KeyWord")
	source, _ := this.GetInt("Source")
	identityType, _ := this.GetInt("IdentityType")
	classType, _ := this.GetInt("ClassType", 1)
	//是否导出报表
	isExport, _ := this.GetBool("IsExport")
	if isExport {
		pageSize = 10000
		currentIndex = 1
	}
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	// 1.标记用户表
	//操作权限校验
	var err error
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	mobile := wxUser.Mobile

	//var checkSource bool
	var MeetingNum int
	var NoMeetingNum int
	var list []*cygx.UserInteraction

	var total int
	var condition string
	var pars []interface{}
	if source == 1 {
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		//total, err = cygx.GetCygxArticleHistoryCount(wxUser.Mobile, wxUser.Email, condition)
		//if err != nil {
		//	br.Msg = "获取信息失败"
		//	br.ErrMsg = "获取用户阅读记录总数失败,Err:" + err.Error()
		//	return
		//}

		if classType == 1 {
			condition += "  AND art.article_type_id =  0 "
		} else {
			condition += "  AND art.article_type_id >  0 "
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "

		total, list, err = cygx.GetCygxArticleHistoryRecordByUserNew(condition, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		var articleIds string
		var articleIdArr []int
		if len(list) > 0 {
			articleIds = ""
			mapAricleId := make(map[int]int)
			mapAricleIndustrialSubjectName := make(map[int]*cygx.ArticleIndustrialSubjectNameResp)
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if mapAricleId[v.ArticleId] == 0 {
					articleIds += strconv.Itoa(v.ArticleId) + ","
					mapAricleId[v.ArticleId] = v.ArticleId
				}
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				articleIdArr = append(articleIdArr, v.ArticleId)
			}
			articleIds = strings.TrimRight(articleIds, ",")

			listArticleIndustrialSubjectList, err := cygx.GetCygxArticleIndustrialSubjectName(articleIds)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
			if len(listArticleIndustrialSubjectList) > 0 {
				for _, v := range listArticleIndustrialSubjectList {
					mapAricleIndustrialSubjectName[v.ArticleId] = v
				}
				for k, v := range list {
					if mapAricleIndustrialSubjectName[v.ArticleId] != nil {
						list[k].IndustryName = mapAricleIndustrialSubjectName[v.ArticleId].IndustryName     // 产业
						list[k].SubjectNameStr = mapAricleIndustrialSubjectName[v.ArticleId].SubjectNameStr // 标的
					}
				}
			}

			//行业
			mapPerssionName := cygxService.GetCygxArticlePerssionNameListMap(articleIdArr)
			for k, v := range list {
				if v.SpecialType > 0 {
					list[k].PermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN
				} else {
					list[k].PermissionName = mapPerssionName[v.ArticleId]
				}
				if classType == 1 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				} else {
					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				}
				if v.ReportId > 0 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
				}
			}

			//导出excel
			if isExport {
				exportListArticle(this, list, 1, br)
				return
			}

		}

	} else if source == 2 {
		if mobile != "" {
			condition = ` AND s.mobile = '` + mobile + `' `
			if classType == 1 {
				condition += "  AND  a.chart_permission_id  != 31 "
			} else {
				condition += "  AND  a.chart_permission_id  = 31 "
			}

			if isMeeting == "1" {
				condition += ` AND s.is_meeting = 1 `
			}
			if isMeeting == "2" {
				condition += ` AND s.is_meeting = 0 `
			}

			if meetType == "1" {
				condition += ` AND t.activity_type = 1 `
			}
			if meetType == "2" {
				condition += ` AND t.activity_type = 0 `
			}
			if startDate != "" {
				startDate += " 00:00:00"
				condition += ` AND a.activity_time >= '` + startDate + `' `
			}

			if endDate != "" {
				endDate += " 23:59:59"
				condition += ` AND a.activity_time <= '` + endDate + `' `
			}

			if keyWord != "" {
				condition += ` AND a.activity_name LIKE '%` + keyWord + `%' `
			}

			total, err = cygx.GetActivityMeetByUserCount(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetActivityMeetByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
			if len(list) > 0 {
				for k, v := range list {
					if v.ActivityType == 1 {
						if v.SignupType == "2" {
							list[k].InteractionType = "自主拨入"
						} else {
							list[k].InteractionType = "预约外呼"
						}
						if v.ReminderNum > 0 {
							list[k].InteractionType += "会议提醒"
						}
					}
					if v.IsMeeting == 0 {
						list[k].FirstMeetingTime = ""
						list[k].LastMeetingTime = ""
					}
					if v.FirstMeetingTime == "0000-00-00 00:00:00" {
						list[k].FirstMeetingTime = ""
						list[k].LastMeetingTime = ""
					}
				}
			}
		}
		//导出excel
		if isExport {
			exportListActivity(this, list, 1, br)
			return
		}
	} else if source == 3 {
		if classType == 1 {
			condition += "  AND art.article_type_id =  0 "
		} else {
			condition += "  AND art.article_type_id >  0 "
		}

		total, err = cygx.GetCygxArticleCollectCount(userId, condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
			return
		}
		list, err = cygx.GetCygxArticleCollectByUser(userId, startSize, pageSize, condition)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if classType == 1 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				} else {
					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				}
				if v.ReportId > 0 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
				}
			}
		}
	} else if source == 4 {
		if identityType == 2 {
			condition += ` AND r.create_time < date_format(now(),'%Y-%m-%d') ` //过滤当天时间
		}
		condition += ` AND a.publish_status = 1  AND  user_id =  ` + strconv.Itoa(userId)
		var err error
		total, err = cygx.GetChartCountByUser(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取总数失败,Err:" + err.Error()
			return
		}
		list, err = cygx.GetChartListCollectionWithCygx(condition, startSize, pageSize)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		for k, v := range list {
			if v.PtagName != "" {
				list[k].CtagNamePc = v.PtagName
			}
			if v.CtagName != "" {
				list[k].CtagNamePc += "," + v.CtagName
			}
			if v.PtagNameTwo != "" {
				list[k].CtagNamePc += "," + v.PtagNameTwo
			}
			if v.CtagNameTwo != "" {
				list[k].CtagNamePc += "," + v.CtagNameTwo
			}
		}
	} else if source == 5 {

		if classType == 1 {
			condition += "  AND a.chart_permission_id  != 31 "
		} else {
			condition += "  AND a.chart_permission_id  = 31 "
		}

		total, err = cygx.GetCygxIndustryFllowCount(userId, condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取用户关注总数失败"
			return
		}
		list, err = cygx.GetCygxIndustryFllowByUser(userId, startSize, pageSize, condition)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取用户关注总数失败"
			return
		}
	} else if source == 6 {
		total, err = cygx.GetCygArticleDepartmentFollowCount(userId)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取关注作者总数失败"
			return
		}
		list, err = cygx.GetCygArticleDepartmentFollowByUser(userId, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取关注作者列表失败"
			return
		}
		if len(list) > 0 {
			for k, v := range list {
				var condition string
				var pars []interface{}
				condition += ` WHERE art.source = 1 AND art.is_summary = 1 AND art.department_id =  ` + strconv.Itoa(v.DepartmentId)
				listArt, errList := cygx.GetSummaryManageList(condition, pars, 0, 20)
				if errList != nil && errList.Error() != utils.ErrNoRow() {
					br.Msg = "获取失败"
					br.ErrMsg = "获取失败,Err:" + errList.Error()
					return
				}
				if len(listArt) > 0 {
					mapIndustryName := make(map[string]string)
					mapSubjectName := make(map[string]string)
					var articleIdStr string
					for _, vArt := range listArt {
						if vArt.IndustryName != "" && mapIndustryName[vArt.IndustryName] == "" {
							list[k].IndustryName += vArt.IndustryName + "/"
							mapIndustryName[vArt.IndustryName] = vArt.IndustryName
						}
						articleIdStr += strconv.Itoa(vArt.ArticleId) + ","
					}
					list[k].IndustryName = strings.TrimRight(list[k].IndustryName, "/")
					articleIdStr = strings.TrimRight(articleIdStr, ",")
					listSubject, err := cygx.GetArticleSubjectList(articleIdStr)
					if err != nil {
						br.Msg = "获取失败"
						br.ErrMsg = "获取失败,Err:" + err.Error()
						return
					}
					if len(listSubject) > 0 {
						for _, vSub := range listSubject {
							if vSub.SubjectName != "" && mapSubjectName[vSub.SubjectName] == "" {
								list[k].SubjectNameStr += vSub.SubjectName + "/"
								mapSubjectName[vSub.SubjectName] = vSub.SubjectName
							}
						}
						list[k].SubjectNameStr = strings.TrimRight(list[k].SubjectNameStr, "/")
					}
				}
			}
		}
	} else if source == 7 {
		if classType == 1 {
			condition += "  AND register_platform IN  (1,2)  "
		} else {
			condition += "  AND register_platform IN  (5,6)  "
		}
		total, err = cygx.GetCygxSearchKeyWordCount(userId, condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}
		list, err = cygx.GetCygxSearchKeyWordByUser(condition, userId, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录列表失败"
			return
		}
	} else if source == 8 {
		condition += ` 	AND h.user_id = ? `
		pars = append(pars, userId)
		total, err = cygx.GetCygxActivitySpecialTripCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}
		list, err = cygx.GetCygxActivitySpecialTripByUser(userId, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录列表失败"
			return
		}
	} else if source == 9 {
		total, err = cygx.GetCygxRoadshowCount(userId)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}
		list, err = cygx.GetCygxRoadshowByUser(userId, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录列表失败"
			return
		}
	} else if source == 10 { //标签点击记录
		total, err = cygx.GetCygxTagHistoryCountByUserId(userId)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}
		list, err = cygx.GetCygxTagHistoryByUserId(userId, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录列表失败"
			return
		}
	} else if source == 11 { //专栏文章阅读记录
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		total, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
		//导出excel
		if isExport {
			exportListYanxuanSpecial(this, list, 1, br)
			return
		}
	} else if source == 12 { //收藏的专栏文章
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		total, list, err = cygx.GetCygxYanxuanSpecialCollectByUser(condition, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
	} else if source == 13 { //关注的专栏作者
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		total, list, err = cygx.GetCygxYanxuanSpecialAuthorByUser(condition, startSize, pageSize)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/view/" + strconv.Itoa(v.DepartmentId)
			}
		}
	} else if source == 14 { //交流反馈
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		total, list, err = cygx.GetCygxUserFeedback(condition, startSize, pageSize)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
	} else if source == 15 { //1V1路演
		if startDate != "" {
			condition += ` AND b.start_date >= '` + startDate + `' `
		}
		if endDate != "" {
			condition += ` AND b.start_date <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		totalRsCalendar, listRsCalendar, err := roadshow.GetRsCalendarMeetingUserByRai(condition, startSize, pageSize)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,GetRsCalendarMeetingUserByRai Err:" + err.Error()
			return
		}

		total = totalRsCalendar
		list, err = cygxService.HandleListRsCalendar(listRsCalendar)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "HandleListRsCalendar,Err:" + err.Error()
			return
		}

		//导出excel
		if isExport {
			exportListRsCalendar(this, list, 1, br)
			return
		}

	}
	page := paging.GetPaging(currentIndex, pageSize, total)
	resp := new(cygx.UserInteractionListResp)
	if len(list) == 0 {
		list = make([]*cygx.UserInteraction, 0)
	}
	resp.MeetingNum = MeetingNum
	resp.NoMeetingNum = NoMeetingNum
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 获取用户标签详情
// @Description 获取用户标签详情接口
// @Param  UserId   query   int  true       "用户id"
// @Success 200 {object} cygx.UserLabel
// @router /user/label/detail [get]
func (this *UserController) LabelDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取信息失败"
		return
	}

	if userId > 0 {
		resp := new(cygx.UserLabel)
		resp.Label = wxUser.UserLabel
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}

	list, err := cygx.GetCygxCompanyUserListSplit(strconv.Itoa(userId))
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	mapLabels := make(map[string]string)
	var labelsListStr []*cygx.UserLabel

	mapActivityLabels := make(map[string]string)

	for k := range list {
		labels := list[k].Labels
		labelsList := strings.Split(labels, ",")
		for _, vL := range labelsList {
			if mapLabels[vL] == "" && vL != "" {
				mapLabels[vL] = vL
				item := new(cygx.UserLabel)
				item.Label = vL
				labelsListStr = append(labelsListStr, item)
			}
		}
	}
	dateTime := time.Now().AddDate(0, -3, 0).Format(utils.FormatDate)
	listArticlePv, err := cygx.GetArticlePvCount(wxUser.Mobile, wxUser.Email, dateTime)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	var articleIds string
	mapArticleIdLabelTotal := make(map[string]int)
	mapArticleIdPv := make(map[int]int)
	if len(listArticlePv) > 0 {
		for _, v := range listArticlePv {
			articleIds += strconv.Itoa(v.ArticleId) + ","
			mapArticleIdPv[v.ArticleId] = v.Pv
		}
		articleIds = strings.TrimRight(articleIds, ",")
		//产业、标的标签
		listLabelName, err := cygx.GetArticleGroupyIndustryName(articleIds)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取数据失败,Err:" + err.Error()
			return
		}
		if len(listLabelName) > 0 {
			for _, v := range listLabelName {
				labelsIndustryList := strings.Split(v.IndustryName, "/")
				labelsSubjectList := strings.Split(v.SubjectName, "/")
				//添加产业统计
				if len(labelsIndustryList) > 0 {
					for _, vIn := range labelsIndustryList {
						if mapActivityLabels[vIn] != "" {
							mapArticleIdLabelTotal[vIn] += mapArticleIdPv[v.ArticleId]
						} else {
							mapArticleIdLabelTotal[vIn] = mapArticleIdPv[v.ArticleId]
							mapActivityLabels[vIn] = vIn
						}
					}
				}
				if len(labelsSubjectList) > 0 {
					//添加标的统计
					for _, vIn := range labelsSubjectList {
						if mapActivityLabels[vIn] != "" {
							mapArticleIdLabelTotal[vIn] += mapArticleIdPv[v.ArticleId]
						} else {
							mapArticleIdLabelTotal[vIn] = mapArticleIdPv[v.ArticleId]
							mapActivityLabels[vIn] = vIn
						}
					}
				}
			}
		}
	}

	articleIds, err = cygx.GetCygxArticleCollectId(userId, dateTime)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取用户搜藏记录失败"
		return
	}
	if articleIds != "" {
		//产业、标的标签
		listLabelName, err := cygx.GetArticleGroupyIndustryName(articleIds)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败"
			br.ErrMsg = "获取数据失败,Err:" + err.Error()
			return
		}
		if len(listLabelName) > 0 {
			for _, v := range listLabelName {
				labelsIndustryList := strings.Split(v.IndustryName, "/")
				labelsSubjectList := strings.Split(v.SubjectName, "/")
				//添加产业统计
				if len(labelsIndustryList) > 0 {
					for _, vIn := range labelsIndustryList {
						if mapActivityLabels[vIn] != "" {
							mapArticleIdLabelTotal[vIn] += 1
						} else {
							mapArticleIdLabelTotal[vIn] = 1
							mapActivityLabels[vIn] = vIn
						}
					}
				}
				if len(labelsSubjectList) > 0 {
					//添加标的统计
					for _, vIn := range labelsSubjectList {
						if mapActivityLabels[vIn] != "" {
							mapArticleIdLabelTotal[vIn] += 1
						} else {
							mapArticleIdLabelTotal[vIn] = 1
							mapActivityLabels[vIn] = vIn
						}
					}
				}
			}
		}
	}

	//活动标签计算
	listActivityPv, err := cygx.GetActivitySignCount(wxUser.Mobile, dateTime)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	if len(listActivityPv) > 0 {
		for _, v := range listActivityPv {
			labelsList := strings.Split(v.Label, "-")
			for _, v2 := range labelsList {
				labelsListSon := strings.Split(v2, "/")
				for _, v3 := range labelsListSon {
					if mapActivityLabels[v3] != "" {
						mapArticleIdLabelTotal[v3] += 1
					} else {
						mapArticleIdLabelTotal[v3] = 1
						mapActivityLabels[v3] = v3
					}
				}
			}
		}
	}
	//会议提醒部分标签
	listActivityPvByReminder, err := cygx.GetActivityMeetingReminder(wxUser.Mobile, dateTime)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	if len(listActivityPvByReminder) > 0 {
		for _, v := range listActivityPvByReminder {
			labelsList := strings.Split(v.Label, "-")
			for _, v2 := range labelsList {
				labelsListSon := strings.Split(v2, "/")
				for _, v3 := range labelsListSon {
					if mapActivityLabels[v3] != "" {
						mapArticleIdLabelTotal[v3] += 1
					} else {
						mapArticleIdLabelTotal[v3] = 1
						mapActivityLabels[v3] = v3
					}
				}
			}
		}
	}

	//对标签数量进行排序
	type KvPair struct {
		Key string
		Val int
	}
	tmpList := make([]KvPair, 0)
	for k, v := range mapArticleIdLabelTotal {
		tmpList = append(tmpList, KvPair{Key: k, Val: v})
	}
	sort.Slice(tmpList, func(i, j int) bool {
		return tmpList[i].Val > tmpList[j].Val // 降序
	})
	for _, v := range tmpList {
		if v.Key != "" {
			mapLabels[v.Key] = v.Key
			item := new(cygx.UserLabel)
			item.Label = v.Key
			labelsListStr = append(labelsListStr, item)
		}
	}

	var labelNew string
	for _, v := range labelsListStr {
		labelNew += v.Label + ","
	}
	labelNew = strings.TrimRight(labelNew, ",")
	resp := new(cygx.UserLabel)
	resp.Label = labelNew
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 状态搜索栏
// @Description 状态搜索栏接口
// @Success 200 {object} cygx.CygxUserTableStatusListRep
// @router /user/status/table [get]
func (this *UserController) StatusTable() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	listType := []*cygx.CygxTryStageRep{{Name: "大套餐", TryStage: 1}, {Name: "小套餐", TryStage: 2}}
	listStatus := []*cygx.CygxTryStageRep{{Name: "未分类", TryStage: 1}, {Name: "推进", TryStage: 2}, {Name: "跟踪", TryStage: 3}, {Name: "预备", TryStage: 4}}
	List := []*cygx.CygxUserTableStatusRep{{Name: "正式", List: listType, TryStage: "正式"}, {Name: "试用", List: listStatus, TryStage: "试用"}, {Name: "冻结", List: []*cygx.CygxTryStageRep{}, TryStage: "冻结"}, {Name: "X类试用", List: []*cygx.CygxTryStageRep{}, TryStage: "X类试用"}}
	resp := new(cygx.CygxUserTableStatusListRep)
	resp.List = List

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

// @Title 用户互动量
// @Description 状态搜索栏接口
// @Param  UserId   query   int  true       "用户id"
// @Success 200 {object} cygx.CygxUserTableStatusListRep
// @router /user/interactionNum [get]
func (this *UserController) InteractionNum() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取信息失败"
		return
	}
	cp, err := company.GetCompanyProductByCompanyIdAndProductId(wxUser.CompanyId, 2)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取客户信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}
	resp := new(cygx.CygxCygxInteractionNumRespListResp)
	for i := 0; i < 4; i++ {
		item := new(cygx.CygxInteractionNumResp)
		if cp != nil && cp.Status == "正式" {
			//阅读记录总数
			var startDate, endDate string
			item.DateTime = time.Now().AddDate(0, -i, 0).Format("2006.01")
			startDate = utils.GetOneMonthFirstDay(time.Now().AddDate(0, -i, 0)).Format(utils.FormatDate)
			endDate = utils.GetOneMonthLastDay(time.Now().AddDate(0, -i, 0)).Format(utils.FormatDate)

			countDetail, err := cygx.GetCompanyInteractionTableCountBytime(wxUser.CompanyId, startDate, endDate)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取各个阅读总数失败,Err:" + err.Error()
				return
			}
			item.InteractionNum = countDetail.HistoryNum + countDetail.CountNum + countDetail.IndustryFllowNum + countDetail.DepartmentFollowNum + countDetail.KeyWordNum + countDetail.OnLineNum + countDetail.OfficeNum + countDetail.ChartNum
		} else {
			var weekStr string
			switch i {
			case 0:
				weekStr = "本周("
			case 1:
				weekStr = "上周("
			case 2:
				weekStr = "上两周("
			case 3:
				weekStr = "上三周("
			}
			item.DateTime = weekStr + utils.GetNowWeekMonday().AddDate(0, 0, -i*7).Format("01.02") + "~" + utils.GetNowWeekMonday().AddDate(0, 0, -i*7+6).Format("01.02") + ")"
			var startDate, endDate string
			startDate = utils.GetNowWeekMonday().AddDate(0, 0, -i*7).Format(utils.FormatDate)
			endDate = utils.GetNowWeekMonday().AddDate(0, 0, -i*7+6).Format(utils.FormatDate)
			countDetail, err := cygx.GetCompanyInteractionTableCountBytime(wxUser.CompanyId, startDate, endDate)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取各个阅读总数失败,Err:" + err.Error()
				return
			}
			item.InteractionNum = countDetail.HistoryNum + countDetail.CountNum + countDetail.IndustryFllowNum + countDetail.DepartmentFollowNum + countDetail.KeyWordNum + countDetail.OnLineNum + countDetail.OfficeNum + countDetail.ChartNum + countDetail.TripNum + countDetail.RoadshowVideoNum + countDetail.ActivityVideoNum + countDetail.ActivityVoiceNum
		}
		resp.List = append(resp.List, item)
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 标签检索用户相关互动
// @Description 标签检索用户相关互动接口
// @Param  UserId   query   int  true       "用户id"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param  Source   query   int  true       "来源 1:报告阅读,2:报告收藏,3:相关活动,4:专项产业调研"
// @Success 200 {object} cygx.UserInteractionrelevantListResp
// @router /user/interaction/relevant [get]
func (this *UserController) InteractionRelevant() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	source, _ := this.GetInt("Source")
	keyWord := this.GetString("KeyWord")
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取信息失败"
		return
	}
	managementIds, err := cygx.GetManagementIdsByName(keyWord)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
		return
	}

	subjectIds, err := cygx.GetIndustrialSubjectIdsByName(keyWord)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
		return
	}

	resp := new(cygx.UserInteractionrelevantListResp)
	var condition string

	if source == 1 || source == 2 {
		var articleIds string
		if managementIds != "" || subjectIds != "" {
			var articleIdmanagement string
			var articleIdsubject string
			if managementIds != "" {
				articleIdmanagement, err = cygx.GetArticleIdsByIndustrialManagementId(managementIds)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
					return
				}
			}
			if subjectIds != "" {
				articleIdsubject, err = cygx.GetArticleIdsBySubjectId(subjectIds)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
					return
				}
			}
			if articleIdmanagement != "" && articleIdsubject != "" {
				articleIds = articleIdmanagement + "," + articleIdsubject
			} else if articleIdmanagement != "" && articleIdsubject == "" {
				articleIds = articleIdmanagement
			} else if articleIdmanagement == "" && articleIdsubject != "" {
				articleIds = articleIdsubject
			}
		} else {
			matchDetail, err := cygx.GetCygxReportMappingCygxDetailByName(keyWord)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "GetCygxReportMappingCygxDetail,Err:" + err.Error()
				return
			}
			if matchDetail != nil {
				var condition string
				var pars []interface{}
				condition = ` AND id_cygx = ? `
				pars = append(pars, matchDetail.Id)
				listGroup, err := cygx.GetCygxReportMappingGroupList(condition, pars, 0, 999)
				if err != nil && err.Error() != utils.ErrNoRow() {
					br.Msg = "获取失败"
					br.ErrMsg = "获取失败,Err:" + err.Error()
					return
				}
				var categoryIds []int
				for _, v := range listGroup {
					categoryIds = append(categoryIds, v.CategoryIdCelue)
				}
				pars = make([]interface{}, 0)
				condition = ` AND category_id IN (` + utils.GetOrmInReplace(len(categoryIds)) + `)`
				pars = append(pars, categoryIds)
				listArticle, err := cygx.GetArticlList(condition, pars, 0, 999)
				if err != nil && err.Error() != utils.ErrNoRow() {
					br.Msg = "获取失败"
					br.ErrMsg = "获取失败,Err:" + err.Error()
					return
				}
				for _, v := range listArticle {
					articleIds += strconv.Itoa(v.ArticleId) + ","
				}
				articleIds = strings.TrimRight(articleIds, ",")
			}
		}
		if articleIds != "" {
			condition = ` AND r.article_id IN (` + articleIds + `)`
			if source == 1 {
				condition += ` AND r.stop_time > 4 `
				resp.List, err = cygx.GetCygxArticleHistoryRecordByUser(wxUser.Mobile, wxUser.Email, condition, 0, 0)
			} else {
				resp.List, err = cygx.GetCygxArticleCollectByUser(userId, 0, 0, condition)
			}
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户阅读记录"
				return
			}
			if len(resp.List) > 0 {
				for k, v := range resp.List {
					resp.List[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
					resp.List[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
					if v.ArticleId >= utils.SummaryArticleId {
						resp.List[k].ArticleType = 1
					} else {
						resp.List[k].ArticleType = 2
					}
				}
			}
		}
	} else if source == 3 {
		activityIdByLabel, err := cygx.GetactivityIdsByLabel(keyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
			return
		}
		activityId := activityIdByLabel
		if activityId != "" {
			condition = ` AND s.is_meeting = 1 AND s.activity_id IN (` + activityId + `) AND s.mobile = ` + wxUser.Mobile
			resp.List, err = cygx.GetActivityMeetByUser(condition, 0, 0)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		}
	} else if source == 4 {
		activityIdByLabel, err := cygx.GetactivitySpecilIdsByLabel(keyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
			return
		}
		activityId := activityIdByLabel
		if activityId != "" {
			condition = ` AND s.is_meeting = 1 AND s.activity_id IN (` + activityId + `) AND s.mobile = ` + wxUser.Mobile
			resp.List, err = cygx.GetActivitySpecialMeetByUser(condition, 0, 0)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		}
	}

	if len(resp.List) == 0 {
		resp.List = make([]*cygx.UserInteraction, 0)
	}
	resp.IndustryName = keyWord
	if managementIds != "" {
		count, err := cygx.GetCygxIndustryFllowCountByUser(userId, managementIds)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户是否关注失败,Err:" + err.Error()
			return
		}
		if count > 0 {
			resp.IsFllow = true
		}
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 用户相关互动下载
// @Description 用户相关互动下载接口
// @Param  UserId   query   int  true       "用户id"
// @Param  Source   query   int  true       "来源 报告阅读列表: 1,  活动互动记录: 2"
// @Param   IsMeeting   query   string  true       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  true       "参会方式 1线上,2线下 默认为线上"
// @Param   StartDate   query   string  true       "开始时间"
// @Param   EndDate   query   string  true       "结束时间"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.CygxUserTableStatusListRep
// @router /user/export/interaction [get]
func (this *UserController) ExportInteraction() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	userId, _ := this.GetInt("UserId")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	keyWord := this.GetString("KeyWord")
	source, _ := this.GetInt("Source")
	classType, _ := this.GetInt("ClassType", 1)
	if userId < 1 {
		br.Msg = "用户不存在"
		return
	}
	wxUser, err := models.GetWxUserByUserId(userId)
	if err != nil {
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		br.Msg = "获取信息失败"
		return
	}

	mobile := wxUser.Mobile
	var list []*cygx.UserInteraction

	var condition string
	var sheetName string
	if source == 1 {
		sheetName = "报告阅读列表"
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}

		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		//total, err = cygx.GetCygxArticleHistoryCount(wxUser.Mobile, wxUser.Email, condition)
		//if err != nil {
		//	br.Msg = "获取信息失败"
		//	br.ErrMsg = "获取用户阅读记录总数失败,Err:" + err.Error()
		//	return
		//}
		if classType == 1 {
			condition += "  AND art.article_type_id =  0 "
		} else {
			condition += "  AND art.article_type_id >  0 "
		}

		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		_, list, err = cygx.GetCygxArticleHistoryRecordByUserNew(condition, 0, 9999)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		var articleIds []int
		if len(list) > 0 {
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if list[k].PermissionName == "" {
					list[k].PermissionName = v.CategoryName
				}
				if v.SpecialType == 0 {
					articleIds = append(articleIds, v.ArticleId)
				}
			}
			mapIndustrialLabel := cygxService.GetArticleIndustrialLabelByArticleId(articleIds) // 关联产业
			mapSubjectLabel := cygxService.GetArticleSubjectLabelByArticleId(articleIds)       // 关联标的
			for _, v := range list {
				v.IndustryName = strings.Join(mapIndustrialLabel[v.ArticleId], "/")
				v.SubjectNameStr = strings.Join(mapSubjectLabel[v.ArticleId], "/")
			}
		}

	} else if source == 2 {
		sheetName = "到会管理名单"
		if mobile != "" {
			condition = ` AND s.mobile = '` + mobile + `' `
			if classType == 1 {
				condition += "  AND  a.chart_permission_id  != 31 "
			} else {
				condition += "  AND  a.chart_permission_id  = 31 "
			}

			if isMeeting == "1" {
				condition += ` AND s.is_meeting = 1 `
			}
			if isMeeting == "2" {
				condition += ` AND s.is_meeting = 0 `
			}
			if meetType == "1" {
				condition += ` AND t.activity_type = 1 `
			}
			if meetType == "2" {
				condition += ` AND t.activity_type = 0 `
			}
			if startDate != "" {
				startDate += " 00:00:00"
				condition += ` AND a.activity_time >= '` + startDate + `' `
			}
			if endDate != "" {
				endDate += " 23:59:59"
				condition += ` AND a.activity_time <= '` + endDate + `' `
			}
			if keyWord != "" {
				condition += ` AND a.activity_name LIKE '%` + keyWord + `%' `
			}
			list, err = cygx.GetActivityMeetByUser(condition, 0, 0)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
			if len(list) > 0 {
				for k, v := range list {
					if v.ActivityType == 1 {
						if v.SignupType == "2" {
							list[k].InteractionType = "自主拨入"
						} else {
							list[k].InteractionType = "预约外呼"
						}
						if v.ReminderNum > 0 {
							list[k].InteractionType += ",会议提醒"
						}
					}
				}
			}
		}
	} else if source == 11 {
		sheetName = "专栏文章阅读记录"
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if wxUser.Mobile == "" {
			wxUser.Mobile = wxUser.Email
		}
		condition += " 	AND (r.mobile = '" + wxUser.Mobile + "'  OR  r.email = '" + wxUser.Mobile + "')  "
		_, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, 0, 9999)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
	}

	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet(sheetName)
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}
	if source == 1 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "报告标题"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属行业"
		cellC := rowTitle.AddCell()
		cellC.Value = "所属产业"
		cellD := rowTitle.AddCell()
		cellD.Value = "关联标的"
		cellE := rowTitle.AddCell()
		cellE.Value = "发布时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "阅读时间"
		cellG := rowTitle.AddCell()
		cellG.Value = "阅读时长"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.Title
			cellB := row.AddCell()
			cellB.Value = item.PermissionName
			cellC := row.AddCell()
			cellC.Value = item.IndustryName
			cellD := row.AddCell()
			cellD.Value = item.SubjectNameStr
			cellE := row.AddCell()
			cellE.Value = item.PublishDate
			cellF := row.AddCell()
			cellF.Value = item.CreateTime
			cellG := row.AddCell()
			cellG.Value = item.StopTime
		}
	} else if source == 2 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "活动名称"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属行业"
		cellC := rowTitle.AddCell()
		cellC.Value = "活动类型"
		cellD := rowTitle.AddCell()
		cellD.Value = "活动主题"
		cellE := rowTitle.AddCell()
		cellE.Value = "活动时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "是否到会"
		cellG := rowTitle.AddCell()
		cellG.Value = "首次入会时间"
		cellH := rowTitle.AddCell()
		cellH.Value = "最后退出时间"
		cellI := rowTitle.AddCell()
		cellI.Value = "参与总时长"
		cellJ := rowTitle.AddCell()
		cellJ.Value = "参会方式"
		cellK := rowTitle.AddCell()
		cellK.Value = "参会权鉴"
		cellL := rowTitle.AddCell()
		cellL.Value = "参会状态"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.ActivityName
			cellB := row.AddCell()
			cellB.Value = item.PermissionName
			cellC := row.AddCell()
			cellC.Value = item.ActivityTypeName
			cellD := row.AddCell()
			cellD.Value = item.Label
			cellE := row.AddCell()
			cellE.Value = item.ActivityTime
			cellF := row.AddCell()
			if item.IsMeeting == 1 {
				cellF.Value = "到会"
				cellG := row.AddCell()
				cellG.Value = item.FirstMeetingTime
				cellH := row.AddCell()
				cellH.Value = item.LastMeetingTime
				cellI := row.AddCell()
				cellI.Value = item.Duration
				cellJ := row.AddCell()
				cellJ.Value = item.LastMeetingTime
				cellK := row.AddCell()
				cellK.Value = item.MeetingTypeStr
				cellL := row.AddCell()
				cellL.Value = item.MeetingStatusStr
			} else {
				cellF.Value = "未到会"
			}
		}
	} else if source == 11 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "文章标题"
		cellB := rowTitle.AddCell()
		cellB.Value = "文章类型"
		cellC := rowTitle.AddCell()
		cellC.Value = "标签"
		cellD := rowTitle.AddCell()
		cellD.Value = "发布时间"
		cellE := rowTitle.AddCell()
		cellE.Value = "阅读时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "阅读时长"
		cellG := rowTitle.AddCell()
		cellG.Value = "阅读来源"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.Title
			cellB := row.AddCell()
			if item.SpecialType == 1 {
				cellB.Value = "笔记"
			} else {
				cellB.Value = "观点"
			}
			cellC := row.AddCell()
			cellC.Value = item.IndustryName
			cellD := row.AddCell()
			cellD.Value = item.PublishDate
			cellE := row.AddCell()
			cellE.Value = item.CreateTime
			cellF := row.AddCell()
			cellF.Value = item.StopTime
			cellG := row.AddCell()
			cellG.Value = cygxService.GetArticleSourcePlatformText(item.RegisterPlatform)
		}
	} else if source == 11 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "文章标题"
		cellB := rowTitle.AddCell()
		cellB.Value = "文章类型"
		cellC := rowTitle.AddCell()
		cellC.Value = "标签"
		cellD := rowTitle.AddCell()
		cellD.Value = "发布时间"
		cellE := rowTitle.AddCell()
		cellE.Value = "阅读时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "阅读时长"
		cellG := rowTitle.AddCell()
		cellG.Value = "阅读来源"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.Title
			cellB := row.AddCell()
			if item.SpecialType == 1 {
				cellB.Value = "笔记"
			} else {
				cellB.Value = "观点"
			}
			cellC := row.AddCell()
			cellC.Value = item.IndustryName
			cellD := row.AddCell()
			cellD.Value = item.PublishDate
			cellE := row.AddCell()
			cellE.Value = item.CreateTime
			cellF := row.AddCell()
			cellF.Value = item.StopTime
			cellG := row.AddCell()
			cellG.Value = cygxService.GetArticleSourcePlatformText(item.RegisterPlatform)
		}
	}
	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := wxUser.RealName + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
}

// @Title 机构互动详情table栏
// @Description 互动详情table栏接口
// @Param  CompanyId   query   int  true       "公司ID"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.UserRemarksListResp
// @router /user/company/table/list [get]
func (this *UserController) CompanyTableList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	companyId, _ := this.GetInt("CompanyId")
	classType, _ := this.GetInt("ClassType", 1)
	if companyId < 1 {
		br.Msg = "机构不存在"
		return
	}

	comanyDetail, err := company.GetCompanyDetailById(companyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	resp := new(cygx.CygxUserTableListRep)
	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}

	var pars []interface{}
	condition := ` AND r.company_id  IN  (   ` + strconv.Itoa(companyId) + `  ) AND r.create_time < '` + time.Now().Format(utils.FormatDate) + `' ` //过滤当天时间
	//totalEs, _, err := services.SearcCygxArticleHistoryData(utils.IndexNameArticleHistory, "", "", "", strconv.Itoa(companyId), 0, 0)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取Es文章阅读数量失败,Err:" + err.Error()
	//	return
	//}
	conditionArtcile := condition       //文章搜索条件
	conditionActivityMeet := condition  //活动到会搜索条件
	conditionIndustryFllow := condition //产业关注搜索条件
	conditionKeyWord := condition       //关键词记录搜索条件
	if classType == 1 {
		conditionArtcile += " AND art.article_type_id = 0  "
		conditionActivityMeet += " AND a.chart_permission_id  != 31  "
		conditionIndustryFllow += " AND m.chart_permission_id  != 31  "
		conditionKeyWord += " AND r.register_platform IN (1,2)  "
	} else {
		conditionArtcile += " AND art.article_type_id > 0  "
		conditionActivityMeet += " AND a.chart_permission_id  = 31  "
		conditionIndustryFllow += " AND m.chart_permission_id  = 31  "
		conditionKeyWord += " AND r.register_platform IN (5,6)  "
	}

	var historyNum int               //报告阅读列表
	var activityNum int              //活动互动记录
	var triptotal int                //专项调研
	var articleCollect int           //收藏的报告
	var chartNum int                 //收藏图表
	var industryFllowNum int         //关注的产业
	var departmentFollowNum int      //关注的作者
	var keyWordNum int               //搜索
	var roadshowTotal int            //音视频播放
	var tagNum int                   //首页标签点击
	var yanxuanSpecialNum int        //专栏文章阅读记录
	var yanxuanSpecialCollectNum int //收藏的专栏文章
	var yanxuanSpecialFollowNum int  //关注的专栏作者
	var feedbackNum int              //交流反馈数量
	var calendarMeetingNum int       //1v1 路演数量

	if isAdminRole {
		historyNum, err = cygx.GetCygxArticleAndYanxuanRecordCount(conditionArtcile, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
			return
		}

		activityNum, err = cygx.GetActivityMeetByCompanyCount(conditionActivityMeet)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
			return
		}
		//获取用户收藏记录总数
		articleCollect, err = cygx.GetCygxArticleCollectCountByCompany(conditionArtcile)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
			return
		}
		//获取用户关注总数
		industryFllowNum, err = cygx.GetCygxIndustryFllowCountByCompany(conditionIndustryFllow)
		if err != nil {
			br.Msg = "获取信息失败 "
			br.ErrMsg = "获取用户关注总数失败,Err:" + err.Error()
			return
		}
		//获取关注作者总数
		departmentFollowNum, err = cygx.GetCygArticleDepartmentFollowCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取关注作者总数失败,Err:" + err.Error()
			return
		}
		//获取搜索记录
		keyWordNum, err = cygx.GetCygxSearchKeyWordCountBuCompany(conditionKeyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		chartNum, err = cygx.GetChartCountByUserMobile(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取总数失败,Err:" + err.Error()
			return
		}

		triptotal, err = cygx.GetCygxActivitySpecialTripCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		roadshowTotal, err = cygx.GetCygxRoadshowCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}
		tagNum, err = cygx.GetCygxTagHistoryCount(condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}
		yanxuanSpecialNum, err = cygx.GetCygxYanxuanSpecialRecordCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取研选专栏阅读数量失败"
			return
		}

		yanxuanSpecialCollectNum, err = cygx.GetCygxYanxuanSpecialCollectCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取收藏的专栏文章数量失败"
			return
		}

		yanxuanSpecialFollowNum, err = cygx.GetCygxYanxuanSpecialFollowCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取关注的专栏作者数量失败"
			return
		}

		feedbackNum, err = cygx.GetCygxUserFeedbackCountByUserModel(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取交流反馈数量失败"
			return
		}

		calendarMeetingNum, err = roadshow.GetRsCalendarMeetingUserCountByUserModel(condition, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetRsCalendarMeetingUserCountByUserModel,Err:" + err.Error()
			return
		}

	} else {
		historyNum, err = cygx.GetCygxArticleAndYanxuanRecordCountWeekly(conditionArtcile, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
			return
		}
		activityNum, err = cygx.GetActivityMeetByCompanyCountWeekly(conditionActivityMeet)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
			return
		}
		//获取用户收藏记录总数
		articleCollect, err = cygx.GetCygxArticleCollectCountByCompanyWeekly(conditionArtcile)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
			return
		}
		//获取用户关注总数
		industryFllowNum, err = cygx.GetCygxIndustryFllowCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败 "
			br.ErrMsg = "获取用户关注总数失败,Err:" + err.Error()
			return
		}
		//获取关注作者总数
		departmentFollowNum, err = cygx.GetCygArticleDepartmentFollowCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取关注作者总数失败,Err:" + err.Error()
			return
		}
		//获取搜索记录
		keyWordNum, err = cygx.GetCygxSearchKeyWordCountBuCompanyWeekly(conditionKeyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		chartNum, err = cygx.GetChartCountByUserMobileWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取总数失败,Err:" + err.Error()
			return
		}

		triptotal, err = cygx.GetCygxActivitySpecialTripCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		roadshowTotal, err = cygx.GetCygxRoadshowCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}
		tagNum, err = cygx.GetCygxTagHistoryCountWeekly(condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}

		yanxuanSpecialNum, err = cygx.GetCygxYanxuanSpecialRecordCountWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取研选专栏阅读数量失败"
			return
		}

		yanxuanSpecialCollectNum, err = cygx.GetCygxYanxuanSpecialCollectCountWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取收藏的专栏文章数量失败"
			return
		}

		yanxuanSpecialFollowNum, err = cygx.GetCygxYanxuanSpecialFollowCountWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取关注的专栏作者数量失败"
			return
		}

		feedbackNum, err = cygx.GetCygxUserFeedbackCountByUserModelWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取交流反馈数量失败"
			return
		}

		calendarMeetingNum, err = roadshow.GetRsCalendarMeetingUserCountByUserModelWeekly(condition, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetRsCalendarMeetingUserCountByUserModelWeekly,Err:" + err.Error()
			return
		}

	}

	if classType == 1 {
		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: historyNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: activityNum},
			{PermissionName: "专项调研", Source: 8, TotalNum: triptotal},
			{PermissionName: "1v1路演", Source: 15, TotalNum: calendarMeetingNum},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: articleCollect},
			{PermissionName: "收藏图表", Source: 4, TotalNum: chartNum},
			{PermissionName: "关注的产业", Source: 5, TotalNum: industryFllowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: keyWordNum},
			{PermissionName: "音视频播放", Source: 9, TotalNum: roadshowTotal},
			{PermissionName: "首页标签点击", Source: 10, TotalNum: tagNum},
			{PermissionName: "交流反馈", Source: 14, TotalNum: feedbackNum}}
		resp.List = List
	} else {
		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: historyNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: activityNum},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: articleCollect},
			{PermissionName: "关注的产业", Source: 5, TotalNum: industryFllowNum},
			{PermissionName: "关注的作者", Source: 6, TotalNum: departmentFollowNum},
			{PermissionName: "专栏文章阅读记录", Source: 11, TotalNum: yanxuanSpecialNum},
			{PermissionName: "收藏的专栏文章", Source: 12, TotalNum: yanxuanSpecialCollectNum},
			{PermissionName: "关注的专栏作者", Source: 13, TotalNum: yanxuanSpecialFollowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: keyWordNum}}
		resp.List = List
	}

	resp.ComapnyName = comanyDetail.CompanyName
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 机构互动详情
// @Description 机构互动详情接口
// @Param  CompanyId   query   int  true       "公司ID"
// @Param  Source   query   int  true       "来源"
// @Param   IsMeeting   query   string  false       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  false       "参会方式 1线上,2线下 默认为线上"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
// @Param   StartDate   query   string  false       "开始时间"
// @Param   EndDate   query   string  false       "结束时间"
// @Param   KeyWord   query   string  false       "搜索关键词"
// @Param   ActivityName    query   string  false       "活动名称"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
// @Success 200 {object} cygx.UserInteractionListResp
// @router /user/company/interaction/detail [get]
func (this *UserController) CompanyTableDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	companyId, _ := this.GetInt("CompanyId")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	keyWord := this.GetString("KeyWord")
	activityName := this.GetString("ActivityName")
	source, _ := this.GetInt("Source")
	classType, _ := this.GetInt("ClassType", 1)
	if companyId < 1 {
		br.Msg = "用户不存在"
		return
	}
	isExport, _ := this.GetBool("IsExport")
	if isExport {
		pageSize = 10000
		currentIndex = 1
	}

	// 1.标记用户表
	//操作权限校验
	resp := new(cygx.UserInteractionListResp)
	var err error

	var list []*cygx.UserInteraction
	var total int
	var condition string
	var pars []interface{}
	condition += ` AND r.company_id  =   ` + strconv.Itoa(companyId) + ` AND r.create_time < '` + time.Now().Format(utils.FormatDate) + `' `
	if keyWord != "" {
		condition += ` AND ( r.mobile LIKE '%` + keyWord + `%' OR r.email LIKE '%` + keyWord + `%' OR r.real_name LIKE '%` + keyWord + `%')`
	}

	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}

	if source == 1 {
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		condition += " AND r.source = 'article'  "
		if classType == 1 {
			condition += " AND art.article_type_id = 0  "
		} else {
			condition += " AND art.article_type_id > 0  "
		}
		condition += "  ORDER BY r.create_time DESC "
		var listRecord []*cygx.CygxArticleAndYanxuanRecordResp
		if isAdminRole {
			total, err = cygx.GetCygxArticleAndYanxuanRecordCount(condition, pars)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
				return
			}
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespList(condition, pars, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxArticleAndYanxuanRecordCountWeekly(condition, pars)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
				return
			}
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespListWeekly(condition, pars, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		//处理查询信息回显
		list, err = cygxService.HandleArticleAndYanxuanRecordList(listRecord)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}

		for k, v := range list {
			if classType == 1 {
				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
			} else {
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
			}
			if v.ReportId > 0 {
				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
			}
		}
		//导出excel
		if isExport {
			exportListArticle(this, list, 2, br)
			return
		}
	} else if source == 2 {

		if isMeeting == "1" {
			condition += ` AND r.is_meeting = 1 `
		}
		if isMeeting == "2" {
			condition += ` AND r.is_meeting = 0 `
		}

		if meetType == "1" {
			condition += ` AND t.activity_type = 1 `
		}
		if meetType == "2" {
			condition += ` AND t.activity_type = 0 `
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND a.activity_time >= '` + startDate + `' `
		}

		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND a.activity_time <= '` + endDate + `' `
		}
		if activityName != "" {
			condition += ` AND a.activity_name LIKE '%` + activityName + `%' `
		}

		if classType == 1 {
			condition += "  AND a.chart_permission_id  != 31  "
		} else {
			condition += "  AND a.chart_permission_id  = 31  "
		}

		if isAdminRole {
			total, err = cygx.GetActivityMeetByCompanyCount(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetActivityMeetByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		} else {
			total, err = cygx.GetActivityMeetByCompanyCountWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetActivityMeetByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				if v.ActivityType == 1 {
					if v.SignupType == "2" {
						list[k].InteractionType = "自主拨入"
					} else {
						list[k].InteractionType = "预约外呼"
					}
					if v.ReminderNum > 0 {
						list[k].InteractionType += ",会议提醒"
					}
				}
				if v.IsMeeting == 0 || v.FirstMeetingTime == "0000-00-00 00:00:00" {
					list[k].FirstMeetingTime = ""
					list[k].LastMeetingTime = ""
				}
				if v.FirstMeetingTime == "0000-00-00 00:00:00" {
					list[k].FirstMeetingTime = ""
					list[k].LastMeetingTime = ""
				}
			}
		}
		//导出excel
		if isExport {
			exportListActivity(this, list, 2, br)
			return
		}
	} else if source == 3 {
		if classType == 1 {
			condition += " AND art.article_type_id = 0  "
		} else {
			condition += " AND art.article_type_id > 0  "
		}
		if isAdminRole {
			total, err = cygx.GetCygxArticleCollectCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxArticleCollectByCompany(startSize, pageSize, condition)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxArticleCollectCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxArticleCollectByCompanyWeekly(startSize, pageSize, condition)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		}

		if len(list) > 0 {
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if classType == 1 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				} else {
					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				}
				if v.ReportId > 0 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
				}
			}
		}
	} else if source == 4 {
		if isAdminRole {
			list, err = cygx.GetChartCollectList(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				return
			}
		} else {
			list, err = cygx.GetChartCollectListWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				return
			}
		}

		if len(list) > 0 {
			for k, v := range list {
				var err error
				condition = ` AND a.publish_status = 1  AND r.company_id =  ` + strconv.Itoa(companyId) + ` AND  r.mobile =  ` + v.Mobile + `  AND r.create_time  < '` + time.Now().Format(utils.FormatDate) + `' ` //过滤当天时间
				total, err = cygx.GetChartCountByUserMobile(condition)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取总数失败,Err:" + err.Error()
					return
				}
				listChart, err := cygx.GetChartListCollectionWithCygxByMobile(condition, 0, 18)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取信息失败,Err:" + err.Error()
					return
				}
				for k, vChart := range listChart {
					if vChart.PtagName != "" {
						listChart[k].CtagNamePc = vChart.PtagName
					}
					if vChart.CtagName != "" {
						listChart[k].CtagNamePc += "," + vChart.CtagName
					}
					if vChart.PtagNameTwo != "" {
						listChart[k].CtagNamePc += "," + vChart.PtagNameTwo
					}
					if vChart.CtagNameTwo != "" {
						listChart[k].CtagNamePc += "," + vChart.CtagNameTwo
					}
				}
				pageChart := paging.GetPaging(currentIndex, 18, total)
				list[k].ListChart = listChart
				list[k].Paging = pageChart
				list[k].IsEnd = pageChart.IsEnd
				list[k].CurrentIndex = pageChart.CurrentIndex
			}
		}

	} else if source == 5 {
		if classType == 1 {
			condition += " AND m.chart_permission_id  != 31 "
		} else {
			condition += " AND m.chart_permission_id  = 31 "
		}
		if isAdminRole {
			total, err = cygx.GetCygxIndustryFllowCountByCompany(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
			list, err = cygx.GetCygxIndustryFllowByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
		} else {
			total, err = cygx.GetCygxIndustryFllowCountByCompanyWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
			list, err = cygx.GetCygxIndustryFllowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
		}
	} else if source == 6 {
		if isAdminRole {
			total, err = cygx.GetCygArticleDepartmentFollowCountByCompany(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者总数失败"
				return
			}
			list, err = cygx.GetCygArticleDepartmentFollowByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者列表失败"
				return
			}
		} else {
			total, err = cygx.GetCygArticleDepartmentFollowCountByCompanyWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者总数失败"
				return
			}
			list, err = cygx.GetCygArticleDepartmentFollowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者列表失败"
				return
			}
		}
		if len(list) > 0 {
			var departmentIds []int
			for _, v := range list {
				departmentIds = append(departmentIds, v.DepartmentId)
			}
			mapIndustrialLabel := cygxService.GetArticleIndustrialLabelByDepartmentId(departmentIds) // 关联产业
			for _, v := range list {
				v.SubjectNameStr = strings.Join(mapIndustrialLabel[v.DepartmentId], "/")
			}
		}
	} else if source == 7 {
		if classType == 1 {
			condition += " AND r.register_platform IN (1,2) "
		} else {
			condition += " AND r.register_platform IN (5,6) "
		}
		if isAdminRole {
			total, err = cygx.GetCygxSearchKeyWordCountBuCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxSearchKeyWordByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxSearchKeyWordCountBuCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxSearchKeyWordByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}
	} else if source == 8 {
		if isAdminRole {
			total, err = cygx.GetCygxActivitySpecialTripCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.CygxActivitySpecialTripByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxActivitySpecialTripCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.CygxActivitySpecialTripByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}
	} else if source == 9 {
		if isAdminRole {
			total, err = cygx.GetCygxRoadshowCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxRoadshowByCompany(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxRoadshowCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxRoadshowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}
	} else if source == 10 { //标签点击记录
		if isAdminRole {
			total, err = cygx.GetCygxTagHistoryCount(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录失败"
				return
			}
			list, err = cygx.GetCygxTagHistoryListBycondition(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录列表失败"
				return
			}
		} else {
			total, err = cygx.GetCygxTagHistoryCountWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录失败"
				return
			}
			list, err = cygx.GetCygxTagHistoryListByconditionWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录列表失败"
				return
			}
		}
	} else if source == 11 { //专栏文章阅读记录
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
		//导出excel
		if isExport {
			exportListYanxuanSpecial(this, list, 2, br)
			return
		}
	} else if source == 12 { //收藏的专栏文章
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuanSpecialCollectByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuanSpecialCollectByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
	} else if source == 13 { //关注的专栏作者
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuanSpecialAuthorByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuanSpecialAuthorByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/view/" + strconv.Itoa(v.DepartmentId)
			}
		}
	} else if source == 14 { //交流反馈
		if isAdminRole {
			total, list, err = cygx.GetCygxUserFeedback(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户交流反馈,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxUserFeedbackWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户交流反馈,Err:" + err.Error()
				return
			}
		}
	} else if source == 15 { //1V1路演
		if startDate != "" {
			condition += ` AND b.start_date >= '` + startDate + `' `
		}
		if endDate != "" {
			condition += ` AND b.start_date <= '` + endDate + `' `
		}
		var totalRsCalendar int
		var listRsCalendar []*roadshow.RsCalendarMeetingUserByRai
		if isAdminRole {
			totalRsCalendar, listRsCalendar, err = roadshow.GetRsCalendarMeetingUserByRai(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			totalRsCalendar, listRsCalendar, err = roadshow.GetRsCalendarMeetingUserByRaiWeekly(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		total = totalRsCalendar
		list, err = cygxService.HandleListRsCalendar(listRsCalendar)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "HandleListRsCalendar,Err:" + err.Error()
			return
		}
		//导出excel
		if isExport {
			exportListRsCalendar(this, list, 2, br)
			return
		}
	}

	page := paging.GetPaging(currentIndex, pageSize, total)

	if len(list) == 0 {
		list = make([]*cygx.UserInteraction, 0)
	}
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 机构相关互动下载
// @Description 机构相关互动下载接口
// @Param  CompanyId   query   int  true       "公司id"
// @Param  Source   query   int  true       "来源 报告阅读列表: 1,  活动互动记录: 2"
// @Param   IsMeeting   query   string  true       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  true       "参会方式 1线上,2线下 默认为线上"
// @Param   StartDate   query   string  true       "开始时间"
// @Param   EndDate   query   string  true       "结束时间"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   ActivityName   query   string  true       "活动名称"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.CygxUserTableStatusListRep
// @router /user/company/export/interaction [get]
func (this *UserController) CompanyExportInteraction() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	companyId, _ := this.GetInt("CompanyId")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	keyWord := this.GetString("KeyWord")
	activityName := this.GetString("ActivityName")
	source, _ := this.GetInt("Source")
	classType, _ := this.GetInt("ClassType", 1)
	if companyId < 1 {
		br.Msg = "用户不存在"
		return
	}
	//获取企业客户信息
	companyInfo, err := company.GetCompanyById(companyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetCompanyById,Err:" + err.Error()
		return
	}
	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}
	var pageSize = 9999
	var list []*cygx.UserInteraction

	var condition string
	condition += ` AND r.company_id  =   ` + strconv.Itoa(companyId) + ` AND r.create_time < date_format(now(),'%Y-%m-%d') ` //过滤当天时间
	if keyWord != "" {
		//condition += ` AND r.user_id IN (SELECT user_id FROM wx_user WHERE mobile LIKE '%` + keyWord + `%' OR email LIKE '%` + keyWord + `%' OR real_name LIKE '%` + keyWord + `%')`
		condition += ` AND ( r.mobile LIKE '%` + keyWord + `%' OR r.email LIKE '%` + keyWord + `%' OR r.real_name LIKE '%` + keyWord + `%')`
	}
	if source == 1 {
		if classType == 1 {
			condition += "  AND art.article_type_id =  0 "
		} else {
			condition += "  AND art.article_type_id >  0 "
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		condition += ` ORDER BY r.create_time DESC  `
		var pars []interface{}
		var listRecord []*cygx.CygxArticleAndYanxuanRecordResp
		if isAdminRole {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespList(condition, pars, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespListWeekly(condition, pars, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		//处理查询信息回显
		list, err = cygxService.HandleArticleAndYanxuanRecordList(listRecord)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			var articleIds string
			mapAricleId := make(map[int]int)
			mapAricleIndustrialSubjectName := make(map[int]*cygx.ArticleIndustrialSubjectNameResp)
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if list[k].PermissionName == "" {
					list[k].PermissionName = v.CategoryName
				}
				if mapAricleId[v.ArticleId] == 0 {
					articleIds += strconv.Itoa(v.ArticleId) + ","
					mapAricleId[v.ArticleId] = v.ArticleId
				}
			}
			articleIds = strings.TrimRight(articleIds, ",")
			if articleIds != "" {
				listArticleIndustrialSubjectList, err := cygx.GetCygxArticleIndustrialSubjectName(articleIds)
				if err != nil && err.Error() != utils.ErrNoRow() {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
					return
				}
				if len(listArticleIndustrialSubjectList) > 0 {
					for _, v := range listArticleIndustrialSubjectList {
						mapAricleIndustrialSubjectName[v.ArticleId] = v
					}
					for k, v := range list {
						if mapAricleIndustrialSubjectName[v.ArticleId] != nil {
							list[k].IndustryName = mapAricleIndustrialSubjectName[v.ArticleId].IndustryName
							list[k].SubjectNameStr = mapAricleIndustrialSubjectName[v.ArticleId].SubjectNameStr
						}
					}
				}
			}
		}
	} else if source == 2 {
		if classType == 1 {
			condition += "  AND  a.chart_permission_id  != 31 "
		} else {
			condition += "  AND  a.chart_permission_id  = 31 "
		}
		if isMeeting == "1" {
			condition += ` AND r.is_meeting = 1 `
		}
		if isMeeting == "2" {
			condition += ` AND r.is_meeting = 0 `
		}
		if meetType == "1" {
			condition += ` AND t.activity_type = 1 `
		}
		if meetType == "2" {
			condition += ` AND t.activity_type = 0 `
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND a.activity_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND a.activity_time <= '` + endDate + `' `
		}
		if activityName != "" {
			condition += ` AND a.activity_name LIKE '%` + activityName + `%' `
		}
		if isAdminRole {
			list, err = cygx.GetActivityMeetByCompany(condition, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		} else {
			list, err = cygx.GetActivityMeetByCompanyWeekly(condition, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				if v.ActivityType == 1 {
					if v.SignupType == "2" {
						list[k].InteractionType = "自主拨入"
					} else {
						list[k].InteractionType = "预约外呼"
					}
					if v.ReminderNum > 0 {
						list[k].InteractionType += ",会议提醒"
					}
				}
			}
		}
	} else if source == 11 {
		if isAdminRole {
			_, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, 0, 9999)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			_, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUserWeekly(condition, 0, 9999)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
	}
	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet("用户名单")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}
	var excelName string
	if source == 1 {
		excelName = "阅读记录"
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "姓名"
		cellB := rowTitle.AddCell()
		cellB.Value = "手机号"
		cellC := rowTitle.AddCell()
		cellC.Value = "报告标题"
		cellD := rowTitle.AddCell()
		cellD.Value = "所属行业"
		cellE := rowTitle.AddCell()
		cellE.Value = "所属产业"
		cellF := rowTitle.AddCell()
		cellF.Value = "关联标的"
		cellG := rowTitle.AddCell()
		cellG.Value = "发布时间"
		cellH := rowTitle.AddCell()
		cellH.Value = "阅读时间"
		cellI := rowTitle.AddCell()
		cellI.Value = "阅读时长"
		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.RealName
			cellB := row.AddCell()
			cellB.Value = item.Mobile
			cellC := row.AddCell()
			cellC.Value = item.Title
			cellD := row.AddCell()
			cellD.Value = item.PermissionName
			cellE := row.AddCell()
			cellE.Value = item.IndustryName
			cellF := row.AddCell()
			cellF.Value = item.SubjectNameStr
			cellG := row.AddCell()
			cellG.Value = item.PublishDate
			cellH := row.AddCell()
			cellH.Value = item.CreateTime
			cellI := row.AddCell()
			cellI.Value = item.StopTime
		}
	} else if source == 2 {
		excelName = "参会记录"
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "姓名"
		cellB := rowTitle.AddCell()
		cellB.Value = "手机号"
		cellC := rowTitle.AddCell()
		cellC.Value = "活动名称"
		cellD := rowTitle.AddCell()
		cellD.Value = "所属行业"
		cellE := rowTitle.AddCell()
		cellE.Value = "活动类型"
		cellF := rowTitle.AddCell()
		cellF.Value = "活动主题"
		cellG := rowTitle.AddCell()
		cellG.Value = "活动时间"
		cellH := rowTitle.AddCell()
		cellH.Value = "是否到会"
		cellI := rowTitle.AddCell()
		cellI.Value = "首次入会时间"
		cellJ := rowTitle.AddCell()
		cellJ.Value = "最后退出时间"
		cellK := rowTitle.AddCell()
		cellK.Value = "参与总时长"
		cellL := rowTitle.AddCell()
		cellL.Value = "参会方式"
		cellM := rowTitle.AddCell()
		cellM.Value = "参会权鉴"
		cellN := rowTitle.AddCell()
		cellN.Value = "参会状态"
		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.RealName
			cellB := row.AddCell()
			cellB.Value = item.Mobile
			cellC := row.AddCell()
			cellC.Value = item.ActivityName
			cellD := row.AddCell()
			cellD.Value = item.PermissionName
			cellE := row.AddCell()
			cellE.Value = item.ActivityTypeName
			cellF := row.AddCell()
			cellF.Value = item.Label
			cellG := row.AddCell()
			cellG.Value = item.ActivityTime
			cellH := row.AddCell()
			if item.IsMeeting == 1 {
				cellH.Value = "到会"
			} else {
				cellH.Value = "未到会"
			}
			cellI := row.AddCell()
			cellI.Value = item.FirstMeetingTime
			cellJ := row.AddCell()
			cellJ.Value = item.LastMeetingTime
			cellK := row.AddCell()
			cellK.Value = item.Duration
			cellL := row.AddCell()
			cellL.Value = item.LastMeetingTime
			cellM := row.AddCell()
			cellM.Value = item.MeetingTypeStr
			cellN := row.AddCell()
			cellN.Value = item.MeetingStatusStr
		}
	} else if source == 11 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "文章标题"
		cellB := rowTitle.AddCell()
		cellB.Value = "文章类型"
		cellC := rowTitle.AddCell()
		cellC.Value = "标签"
		cellD := rowTitle.AddCell()
		cellD.Value = "发布时间"
		cellE := rowTitle.AddCell()
		cellE.Value = "阅读时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "阅读时长"
		cellG := rowTitle.AddCell()
		cellG.Value = "阅读来源"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.Title
			cellB := row.AddCell()
			if item.SpecialType == 1 {
				cellB.Value = "笔记"
			} else {
				cellB.Value = "观点"
			}
			cellC := row.AddCell()
			cellC.Value = item.IndustryName
			cellD := row.AddCell()
			cellD.Value = item.PublishDate
			cellE := row.AddCell()
			cellE.Value = item.CreateTime
			cellF := row.AddCell()
			cellF.Value = item.StopTime
			cellG := row.AddCell()
			cellG.Value = cygxService.GetArticleSourcePlatformText(item.RegisterPlatform)
		}
	}
	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}

	randStr := time.Now().Format(utils.FormatDate)
	downloadFileName := excelName + companyInfo.CompanyName + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
}

// @Title 全机构互动列表
// @Description 全机构互动列表接口
// @Param  Source   query   int  true       "来源"
// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
// @Param   IsMeeting   query   string  false       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  false       "参会方式 1线上,2线下 默认为线上"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
// @Param   StartDate   query   string  false       "开始时间"
// @Param   EndDate   query   string  false       "结束时间"
// @Param   KeyWord   query   string  false       "搜索关键词"
// @Param   ActivityName    query   string  false       "活动名称"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
// @Success 200 {object} cygx.UserInteractionListResp
// @router /user/company/list [get]
func (this *UserController) CompanyList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	roleTypeCode := sysUser.RoleTypeCode
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	adminId := this.GetString("AdminId")
	keyWord := this.GetString("KeyWord")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	activityName := this.GetString("ActivityName")
	source, _ := this.GetInt("Source")
	status := this.GetString("Status")
	classType, _ := this.GetInt("ClassType", 1)
	// 套餐类型
	//packageType, _ := this.GetInt("PackageType")
	keyWord = strings.Trim(keyWord, " ")
	keyWord = strings.Replace(keyWord, "'", "", -1)
	isExport, _ := this.GetBool("IsExport")
	if isExport {
		pageSize = 10000
		currentIndex = 1
	}

	var total int

	//statusItems := make([]*company.CompanyStatus, 0)
	//var statusArr = [...]string{"全部", "试用", "正式", "冻结", "流失", "永续"}

	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	var condition string

	resp := new(cygx.UserInteractionListResp)
	var err error

	var list []*cygx.UserInteraction

	//流失
	var lossCondition string
	//var lossPars []interface{}

	//状态分类查询条件
	var permissionCondition string
	if adminId != "" {
		condition += ` AND b.seller_id IN (` + adminId + `) `
	}

	lossCondition = condition
	//lossPars = pars
	permissionCondition = condition

	//流失客户统计
	lossCondition += ` AND status='流失' `
	//productId := services.GetProductId(roleTypeCode)
	productId := 2
	//权限控制
	{
		//如果不是超级管理员或者财务
		if roleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && roleTypeCode != utils.ROLE_TYPE_CODE_FINANCE {
			//如果是部门管理员
			if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

			} else {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				if status == "全部" {
					////如果是筛选了流失客户状态
					if sysUser.Authority <= 0 {
						condition += ` AND (b.seller_id= '` + strconv.Itoa(sysUser.AdminId) + `' OR status='流失')  `

						permissionCondition += ` AND b.seller_id= ` + strconv.Itoa(sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							condition += ` AND (b.department_id=` + strconv.Itoa(sysUser.DepartmentId) + `  OR status='流失')`
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id=` + strconv.Itoa(sysUser.GroupId) + `  OR status='流失') `
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)

						}

						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
								}
								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}
						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id =` + strconv.Itoa(sysUser.GroupId) + ` OR status='流失') `
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				} else {
					//如果没有筛选了流失客户状态,那么需要加客户归属条件加入到查询中去
					if sysUser.Authority <= 0 {
						if status != utils.COMPANY_STATUS_LOSE {
							condition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
							//pars = append(pars, sysUser.AdminId)
						}

						permissionCondition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
						//permissionPars = append(permissionPars, sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
								//pars = append(pars, sysUser.DepartmentId)
							}
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
							//permissionPars = append(permissionPars, sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id= ` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}

						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id =` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}

							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				}
			}
		}
	}

	condition += ` AND b.status IN ('正式','试用','冻结') `
	companyCondition := `SELECT a.company_id FROM company AS a  INNER JOIN company_product AS b ON a.company_id=b.company_id   WHERE a.enabled=1  `
	companyIdsCondition := `SELECT GROUP_CONCAT( DISTINCT  a.company_id SEPARATOR ',' )  AS company_ids   FROM company AS a  INNER JOIN company_product AS b ON a.company_id=b.company_id   WHERE a.enabled=1  `
	if condition != "" {
		companyCondition += condition
	}
	companyIdsCondition += condition
	var companyIds string
	companyIds, err = cygx.GetCompanyIdsCondition(companyIdsCondition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取公司ID数据失败,Err:" + err.Error()
		return
	}
	condition = ` AND r.company_id  IN  (   ` + companyIds + `  ) AND r.create_time < '` + time.Now().Format(utils.FormatDate) + `' ` // 过滤当天查询时间
	if keyWord != "" {
		condition += ` AND  (r.mobile LIKE '%` + keyWord + `%' OR r.email LIKE '%` + keyWord + `%' OR r.real_name LIKE '%` + keyWord + `%'` + ` OR r.company_name LIKE '%` + keyWord + `%') `
	}
	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}
	if source == 1 {
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}

		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		if classType == 1 {
			condition += " AND art.article_type_id = 0  "
		} else {
			condition += " AND art.article_type_id > 0  "
		}

		condition += " AND r.source =  'article' "
		var pars []interface{}
		condition += "  ORDER BY r.create_time DESC "
		var listRecord []*cygx.CygxArticleAndYanxuanRecordResp
		if isAdminRole {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespList(condition, pars, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
			total, err = cygx.GetCygxArticleAndYanxuanRecordCount(condition, pars)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
				return
			}
		} else {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespListWeekly(condition, pars, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
			total, err = cygx.GetCygxArticleAndYanxuanRecordCountWeekly(condition, pars)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
				return
			}
		}

		//处理查询信息回显
		list, err = cygxService.HandleArticleAndYanxuanRecordList(listRecord)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		for k, v := range list {
			if classType == 1 {
				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
			} else {
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
			}
			if v.ReportId > 0 {
				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
			}
		}
		//导出excel
		if isExport {
			exportListArticle(this, list, 3, br)
			return
		}
	} else if source == 2 {

		if isMeeting == "1" {
			condition += ` AND r.is_meeting = 1 `
		}
		if isMeeting == "2" {
			condition += ` AND r.is_meeting = 0 `
		}

		if meetType == "1" {
			condition += ` AND t.activity_type = 1 `
		}
		if meetType == "2" {
			condition += ` AND t.activity_type = 0 `
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND a.activity_time >= '` + startDate + `' `
		}

		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND a.activity_time <= '` + endDate + `' `
		}
		if activityName != "" {
			condition += ` AND a.activity_name LIKE '%` + activityName + `%' `
		}
		if classType == 1 {
			condition += "  AND a.chart_permission_id  != 31  "
		} else {
			condition += "  AND a.chart_permission_id  = 31  "
		}
		if isAdminRole {
			total, err = cygx.GetActivityMeetByCompanyCount(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetActivityMeetByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		} else {
			total, err = cygx.GetActivityMeetByCompanyCountWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetActivityMeetByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		}
		//根据公司ID获取对应销售
		var sellerCompanyIds []int
		for _, v := range list {
			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
		}
		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)

		if len(list) > 0 {
			for k, v := range list {
				if v.ActivityType == 1 {
					if v.SignupType == "2" {
						list[k].InteractionType = "自主拨入"
					} else {
						list[k].InteractionType = "预约外呼"
					}
					if v.ReminderNum > 0 {
						list[k].InteractionType += ",会议提醒"
					}
				}
				if v.IsMeeting == 0 {
					list[k].FirstMeetingTime = ""
					list[k].LastMeetingTime = ""
				}
				v.SellerName = sellNameMap[v.CompanyId]
			}
		}
		//导出excel
		if isExport {
			exportListActivity(this, list, 3, br)
			return
		}
	} else if source == 3 {
		if classType == 1 {
			condition += " AND art.article_type_id = 0  "
		} else {
			condition += " AND art.article_type_id > 0  "
		}
		if isAdminRole {
			total, err = cygx.GetCygxArticleCollectCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxArticleCollectByCompanyList(startSize, pageSize, condition)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxArticleCollectCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxArticleCollectByCompanyWeekly(startSize, pageSize, condition)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户搜藏记录失败,Err:" + err.Error()
				return
			}
		}
		//根据公司ID获取对应销售
		var sellerCompanyIds []int
		for _, v := range list {
			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
		}
		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)

		if len(list) > 0 {
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				v.SellerName = sellNameMap[v.CompanyId]
				if classType == 1 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				} else {
					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
				}
				if v.ReportId > 0 {
					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
				}
			}
		}
	} else if source == 4 {
		if isAdminRole {
			total, err = cygx.GetChartCountByUserCount(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取总数失败,Err:" + err.Error()
				return
			}
			//condition += ` AND  r.company_id =  ` + strconv.Itoa(companyId) + `  AND r.create_time < date_format(now(),'%Y-%m-%d')` //过滤当天时间
			list, err = cygx.GetChartCollectBycompanyList(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetChartCountByUserMobileWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取总数失败,Err:" + err.Error()
				return
			}
			//condition += ` AND  r.company_id =  ` + strconv.Itoa(companyId) + `  AND r.create_time < date_format(now(),'%Y-%m-%d')` //过滤当天时间
			list, err = cygx.GetChartCollectBycompanyListWeekly(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				var err error
				condition = ` AND a.publish_status = 1   AND  r.mobile =  ` + v.Mobile + `  AND r.create_time < date_format(now(),'%Y-%m-%d')` //过滤当天时间
				totalUser, err := cygx.GetChartCountByUserMobile(condition)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取总数失败,Err:" + err.Error()
					return
				}
				listChart, err := cygx.GetChartListCollectionWithCygxByMobile(condition, 0, 18)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取信息失败,Err:" + err.Error()
					return
				}
				for k, vChart := range listChart {
					if vChart.PtagName != "" {
						listChart[k].CtagNamePc = vChart.PtagName
					}
					if vChart.CtagName != "" {
						listChart[k].CtagNamePc += "," + vChart.CtagName
					}
					if vChart.PtagNameTwo != "" {
						listChart[k].CtagNamePc += "," + vChart.PtagNameTwo
					}
					if vChart.CtagNameTwo != "" {
						listChart[k].CtagNamePc += "," + vChart.CtagNameTwo
					}
				}
				pageChart := paging.GetPaging(currentIndex, pageSize, totalUser)
				list[k].ListChart = listChart
				list[k].Paging = pageChart
				list[k].IsEnd = pageChart.IsEnd
				list[k].CurrentIndex = pageChart.CurrentIndex
			}
		}

	} else if source == 5 {
		if classType == 1 {
			condition += " AND m.chart_permission_id  != 31 "
		} else {
			condition += " AND m.chart_permission_id  = 31 "
		}
		if isAdminRole {
			total, err = cygx.GetCygxIndustryFllowCountByCompany(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
			list, err = cygx.GetCygxIndustryFllowByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
		} else {
			total, err = cygx.GetCygxIndustryFllowCountByCompanyWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
			list, err = cygx.GetCygxIndustryFllowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取用户关注总数失败"
				return
			}
		}
		//根据公司ID获取对应销售
		var sellerCompanyIds []int
		for _, v := range list {
			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
		}
		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)
		for _, v := range list {
			v.SellerName = sellNameMap[v.CompanyId]
		}

	} else if source == 6 {
		if isAdminRole {
			total, err = cygx.GetCygArticleDepartmentFollowCountByCompany(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者总数失败"
				return
			}
			list, err = cygx.GetCygArticleDepartmentFollowByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者列表失败"
				return
			}
		} else {
			total, err = cygx.GetCygArticleDepartmentFollowCountByCompanyWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者总数失败"
				return
			}
			list, err = cygx.GetCygArticleDepartmentFollowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取关注作者列表失败"
				return
			}
		}
		if len(list) > 0 {
			//根据公司ID获取对应销售
			var sellerCompanyIds []int
			var departmentIds []int
			for _, v := range list {
				sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
				departmentIds = append(departmentIds, v.DepartmentId)
			}

			sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)
			mapIndustrialLabel := cygxService.GetArticleIndustrialLabelByDepartmentId(departmentIds) // 关联产业
			for _, v := range list {
				v.SellerName = sellNameMap[v.CompanyId]
				v.SubjectNameStr = strings.Join(mapIndustrialLabel[v.DepartmentId], "/")
			}
		}
	} else if source == 7 {
		if classType == 1 {
			condition += " AND r.register_platform IN (1,2) "
		} else {
			condition += " AND r.register_platform IN (5,6) "
		}
		if isAdminRole {
			total, err = cygx.GetCygxSearchKeyWordCountBuCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxSearchKeyWordByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxSearchKeyWordCountBuCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxSearchKeyWordByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}
		//根据公司ID获取对应销售
		var sellerCompanyIds []int
		for _, v := range list {
			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
		}
		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)
		for _, v := range list {
			v.SellerName = sellNameMap[v.CompanyId]
		}
	} else if source == 8 {
		if isAdminRole {
			total, err = cygx.GetCygxActivitySpecialTripCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxActivitySpecialTripByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxActivitySpecialTripCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.CygxActivitySpecialTripByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}
	} else if source == 9 {
		if isAdminRole {
			total, err = cygx.GetCygxRoadshowCountByCompany(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxRoadshowByCompanyList(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		} else {
			total, err = cygx.GetCygxRoadshowCountByCompanyWeekly(condition)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
				return
			}
			list, err = cygx.GetCygxRoadshowByCompanyWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取搜索记录列表失败,Err:" + err.Error()
				return
			}
		}

		//根据公司ID获取对应销售
		var sellerCompanyIds []int
		for _, v := range list {
			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
		}
		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)
		for _, v := range list {
			v.SellerName = sellNameMap[v.CompanyId]
		}

	} else if source == 10 { //标签点击记录
		if isAdminRole {
			total, err = cygx.GetCygxTagHistoryCount(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录失败"
				return
			}
			list, err = cygx.GetCygxTagHistoryListBycondition(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录列表失败"
				return
			}
		} else {
			total, err = cygx.GetCygxTagHistoryCountWeekly(condition)
			if err != nil {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录失败"
				return
			}
			list, err = cygx.GetCygxTagHistoryListByconditionWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取搜索记录列表失败"
				return
			}
		}
	} else if source == 11 { //专栏文章阅读记录
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
		//导出excel
		if isExport {
			exportListYanxuanSpecial(this, list, 3, br)
			return
		}
	} else if source == 12 { //收藏的专栏文章
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuanSpecialCollectByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuanSpecialCollectByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.ArticleId)
			}
		}
	} else if source == 13 { //关注的专栏作者
		if isAdminRole {
			total, list, err = cygx.GetCygxYanxuanSpecialAuthorByUser(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxYanxuanSpecialAuthorByUserWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				list[k].RegisterPlatform = cygxService.GetArticleSourcePlatform(v.SourcePlatform)
				list[k].RegisterPlatformText = cygxService.GetArticleSourcePlatformText(v.RegisterPlatform)
				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/column/view/" + strconv.Itoa(v.DepartmentId)
			}
		}
	} else if source == 14 { //交流反馈
		if isAdminRole {
			total, list, err = cygx.GetCygxUserFeedback(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			total, list, err = cygx.GetCygxUserFeedbackWeekly(condition, startSize, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
	} else if source == 15 {
		if startDate != "" {
			condition += ` AND b.start_date >= '` + startDate + `' `
		}
		if endDate != "" {
			condition += ` AND b.start_date <= '` + endDate + `' `
		}
		var totalRsCalendar int
		var listRsCalendar []*roadshow.RsCalendarMeetingUserByRai
		if isAdminRole {
			totalRsCalendar, listRsCalendar, err = roadshow.GetRsCalendarMeetingUserByRai(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			totalRsCalendar, listRsCalendar, err = roadshow.GetRsCalendarMeetingUserByRaiWeekly(condition, startSize, pageSize)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		total = totalRsCalendar
		list, err = cygxService.HandleListRsCalendar(listRsCalendar)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "HandleListRsCalendar,Err:" + err.Error()
			return
		}
		//导出excel
		if isExport {
			exportListRsCalendar(this, list, 3, br)
			return
		}
	}
	page := paging.GetPaging(currentIndex, pageSize, total)

	if len(list) == 0 {
		list = make([]*cygx.UserInteraction, 0)
	}
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 机构列表相关互动下载
// @Description 机构相关互动下载接口
// @Param  Source   query   int  true       "来源 报告阅读列表: 1,  活动互动记录: 2"
// @Param   IsMeeting   query   string  true       "是否到会 1到会、2未到会"
// @Param   MeetType   query   string  true       "参会方式 1线上,2线下 默认为线上"
// @Param   StartDate   query   string  true       "开始时间"
// @Param   EndDate   query   string  true       "结束时间"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   ActivityName   query   string  true       "活动名称"
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.CygxUserTableStatusListRep
// @router /user/companyList/export/interaction [get]
func (this *UserController) CompanyExportInteractionList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}

	roleTypeCode := sysUser.RoleTypeCode
	adminId := this.GetString("AdminId")
	keyWord := this.GetString("KeyWord")
	isMeeting := this.GetString("IsMeeting")
	meetType := this.GetString("MeetType")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	activityName := this.GetString("ActivityName")
	source, _ := this.GetInt("Source")
	status := this.GetString("Status")
	classType, _ := this.GetInt("ClassType", 1)
	// 套餐类型
	//packageType, _ := this.GetInt("PackageType")
	keyWord = strings.Trim(keyWord, " ")
	keyWord = strings.Replace(keyWord, "'", "", -1)

	var list []*cygx.UserInteraction
	var err error

	var condition string
	//流失
	var lossCondition string
	//var lossPars []interface{}

	//状态分类查询条件
	var permissionCondition string
	if adminId != "" {
		condition += ` AND b.seller_id IN (` + adminId + `) `
	}

	lossCondition = condition
	//lossPars = pars
	permissionCondition = condition

	//流失客户统计
	lossCondition += ` AND status='流失' `
	//productId := services.GetProductId(roleTypeCode)
	productId := 2
	//权限控制
	{
		//如果不是超级管理员或者财务
		if roleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && roleTypeCode != utils.ROLE_TYPE_CODE_FINANCE {
			//如果是部门管理员
			if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

			} else {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				if status == "全部" {
					////如果是筛选了流失客户状态
					if sysUser.Authority <= 0 {
						condition += ` AND (b.seller_id= '` + strconv.Itoa(sysUser.AdminId) + `' OR status='流失')  `

						permissionCondition += ` AND b.seller_id= ` + strconv.Itoa(sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							condition += ` AND (b.department_id=` + strconv.Itoa(sysUser.DepartmentId) + `  OR status='流失')`
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id=` + strconv.Itoa(sysUser.GroupId) + `  OR status='流失') `
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)

						}

						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
								}
								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}
						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id =` + strconv.Itoa(sysUser.GroupId) + ` OR status='流失') `
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				} else {
					//如果没有筛选了流失客户状态,那么需要加客户归属条件加入到查询中去
					if sysUser.Authority <= 0 {
						if status != utils.COMPANY_STATUS_LOSE {
							condition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
							//pars = append(pars, sysUser.AdminId)
						}

						permissionCondition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
						//permissionPars = append(permissionPars, sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
								//pars = append(pars, sysUser.DepartmentId)
							}
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
							//permissionPars = append(permissionPars, sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id= ` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}

						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id =` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}

							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				}
			}
		}
	}

	//condition += ` AND b.status IN ('正式','试用','冻结') `
	//companyCondition := `SELECT a.company_id FROM company AS a  INNER JOIN company_product AS b ON a.company_id=b.company_id   WHERE a.enabled=1  `
	//if condition != "" {
	//	companyCondition += condition
	//}

	condition += ` AND b.status IN ('正式','试用','冻结') `
	companyCondition := `SELECT a.company_id FROM company AS a  INNER JOIN company_product AS b ON a.company_id=b.company_id   WHERE a.enabled=1  `
	companyIdsCondition := `SELECT GROUP_CONCAT( DISTINCT  a.company_id SEPARATOR ',' )  AS company_ids   FROM company AS a  INNER JOIN company_product AS b ON a.company_id=b.company_id   WHERE a.enabled=1  `
	if condition != "" {
		companyCondition += condition
	}
	companyIdsCondition += condition
	var companyIds string
	companyIds, err = cygx.GetCompanyIdsCondition(companyIdsCondition)

	companyIds, err = cygx.GetCompanyIdsCondition(companyIdsCondition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取公司ID数据失败,Err:" + err.Error()
		return
	}

	condition = ` AND r.company_id  IN  (   ` + companyIds + `  )AND r.create_time < date_format(now(),'%Y-%m-%d') ` //过滤当天时间
	if keyWord != "" {
		condition += ` AND  (r.mobile LIKE '%` + keyWord + `%' OR r.email LIKE '%` + keyWord + `%' OR r.real_name LIKE '%` + keyWord + `%'` + ` OR r.company_name LIKE '%` + keyWord + `%') `
	}
	var isAdminRole bool
	var pageSize = 9999
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}
	if source == 1 {
		if classType == 1 {
			condition += "  AND art.article_type_id =  0 "
		} else {
			condition += "  AND art.article_type_id >  0 "
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND r.create_time >= '` + startDate + `' `
		}

		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND r.create_time <= '` + endDate + `' `
		}
		condition += ` ORDER BY r.create_time DESC  `
		var pars []interface{}
		var listRecord []*cygx.CygxArticleAndYanxuanRecordResp
		if isAdminRole {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespList(condition, pars, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			listRecord, err = cygx.GetCygxArticleAndYanxuanRecordRespListWeekly(condition, pars, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
		//处理查询信息回显
		list, err = cygxService.HandleArticleAndYanxuanRecordList(listRecord)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
			return
		}
		if len(list) > 0 {
			var articleIds string
			mapAricleId := make(map[int]int)
			mapAricleIndustrialSubjectName := make(map[int]*cygx.ArticleIndustrialSubjectNameResp)
			for k, v := range list {
				if v.ArticleId >= utils.SummaryArticleId {
					list[k].ArticleType = 1
				} else {
					list[k].ArticleType = 2
				}
				if list[k].PermissionName == "" {
					list[k].PermissionName = v.CategoryName
				}
				if mapAricleId[v.ArticleId] == 0 {
					articleIds += strconv.Itoa(v.ArticleId) + ","
					mapAricleId[v.ArticleId] = v.ArticleId
				}
			}
			articleIds = strings.TrimRight(articleIds, ",")
			if articleIds != "" {
				listArticleIndustrialSubjectList, err := cygx.GetCygxArticleIndustrialSubjectName(articleIds)
				if err != nil && err.Error() != utils.ErrNoRow() {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
					return
				}
				if len(listArticleIndustrialSubjectList) > 0 {
					for _, v := range listArticleIndustrialSubjectList {
						mapAricleIndustrialSubjectName[v.ArticleId] = v
					}
					for k, v := range list {
						if mapAricleIndustrialSubjectName[v.ArticleId] != nil {
							fmt.Println(mapAricleIndustrialSubjectName[v.ArticleId].IndustryName)
							list[k].IndustryName = mapAricleIndustrialSubjectName[v.ArticleId].IndustryName
							list[k].SubjectNameStr = mapAricleIndustrialSubjectName[v.ArticleId].SubjectNameStr
						}
					}
				}
			}
		}
	} else if source == 2 {
		if classType == 1 {
			condition += "  AND  a.chart_permission_id  != 31 "
		} else {
			condition += "  AND  a.chart_permission_id  = 31 "
		}
		if isMeeting == "1" {
			condition += ` AND r.is_meeting = 1 `
		}
		if isMeeting == "2" {
			condition += ` AND r.is_meeting = 0 `
		}
		if meetType == "1" {
			condition += ` AND t.activity_type = 1 `
		}
		if meetType == "2" {
			condition += ` AND t.activity_type = 0 `
		}
		if startDate != "" {
			startDate += " 00:00:00"
			condition += ` AND a.activity_time >= '` + startDate + `' `
		}
		if endDate != "" {
			endDate += " 23:59:59"
			condition += ` AND a.activity_time <= '` + endDate + `' `
		}
		if activityName != "" {
			condition += ` AND a.activity_name LIKE '%` + activityName + `%' `
		}
		if isAdminRole {
			list, err = cygx.GetActivityMeetByCompany(condition, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		} else {
			list, err = cygx.GetActivityMeetByCompanyWeekly(condition, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.ErrMsg = "获取信息失败,Err:" + err.Error()
				br.Msg = "获取参会人数列表失败"
				return
			}
		}
		if len(list) > 0 {
			for k, v := range list {
				if v.ActivityType == 1 {
					if v.SignupType == "2" {
						list[k].InteractionType = "自主拨入"
					} else {
						list[k].InteractionType = "预约外呼"
					}
					if v.ReminderNum > 0 {
						list[k].InteractionType += ",会议提醒"
					}
				}
			}
		}
	} else if source == 11 {
		if isAdminRole {
			_, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUser(condition, 0, 9999)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		} else {
			_, list, err = cygx.GetCygxYanxuaSspecialHistoryRecordByUserWeekly(condition, 0, 9999)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取用户阅读记录,Err:" + err.Error()
				return
			}
		}
	}
	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	var excelName string
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet("到会管理名单")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}
	if source == 1 {
		excelName = "客户阅读记录"
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "客户名称"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属销售"
		cellC := rowTitle.AddCell()
		cellC.Value = "姓名"
		cellD := rowTitle.AddCell()
		cellD.Value = "手机号"
		cellE := rowTitle.AddCell()
		cellE.Value = "报告标题"
		cellF := rowTitle.AddCell()
		cellF.Value = "所属行业"
		cellG := rowTitle.AddCell()
		cellG.Value = "所属产业"
		cellH := rowTitle.AddCell()
		cellH.Value = "关联标的"
		cellI := rowTitle.AddCell()
		cellI.Value = "发布时间"
		cellJ := rowTitle.AddCell()
		cellJ.Value = "阅读时间"
		cellK := rowTitle.AddCell()
		cellK.Value = "阅读时长"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.CompanyName
			cellB := row.AddCell()
			cellB.Value = item.SellerName
			cellC := row.AddCell()
			cellC.Value = item.RealName
			cellD := row.AddCell()
			cellD.Value = item.Mobile
			cellE := row.AddCell()
			cellE.Value = item.Title
			cellF := row.AddCell()
			cellF.Value = item.PermissionName
			cellG := row.AddCell()
			cellG.Value = item.IndustryName
			cellH := row.AddCell()
			cellH.Value = item.SubjectNameStr
			cellI := row.AddCell()
			cellI.Value = item.PublishDate
			cellJ := row.AddCell()
			cellJ.Value = item.CreateTime
			cellK := row.AddCell()
			cellK.Value = item.StopTime
		}
	} else if source == 2 {
		excelName = "客户参会记录"
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "客户名称"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属销售"
		cellC := rowTitle.AddCell()
		cellC.Value = "姓名"
		cellD := rowTitle.AddCell()
		cellD.Value = "手机号"

		cellE := rowTitle.AddCell()
		cellE.Value = "活动名称"
		cellF := rowTitle.AddCell()
		cellF.Value = "所属行业"
		cellG := rowTitle.AddCell()
		cellG.Value = "活动类型"
		cellH := rowTitle.AddCell()
		cellH.Value = "活动主题"
		cellI := rowTitle.AddCell()
		cellI.Value = "活动时间"
		cellJ := rowTitle.AddCell()
		cellJ.Value = "是否到会"
		cellK := rowTitle.AddCell()
		cellK.Value = "首次入会时间"
		cellL := rowTitle.AddCell()
		cellL.Value = "最后退出时间"
		cellM := rowTitle.AddCell()
		cellM.Value = "参与总时长"
		cellN := rowTitle.AddCell()
		cellN.Value = "参会方式"
		cellO := rowTitle.AddCell()
		cellO.Value = "参会权鉴"
		cellP := rowTitle.AddCell()
		cellP.Value = "参会状态"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.CompanyName
			cellB := row.AddCell()
			cellB.Value = item.SellerName
			cellC := row.AddCell()
			cellC.Value = item.RealName
			cellD := row.AddCell()
			cellD.Value = item.Mobile

			cellE := row.AddCell()
			cellE.Value = item.ActivityName
			cellF := row.AddCell()
			cellF.Value = item.PermissionName
			cellG := row.AddCell()
			cellG.Value = item.ActivityTypeName
			cellH := row.AddCell()
			cellH.Value = item.Label
			cellI := row.AddCell()
			cellI.Value = item.ActivityTime
			cellJ := row.AddCell()
			if item.IsMeeting == 1 {
				cellJ.Value = "到会"
			} else {
				cellJ.Value = "未到会"
			}
			cellK := row.AddCell()
			cellK.Value = item.FirstMeetingTime
			cellL := row.AddCell()
			cellL.Value = item.LastMeetingTime
			cellM := row.AddCell()
			cellM.Value = item.Duration
			cellN := row.AddCell()
			cellN.Value = item.LastMeetingTime
			cellO := row.AddCell()
			cellO.Value = item.MeetingTypeStr
			cellP := row.AddCell()
			cellP.Value = item.MeetingStatusStr
		}
	} else if source == 11 {
		//标头
		rowTitle := sheet.AddRow()
		cellA := rowTitle.AddCell()
		cellA.Value = "文章标题"
		cellB := rowTitle.AddCell()
		cellB.Value = "文章类型"
		cellC := rowTitle.AddCell()
		cellC.Value = "标签"
		cellD := rowTitle.AddCell()
		cellD.Value = "发布时间"
		cellE := rowTitle.AddCell()
		cellE.Value = "阅读时间"
		cellF := rowTitle.AddCell()
		cellF.Value = "阅读时长"
		cellG := rowTitle.AddCell()
		cellG.Value = "阅读来源"

		for _, item := range list {
			row := sheet.AddRow()
			cellA := row.AddCell()
			cellA.Value = item.Title
			cellB := row.AddCell()
			if item.SpecialType == 1 {
				cellB.Value = "笔记"
			} else {
				cellB.Value = "观点"
			}
			cellC := row.AddCell()
			cellC.Value = item.IndustryName
			cellD := row.AddCell()
			cellD.Value = item.PublishDate
			cellE := row.AddCell()
			cellE.Value = item.CreateTime
			cellF := row.AddCell()
			cellF.Value = item.StopTime
			cellG := row.AddCell()
			cellG.Value = cygxService.GetArticleSourcePlatformText(item.RegisterPlatform)
		}
	}
	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := excelName + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
}

// @Title 机构列表互动详情table栏
// @Description 机构列表互动详情table栏接口
// @Param  ClassType   query   int  true       "列表类型,1:权益,2:研选,默认1"
// @Success 200 {object} cygx.CygxUserTableListRep
// @router /user/table/companyList [get]
func (this *UserController) TableCompanyList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}

	roleTypeCode := sysUser.RoleTypeCode
	status := this.GetString("Status")
	classType, _ := this.GetInt("ClassType", 1)
	//流失
	var lossCondition string
	var condition string
	//var lossPars []interface{}

	//状态分类查询条件
	var permissionCondition string

	lossCondition = condition
	//lossPars = pars
	permissionCondition = condition

	//流失客户统计
	lossCondition += ` AND status='流失' `
	//productId := services.GetProductId(roleTypeCode)
	productId := 2
	//权限控制
	{
		//如果不是超级管理员或者财务
		if roleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && roleTypeCode != utils.ROLE_TYPE_CODE_FINANCE {
			//如果是部门管理员
			if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

			} else {
				condition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				lossCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				permissionCondition += ` AND b.product_id= '` + strconv.Itoa(productId) + `'`

				if status == "全部" {
					////如果是筛选了流失客户状态
					if sysUser.Authority <= 0 {
						condition += ` AND (b.seller_id= '` + strconv.Itoa(sysUser.AdminId) + `' OR status='流失')  `

						permissionCondition += ` AND b.seller_id= ` + strconv.Itoa(sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							condition += ` AND (b.department_id=` + strconv.Itoa(sysUser.DepartmentId) + `  OR status='流失')`
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id=` + strconv.Itoa(sysUser.GroupId) + `  OR status='流失') `
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)

						}

						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
								}
								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}
						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND (b.group_id =` + strconv.Itoa(sysUser.GroupId) + ` OR status='流失') `
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				} else {
					//如果没有筛选了流失客户状态,那么需要加客户归属条件加入到查询中去
					if sysUser.Authority <= 0 {
						if status != utils.COMPANY_STATUS_LOSE {
							condition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
							//pars = append(pars, sysUser.AdminId)
						}

						permissionCondition += ` AND b.seller_id=` + strconv.Itoa(sysUser.AdminId)
						//permissionPars = append(permissionPars, sysUser.AdminId)
					} else {
						if sysUser.Authority == 1 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
								//pars = append(pars, sysUser.DepartmentId)
							}
							permissionCondition += ` AND b.department_id=` + strconv.Itoa(sysUser.DepartmentId)
							//permissionPars = append(permissionPars, sysUser.DepartmentId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id= ` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}
							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
						if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
							pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
							if err != nil {
								br.Msg = "获取失败"
								br.ErrMsg = "查询父级id异常" + err.Error()
								return
							}
							var ids []*string
							if pid != nil {
								if *pid != 0 {
									//销售主管放在三级列表中
									ids, err = company.GetGroupIdsByParentId(*pid)
									if err != nil {
										fmt.Println(err.Error())
									}
								} else {
									//销售主管放在二级列表中
									ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
									if err != nil {
										fmt.Println(err.Error())
									}
								}
							}
							var idSlice []string
							var sid string
							for _, id := range ids {
								idSlice = append(idSlice, *id)
							}
							//加入父级groupId
							if *pid > 0 {
								idSlice = append(idSlice, strconv.Itoa(*pid))
							} else {
								idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
							}

							sid = strings.Join(idSlice, ",")
							if len(sid) > 0 {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + sid + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + sid + `) `
							} else {
								if status != utils.COMPANY_STATUS_LOSE {
									condition += ` AND (b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) OR status='流失') `
									//pars = append(pars, sysUser.GroupId)
								}

								permissionCondition += ` AND b.group_id IN (` + strconv.Itoa(sysUser.GroupId) + `) `
							}
						}

						if sysUser.Authority == 4 {
							if status != utils.COMPANY_STATUS_LOSE {
								condition += ` AND b.group_id =` + strconv.Itoa(sysUser.GroupId)
								//pars = append(pars, sysUser.GroupId)
							}

							permissionCondition += ` AND b.group_id=` + strconv.Itoa(sysUser.GroupId)
							//permissionPars = append(permissionPars, sysUser.GroupId)
						}
					}
				}
			}
		}
	}
	condition += ` AND b.status IN ('正式','试用','冻结') `
	companyCondition := ` AND  a.enabled=1  `
	if condition != "" {
		companyCondition += condition
	}
	resp := new(cygx.CygxUserTableListRep)
	var isAdminRole bool
	//如果不是管理员身份或者研究员身份则需要添加可见范围处理
	if sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN || sysUser.Role == utils.ROLE_TYPE_CODE_RESEARCHR {
		isAdminRole = true
	}
	var pars []interface{}
	lsitCompany, err := company.GetCompanyProductListBycondition(condition, pars)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取数据失败,GetCompanyProductListBycondition Err:" + err.Error()
		return
	}

	var companyIds []string
	for _, v := range lsitCompany {
		companyIds = append(companyIds, strconv.Itoa(v.CompanyId))
	}
	condition = " AND  r.company_id IN (" + strings.Join(companyIds, ",") + ")"
	condition += `  AND r.create_time < date_format(now(),'%Y-%m-%d') ` //过滤当天时间
	conditionArtcile := condition                                       //文章搜索条件
	conditionActivityMeet := condition                                  //活动到会搜索条件
	conditionIndustryFllow := condition                                 //产业关注搜索条件
	conditionKeyWord := condition                                       //关键词记录搜索条件
	if classType == 1 {
		conditionArtcile += " AND art.article_type_id = 0  "
		conditionActivityMeet += " AND a.chart_permission_id  != 31  "
		conditionIndustryFllow += " AND m.chart_permission_id  != 31  "
		conditionKeyWord += " AND r.register_platform IN (1,2)  "
	} else {
		conditionArtcile += " AND art.article_type_id > 0  "
		conditionActivityMeet += " AND a.chart_permission_id  = 31  "
		conditionIndustryFllow += " AND m.chart_permission_id  = 31  "
		conditionKeyWord += " AND r.register_platform IN (5,6)  "
	}

	var historyNum int               //报告阅读列表
	var activityNum int              //活动互动记录
	var triptotal int                //专项调研
	var articleCollect int           //收藏的报告
	var chartNum int                 //收藏图表
	var industryFllowNum int         //关注的产业
	var departmentFollowNum int      //关注的作者
	var keyWordNum int               //搜索
	var roadshowTotal int            //音视频播放
	var tagNum int                   //首页标签点击
	var yanxuanSpecialNum int        //专栏文章阅读记录
	var yanxuanSpecialCollectNum int //收藏的专栏文章
	var yanxuanSpecialFollowNum int  //关注的专栏作者
	var feedbackNum int              //交流反馈数量
	var calendarMeetingNum int       //1v1 路演数量

	if isAdminRole {
		historyNum, err = cygx.GetCygxArticleAndYanxuanRecordCount(conditionArtcile, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
			return
		}

		//获取参会总数
		activityNum, err = cygx.GetActivityMeetByCompanyCount(conditionActivityMeet)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
			return
		}
		//获取用户收藏记录总数
		articleCollect, err = cygx.GetCygxArticleCollectCountByCompany(conditionArtcile)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
			return
		}
		//获取用户关注总数
		industryFllowNum, err = cygx.GetCygxIndustryFllowCountByCompany(conditionIndustryFllow)
		if err != nil {
			br.Msg = "获取信息失败 "
			br.ErrMsg = "获取用户关注总数失败,Err:" + err.Error()
			return
		}
		//获取关注作者总数
		departmentFollowNum, err = cygx.GetCygArticleDepartmentFollowCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取关注作者总数失败,Err:" + err.Error()
			return
		}
		//获取搜索记录
		keyWordNum, err = cygx.GetCygxSearchKeyWordCountBuCompany(conditionKeyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		chartNum, err = cygx.GetChartCountByUserMobile(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取总数失败,Err:" + err.Error()
			return
		}

		triptotal, err = cygx.GetCygxActivitySpecialTripCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		roadshowTotal, err = cygx.GetCygxRoadshowCountByCompany(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}
		tagNum, err = cygx.GetCygxTagHistoryCount(condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}

		yanxuanSpecialNum, err = cygx.GetCygxYanxuanSpecialRecordCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取研选专栏阅读数量失败"
			return
		}

		yanxuanSpecialCollectNum, err = cygx.GetCygxYanxuanSpecialCollectCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取收藏的专栏文章数量失败"
			return
		}

		yanxuanSpecialFollowNum, err = cygx.GetCygxYanxuanSpecialFollowCount(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取关注的专栏作者数量失败"
			return
		}
		feedbackNum, err = cygx.GetCygxUserFeedbackCountByUserModel(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取交流反馈数量失败"
			return
		}

		calendarMeetingNum, err = roadshow.GetRsCalendarMeetingUserCountByUserModel(condition, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetRsCalendarMeetingUserCountByUserModel,Err:" + err.Error()
			return
		}

	} else {
		historyNum, err = cygx.GetCygxArticleAndYanxuanRecordCountWeekly(conditionArtcile, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户阅读记录数量失败,Err:" + err.Error()
			return
		}

		//获取参会总数
		activityNum, err = cygx.GetActivityMeetByCompanyCountWeekly(conditionActivityMeet)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取参会总数失败,Err:" + err.Error()
			return
		}
		//获取用户收藏记录总数
		articleCollect, err = cygx.GetCygxArticleCollectCountByCompanyWeekly(conditionArtcile)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取用户收藏记录总数失败,Err:" + err.Error()
			return
		}
		//获取用户关注总数
		industryFllowNum, err = cygx.GetCygxIndustryFllowCountByCompanyWeekly(conditionIndustryFllow)
		if err != nil {
			br.Msg = "获取信息失败 "
			br.ErrMsg = "获取用户关注总数失败,Err:" + err.Error()
			return
		}
		//获取关注作者总数
		departmentFollowNum, err = cygx.GetCygArticleDepartmentFollowCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取关注作者总数失败,Err:" + err.Error()
			return
		}
		//获取搜索记录
		keyWordNum, err = cygx.GetCygxSearchKeyWordCountBuCompanyWeekly(conditionKeyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		chartNum, err = cygx.GetChartCountByUserMobileWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取总数失败,Err:" + err.Error()
			return
		}

		triptotal, err = cygx.GetCygxActivitySpecialTripCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}

		roadshowTotal, err = cygx.GetCygxRoadshowCountByCompanyWeekly(condition)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取搜索记录失败,Err:" + err.Error()
			return
		}
		tagNum, err = cygx.GetCygxTagHistoryCountWeekly(condition)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取搜索记录失败"
			return
		}

		yanxuanSpecialNum, err = cygx.GetCygxYanxuanSpecialRecordCountWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取研选专栏阅读数量失败"
			return
		}

		yanxuanSpecialCollectNum, err = cygx.GetCygxYanxuanSpecialCollectCountWeekly(condition, pars)
		if err != nil {
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			br.Msg = "获取收藏的专栏文章数量失败"
			return
		}

		yanxuanSpecialFollowNum, err = cygx.GetCygxYanxuanSpecialFollowCountWeekly(condition, pars)
		if err != nil {
			br.Msg = "获取关注的专栏作者数量失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		feedbackNum, err = cygx.GetCygxUserFeedbackCountByUserModelWeekly(condition, pars)
		if err != nil {
			br.Msg = "获取交流反馈数量失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}

		calendarMeetingNum, err = roadshow.GetRsCalendarMeetingUserCountByUserModelWeekly(condition, pars)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetRsCalendarMeetingUserCountByUserModelWeekly,Err:" + err.Error()
			return
		}

	}

	if classType == 1 {
		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: historyNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: activityNum},
			{PermissionName: "专项调研", Source: 8, TotalNum: triptotal},
			{PermissionName: "1v1路演", Source: 15, TotalNum: calendarMeetingNum},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: articleCollect},
			{PermissionName: "收藏图表", Source: 4, TotalNum: chartNum},
			{PermissionName: "关注的产业", Source: 5, TotalNum: industryFllowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: keyWordNum},
			{PermissionName: "音视频播放", Source: 9, TotalNum: roadshowTotal},
			{PermissionName: "首页标签点击", Source: 10, TotalNum: tagNum},
			{PermissionName: "交流反馈", Source: 14, TotalNum: feedbackNum}}
		resp.List = List
	} else {
		List := []*cygx.CygxUserTableRep{{PermissionName: "报告阅读列表", Source: 1, TotalNum: historyNum},
			{PermissionName: "活动互动记录", Source: 2, TotalNum: activityNum},
			{PermissionName: "收藏的报告", Source: 3, TotalNum: articleCollect},
			{PermissionName: "关注的产业", Source: 5, TotalNum: industryFllowNum},
			{PermissionName: "关注的作者", Source: 6, TotalNum: departmentFollowNum},
			{PermissionName: "专栏文章阅读记录", Source: 11, TotalNum: yanxuanSpecialNum},
			{PermissionName: "收藏的专栏文章", Source: 12, TotalNum: yanxuanSpecialCollectNum},
			{PermissionName: "关注的专栏作者", Source: 13, TotalNum: yanxuanSpecialFollowNum},
			{PermissionName: "搜索", Source: 7, TotalNum: keyWordNum}}
		resp.List = List
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 添加/取消用户提醒
// @Description 添加/取消用户提醒
// @Param	request	body cygx.UserRemarAddReq true "type json string"
// @Success 200 新增成功
// @router /user/remind [post]
func (this *UserController) UserRemind() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}
	var req cygx.UserRemarAddReq
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常!"
		br.ErrMsg = "参数解析失败,Err:" + err.Error()
		return
	}
	userId := req.UserId
	sourceType := req.SourceType
	doType := req.DoType
	wxUser, err := cygx.GetUserAndCompanyNameList(userId)
	if err != nil {
		br.Msg = "设置互动提醒失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	if sourceType != 1 && sourceType != 2 {
		br.Msg = "设置互动提醒失败"
		br.ErrMsg = "设置互动提醒失败,sourceType:" + strconv.Itoa(sourceType)
		return
	}
	if doType != 1 && doType != 2 {
		br.Msg = "设置互动提醒失败"
		br.ErrMsg = "设置互动提醒失败,doType:" + strconv.Itoa(doType)
		return
	}
	count, err := cygx.GetCygxUserRemindCount(userId)
	if err != nil {
		br.Msg = "获取数据失败!"
		br.ErrMsg = "获取数据失败,Err:" + err.Error()
		return
	}
	resp := new(cygx.CygxUserRemindResp)
	if count <= 0 {
		var items []*cygx.CygxUserRemind
		if sourceType == 1 {
			item := new(cygx.CygxUserRemind)
			item.AdminId = sysUser.AdminId
			item.AdminName = sysUser.RealName
			item.UserId = userId
			item.Mobile = wxUser.Mobile
			item.Email = wxUser.Email
			item.CompanyId = wxUser.CompanyId
			item.CompanyName = wxUser.CompanyName
			item.RealName = wxUser.RealName
			item.CreateTime = time.Now()
			item.ModifyTime = time.Now()
			items = append(items, item)
		} else {
			//获取机构下所有的用户
			listUser, err := models.GetWxUserListCompanyId(wxUser.CompanyId)
			if err != nil {
				br.Msg = "获取数据失败!"
				br.ErrMsg = "获取数据失败,GetWxUserListCompanyId Err:" + err.Error()
				return
			}
			//获取已经添加消息提醒的
			listUserRemind, err := cygx.GetCygxUserRemindListByCompanyId(wxUser.CompanyId)
			if err != nil {
				br.Msg = "获取数据失败!"
				br.ErrMsg = "获取数据失败,GetCygxUserRemindListByCompanyId Err:" + err.Error()
				return
			}
			mapUserRemind := make(map[int]bool)
			for _, v := range listUserRemind {
				mapUserRemind[v.UserId] = true
			}
			for _, v := range listUser {
				//如果已经添加了提醒的用户就不做添加处理
				if mapUserRemind[v.UserId] {
					continue
				}
				item := new(cygx.CygxUserRemind)
				item.AdminId = sysUser.AdminId
				item.AdminName = sysUser.RealName
				item.UserId = v.UserId
				item.Mobile = v.Mobile
				item.Email = v.Email
				item.CompanyId = v.CompanyId
				item.CompanyName = v.CompanyName
				item.RealName = v.RealName
				item.CreateTime = time.Now()
				item.ModifyTime = time.Now()
				items = append(items, item)
			}
		}
		//批量加入
		err = cygx.AddCygxUserRemindMulti(items)
		if err != nil {
			br.Msg = "添加失败"
			br.ErrMsg = "添加失败,Err:" + err.Error()
			return
		}
		br.Msg = "收藏成功"
		resp.Status = 1
	} else {
		if sourceType == 1 {
			err = cygx.RemoveCygxUserRemind(userId) //取消个人提醒
		} else {
			err = cygx.RemoveCygxUserRemindByCompanyId(wxUser.CompanyId) //取消整个机构提醒
		}

		if err != nil {
			br.Msg = "取消失败"
			br.ErrMsg = "取消失败,Err:" + err.Error()
			return
		}
		br.Msg = "已取消收藏"
		resp.Status = 2
	}
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// exportListRsCalendar  1v1路演导出Excel
func exportListRsCalendar(this *UserController, list []*cygx.UserInteraction, excelType int, br *models.BaseResponse) {
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	border := xlsx.NewBorder("thin", "thin", "thin", "thin")
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}

	redStyle := xlsx.NewStyle()
	redStyle.Alignment = alignment
	redStyle.ApplyAlignment = true
	redStyle.Font.Color = "ff0000"
	redStyle.Border = *border

	style.Alignment = alignment
	style.ApplyAlignment = true

	sheel, err := xlsxFile.AddSheet("1V1路演")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}
	sheel.SetColWidth(0, 0, 30)
	sheel.SetColWidth(1, 1, 15)
	sheel.SetColWidth(2, 2, 15)
	sheel.SetColWidth(3, 3, 18)

	titleRow := sheel.AddRow()

	if excelType > 2 {
		cellA := titleRow.AddCell()
		cellA.SetStyle(style)
		cellA.SetValue("客户名称")
	}

	if excelType > 1 {
		cellB := titleRow.AddCell()
		cellB.SetStyle(style)
		cellB.SetValue("姓名")

		cellC := titleRow.AddCell()
		cellC.SetStyle(style)
		cellC.SetValue("手机号")
	}

	cellD := titleRow.AddCell()
	cellD.SetStyle(style)
	cellD.SetValue("路演时间")

	cellE := titleRow.AddCell()
	cellE.SetStyle(style)
	cellE.SetValue("研究员")

	cellF := titleRow.AddCell()
	cellF.SetStyle(style)
	cellF.SetValue("路演形式")

	cellG := titleRow.AddCell()
	cellG.SetStyle(style)
	cellG.SetValue("主题标签")

	for _, v := range list {
		dataRow := sheel.AddRow()
		dataRow.SetHeight(20)

		if excelType > 2 {
			cellAData := dataRow.AddCell()
			cellAData.SetStyle(style)
			cellAData.Value = v.CompanyName
		}

		if excelType > 1 {
			cellBData := dataRow.AddCell()
			cellBData.SetStyle(style)
			cellBData.Value = v.RealName

			cellCData := dataRow.AddCell()
			cellCData.SetStyle(style)
			cellCData.Value = v.Mobile
		}

		cellDData := dataRow.AddCell()
		cellDData.SetStyle(style)
		cellDData.Value = v.ActivityTimeText

		cellEData := dataRow.AddCell()
		cellEData.SetStyle(style)
		cellEData.Value = v.ResearcherName

		cellFData := dataRow.AddCell()
		cellFData.SetStyle(style)
		if v.ActivityType == 1 {
			cellFData.Value = "线上"
		} else {
			cellFData.Value = "线下"
		}

		cellGData := dataRow.AddCell()
		cellGData.SetStyle(style)
		cellGData.Value = v.LabelKeyWord

	}
	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := "1V1路演导出数据_" + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "导出成功"
}

// exportListArticle  文章阅读数据导出
func exportListArticle(this *UserController, list []*cygx.UserInteraction, excelType int, br *models.BaseResponse) {
	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet("报告阅读列表")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}

	//标头
	rowTitle := sheet.AddRow()
	if excelType > 2 {
		cellA := rowTitle.AddCell()
		cellA.Value = "客户名称"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属销售"
	}
	if excelType > 1 {
		cellC := rowTitle.AddCell()
		cellC.Value = "姓名"
		cellD := rowTitle.AddCell()
		cellD.Value = "手机号"
	}
	cellE := rowTitle.AddCell()
	cellE.Value = "报告标题"
	cellF := rowTitle.AddCell()
	cellF.Value = "所属行业"
	cellG := rowTitle.AddCell()
	cellG.Value = "所属产业"
	cellH := rowTitle.AddCell()
	cellH.Value = "关联标的"
	cellI := rowTitle.AddCell()
	cellI.Value = "发布时间"
	cellJ := rowTitle.AddCell()
	cellJ.Value = "阅读时间"
	cellK := rowTitle.AddCell()
	cellK.Value = "阅读时长"

	for _, item := range list {
		row := sheet.AddRow()
		if excelType > 2 {
			cellA := row.AddCell()
			cellA.Value = item.CompanyName
			cellB := row.AddCell()
			cellB.Value = item.SellerName
		}
		if excelType > 1 {
			cellC := row.AddCell()
			cellC.Value = item.RealName
			cellD := row.AddCell()
			cellD.Value = item.Mobile
		}
		cellEData := row.AddCell()
		cellEData.Value = item.Title
		cellFData := row.AddCell()
		cellFData.Value = item.PermissionName
		cellGData := row.AddCell()
		cellGData.Value = item.IndustryName
		cellHData := row.AddCell()
		cellHData.Value = item.SubjectNameStr
		cellIData := row.AddCell()
		cellIData.Value = item.PublishDate
		cellJData := row.AddCell()
		cellJData.Value = item.CreateTime
		cellKData := row.AddCell()
		cellKData.Value = item.StopTime
	}
	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := "报告阅读列表导出数据_" + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "导出成功"
}

// exportListArticle  文章阅读数据导出
func exportListActivity(this *UserController, list []*cygx.UserInteraction, excelType int, br *models.BaseResponse) {
	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet("客户参会记录")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}

	//标头
	rowTitle := sheet.AddRow()

	if excelType > 2 {
		cellA := rowTitle.AddCell()
		cellA.Value = "客户名称"
		cellB := rowTitle.AddCell()
		cellB.Value = "所属销售"
	}

	if excelType > 1 {
		cellC := rowTitle.AddCell()
		cellC.Value = "姓名"
		cellD := rowTitle.AddCell()
		cellD.Value = "手机号"
	}

	cellE := rowTitle.AddCell()
	cellE.Value = "活动名称"
	cellF := rowTitle.AddCell()
	cellF.Value = "所属行业"
	cellG := rowTitle.AddCell()
	cellG.Value = "活动类型"
	cellH := rowTitle.AddCell()
	cellH.Value = "活动主题"
	cellI := rowTitle.AddCell()
	cellI.Value = "活动时间"
	cellJ := rowTitle.AddCell()
	cellJ.Value = "是否到会"
	cellK := rowTitle.AddCell()
	cellK.Value = "首次入会时间"
	cellL := rowTitle.AddCell()
	cellL.Value = "最后退出时间"
	cellM := rowTitle.AddCell()
	cellM.Value = "参与总时长"
	cellN := rowTitle.AddCell()
	cellN.Value = "参会方式"
	cellO := rowTitle.AddCell()
	cellO.Value = "参会权鉴"
	cellP := rowTitle.AddCell()
	cellP.Value = "参会状态"

	for _, item := range list {
		row := sheet.AddRow()
		if excelType > 2 {
			cellAData := row.AddCell()
			cellAData.Value = item.CompanyName
			cellBData := row.AddCell()
			cellBData.Value = item.SellerName
		}

		if excelType > 1 {
			cellCData := row.AddCell()
			cellCData.Value = item.RealName
			cellDData := row.AddCell()
			cellDData.Value = item.Mobile
		}

		cellEData := row.AddCell()
		cellEData.Value = item.ActivityName
		cellFData := row.AddCell()
		cellFData.Value = item.PermissionName
		cellGData := row.AddCell()
		cellGData.Value = item.ActivityTypeName
		cellHData := row.AddCell()
		cellHData.Value = item.Label
		cellIData := row.AddCell()
		cellIData.Value = item.ActivityTime
		cellJData := row.AddCell()
		if item.IsMeeting == 1 {
			cellJData.Value = "到会"
		} else {
			cellJData.Value = "未到会"
		}
		cellKData := row.AddCell()
		cellKData.Value = item.FirstMeetingTime
		cellLData := row.AddCell()
		cellLData.Value = item.LastMeetingTime
		cellMData := row.AddCell()
		cellMData.Value = item.Duration
		cellNData := row.AddCell()
		cellNData.Value = item.LastMeetingTime
		cellOData := row.AddCell()
		cellOData.Value = item.MeetingTypeStr
		cellPData := row.AddCell()
		cellPData.Value = item.MeetingStatusStr
	}

	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := "客户参会记录导出数据_" + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "导出成功"
}

// exportListYanxuanSpecial 研选专栏阅读记录
func exportListYanxuanSpecial(this *UserController, list []*cygx.UserInteraction, excelType int, br *models.BaseResponse) {
	//创建excel
	dir, err := os.Executable()
	exPath := filepath.Dir(dir)
	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	if err != nil {
		br.Msg = "生成文件失败"
		br.ErrMsg = "生成文件失败"
		return
	}
	style := xlsx.NewStyle()
	alignment := xlsx.Alignment{
		Horizontal: "center",
		Vertical:   "center",
		WrapText:   true,
	}
	style.Alignment = alignment
	style.ApplyAlignment = true
	sheet, err := xlsxFile.AddSheet("客户参会记录")
	if err != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
		return
	}

	//标头
	rowTitle := sheet.AddRow()

	if excelType > 2 {
		cellAy := rowTitle.AddCell()
		cellAy.Value = "客户名称"
		cellBy := rowTitle.AddCell()
		cellBy.Value = "所属销售"
	}

	if excelType > 1 {
		cellC := rowTitle.AddCell()
		cellC.Value = "姓名"
		cellD := rowTitle.AddCell()
		cellD.Value = "手机号"
	}

	cellA := rowTitle.AddCell()
	cellA.Value = "文章标题"
	cellB := rowTitle.AddCell()
	cellB.Value = "文章类型"
	cellC := rowTitle.AddCell()
	cellC.Value = "标签"
	cellD := rowTitle.AddCell()
	cellD.Value = "发布时间"
	cellE := rowTitle.AddCell()
	cellE.Value = "阅读时间"
	cellF := rowTitle.AddCell()
	cellF.Value = "阅读时长"
	cellG := rowTitle.AddCell()
	cellG.Value = "阅读来源"

	for _, item := range list {
		row := sheet.AddRow()

		if excelType > 2 {
			cellADatay := row.AddCell()
			cellADatay.Value = item.CompanyName
			cellBDatay := row.AddCell()
			cellBDatay.Value = item.SellerName
		}

		if excelType > 1 {
			cellCData := row.AddCell()
			cellCData.Value = item.RealName
			cellDData := row.AddCell()
			cellDData.Value = item.Mobile
		}

		cellAData := row.AddCell()
		cellAData.Value = item.Title
		cellBData := row.AddCell()
		if item.SpecialType == 1 {
			cellBData.Value = "笔记"
		} else {
			cellBData.Value = "观点"
		}
		cellCData := row.AddCell()
		cellCData.Value = item.IndustryName
		cellDData := row.AddCell()
		cellDData.Value = item.PublishDate
		cellEData := row.AddCell()
		cellEData.Value = item.CreateTime
		cellFData := row.AddCell()
		cellFData.Value = item.StopTime
		cellGData := row.AddCell()
		cellGData.Value = cygxService.GetArticleSourcePlatformText(item.RegisterPlatform)
	}

	err = xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
	downloadFileName := "客户参会记录导出数据_" + randStr + ".xlsx"
	this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "导出成功"
}