ziwen há 2 anos atrás
pai
commit
c300bde07f

+ 248 - 0
controllers/activity.go

@@ -0,0 +1,248 @@
+package controllers
+
+import (
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/services"
+	"hongze/hongze_clpt/utils"
+	"strings"
+	"time"
+)
+
+//活动
+type ActivityCoAntroller struct {
+	BaseAuthController
+}
+
+type ActivityABaseController struct {
+	BaseCommonController
+}
+
+// @Title 我的日程
+// @Description 我的日程列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   Source   query   int  false     "来源 0:手机 ,1:Pc 默认0"
+// @Success 200 {object} models.GetCygxActivityListRep
+// @router /scheduleList [get]
+func (this *ActivityCoAntroller) ScheduleList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	uid := user.UserId
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	source, _ := this.GetInt("Source")
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+	var condition string
+	var conditionCount string
+	var pars []interface{}
+	condition += ` AND art.publish_status = 1    `
+	if source == 1 {
+		condition += ` AND art.yidong_activity_id = '' `
+		conditionCount += ` AND art.yidong_activity_id = '' `
+	}
+	total, err := models.GetScheduleCount(conditionCount, uid)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	conditionCount = ` 	AND art.active_state = 2 `
+	totalCount, err := models.GetScheduleCount(conditionCount, uid) //获取正在进行中的活动数量
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	var list []*models.ActivityDetail
+	//全部都是进行中的活动
+	if totalCount > currentIndex*pageSize {
+		condition += ` AND art.active_state IN(2) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
+		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
+		list = listHave
+		if errList != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + errList.Error()
+			return
+		}
+	} else if totalCount > currentIndex-1*pageSize && totalCount < currentIndex*pageSize { //部分是进行中的活动
+		condition = `  AND art.publish_status = 1 AND art.active_state IN(2) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
+		listHave, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
+		list = listHave
+		if errList != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + errList.Error()
+			return
+		}
+		pageSize = pageSize - len(listHave)
+		condition = ` AND art.publish_status = 1 AND art.active_state IN(1,3) `
+		if source == 1 {
+			condition += ` AND art.yidong_activity_id = '' `
+		}
+		//listOther, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
+		listOther, errList := services.GetScheduleAndSpecilList(user, condition, startSize, pageSize)
+		if errList != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + errList.Error()
+			return
+		}
+		if len(listOther) > 0 {
+			for _, v := range listOther {
+				list = append(list, v)
+			}
+		}
+	} else {
+		condition += ` AND art.active_state IN(1,3)` //全部都不是进行中的活动
+		//listOther, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize)
+		listOther, errList := services.GetScheduleAndSpecilList(user, condition, startSize, pageSize)
+		list = listOther
+		if errList != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + errList.Error()
+			return
+		}
+	}
+	var isShow bool
+	isShow = services.GetShowSustainable()
+	detail, err := models.GetConfigByCode("city_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "城市配置信息失败,Err:" + err.Error()
+		return
+	}
+	detailChart, err := models.GetConfigByCode("chart_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
+		return
+	}
+
+	addressList := strings.Split(detail.ConfigValue, "{|}")
+	mapAddress := make(map[string]string)
+	chartList := strings.Split(detailChart.ConfigValue, "{|}")
+	mapChart := make(map[string]string)
+	var cityName string
+	var chartName string
+	var imgUrl string
+	var imgUrlChart string
+	var mapActivityId []int
+	for _, v := range addressList {
+		vslice := strings.Split(v, "_")
+		cityName = vslice[0]
+		imgUrl = vslice[len(vslice)-1]
+		mapAddress[cityName] = imgUrl
+	}
+	for _, v := range chartList {
+		vslice := strings.Split(v, "_")
+		chartName = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapChart[chartName] = imgUrlChart
+	}
+	for k, v := range list {
+		if strings.Contains(v.ActivityName, "【") {
+			list[k].IsBrackets = 1
+		}
+		if v.SignupNum > v.LimitPeopleNum {
+			list[k].SignupNum = v.LimitPeopleNum
+		}
+		//是否展示限免标签
+		if isShow && strings.Contains(v.ChartPermissionName, "研选") {
+			list[k].IsShowSustainable = true
+		}
+		if strings.Contains(v.ChartPermissionName, "研选") && v.ActivityTypeId == 1 {
+			list[k].ActivityTypeName = "买方研选电话会"
+			//list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
+			list[k].ImgUrlText = utils.YAN_XUAN_IMG
+		}
+		if v.ActivityType == 0 {
+			if mapAddress[v.City] != "" {
+				list[k].ImgUrl = mapAddress[v.City]
+			} else {
+				list[k].ImgUrl = mapAddress["其它"]
+			}
+		} else {
+			if mapChart[v.ChartPermissionName] != "" {
+				list[k].ImgUrl = mapChart[v.ChartPermissionName]
+			}
+		}
+		expertTxt, _ := services.GetReportContentTextSub(v.Expert)
+		list[k].Expert = expertTxt
+		if v.IsHideAppointment == 0 {
+			list[k].IsShowAppointment = services.IsShowAppointment(v.ActivityTypeId, v.ChartPermissionName)
+		}
+		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
+			list[k].IsCClassMeeting = true
+		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
+	}
+
+	//添加我的日程访问记录
+	item := new(models.CygxPageHistoryRecord)
+	item.UserId = user.UserId
+	item.CreateTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.PageType = "MySchedule"
+	go models.AddCygxPageHistoryRecord(item)
+	resp := new(models.GetCygxActivityListRep)
+
+	//处理音频回放
+	mapActivityVoice, err := services.GetActivityVoiceResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVoiceResp,Err:" + err.Error()
+		return
+	}
+
+	//处理视频回放
+	mapActivityVideo, err := services.GetActivityVideoResp(mapActivityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "GetActivityVideoResp,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].FileType = 1
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
+		if mapActivityVideo[v.ActivityId] != nil {
+			list[k].FileType = 2
+			list[k].AudioLink = true
+			list[k].VideoDetail = mapActivityVideo[v.ActivityId]
+		}
+		//处理列表的标签是否展示逻辑
+		resp.List = append(resp.List, services.ActivityButtonShow(v))
+	}
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 76 - 0
controllers/advice.go

@@ -0,0 +1,76 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_clpt/models"
+	"strconv"
+	"time"
+)
+
+//优化建议
+type AdviceController struct {
+	BaseAuthController
+}
+
+// @Title 新增优化建议
+// @Description 新增优化建议接口
+// @Param	request	body models.AddCygxAdviceReq true "type json string"
+// @Success Ret=200 新增成功
+// @router /add [post]
+func (this *AdviceController) ApplyApprove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req models.AddCygxAdviceReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.Advice == "" {
+		br.Msg = "建议内容不可为空"
+		return
+	}
+
+	companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
+	if err != nil {
+		br.Msg = "新增优化建议失败!"
+		br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
+		return
+	}
+	if companyDetail == nil {
+		br.Msg = "新增优化建议失败!"
+		br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId)
+		return
+	}
+	item := new(models.CygxAdvice)
+	item.UserId = user.UserId
+	item.UserRealName = user.RealName
+	item.CompanyId = user.CompanyId
+	item.CompanyName = companyDetail.CompanyName
+	item.SalesRealName = companyDetail.SellerName
+	item.Advice = req.Advice
+	item.AdviceImgUrl = req.AdviceImgUrl
+	item.CreateTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	_, err = models.AddCygxAdvice(item)
+	if err != nil {
+		br.Msg = "新增优化建议失败"
+		br.ErrMsg = "新增优化建议失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增成功"
+}

+ 405 - 0
controllers/user.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/services"
 	"hongze/hongze_clpt/utils"
@@ -157,6 +158,83 @@ func (this *UserController) Detail() {
 	resp.Mobile = user.Mobile
 	resp.Email = user.Email
 	resp.CompanyName = user.CompanyName
+	userDetail, err := models.GetUserDetailByUserId(user.UserId)
+	if err != nil {
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
+		return
+	}
+	resp.OutboundCountryCode = userDetail.CountryCode
+	resp.OutboundMobile = userDetail.OutboundMobile
+
+	if user.CompanyId > 1 {
+		companyItem, err := models.GetCompanyDetailById(user.CompanyId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			return
+		}
+		if companyItem != nil && companyItem.CompanyId > 0 {
+			resp.CompanyName = companyItem.CompanyName
+			//if companyItem.Status == "试用" || companyItem.Status == "永续" || companyItem.Status == "正式" {
+			//permissionStr, err := models.GetCompanyPermissionByUser(companyItem.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			//	return
+			//}
+			var permissionStr string
+			permissionList, err := models.GetCompanyPermissionList(companyItem.CompanyId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+				return
+			}
+
+			mapIsUpgrade := make(map[string]string)
+			mapZhukKeGuan := make(map[string]int)
+			for _, v := range permissionList {
+				mapZhukKeGuan[v.PermissionName] += 1
+				if v.IsUpgrade == 1 {
+					mapIsUpgrade[v.PermissionName] = v.PermissionName + "(升级)"
+				}
+			}
+			mapPermissionName := make(map[string]string)
+			//处理升级,并且合并主客观
+			for _, v := range permissionList {
+				if _, ok := mapPermissionName[v.PermissionName]; ok {
+					continue
+				}
+				if _, ok := mapIsUpgrade[v.PermissionName]; ok {
+					permissionStr += mapIsUpgrade[v.PermissionName] + ","
+				} else {
+					if mapZhukKeGuan[v.PermissionName] == 1 {
+						permissionStr += v.Remark + ","
+					} else {
+						permissionStr += v.PermissionName + ","
+					}
+				}
+				mapPermissionName[v.PermissionName] = v.PermissionName
+			}
+			permissionStr = strings.TrimRight(permissionStr, ",")
+			//permissionStrOld, err := models.GetCompanyPermission(companyItem.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			//	return
+			//}
+			//permissionStrListOld := strings.Split(permissionStrOld, ",")
+			//for _, v := range permissionStrListOld {
+			//	if strings.Count(permissionStr, v) > 1 {
+			//		permissionStr = strings.Replace(permissionStr, v+"(主观)", v, -1)
+			//		permissionStr = strings.Replace(permissionStr, v+"(客观),", "", -1)
+			//	}
+			//}
+
+			resp.PermissionName = permissionStr
+
+		}
+	}
 	if resp.Headimgurl == "" {
 		resp.Headimgurl = utils.DefaultHeadimgurl
 	}
@@ -412,3 +490,330 @@ func (this *UserController) ApplyTryOut() {
 	br.Success = true
 	br.Data = sellerMobile
 }
+
+// @Title 用户修改外呼手机号以及区号
+// @Description 用户修改外呼手机号以及区号接口
+// @Param	request	body models.OutboundMobileItem true "type json string"
+// @Success Ret=200 操作成功
+// @router /countryCcode/addOutboundMobile [POST]
+func (this *UserController) AddOutboundMobile() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	uid := user.UserId
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.OutboundMobileItem
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.OutboundMobile == "" {
+		br.Msg = "请填写区号!"
+		return
+	}
+	item := new(models.OutboundMobileItem)
+	item.OutboundMobile = req.OutboundMobile
+	item.OutboundCountryCode = req.OutboundCountryCode
+	//item.ActivityId = req.ActivityId
+	//if req.ActivityId == 0 {
+	//	err = models.AddOutboundMobile(item, uid)
+	//} else {
+	//	if user.Mobile == "" && user.OutboundMobile == "" {
+	//		items := new(models.CygxActivitySignup)
+	//		items.UserId = uid
+	//		items.ActivityId = req.ActivityId
+	//		items.CreateTime = time.Now()
+	//		items.Mobile = user.Mobile
+	//		items.Email = user.Email
+	//		items.CompanyId = user.CompanyId
+	//		items.CompanyName = user.CompanyName
+	//		items.SignupType = 1
+	//		items.FailType = 0
+	//		items.DoFailType = 0
+	//		items.OutboundMobile = req.OutboundMobile
+	//		items.CountryCode = req.OutboundCountryCode
+	//		_, err = models.AddActivitySignupFromEmail(items)
+	//	} else {
+	//		total, err := models.GetActivityCountByIdWithUid(item.ActivityId, uid)
+	//		if total == 0 {
+	//			br.Msg = "报名信息不存在"
+	//			br.ErrMsg = "报名信息不存在,Err:" + "活动ActivityId:" + strconv.Itoa(item.ActivityId) + "用户Uid:" + strconv.Itoa(uid)
+	//			return
+	//		}
+	//		if err != nil {
+	//			br.Msg = "操作失败"
+	//			br.ErrMsg = "操作失败,Err:" + err.Error()
+	//			return
+	//		}
+	//		err = models.AddOutboundMobile(item, uid)
+	//	}
+	//}
+
+	err = models.AddOutboundMobile(item, uid)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// @Title 校验用户状态信息
+// @Description 校验用户状态信息
+// @Success 200 {object} models.CheckStatusResp
+// @router /check/status [get]
+func (this *UserController) CheckLogin() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录"
+		br.Ret = 408
+		return
+	}
+
+	uid := user.UserId
+	resp := new(models.CheckStatusResp)
+	if uid > 0 {
+		//判断token是否过期
+		userRecord, err := models.GetUserSessionByUserId(uid)
+		if err != nil {
+			br.Msg = "获取用户信息失败"
+			br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
+			return
+		}
+		permissionStr, err := models.GetCompanyPermission(user.CompanyId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			return
+		}
+		resp.PermissionName = permissionStr
+
+		if user.Mobile == "" && user.Email == "" {
+			resp.IsBind = true
+		}
+		if userRecord.UnionId == "" {
+			resp.IsAuth = true
+		}
+	} else {
+		resp.IsBind = true
+		if user.UnionId == "" {
+			resp.IsAuth = true
+		}
+		resp.PermissionName = ""
+	}
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+	br.Ret = 200
+}
+
+// @Title 更改用户微信头像
+// @Description 更改用户微信头像
+// @Param	request	body models.Headimgurl true "type json string"
+// @Success 200 {object} models.ArticleDetailFileLink
+// @router /headimgurl/update [post]
+func (this *UserController) HeadimgurlUpdate() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.Headimgurl
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	uid := user.UserId
+	headimgurl := req.Headimgurl
+	if headimgurl == "" {
+		br.Msg = "操作失败"
+		br.ErrMsg = "头像信息不能为空"
+		return
+	}
+	err = models.UpdateUserHeadimgurl(headimgurl, uid)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "头像信息不能为空"
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// @Title 获取我的收藏
+// @Description 获取我的收藏列表
+// @Param   PageSize    query   int true       "PageSize"
+// @Param   CurrentIndex    query   int true       "CurrentIndex"
+// @Success 200 {object} models.ArticleCollectListResp
+// @router /collect/list [get]
+func (this *UserController) CollectList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	userId := this.User.UserId
+	var pageSize, currentIndex, startSize int
+	pageSize, _ = this.GetInt("PageSize")
+	currentIndex, _ = this.GetInt("CurrentIndex")
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	total, err := models.GetArticleUserCollectCount(userId)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	list, err := models.GetArticleUserCollectList(startSize, pageSize, userId)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	resp := new(models.ArticleReportBillboardLIstPageResp)
+	if len(list) == 0 {
+		page := paging.GetPaging(currentIndex, pageSize, total)
+		resp.List = list
+		resp.Paging = page
+		br.Msg = "获取成功!"
+		br.Ret = 200
+		br.Success = true
+		br.Data = resp
+		return
+	}
+	var condition string
+	var pars []interface{}
+	var articleIds []string
+	for _, v := range list {
+		articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
+	}
+	articleIdStr := strings.Join(articleIds, ",")
+
+	//获取文章关联的产业
+	pars = make([]interface{}, 0)
+	condition = ` AND mg.article_id IN (  ` + utils.GetOrmInReplace(len(articleIds)) + ` )  `
+	pars = append(pars, articleIds)
+	industrialList, err := models.GetIndustrialListByarticleId(pars, condition)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetSubjectList Err:" + err.Error()
+		return
+	}
+	industrialMap := make(map[int][]*models.IndustrialManagementIdInt)
+	if len(industrialList) > 0 {
+		for _, v := range industrialList {
+			item := new(models.IndustrialManagementIdInt)
+			item.ArticleId = v.ArticleId
+			if v.ArticleId > utils.SummaryArticleId {
+				item.IsResearch = true
+			}
+			item.IndustrialManagementId = v.IndustrialManagementId
+			item.IndustryName = v.IndustryName
+			industrialMap[v.ArticleId] = append(industrialMap[v.ArticleId], item)
+		}
+	}
+	for k, v := range list {
+		if len(industrialMap[v.ArticleId]) > 0 {
+			list[k].List = industrialMap[v.ArticleId]
+		} else {
+			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
+		}
+	}
+
+	articleMap := make(map[int]*models.ArticleDetail)
+	if articleIdStr != "" {
+		articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "获取报告详情信息失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range articleList {
+			if _, ok := articleMap[v.ArticleId]; !ok {
+				articleMap[v.ArticleId] = v
+			}
+		}
+	}
+
+	//处理文章PV收藏等数量
+	mapArticleCollectNum := make(map[int]*models.CygxArticleNum)
+	if len(articleIds) > 0 {
+		articleCollectNumList, err := models.GetArticleCollectNum(articleIds, userId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetArticleCollectNum Err:" + err.Error()
+			return
+		}
+		for _, v := range articleCollectNumList {
+			mapArticleCollectNum[v.ArticleId] = v
+		}
+	}
+
+	lenList := len(list)
+	for i := 0; i < lenList; i++ {
+		item := list[i]
+		article := articleMap[item.ArticleId]
+		list[i].Title = article.Title
+		list[i].DepartmentId = article.DepartmentId
+		list[i].NickName = article.NickName
+		list[i].PublishDate = article.PublishDate
+		if article.ArticleId < utils.SummaryArticleId {
+			list[i].Source = 1
+		} else {
+			list[i].Source = 2
+		}
+		if mapArticleCollectNum[article.ArticleId] != nil {
+			list[i].CollectNum = mapArticleCollectNum[article.ArticleId].CollectNum
+			list[i].Pv = mapArticleCollectNum[article.ArticleId].Pv
+			list[i].IsCollect = mapArticleCollectNum[article.ArticleId].IsCollect
+		}
+		//list[i].TitleEn = article.TitleEn
+		//list[i].UpdateFrequency = article.UpdateFrequency
+		//list[i].CreateDate = article.CreateDate
+		//list[i].Body, _ = services.GetReportContentTextSub(article.Body)
+		//list[i].Abstract = article.Abstract
+		//list[i].CategoryName = article.CategoryName
+		//list[i].SubCategoryName = article.SubCategoryName
+	}
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp.List = list
+	resp.Paging = page
+	br.Msg = "获取成功!"
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+}

+ 1092 - 0
models/activity.go

@@ -0,0 +1,1092 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hongze_clpt/utils"
+	"strings"
+	"time"
+)
+
+//活动详情
+type CygxActivity struct {
+	ActivityId              int       `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int       `description:"活动类型id"`
+	ActivityTypeName        string    `description:"活动类型名称"`
+	ChartPermissionId       int       `description:"行业id"`
+	ChartPermissionName     string    `description:"行业名称"`
+	ChartPermissionNames    string    `description:"行业名称辅助字段,区分研选子分类"`
+	Body                    string    `description:"内容"`
+	CreateTime              time.Time `description:"创建时间"`
+	IsLimitPeople           int       `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int       `description:"限制的人数数量"`
+	CustomerTypeIds         string    `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	PublishStatus           int       `description:"发布状态 1已发布,0未发布"`
+	LastUpdatedTime         time.Time `description:"更新时间"`
+	ActivityTime            string    `description:"活动时间"`
+	ActivityTimeText        string    `description:"活动时间带文字"`
+	DistinguishedGuest      string    `description:"嘉宾"`
+	Host                    string    `description:"主持人"`
+	MainlandTell            string    `description:"大陆拨入号"`
+	HongKongTell            string    `description:"香港拨入号"`
+	TaiwanTell              string    `description:"台湾拨入号"`
+	AmericaTell             string    `description:"美国拨入号"`
+	ParticipationCode       string    `description:"参会密码"`
+	Theme                   string    `description:"主题"`
+	Expert                  string    `description:"专家"`
+	ActivityName            string    `description:"活动名称"`
+	ActivityNameTask        string    `description:"活动名称定时任务同步的时候使用"`
+	OnlineParticipation     string    `description:"网络参会"`
+	ReportLink              string    `description:"报告链接"`
+	City                    string    `description:"城市"`
+	Address                 string    `description:"活动地址"`
+	Highlights              string    `description:"活动亮点"`
+	Remarks                 string    `description:"备注"`
+	Speaker                 string    `description:"主讲人"`
+	ArticleId               int       `description:"关联报告id"`
+	Label                   string    `description:"标签"`
+	LinkParticipants        string    `description:"链接参会"`
+	AppAttendance           string    `description:"App参会"`
+	ConferencePassword      string    `description:"会议密码"`
+	TemporaryLabel          string    `description:"临时标签"`
+	IsMakerShow             int       `description:"是否仅决策人可见 0,否 、1,是"`
+	VisibleRange            int       `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
+	Scale                   string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	IsShowSubjectName       int       `description:"小程序内是否展示标的名称 1是 ,0 否 默认0 "`
+	IsHideAppointment       int       `description:"是否隐藏预约纪要按钮 1是 ,0 否 默认0 "`
+	AdminId                 int       `description:"销售/管理员ID"`
+	AdminName               string    `description:"销售/管理员姓名"`
+	IsCanAppointmentMinutes int       `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string    `description:"易董活动ID"`
+	YidongActivityUrl       string    `description:"易董活动跳转地址"`
+	YidongActivityEndTime   string    `description:"易董活动截止时间"`
+	ActivityJoinType        string    `description:"活动入会类型01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会"`
+	YidongSignUpEnd         string    `description:"易董活动截止时间"` // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
+	YidongSignUpStart       string    `description:"易董活动截止时间"` // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
+}
+
+type Activity struct {
+	ActivityTypeId   int    `description:"活动类型id"`
+	ActivityTypeName string `description:"活动名称"`
+	TemplateP        string `description:"活动模板,带P标签"`
+	Template         string `description:"活动模板"`
+	ShowType         string `description:"人数限制类型,1不展示限制,2可选限制,3强制限制"`
+}
+type ActivityIdRep struct {
+	ActivityId  int `description:"活动id"`
+	PlaySeconds int `description:"播放时长"`
+}
+
+type ActivitySingnupRep struct {
+	ActivityId int `description:"活动id"`
+	SignupType int `description:"报名方式,1预约外呼,2我要报名"`
+}
+
+type ActivityCcustomerType struct {
+	CustomerTypeId int    `description:"活动类型id"`
+	CustomerName   string `description:"活动名称"`
+}
+
+type ActivityCcustomerTypeList struct {
+	List []*ActivityCcustomerType
+}
+
+//列表
+func GetActivityCcustomerTypeList() (items []*ActivityCcustomerType, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_customer_type ORDER BY sort DESC`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//活动添加、修改入参
+type ActivityRep struct {
+	ActivityTypeId    int    `description:"活动类型id"`
+	ChartPermissionId int    `description:"行业id"`
+	Body              string `description:"内容"`
+	LimitPeopleNum    int    `description:"限制的人数数量"`
+	CustomerTypeIds   string `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	ActivityId        int    `description:"活动ID 等于0新增活动,大于0修改活动"`
+	DoType            int    `description:"操作类型 0,保存 、1,发布"`
+}
+
+type ActivityArticleResp struct {
+	ReportLink string `description:"报告链接"`
+	ArticleId  int    `description:"报告id(报告链接跳转使用)"`
+}
+
+//活动详情
+type ActivityDetail struct {
+	ActivityId              int                        `orm:"column(activity_id);pk";description:"活动ID "`
+	ActivityTypeId          int                        `description:"活动类型id"`
+	ActivityTypeName        string                     `description:"活动类型名称"`
+	ChartPermissionId       int                        `description:"行业id"`
+	ChartPermissionName     string                     `description:"行业名称"`
+	ChartPermissionNames    string                     `description:"行业名称辅助字段,区分研选子分类"`
+	Body                    string                     `description:"内容"`
+	CreateTime              string                     `description:"创建时间"`
+	IsLimitPeople           int                        `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int                        `description:"限制的人数数量"`
+	LastUpdatedTime         string                     `description:"更新时间"`
+	ActivityTime            string                     `description:"活动时间"`
+	ActivityTimeText        string                     `description:"活动时间带文字"`
+	DistinguishedGuest      string                     `description:"嘉宾"`
+	Host                    string                     `description:"主持人"`
+	Speaker                 string                     `description:"主讲人"`
+	MainlandTell            string                     `description:"大陆拨入号"`
+	HongKongTell            string                     `description:"香港拨入号"`
+	TaiwanTell              string                     `description:"台湾拨入号"`
+	AmericaTell             string                     `description:"美国拨入号"`
+	ParticipationCode       string                     `description:"参会密码"`
+	Theme                   string                     `description:"主题"`
+	Expert                  string                     `description:"专家"`
+	ActivityName            string                     `description:"活动名称"`
+	OnlineParticipation     string                     `description:"网络参会"`
+	ReportLink              string                     `description:"报告链接"`
+	City                    string                     `description:"城市"`
+	Address                 string                     `description:"活动地址"`
+	Highlights              string                     `description:"活动亮点"`
+	Remarks                 string                     `description:"备注"`
+	ShowType                string                     `description:"人数限制类型,1不展示限制,2可选限制,3强制限制"`
+	IsSignup                int                        `description:"是否已报名 1是 ,0 否"`
+	IsAppointment           int                        `description:"是否已预约纪要 1是 ,0 否"`
+	SignupNum               int                        `description:"已报名人数"`
+	SignupType              int                        `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
+	ActiveState             string                     `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsCancelMeetingReminder int                        `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
+	ArticleId               int                        `description:"报告id(报告链接跳转使用)"`
+	CustomerTypeIds         string                     `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	IsShowSustainable       bool                       `description:"是否展示限免标签"`
+	Description             string                     `description:"研选内容说明"`
+	IsResearch              bool                       `description:"是否属于研选"`
+	LinkParticipants        string                     `description:"链接参会"`
+	AppAttendance           string                     `description:"App参会"`
+	ConferencePassword      string                     `description:"会议密码"`
+	Scale                   string                     `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	IsShowAppointment       bool                       `description:"是否展示预约纪要"`
+	IsHideAppointment       int                        `description:"是否隐藏预约纪要按钮  1是,0 否"`
+	IsCClassMeeting         bool                       `description:"是否是c类电话会"`
+	ArticleList             []*ActivityArticleResp     // 下面是列表添加的部分结构体
+	IsBrackets              int                        `description:"是否有方括号 1是 ,0 否"`
+	Label                   string                     `description:"主题标签"`
+	ImgUrl                  string                     `description:"图片链接"`
+	ImgUrlText              string                     `description:"图片链接文字"`
+	ActivityType            int                        `description:"活动线上线下类型 1线上,0 线下"`
+	JmcjRoadshowTitle       string                     `description:"进门财经手动匹配的活动名称"`
+	Listndustrial           []*IndustrialManagementRep `description:"活动关联的产业信息"`
+	IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
+	IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
+	IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
+	IsShowSignup            bool                       `description:"是否展示我要报名"`
+	IsShowDetails           bool                       `description:"是否展示查看详情按钮"`
+	TemporaryLabel          string                     `description:"临时标签"`
+	IsCanAppointmentMinutes int                        `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string                     `description:"易董活动ID"`
+	YidongActivityUrl       string                     `description:"易董活动跳转地址"`
+	AudioLink               bool                       `description:"是否展示回放按钮"`
+	VoiceList               *CygxActivityVoiceReq      `description:"音频数据"`
+	AdminId                 int                        `description:"管理员、销售ID "`
+	IsMakerShow             int                        `description:"是否仅决策人可见 0,否 、1,是"`
+	VisibleRange            int                        `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
+	VideoDetail             *CygxActivityVideoListResp `description:"视频数据"`
+	FileType                int                        `description:"类型: 1-音频; 2-视频"`
+	IsCollect               bool                       `description:"是否收藏"`
+	SourceType              int                        `description:"活动来源。 1:活动 、2:专项产业调研"`
+	TripImgLink             string                     `description:"专项产业调研行程链接"`
+	ActivityTimeEnd         string                     `description:"专项产业调研活动预期结束时间"`
+}
+
+type CygxActivityResp struct {
+	HaqveJurisdiction bool   `description:"是否有权限"`
+	OperationMode     string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
+	HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
+	PopupMsg          string `description:"权限弹窗信息"`
+	MsgType           string `description:"Type : 类型 , Industry : 行业"`
+	SellerMobile      string `description:"销售电话"`
+	SellerName        string `description:"销售姓名"`
+	Detail            *ActivityDetail
+}
+
+//通过纪要ID获取活动详情
+func GetAddActivityInfoById(ActivityId int) (item *ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity  WHERE activity_id=? AND publish_status = 1 `
+	err = o.Raw(sql, ActivityId).QueryRow(&item)
+	return
+}
+
+//通过活动名称获取活动详情
+func GetAddActivityInfoByTitle(title, startDate, endDate string) (item *ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity  WHERE  activity_time > '` + startDate + `' AND activity_time < '` + endDate + `' AND (activity_name_task LIKE '%` + title + `%' OR  jmcj_roadshow_title LIKE '%` + title + `%')   AND activity_id  NOT IN (1328)  LIMIT 1 `
+	err = o.Raw(sql).QueryRow(&item)
+	return
+}
+
+//通过纪要ID获取活动详情
+func GetAddActivityInfoByIdShow(uid, ActivityId int) (item *ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *,( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
+			( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = a.activity_id  AND s.is_cancel = 0 AND s.do_fail_type = 0) AS signup_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = a.activity_id AND m.user_id = ?  AND m.is_cancel = 0 ) AS is_cancel_meeting_reminder,
+			( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = a.activity_id AND ap.user_id = ? ) AS is_appointment
+			FROM cygx_activity AS a  WHERE activity_id=? AND publish_status = 1 `
+	err = o.Raw(sql, uid, uid, uid, ActivityId).QueryRow(&item)
+	return
+}
+
+//活动列表
+type CygxActivityList struct {
+	ActivityId              int    `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int    `description:"活动类型id"`
+	ActivityName            string `description:"活动名称"`
+	ActivityTypeName        string `description:"活动类型名称"`
+	Speaker                 string `description:"主讲人"`
+	SignupType              int    `description:"报名方式,1预约外呼,2我要报名"`
+	ChartPermissionId       int    `description:"行业id"`
+	ChartPermissionName     string `description:"行业名称"`
+	IsLimitPeople           int    `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int    `description:"限制的人数数量"`
+	ActivityTime            string `description:"活动时间"`
+	ActivityTimeText        string `description:"活动时间带文字"`
+	City                    string `description:"城市"`
+	Address                 string `description:"活动地址"`
+	DistinguishedGuest      string `description:"嘉宾"`
+	Expert                  string `description:"专家"`
+	IsSignup                int    `description:"是否已报名 1是 ,0 否"`
+	IsAppointment           int    `description:"是否已预约纪要 1是 ,0 否"`
+	IsShowAppointment       bool   `description:"是否展示预约纪要"`
+	SignupNum               int    `description:"已报名人数"`
+	ActiveState             string `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsCancelMeetingReminder int    `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
+	IsBrackets              int    `description:"是否有方括号 1是 ,0 否"`
+	Label                   string `description:"主题标签"`
+	IsShowSustainable       bool   `description:"是否展示限免标签"`
+	ImgUrl                  string `description:"图片链接"`
+	ImgUrlText              string `description:"图片链接文字"`
+	ActivityType            int    `description:"活动线上线下类型 1线上,0 线下"`
+	IsHideAppointment       int    `description:"是否隐藏预约纪要按钮  1是,0 否"`
+	JmcjRoadshowTitle       string `description:"进门财经手动匹配的活动名称"`
+	IsCClassMeeting         bool   `description:"是否是c类电话会"`
+}
+
+type GetCygxActivityListRep struct {
+	Paging                 *paging.PagingItem `description:"分页数据"`
+	List                   []*ActivityDetail
+	Label                  string `description:"主题"`
+	ImgUrl                 string `description:"图片路径"`
+	IsResearch             bool   `description:"是否属于研选"`
+	IsJump                 bool   `description:"是否跳转"`
+	IndustrialManagementId int    `description:"产业ID"`
+	IndustryNewLabel       bool   `description:"产业是否新标签"`
+}
+
+//列表
+func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pageSize, playBack int) (items []*ActivityDetail, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		//sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+	o := orm.NewOrm()
+	sql := `SELECT art.* ,t.activity_type,t.img_url_text,c.image_url as  img_url,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
+		( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS signup_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.user_id = ?  AND m.is_cancel = 0  ) AS is_cancel_meeting_reminder,
+		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = art.activity_id AND ap.user_id = ? ) AS is_appointment
+		FROM cygx_activity as art
+		INNER JOIN cygx_activity_type  as t ON t.activity_type_id = art.activity_type_id
+		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id ` + sqlJiontable + ` WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, uid, uid, uid, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//列表
+func GetActivityListByDateTime(startDate, endDate, activityIds, activityIdsLongTime string) (items []*CygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity WHERE activity_time > '` + startDate + `' AND activity_time < '` + endDate + `' `
+	activityIds = strings.TrimRight(activityIds, ",")
+	if activityIds != "" {
+		sql += ` AND activity_id  NOT IN (` + activityIds + `,1328 )  `
+	}
+	sql += `  OR activity_id IN (` + activityIdsLongTime + `)`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//获取数量
+func GetActivityCount(condition string, playBack int, pars []interface{}, filter int) (count int, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		//sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+
+	if filter == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_video AS av ON av.activity_id = art.activity_id `
+	} else if filter == 2 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity as art ` + sqlJiontable + ` WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//获取我的日程数量
+func GetScheduleCount(condition string, uid int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := `SELECT COUNT( 1 ) AS count 
+				FROM cygx_my_schedule AS m
+				INNER JOIN cygx_activity AS art ON art.activity_id = m.activity_id 
+				WHERE
+				user_id = ?`
+	if condition != "" {
+		sqlCount += condition
+	}
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//我的日程列表
+func GetScheduleList(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT art.*,t.activity_type,t.img_url_text,c.image_url as  img_url,
+			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ? AND s.is_cancel = 0 AND s.do_fail_type = 0) AS is_signup,
+            ( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND  s.is_cancel = 0  AND s.do_fail_type = 0) AS signup_num ,
+			( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = art.activity_id AND ap.user_id = ? ) AS is_appointment,
+			( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.is_cancel = 0 AND m.user_id = ? ) AS is_cancel_meeting_reminder
+            FROM cygx_activity AS art
+			INNER JOIN cygx_my_schedule as my ON my.activity_id = art.activity_id 
+			INNER JOIN cygx_activity_type  as t ON t.activity_type_id = art.activity_type_id
+			INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id 
+            WHERE 1=1 AND my.user_id = ? `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY art.active_state ASC,art.activity_time ASC  LIMIT ?,?`
+	_, err = o.Raw(sql, pars, uid, uid, uid, uid, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//我的日程列表 活动以及专项调研一起
+func GetScheduleAndSpecilList(condition string, pars []interface{}, conditionSpecil string, parsSpecil []interface{}, startSize, pageSize int) (items []*ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			art.activity_id,
+			art.activity_time_text,
+			art.activity_name,
+			art.chart_permission_id,
+			art.active_state,
+			t.activity_type,
+			art.chart_permission_name,
+			art.distinguished_guest,
+			art.expert,
+			art.speaker,
+			"" AS trip_img_link,
+			"" AS activity_time_end,
+			art.yidong_activity_id,
+			art.is_can_appointment_minutes,
+			art.activity_type_id,
+			art.limit_people_num,
+			1 AS source_type,
+			art.activity_time 
+		FROM
+			cygx_activity AS art
+			INNER JOIN cygx_my_schedule AS my ON my.activity_id = art.activity_id
+			INNER JOIN cygx_activity_type AS t ON t.activity_type_id = art.activity_type_id
+			INNER JOIN chart_permission AS c ON c.chart_permission_id = art.chart_permission_id 
+		WHERE
+			1 = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	sql += ` UNION ALL
+		SELECT
+			art.activity_id,
+			art.activity_time_text_by_day AS activity_time_text,
+			art.research_theme AS activity_name,
+			art.chart_permission_id,
+			"",
+			art.special_type AS activity_type,
+			art.chart_permission_name,
+			"",
+			"",
+			"",
+			art.trip_img_link_fix AS trip_img_link,
+			art.activity_time_end,
+			"",
+			"",
+			"",
+			"",
+			2 AS source_type,
+			art.activity_time 
+		FROM
+			cygx_activity_special AS art
+			INNER JOIN cygx_activity_special_trip AS my ON my.activity_id = art.activity_id 
+		WHERE
+			1 = 1`
+	if conditionSpecil != "" {
+		sql += conditionSpecil
+	}
+	sql += ` ORDER BY activity_time DESC   LIMIT ?,?`
+	_, err = o.Raw(sql, pars, parsSpecil, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//获取数量
+func GetActivityCountById(activityId int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := `SELECT COUNT(1) AS count  FROM cygx_activity WHERE activity_id = ?`
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+//删除数据
+func DeleteActivity(activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity WHERE activity_id = ?`
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+//修改活动状态至进行中
+func UpdateActivitySattusToHaveInHand() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("修改活动状态至进行中失败"+err.Error(), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改活动状态至进行中失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	o := orm.NewOrm()
+	resultTime_30 := time.Now().Add(-time.Minute * 30).Format("2006-01-02 15:04:05")
+	resultTime_60 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05")
+	var sqlOr string
+	var condition string
+	condition += ` AND activity_time < NOW()`
+	sqlOr = condition
+	condition += ` AND (activity_type_id IN ( 1, 2, 3, 7 ) AND  activity_time > ` + "'" + resultTime_30 + "'" + ")"
+	condition += ` OR(activity_type_id IN ( 4, 5, 6 ) AND  activity_time > ` + "'" + resultTime_60 + "'" + sqlOr + ")"
+	msql := " UPDATE cygx_activity SET active_state = 2 WHERE 1 = 1 " + condition
+	_, err = o.Raw(msql).Exec()
+	return
+}
+
+//修改活动状态至已结束
+func UpdateActivitySattusToComplete() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("修改活动状态至已结束"+err.Error(), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改活动状态至已结束 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	o := orm.NewOrm()
+	resultTime_30 := time.Now().Add(-time.Minute * 30).Format("2006-01-02 15:04:05")
+	resultTime_60 := time.Now().Add(-time.Minute * 60).Format("2006-01-02 15:04:05")
+	//var sqlOr string
+	var condition string
+	//condition += ` AND activity_time < NOW()`
+	//sqlOr = condition
+	condition += ` AND (activity_type_id IN ( 1, 2, 3, 7 ) AND  activity_time < ` + "'" + resultTime_30 + "'" + ")"
+	condition += ` OR(activity_type_id IN ( 4, 5, 6 ) AND  activity_time < ` + "'" + resultTime_60 + "'" + ")"
+	msql := " UPDATE cygx_activity SET active_state = 3 WHERE 1 = 1 " + condition
+	_, err = o.Raw(msql).Exec()
+	return
+}
+
+//活动详情
+type WxMsgCygxActivityList struct {
+	Id                      int    `description:"报名ID"`
+	UserId                  int    `description:"用户ID"`
+	ActivityId              int    `description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int    `description:"活动类型id"`
+	ActivityName            string `description:"活动名称"`
+	ActivityTypeName        string `description:"活动类型名称"`
+	Speaker                 string `description:"主讲人"`
+	SignupType              int    `description:"报名方式,1预约外呼,2我要报名"`
+	ChartPermissionId       int    `description:"行业id"`
+	ChartPermissionName     string `description:"行业名称"`
+	IsLimitPeople           int    `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int    `description:"限制的人数数量"`
+	ActivityTime            string `description:"活动时间"`
+	ActivityTimeText        string `description:"活动时间带文字"`
+	City                    string `description:"城市"`
+	Address                 string `description:"活动地址"`
+	DistinguishedGuest      string `description:"嘉宾"`
+	Expert                  string `description:"专家"`
+	IsSignup                int    `description:"是否已报名 1是 ,0 否"`
+	SignupNum               int    `description:"已报名人数"`
+	ActiveState             string `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	IsCancelMeetingReminder int    `description:"是否取消会议提醒 1展示取消会议提醒 ,0展示会议提醒"`
+	IsBrackets              int    `description:"是否有方括号 1是 ,0 否"`
+	OpenId                  string `description:"OenId"`
+	FailType                int    `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+}
+
+//列表 3o分钟
+func GetActivitySendMsgListAll(endDate string) (items []*WxMsgCygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	s.id,
+	s.user_id,
+	s.fail_type,
+	cr.open_id,
+	a.*
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id
+	INNER   JOIN user_record AS c ON c.bind_account = s.mobile 
+	INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id 
+WHERE
+	1 = 1 
+	AND s.is_send_wx_msg = 0 
+	AND s.do_fail_type = 0 
+	AND a.publish_status = 1 
+	AND c.create_platform = 4
+	AND a.activity_time <= ? AND a.activity_time >= NOW() 
+	AND s.is_cancel = 0
+	AND( a.activity_type_id IN (4,5,6) OR (a.activity_type_id = 3 AND a.is_limit_people = 1 )) 	GROUP BY s.id`
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+//列表 15分钟提醒
+func GetActivitySendMsgListAllMeeting(endDate string) (items []*WxMsgCygxActivityList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	m.id,
+	cr.open_id,
+	a.* 
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_meeting_reminder AS m ON m.activity_id = a.activity_id
+	INNER JOIN user_record AS c ON c.bind_account = m.mobile 
+	INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id 
+WHERE
+	1 = 1 
+	AND m.is_send_wx_msg = 0 
+	AND a.publish_status = 1 
+	AND a.activity_time <= ? AND a.activity_time >= NOW() 
+	AND m.is_cancel = 0 
+	AND c.create_platform = 4
+	AND (
+	a.activity_type_id IN ( 1, 2 ) 
+	OR ( a.activity_type_id = 3 AND a.is_limit_people = 0 ))
+	GROUP BY m.id`
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+//修改是否推送消息状态
+func UPdateSendedMsgStatus(signupIds string) (err error) {
+	sql := ` UPDATE cygx_activity_signup SET  is_send_wx_msg= 1  WHERE id IN(` + signupIds + `)`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).Exec()
+	return
+}
+
+//修改是否推送消息状态
+func UPdateSendedMsgMeetingStatus(signupIds string) (err error) {
+	sql := ` UPDATE cygx_activity_meeting_reminder SET  is_send_wx_msg= 1  WHERE id IN(` + signupIds + `)`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).Exec()
+	return
+}
+
+//获取满足推送的活动ID数量
+func GetCountActivityIdToSendFile(endDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	COUNT(1) count
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
+WHERE
+	1 = 1 
+	AND s.signup_type = 1 
+	AND s.fail_type = 0 
+	AND a.is_send_file_toemail = 0 
+	AND a.activity_time <= ? AND a.activity_time >= NOW() 	GROUP BY a.activity_id `
+	err = o.Raw(sql, endDate).QueryRow(&count)
+	return
+}
+
+//获取满足推送的活动ID
+func GetActivityIdToSendFile(endDate string) (items []*ActivityIdRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			* 
+		FROM
+			cygx_activity AS a
+			INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
+			INNER JOIN cygx_activity_type AS t ON a.activity_type_id = t.activity_type_id
+		WHERE
+			1 = 1 
+			AND s.signup_type = 1 
+			AND a.yidong_activity_id = '' 
+			AND t.activity_type = 1
+			AND s.fail_type = 0 
+			AND a.is_send_file_toemail = 0 
+			AND a.activity_time <= ? AND a.activity_time >= NOW() 	GROUP BY a.activity_id `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+type SignupExportRep struct {
+	Mobile         string `description:"手机号"`
+	CompanyName    string `description:"公司名称"`
+	RealName       string `description:"姓名"`
+	CountryCode    string `description:"区号"`
+	OutboundMobile string `description:"外呼手机号"`
+	SellerName     string `description:"销售姓名"`
+}
+
+type ActivityMsgExportRep struct {
+	UserId      int    `description:"用户ID"`
+	RealName    string `description:"姓名"`
+	CompanyName string `description:"公司名称"`
+	CompanyId   int    `description:"公司ID"`
+	Content     string `description:"内容"`
+	CreateTime  string `description:"提交时间"`
+}
+
+func GetSignupExport(activityId int) (item []*SignupExportRep, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT  s.outbound_mobile,
+			s.country_code,
+			a.is_limit_people,
+			u.real_name,
+			( SELECT p.seller_name FROM company_product AS p WHERE p.company_id = u.company_id AND p.product_id = 2 ) AS seller_name,
+			( SELECT c.company_name FROM company AS c WHERE c.company_id = u.company_id  ) AS company_name
+			FROM
+			cygx_activity_signup AS s
+			LEFT JOIN wx_user AS u ON u.user_id = s.user_id
+			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
+			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
+			WHERE a.activity_id = ?  AND s.do_fail_type = 0 AND s.signup_type = 1  GROUP BY s.id `
+	_, err = o.Raw(sql, activityId).QueryRows(&item)
+	return
+}
+
+//修改文件是否推送状态
+func UPdateActivityIdToSendFile(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_send_file_toemail= 1  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+//活动详情
+type CygxActivityLabelList struct {
+	KeyWord           string `orm:"column(label)";description:"主题"`
+	Timesort          string `description:"最大时间"`
+	Mintimesort       string `description:"最小时间"`
+	ImgUrlBg          string `description:"背景图片"`
+	ActivityId        int    `description:"活动ID "`
+	IsShowSubjectName int    `description:"小程序内是否展示标的名称 1是 ,0否 默认0 "`
+	Resource          int    `description:"位置 ,1:活动 ,2:专项产业调研"`
+	TemporaryLabel    string `description:"临时标签"`
+	IsNew             bool   `description:"是否为新:活动存在关联的的产业所关联的报告均在3个月内/无报告则标记新"`
+	YidongActivityId  int    `description:"易董活动ID"`
+	IsExternalLabel   bool   `description:"是否为外部资源"`
+}
+
+//主题列表
+func GetActivityLabelListAll(condition, sortTime string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityLabelList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT	activity_id, label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort , yidong_activity_id 
+		FROM cygx_activity as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` GROUP BY art.label ORDER BY ` + sortTime + ` ,art.activity_id DESC  LIMIT ?,? `
+
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type GetCygxActivityLabelListRep struct {
+	Label  string `description:"主题"`
+	ImgUrl string `description:"图片路径"`
+	List   []*CygxActivityLabelList
+}
+
+//获取研选系列专家电话会,会前1小时,满足推送的活动ID数量
+func GetCountActivityResearchToSendFile(condition, endDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	COUNT(1) count
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_help_ask AS k ON k.activity_id = a.activity_id 
+WHERE
+	1 = 1 ` + condition + `
+	AND a.is_send_ask_msg = 0 
+	AND a.activity_time <= ? 
+	AND a.activity_time >= NOW()`
+	err = o.Raw(sql, endDate).QueryRow(&count)
+	return
+}
+
+//获取研选系列专家电话会,会前1小时,满足推送的活动ID
+func GetActivityResearchToSendFile(condition, endDate string) (items []*ActivityIdRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	* 
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_help_ask AS k ON k.activity_id = a.activity_id 
+WHERE
+	1 = 1 ` + condition + `
+	AND a.is_send_ask_msg = 0 
+	AND a.activity_time <= ? 
+	AND a.activity_time >= NOW() 
+GROUP BY
+	a.activity_id `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+func GetActivityMsgExport(activityId int) (item []*ActivityMsgExportRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			k.*,
+			u.real_name 
+			FROM
+			cygx_activity_help_ask AS k
+			LEFT JOIN wx_user AS u ON u.user_id = k.user_id 
+			WHERE
+			k.activity_id = ? 
+			GROUP BY
+			k.ask_id`
+	_, err = o.Raw(sql, activityId).QueryRows(&item)
+	return
+}
+
+//修改文件带问消息是否推送状态
+func UPdateActivityMsgToSendFile(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_send_ask_msg= 1  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+type AskEmailRep struct {
+	Name   string `description:"姓名"`
+	Email  string `description:"邮箱"`
+	Mobile string `description:"手机号"`
+}
+
+func GetAskEmail() (item []*AskEmailRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_ask_email`
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}
+
+//主题列表
+func GetActivityLabelSpecialListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityLabelList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT	label,activity_id,is_show_subject_name
+		FROM cygx_activity_special as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `  LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type GetCygxActivitySpecialDetailListResp struct {
+	IsFollow        bool               `description:"是否关注新调研通知"`
+	IsBindingMobile bool               `description:"是否绑定了手机号"`
+	Paging          *paging.PagingItem `description:"分页数据"`
+	List            []*CygxActivitySpecialDetail
+}
+
+type CygxActivitySpecialResp struct {
+	HaqveJurisdiction bool   `description:"是否有权限"`
+	OperationMode     string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
+	HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
+	PopupMsg          string `description:"权限弹窗信息"`
+	MsgType           string `description:"Type : 类型 , Industry : 行业"`
+	SellerMobile      string `description:"销售电话"`
+	SellerName        string `description:"销售姓名"`
+	IsFollow          bool   `description:"是否关注新调研通知"`
+	Detail            *CygxActivitySpecialDetail
+}
+
+//获取专项调研活动列表
+func GetCygxActivitySpecialDetailList(condition string, pars []interface{}, uid, startSize, pageSize int) (items []*CygxActivitySpecialDetail, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+	art.*,
+	c.image_url AS img_url,
+	(
+	SELECT
+		COUNT( 1 ) 
+	FROM
+		cygx_activity_special_signup AS s 
+	WHERE
+		s.activity_id = art.activity_id 
+		AND s.user_id = ?
+	) AS is_signup
+FROM
+	cygx_activity_special AS art
+	INNER JOIN chart_permission AS c ON c.chart_permission_id = art.chart_permission_id 
+WHERE
+	1 = 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `  LIMIT ?,? `
+	_, err = o.Raw(sql, uid, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//通过活动ID获取活动详情
+func GetCygxActivitySpecialDetailById(uid, ActivityId int) (item *CygxActivitySpecialDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *,( SELECT COUNT( 1 ) FROM cygx_activity_special_signup AS s WHERE s.activity_id = a.activity_id AND s.user_id = ? ) AS is_signup 
+FROM
+	cygx_activity_special AS a 
+WHERE
+	activity_id = ?
+	AND publish_status = 1 	AND is_offline = 0  `
+	err = o.Raw(sql, uid, ActivityId).QueryRow(&item)
+	return
+}
+
+//通过活动ID获取活动详情
+func GetCygxActivitySpecialDetail(ActivityId int) (item *CygxActivitySpecialDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_special  WHERE activity_id=? AND publish_status = 1 `
+	err = o.Raw(sql, ActivityId).QueryRow(&item)
+	return
+}
+
+func UpdateCygxActivityName(activityId int, Name string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity SET activity_name_task = ? WHERE activity_id=?  `
+	_, err = o.Raw(sql, Name, activityId).Exec()
+	return
+}
+
+//获取已发布但是为开始活动的权限
+func GetActivityWeekPermission() (permission string, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			GROUP_CONCAT( DISTINCT chart_permission_name SEPARATOR ',' ) AS permission 
+		FROM
+			cygx_activity 
+		WHERE
+			active_state = 1`
+	err = o.Raw(sql).QueryRow(&permission)
+	return
+}
+
+//列表
+func GetIndustrialActivityGroupManagementList(activityId int) (items []*IndustrialManagementRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			p.permission_name,
+			p.chart_permission_id,
+			m.industrial_management_id,
+			m.industry_name 
+			FROM
+			cygx_industrial_activity_group_management AS am
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = am.industrial_management_id
+			INNER JOIN chart_permission AS p ON p.chart_permission_id = m.chart_permission_id 
+			WHERE
+			am.activity_id = ? AND am.source = 1`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+//GetActivityListByYiDong 获取易董同步过来的活动列表
+func GetActivityListByYiDong() (items []*CygxActivity, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//AddCygxActivity 添加活动
+func AddCygxActivity(item *CygxActivity) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//列表
+func GetActivityListByYidong(condition string) (items []*ActivityDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//UpdateCygxActivitySubmitMeetingByYidong  ,跟易董返回的用户状态修改活动以提交到会状态
+func UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE yidong_activity_id=?  `
+	_, err = o.Raw(sql, yidongActivityId).Exec()
+	return
+}
+
+//UpdateActivityshowSubject 根据易董推过来的匹配信息,判断临时标签是否展示
+func UpdateActivityshowSubject(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_show_subject_name= 1 , temporary_label = ''  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+//GetActivitySpecialSearcheList 活动与专项调研的搜索
+func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditionSpecil string, parsSpecil []interface{}, startSize, pageSize int) (items []*ActivityDetail, total int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			art.activity_id,
+			art.activity_time_text,
+			art.activity_name,
+			art.chart_permission_id,
+			art.active_state,
+			t.activity_type,
+			art.chart_permission_name,
+			art.distinguished_guest,
+			art.expert,
+			art.speaker,
+			"" AS trip_img_link,
+			"" AS activity_time_end,
+			art.yidong_activity_id,
+			art.is_can_appointment_minutes,
+			art.activity_type_id,
+			art.limit_people_num,
+			1 AS source_type,
+			art.activity_time 
+		FROM
+			cygx_activity AS art
+			INNER JOIN cygx_activity_type AS t ON t.activity_type_id = art.activity_type_id
+		WHERE
+			1 = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	sql += ` UNION ALL
+		SELECT
+			art.activity_id,
+			art.activity_time_text_by_day AS activity_time_text,
+			art.research_theme AS activity_name,
+			art.chart_permission_id,
+			"",
+			art.special_type AS activity_type,
+			art.chart_permission_name,
+			"",
+			"",
+			"",
+			art.trip_img_link_fix AS trip_img_link,
+			art.activity_time_end,
+			"",
+			"",
+			"",
+			"",
+			2 AS source_type,
+			art.activity_time 
+		FROM
+			cygx_activity_special AS art
+		WHERE
+			1 = 1 `
+	if conditionSpecil != "" {
+		sql += conditionSpecil
+	}
+	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
+	err = o.Raw(totalSql, pars, parsSpecil).QueryRow(&total)
+	if err != nil {
+		return
+	}
+	sql += ` ORDER BY activity_time DESC   LIMIT ?,?`
+	_, err = o.Raw(sql, pars, parsSpecil, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//列表
+func GetActivityListNew(condition string, pars []interface{}, uid, startSize, pageSize, playBack, filter int, typeName string) (items []*ActivityDetail, err error) {
+	var sqlJiontable string
+	if playBack == 1 {
+		//sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+	if filter == 1 {
+		sqlJiontable = ` INNER JOIN cygx_activity_video AS av ON av.activity_id = art.activity_id `
+	} else if filter == 2 {
+		sqlJiontable = ` INNER JOIN cygx_activity_voice AS ac ON ac.activity_id = art.activity_id `
+	}
+
+	o := orm.NewOrm()
+	sql := `SELECT art.* ,t.activity_type,t.img_url_text,c.image_url as  img_url,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id AND s.user_id = ?   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS is_signup,
+		( SELECT COUNT( DISTINCT user_id ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id   AND s.is_cancel = 0  AND s.do_fail_type = 0) AS signup_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS m WHERE m.activity_id = art.activity_id AND m.user_id = ?  AND m.is_cancel = 0  ) AS is_cancel_meeting_reminder,
+		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap WHERE ap.activity_id = art.activity_id AND ap.user_id = ? ) AS is_appointment
+		FROM cygx_activity as art
+		INNER JOIN cygx_activity_type  as t ON t.activity_type_id = art.activity_type_id
+		INNER JOIN  chart_permission  AS c ON c.chart_permission_id = art.chart_permission_id ` + sqlJiontable + ` WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+
+	if typeName != "" {
+		typeSlice := strings.Split(typeName, ",")
+		tempCondition := ""
+		for _, s := range typeSlice {
+			if s == "1" {
+				tempCondition += "'专家电话会',"
+			} else if s == "2" {
+				tempCondition += "'分析师电话会',"
+			} else if s == "1,2" {
+				tempCondition += "'专家电话会','分析师电话会',"
+			}
+		}
+		tempCondition = strings.TrimRight(tempCondition, ",")
+		sql = `SELECT * FROM(` + sql + `) AS t WHERE t.activity_type_name IN (` + tempCondition + `)`
+	}
+	_, err = o.Raw(sql, pars, uid, uid, uid, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//主题列表
+func GetActivityLabelListAllNoLimit(condition, sortTime string, pars []interface{}, conditionSpecial string) (items []*CygxActivityLabelList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT	activity_id, label,temporary_label,is_show_subject_name, art.activity_time,	1 AS resource, yidong_activity_id 
+		FROM cygx_activity as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `  UNION ALL `
+	sql += ` SELECT
+			art.activity_id,
+			art.label,
+			art.temporary_label,
+			is_show_subject_name,
+			art.activity_time,
+			2 AS resource,
+			'' AS yidong_activity_id 
+		FROM
+			cygx_activity_special AS art   WHERE 1= 1 ` + conditionSpecial
+
+	sql += ` GROUP BY label,resource  ORDER BY ` + sortTime + ` , activity_id DESC `
+
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 237 - 0
models/activity_appointment.go

@@ -0,0 +1,237 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivityAppointment struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	SellerName  string    `description:"所属销售"`
+}
+
+type AppointmentResp struct {
+	ActivityId    int    `description:"活动ID"`
+	HasPermission int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
+	PopupMsg      string `description:"权限弹窗信息"`
+	SellerMobile  string `description:"销售电话"`
+	SellerName    string `description:"销售姓名"`
+	GoFollow      bool   `description:"是否去关注"`
+}
+
+//添加
+func AddCygxActivityAppointment(item *CygxActivityAppointment) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var countMySchedule int
+	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 0 {
+		itemMy := new(CygxMySchedule)
+		itemMy.UserId = item.UserId
+		itemMy.ActivityId = item.ActivityId
+		itemMy.CreateTime = time.Now()
+		itemMy.Mobile = item.Mobile
+		itemMy.Email = item.Email
+		itemMy.CompanyId = item.CompanyId
+		itemMy.CompanyName = item.CompanyName
+		_, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	_, err = o.Insert(item)
+	return
+}
+
+//获取某一用户的报名的数量
+func GetUserCygxActivityAppointmentCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_appointment  WHERE  user_id=?  AND   activity_id =? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一用户的报名的数量
+func GetUserCygxActivityAppointmentCountByUid(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_appointment  WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//删除
+func DeleteCygxActivityAppointment(uid, activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE  FROM cygx_activity_special_signup   WHERE   user_id=?   AND  activity_id=?    `
+	_, err = o.Raw(sql, uid, activityId).Exec()
+	return
+}
+
+//取消纪要预约
+func CancelcygxActivityAppointment(item *CygxActivityAppointment) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	//判断是否删除我的日程
+	var countSingup int
+	var countReminder int
+	sql := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE  is_cancel = 0  AND user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countSingup)
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE   user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countReminder)
+	if err != nil {
+		return
+	}
+	if countSingup == 0 && countReminder == 0 {
+		sql = `DELETE  FROM cygx_my_schedule   WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+		if err != nil {
+			return
+		}
+	}
+	//删除预约的纪要
+	sql = `DELETE  FROM cygx_activity_appointment   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	if err != nil {
+		return
+	}
+	return
+}
+
+type CygxAppointmentAndActivity struct {
+	Mobile         string `description:"手机号"`
+	ActivityName   string `description:"所属销售"`
+	ActivityTypeId int    `description:"活动类型"`
+}
+
+//通过活动ID获取预约列表
+func GetAppointmentListByActivityId(activityIds, activityTypeIds string) (items []*CygxAppointmentAndActivity, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			m.*,a.activity_name,
+			a.activity_type_id
+		FROM
+			cygx_activity_appointment AS m
+			INNER JOIN cygx_activity AS a ON a.activity_id = m.activity_id 
+		WHERE
+			a.activity_id IN ( ` + activityIds + ` ) 
+			AND a.activity_type_id IN (` + activityTypeIds + `) 
+			AND DATE_SUB( CURDATE(), INTERVAL 14 DAY ) <= date( a.activity_time ) 
+			AND a.active_state = 3 	GROUP BY m.mobile`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//通过活动ID、手机号获取预约列表
+func GetAppointmentListByActivityIdAndMobile(activityIds, mobile string) (items []*CygxAppointmentAndActivity, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			m.*,a.activity_name
+		FROM
+			cygx_activity_appointment AS m
+			INNER JOIN cygx_activity AS a ON a.activity_id = m.activity_id 
+		WHERE
+			a.activity_id IN ( ` + activityIds + ` ) 
+			AND a.activity_type_id IN ( 1, 2, 5 ) 
+			AND DATE_SUB( CURDATE(), INTERVAL 14 DAY ) <= date( a.activity_time ) 
+			AND a.active_state = 3
+			AND  m.mobile= ?`
+	_, err = o.Raw(sql, mobile).QueryRows(&items)
+	return
+}
+
+//通过活动ID获取预约纪要的人数列表
+func GetCygxAppointmentSummaryListBySubjectId(subjectIds string) (item []*CygxAppointmentAndActivity, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			ap.mobile,
+			ap.activity_id,
+			a.activity_name 
+		FROM
+			cygx_activity_appointment AS ap
+			INNER JOIN cygx_activity AS a ON a.activity_id = ap.activity_id
+			INNER JOIN cygx_industrial_activity_group_subject AS sg ON sg.activity_id = a.activity_id 
+		WHERE
+			a.active_state = 3 
+			AND a.chart_permission_id = 31 
+			AND DATE_SUB( CURDATE(), INTERVAL 14 DAY ) <= date( a.activity_time ) 
+			AND a.activity_type_id = 1 
+			AND sg.industrial_subject_id IN (` + subjectIds + `) 
+		GROUP BY
+			ap.mobile,
+			ap.activity_id `
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}
+
+type CygxAppointment struct {
+	Mobile         string `description:"手机号"`
+	UserId         int    `description:"userId"`
+	ActivityName   string `description:"所属销售"`
+	ActivityTypeId int    `description:"活动类型"`
+}
+
+//通过活动ID获取预约纪要的人数列表
+func GetCygxAppointmentSummaryBySubjectId(subjectIds string) (item []*CygxAppointment, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			ap.user_id,
+			ap.mobile,
+			ap.activity_id,
+			a.activity_name 
+		FROM
+			cygx_activity_appointment AS ap
+			INNER JOIN cygx_activity AS a ON a.activity_id = ap.activity_id
+			INNER JOIN cygx_industrial_activity_group_subject AS sg ON sg.activity_id = a.activity_id 
+		WHERE
+			a.active_state = 3
+			AND sg.industrial_subject_id IN (` + subjectIds + `) 
+		GROUP BY
+			ap.mobile,
+			ap.activity_id `
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}
+
+//GetCygxAppointmentListByUser 获取预约纪要的人
+func GetCygxAppointmentListByUser(condition string, pars []interface{}) (item []*CygxActivityAppointment, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_appointment  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 167 - 0
models/activity_meeting_reminder.go

@@ -0,0 +1,167 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivityMeetingReminder struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+}
+
+//记录日志
+type CygxActivityMeetingReminderLog struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	Type        int       `description:"操作方式,1报名,2取消报名"`
+}
+
+//添加会议提醒信息
+func AddActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var count int
+	var countMySchedule int
+	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 0 {
+		itemMy := new(CygxMySchedule)
+		itemMy.UserId = item.UserId
+		itemMy.ActivityId = item.ActivityId
+		itemMy.CreateTime = time.Now()
+		itemMy.Mobile = item.Mobile
+		itemMy.Email = item.Email
+		itemMy.CompanyId = item.CompanyId
+		itemMy.CompanyName = item.CompanyName
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_meeting_reminder SET is_cancel = 0  WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	itemLog := new(CygxActivityMeetingReminderLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//获取用户报名数量
+func GetActivityMeetingReminderCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel=0 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//取消会议提醒
+func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	//判断是否删除我的日程
+	var countSignup int
+	var countAppointment int
+	sql := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE  is_cancel = 0  AND user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countSignup)
+
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_appointment WHERE  user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countAppointment)
+	if err != nil {
+		return
+	}
+	if countSignup == 0 && countAppointment == 0 {
+		sql = `DELETE  FROM cygx_my_schedule   WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+		if err != nil {
+			return
+		}
+	}
+	sql = `DELETE  FROM cygx_activity_meeting_reminder   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivityMeetingReminderLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 2
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//获取某一用户的日程数量
+func GetUserActivityMeetingReminderCount(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder_log WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//GetCygxReminderListByUser 获取设置会议提醒的人
+func GetCygxReminderListByUser(condition string, pars []interface{}) (item []*CygxActivityMeetingReminder, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_meeting_reminder  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 583 - 0
models/activity_signup.go

@@ -0,0 +1,583 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySignup struct {
+	Id             int       `orm:"column(id);pk"`
+	ActivityId     int       `description:"活动ID"`
+	UserId         int       `description:"用户ID"`
+	CreateTime     time.Time `description:"创建时间"`
+	Mobile         string    `description:"手机号"`
+	Email          string    `description:"邮箱"`
+	CompanyId      int       `description:"公司id"`
+	CompanyName    string    `description:"公司名称"`
+	FailType       int       `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+	SignupType     int       `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
+	DoFailType     int       `description:"失败原因,0,未失败,1总人数已满,2单机构超限制,3,爽约次数超限"`
+	OutboundMobile string    `description:"外呼手机号"`
+	CountryCode    string    `description:"手机国家区号"`
+	RealName       string    `description:"用户实际名称"`
+	SellerName     string    `description:"所属销售"`
+}
+
+type SignupStatus struct {
+	SignupStatus      string `description:"返回状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"`
+	GoFollow          bool   `description:"是否去关注"`
+	SignupType        int    `description:"报名方式,1预约外呼,2我要报名"`
+	ActivityId        int    `description:"活动ID"`
+	HaqveJurisdiction bool   `description:"是否有权限"`
+	OperationMode     string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"`
+	HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"`
+	PopupMsg          string `description:"权限弹窗信息"`
+	SellerMobile      string `description:"销售电话"`
+	MsgType           string `description:"Type : 类型 , Industry : 行业"`
+	SellerName        string `description:"销售姓名"`
+	Mobile            string `description:"外呼手机号"`
+	CountryCode       string `description:"外呼手机号区号"`
+	GoOutboundMobile  bool   `description:"是否去绑定手机号"`
+	GoBindEmail       bool   `description:"是否去绑定邮箱"`
+}
+
+//我的日程
+type CygxMySchedule struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+}
+
+//报名记录日志
+type CygxActivitySignupLog struct {
+	Id          int       `orm:"column(id);pk"`
+	ActivityId  int       `description:"活动ID"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	Type        int       `description:"操作方式,1报名,2取消报名"`
+}
+
+//添加报名信息
+func AddActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var count int
+	var countMySchedule int
+	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 0 {
+		itemMy := new(CygxMySchedule)
+		itemMy.UserId = item.UserId
+		itemMy.ActivityId = item.ActivityId
+		itemMy.CreateTime = time.Now()
+		itemMy.Mobile = item.Mobile
+		itemMy.Email = item.Email
+		itemMy.CompanyId = item.CompanyId
+		itemMy.CompanyName = item.CompanyName
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//仅绑定邮箱的用户修改报名后,添加报名信息
+func AddActivitySignupFromEmail(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	var count int
+	var countMySchedule int
+	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ? ,is_msg_outbound_mobile = 1   WHERE user_id=? `
+	_, err = o.Raw(sql, item.OutboundMobile, item.CountryCode, item.UserId).Exec()
+	if err != nil {
+		return
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countMySchedule)
+	if err != nil {
+		return
+	}
+	if countMySchedule == 0 {
+		itemMy := new(CygxMySchedule)
+		itemMy.UserId = item.UserId
+		itemMy.ActivityId = item.ActivityId
+		itemMy.CreateTime = time.Now()
+		itemMy.Mobile = item.Mobile
+		itemMy.Email = item.Email
+		itemMy.CompanyId = item.CompanyId
+		itemMy.CompanyName = item.CompanyName
+		lastId, err = o.Insert(itemMy)
+		if err != nil {
+			return
+		}
+	}
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		sql := `UPDATE cygx_activity_signup SET is_cancel = 0 ,do_fail_type = 0, signup_type=? WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.SignupType, item.UserId, item.ActivityId).Exec()
+	} else {
+		lastId, err = o.Insert(item)
+	}
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//添加报名信息
+func AddActivitySignupNoSchedule(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	lastId, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//获取用户报名成功数量
+func GetActivitySignupCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0  AND do_fail_type = 0 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取用户报名数量
+func GetActivitySignupByUserCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取用户报名禁止数量
+func GetActivitySignupByUserRestrictCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE do_fail_type=3 AND user_id=? AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一活动已经报名的数量
+func GetActivitySignupSuccessCount(activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND do_fail_type = 0 AND activity_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一活动某个机构已经报名的数量
+func GetActivitySignupCompanyCount(activityId, companyId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND fail_type = 0 AND activity_id=? AND company_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId, companyId).QueryRow(&count)
+	return
+}
+
+//获取某一用户是否被限制报名
+func GetUserRestrictCount(mobile string) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE is_restrict=1  AND mobile=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, mobile).QueryRow(&count)
+	return
+}
+
+//获取某一用户的日程数量
+func GetUserMeetingReminderCount(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//获取某一用户的报名的数量
+func GetUserSignupCount(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup_log WHERE  user_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//取消报名
+func CancelActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	//判断是否删除我的日程
+	var countReminder int
+	var countAppointment int
+	sql := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel = 0  AND  user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countReminder)
+
+	sql = `SELECT COUNT(1) AS count FROM cygx_activity_appointment WHERE  user_id=? AND activity_id=? `
+	err = o.Raw(sql, item.UserId, item.ActivityId).QueryRow(&countAppointment)
+	if err != nil {
+		return
+	}
+	if countReminder == 0 && countAppointment == 0 {
+		sql = `DELETE  FROM cygx_my_schedule   WHERE user_id=?  AND activity_id=? `
+		_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+		if err != nil {
+			return
+		}
+	}
+	sql = `DELETE  FROM cygx_activity_signup   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	if err != nil {
+		return
+	}
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 2
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//详情
+func GetActivitySignupDetail(activityId, uid int) (item *CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup WHERE  activity_id = ? AND user_id =? `
+	err = o.Raw(sql, activityId, uid).QueryRow(&item)
+	return
+}
+
+func GetActivitySignuListByUser(condition string, pars []interface{}) (item []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_signup  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+//解除报名限制之后二次报名
+func AddActivitySignupByRestrict(item *CygxActivitySignup) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	itemMy := new(CygxMySchedule)
+	itemMy.UserId = item.UserId
+	itemMy.ActivityId = item.ActivityId
+	itemMy.CreateTime = time.Now()
+	itemMy.Mobile = item.Mobile
+	itemMy.Email = item.Email
+	itemMy.CompanyId = item.CompanyId
+	itemMy.CompanyName = item.CompanyName
+	lastId, err = o.Insert(itemMy)
+	if err != nil {
+		return
+	}
+	sql := `UPDATE cygx_activity_signup SET do_fail_type = 0 , fail_type=0 WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, item.UserId, item.ActivityId).Exec()
+	itemLog := new(CygxActivitySignupLog)
+	itemLog.UserId = item.UserId
+	itemLog.ActivityId = item.ActivityId
+	itemLog.CreateTime = time.Now()
+	itemLog.Mobile = item.Mobile
+	itemLog.Email = item.Email
+	itemLog.CompanyId = item.CompanyId
+	itemLog.CompanyName = item.CompanyName
+	itemLog.Type = 1
+	lastId, err = o.Insert(itemLog)
+	return
+}
+
+//列表
+func GetActivitySignupListAll() (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改是否推送消息状态
+func UPdateSignup(item *CygxActivitySignup) (err error) {
+	sql := ` UPDATE cygx_activity_signup SET  outbound_mobile= ? , country_code=86  WHERE id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, item.Mobile, item.Id).Exec()
+	return
+}
+
+//获取数量
+func GetActivityCountByIdWithUid(activityId, Uid int) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := `SELECT COUNT(1) AS count  FROM cygx_activity_signup WHERE activity_id = ? AND user_id = ?`
+	err = o.Raw(sqlCount, activityId, Uid).QueryRow(&count)
+	return
+}
+
+//获取用户报名数量
+func GetActivitySignupNomeetingCount(activityId int) (count int, err error) {
+	sqlCount := `SELECT
+	COUNT( 1 ) count 
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND a.activity_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, activityId).QueryRow(&count)
+	return
+}
+
+func GetUserMeetingMobile(activityId int) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+FROM
+	cygx_activity_signup AS s 
+WHERE
+	s.is_meeting = 1 
+	AND s.activity_id = ?`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+//获取用户是否被限制报名
+func GetRestrictSignupCountByUid(uid int) (count int, err error) {
+	sqlCount := `SELECT COUNT( 1 ) count FROM cygx_activity_restrict_signup  WHERE user_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//获取用户爽约次数
+func GetActivitySignupNomeetingCountByUid(uid int) (count int, err error) {
+	sqlCount := `SELECT
+	COUNT( 1 ) count 
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND s.do_fail_type = 0
+	AND s.user_id = ?`
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid).QueryRow(&count)
+	return
+}
+
+//删除
+func DeleteCygxActivityRestrictSignup(uid int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE user_id=?`
+	_, err = o.Raw(sql, uid).Exec()
+	return
+}
+
+type CygxActivitySignupList struct {
+	Id          int    `orm:"column(id);pk"`
+	UserId      int    `description:"用户id"`
+	ActivityId  int    `description:"活动ID"`
+	CompanyName string `description:"公司名称"`
+	RealName    string `description:"姓名"`
+	CreateTime  string `description:"创建时间"`
+	IsMeeting   int    `description:"是否到会 ,1是, 0否"`
+	Operation   bool   `description:"操作按钮,true,到会,false 未到会"`
+	Channel     int    `description:"报名渠道,0 空降、 1小程序报名"`
+}
+
+//获取用户报名列表
+func GetActivitySignupNomeetingCountList(activityId int) (items []*CygxActivitySignupList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	s.user_id
+FROM
+	cygx_activity_signup AS s
+	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
+WHERE
+	1 = 1 
+	AND a.is_limit_people > 0 
+	AND s.is_meeting = 0 
+	AND a.is_submit_meeting = 1
+	AND a.activity_id = ?`
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	return
+}
+
+type UserAndCompanyName struct {
+	UserId              int `orm:"column(user_id);pk"`
+	Mobile              string
+	Email               string
+	CompanyId           int
+	CompanyName         string `description:"公司名称"`
+	CountryCode         string `description:"手机国家区号"`
+	OutboundMobile      string `description:"外呼手机号"`
+	OutboundCountryCode string `description:"外呼手机号区号"`
+}
+
+func GetUserAndCompanyNameList(uid int) (item *UserAndCompanyName, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT u.*,c.company_name 
+			FROM wx_user AS u
+	INNER JOIN company AS c ON c.company_id = u.company_id
+	WHERE user_id =?`
+	err = o.Raw(sql, uid).QueryRow(&item)
+	return
+}
+
+type CygxActivityRestrictSignup struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id,多个用,隔开"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱号"`
+	CompanyId   int       `description:"公司ID"`
+	CompanyName string    `description:"公司名称"`
+	IsRestrict  int       `description:"是否限制报名,1是,0否"`
+}
+
+//添加
+func AddCygxActivityRestrictSignup(item *CygxActivityRestrictSignup) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+//获取列表信息根据手机号分组
+func GetCygxActivitySignupByMobileList(condition string) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_signup  WHERE  1= 1 ` + condition + `  GROUP BY mobile  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改用户报名的相关信息
+func UpdateCygxActivitySignup(wxUser *WxUserItem) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_signup SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE  mobile=? `
+	_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
+	return
+}
+
+//UpdateCygxActivitySignupisMeet 修改易董的活动,用户已到会
+func UpdateCygxActivitySignupisMeet(activityId int, mobile string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_signup SET is_meeting=1 WHERE activity_id=?  AND mobile = ? `
+	_, err = o.Raw(sql, activityId, mobile).Exec()
+	return
+}

+ 74 - 0
models/activity_special.go

@@ -0,0 +1,74 @@
+package models
+
+import (
+	//"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+//专项调研活动列表
+type CygxActivitySpecialDetail struct {
+	ActivityId            int    `description:"活动ID "`
+	ActivityTypeName      string `description:"活动名称"`
+	SpecialType           int    `description:"调研形式、 1 线上 , 2 线下"`
+	City                  string `description:"调研城市"`
+	ChartPermissionName   string `description:"行业名称"`
+	ChartPermissionId     string `description:"行业Id"`
+	ResearchTheme         string `description:"调研主题"`
+	ActivityTimeText      string `description:"活动预期时间带文字"`
+	TripImgLink           string `description:"行程图片链接"`
+	IsSignup              int    `description:"是否感兴趣 1是 ,0 否"`
+	Label                 string `description:"主题标签"`
+	ImgUrl                string `description:"图片链接"`
+	ImgUrlText            string `description:"图片链接文字"`
+	IndustrialName        string `description:"产业名称"`
+	IndustrialSubjectName string `description:"标的名称(相关公司)"`
+	Scale                 string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	CustomerTypeIds       string `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	IsTrip                int    `description:"是否报名 1是 ,0 否"`
+	TripNum               int    `description:"已报名人数"`
+	Days                  int    `description:"调研天数"`
+	Host                  string `description:"主持人"`
+	PersonInCharge        string `description:"纪要负责人"`
+	LimitPeopleNum        int    `description:"限制人数数量"`
+	TripImgLinkFix        string `description:"确定行程之后的图片链接"`
+	ActivityTimeTextByDay string `description:"活动预期时间带周日"`
+	ActivityTime          string `description:"活动预期时间"`
+	ActivityTimeEnd       string `description:"活动预期结束时间"`
+	ActiveState           int    `description:"活动进行状态 未开始:1、进行中2、已结束3"`
+	TripStatus            int    `description:"行程进行状态 1:预报名,2:确定行程"`
+	Explain               string `description:"说明"`
+	AdminId               int    `description:"管理员ID"`
+}
+
+//获取数量
+func GetActivitySpecialCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_special as art WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//主题列表
+func GetActivitySpecialListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT	*
+		FROM cygx_activity_special as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY art.last_updated_time DESC  LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+//修改发布状态
+func UpdateActivitySpecialPublishStatus(publishStatus, activityId int) (err error) {
+	sql := ` UPDATE cygx_activity_special SET  publish_status= ?  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, publishStatus, activityId).Exec()
+	return
+}
+

+ 116 - 0
models/activity_special_trip.go

@@ -0,0 +1,116 @@
+package models
+
+import (
+	//"hongze/hongze_admin/models"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySpecialTrip struct {
+	Id             int       `orm:"column(id);pk"`
+	UserId         int       `description:"用户id,多个用,隔开"`
+	ActivityId     int       `description:"活动ID"`
+	CreateTime     time.Time `description:"创建时间"`
+	Mobile         string    `description:"手机号"`
+	Email          string    `description:"邮箱号"`
+	CompanyId      int       `description:"公司ID"`
+	CompanyName    string    `description:"公司名称"`
+	RealName       string    `description:"用户实际名称"`
+	SellerName     string    `description:"所属销售"`
+	AdminId        int       `description:"销售/管理员ID"`
+	Source         int       `description:"来源,1小程序,2后台添加"`
+	OutboundMobile string    `description:"外呼手机号"`
+	CountryCode    string    `description:"手机国家区号"`
+	IsCancel       string    `description:"是否取消,1是,0否"`
+	IsValid        int       `description:"参会报名是否有效 1:是,0"`
+}
+
+type CygxActivitySpecialTripResp struct {
+	Id             int    `description:"ID"`
+	UserId         int    `description:"用户id"`
+	ActivityId     int    `description:"活动ID"`
+	CreateTime     string `description:"创建时间"`
+	Mobile         string `description:"手机号"`
+	Email          string `description:"邮箱号"`
+	CompanyId      int    `description:"公司ID"`
+	CompanyName    string `description:"公司名称"`
+	RealName       string `description:"用户实际名称"`
+	SellerName     string `description:"所属销售"`
+	OutboundMobile string `description:"外呼手机号"`
+	CountryCode    string `description:"手机国家区号"`
+}
+
+func GetCygxActivitySpecialTripList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_special_trip  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
+//获取某一用户的报名的数量
+func GetUserActivitySpecialTripCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip  WHERE  user_id=?  AND   activity_id =? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+//获取某一活动的报名的数量
+func GetActivitySpecialTripCountByActivityId(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip as t   INNER JOIN wx_user as  u on u.user_id = t.user_id WHERE    1 = 1 ` + condition
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//获取某一活动的报名的数量 (同时关联活动类型进行获取)
+func GetActivitySpecialTripCountByActivitySpecial(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count
+		FROM
+			cygx_activity_special_trip AS t
+			INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
+		WHERE
+			 1= 1 ` + condition
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//获取空降的公司报名的记录
+func GetActivitySpecialTripAirborneCountByActivitySpecial(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count
+		FROM
+			cygx_activity_special_meeting_detail AS t
+			INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
+		WHERE
+			 1= 1 ` + condition
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+//添加
+func AddCygxActivitySpecialTrip(item *CygxActivitySpecialTrip) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+//取消
+func CancelActivitySpecialTrip(uid int, item *CygxActivitySpecialDetail) (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE  FROM cygx_activity_special_trip   WHERE user_id=?  AND activity_id=? `
+	_, err = o.Raw(sql, uid, item.ActivityId).Exec()
+	return
+}
+
+//CancelActivitySpecialTripIsValid  处理活动报名是否有效
+func CancelActivitySpecialTripIsValid(isValid, activityId, userId int) (err error) {
+	sql := ` UPDATE cygx_activity_special_trip SET  is_valid= ?,is_cancel = 1  WHERE activity_id = ? AND  user_id = ? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, isValid, activityId, userId).Exec()
+	return
+}

+ 71 - 0
models/activity_video.go

@@ -0,0 +1,71 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+type CygxActivityVideo struct {
+	VideoId       int    `orm:"column(video_id);pk"description:"视频id"`
+	VideoName     string `description:"视频名称"`
+	ActivityId    int    ` description:"活动ID"`
+	ModifyDate    string `description:"更新时间"`
+	VideoDuration string `description:"视频时长"`
+	VideoCounts   int    `description:"播放量"`
+	VideoUrl      string `description:"视频地址"`
+	CreateTime    string `description:"创建时间"`
+}
+
+type CygxActivityVideoReq struct {
+	VideoName     string `description:"视频名称"`
+	VideoDuration string `description:"视频时长"`
+	VideoUrl      string `description:"视频地址"`
+}
+
+//string `orm:"column(label)";description:"主题"`
+//活动详情
+type CygxActivityVideoListResp struct {
+	ActivityId    int    `description:"活动ID 等于0新增活动,大于0修改活动"`
+	Id            int    `orm:"column(video_id)";description:"视频id"`
+	Title         string `orm:"column(video_name)";description:"视频名称"`
+	ResourceUrl   string `orm:"column(video_url)";description:"视频地址"`
+	VideoDuration string `description:"视频时长"`
+}
+
+type CygxActivityVideoListRep struct {
+	Paging *paging.PagingItem `description:"分页数据"`
+	List   []*CygxActivityVideoListResp
+}
+
+//列表
+func GetActivityVideoListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoListResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT art.*,v.video_id,v.video_name,v.video_url,video_duration FROM cygx_activity as art  INNER JOIN cygx_activity_video AS v ON v.activity_id = art.activity_id   WHERE 1= 1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+func UpdateActivityVideoCounts(activityId int) (err error) {
+	sql := `UPDATE cygx_activity_video SET video_counts = video_counts+1 WHERE activity_id = ?  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+// GetCygxActivityVideoByActivityId 获取活动视频
+func GetCygxActivityVideoByActivityId(activityId int) (item *CygxActivityVideo, err error) {
+	sql := `SELECT * FROM cygx_activity_video WHERE activity_id = ? LIMIT 1 `
+	err = orm.NewOrm().Raw(sql, activityId).QueryRow(&item)
+	return
+}
+
+// GetCygxActivityVideoById 获取活动视频
+func GetCygxActivityVideoById(activityId int) (item *CygxActivityVideo, err error) {
+	sql := `SELECT * FROM cygx_activity_video WHERE video_id = ? LIMIT 1 `
+	err = orm.NewOrm().Raw(sql, activityId).QueryRow(&item)
+	return
+}

+ 85 - 0
models/activity_voice.go

@@ -0,0 +1,85 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_clpt/utils"
+	"time"
+)
+
+// ActivityVoice 活动语音表结构体
+type CygxActivityVoice struct {
+	ActivityVoiceId  int       `orm:"column(activity_voice_id);pk" description:"活动音频ID"`
+	ActivityId       int       ` description:"活动ID"`
+	VoiceUrl         string    `description:"音频地址"`
+	VoiceName        string    `description:"音频名称"`
+	VoicePlaySeconds string    `description:"音频时长"`
+	VoiceCounts      int       `description:"播放量"`
+	ModifyTime       string    `description:"更新时间"`
+	CreateTime       time.Time `description:"创建时间"`
+}
+
+// ActivityVoiceReq 音频数据
+type CygxActivityVoiceReq struct {
+	ActivityId      int    ` description:"活动ID"`
+	ActivityVoiceId int    ` description:"音频ID"`
+	Url             string `description:"音频资源url地址"`
+	Name            string `description:"音频名称"`
+	PlaySeconds     int    `description:"音频时长"`
+}
+
+// GetCygxActivityVoiceReqList 获取活动ID的音频
+func GetCygxActivityVoiceReqList(activityIds []int) (items []*CygxActivityVoiceReq, err error) {
+	lenactivityIds := len(activityIds)
+	if lenactivityIds == 0 {
+		return
+	}
+	//活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
+	//endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
+	sql := `SELECT
+			v.activity_id,
+			v.activity_voice_id,
+			v.voice_url AS url,
+			v.voice_name AS name,
+			v.voice_play_seconds AS play_seconds 
+		FROM
+			cygx_activity_voice AS v
+			INNER JOIN cygx_activity AS a ON a.activity_id = v.activity_id 
+		WHERE
+			1 = 1 	 AND  v.activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityIds).QueryRows(&items)
+	return
+}
+
+func UpdateCygxActivityVoiceCounts(activityId int) (err error) {
+	sql := `UPDATE cygx_activity_voice SET voice_counts = voice_counts+1 WHERE activity_id = ?  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+// GetCygxActivityVoiceById 主键获取活动音频
+func GetCygxActivityVoiceById(videoId int) (item *CygxActivityVoice, err error) {
+	sql := `SELECT * FROM cygx_activity_voice WHERE activity_voice_id = ? LIMIT 1`
+	err = orm.NewOrm().Raw(sql, videoId).QueryRow(&item)
+	return
+}
+
+//列表
+func GetActivityVoiceListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoListResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT art.*  FROM cygx_activity as art  INNER JOIN cygx_activity_voice AS v ON v.activity_id = art.activity_id   WHERE 1= 1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// GetCygxActivityVoiceByActivityId 主键获取活动音频
+func GetCygxActivityVoiceByActivityId(activityId int) (item *CygxActivityVoice, err error) {
+	sql := `SELECT * FROM cygx_activity_voice WHERE activity_id = ? LIMIT 1`
+	err = orm.NewOrm().Raw(sql, activityId).QueryRow(&item)
+	return
+}

+ 32 - 0
models/advice.go

@@ -0,0 +1,32 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxAdvice struct {
+	AdviceId      int       `orm:"column(advice_id);pk" description:"优化建议id"`
+	UserId        int       `description:"用户id"`
+	UserRealName  string    `description:"姓名"`
+	CompanyId     int       `description:"公司id"`
+	CompanyName   string    `description:"公司名称"`
+	SalesRealName string    `description:"所属销售"`
+	Advice        string    `description:"优化建议"`
+	AdviceImgUrl  string    `description:"图片,多张用#分割"`
+	CreateTime    time.Time `description:"提交建议时间"`
+	Mobile        string    `description:"手机号"`
+	Email         string    `description:"邮箱"`
+}
+
+//添加优化建议
+func AddCygxAdvice(item *CygxAdvice) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+type AddCygxAdviceReq struct {
+	Advice       string `description:"优化建议"`
+	AdviceImgUrl string `description:"图片,多张用#分割"`
+}

+ 9 - 0
models/article.go

@@ -181,3 +181,12 @@ type CygxArticleEs struct {
 	FileLink         string `description:"下载预览链接"`
 	MatchTypeName    string `description:"匹配类型"`
 }
+
+func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT 	art.*,d.nick_name FROM
+			cygx_article AS art
+			LEFT JOIN cygx_article_department AS d ON d.department_id = art.department_id  WHERE article_id IN(` + articleIdStr + `) `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 22 - 0
models/company.go

@@ -192,3 +192,25 @@ func GetCompanyProductDetail(companyId, productId int) (item *CompanyProductDeti
 	err = o.Raw(sql, companyId, productId).QueryRow(&item)
 	return
 }
+
+type PermissionItem struct {
+	ChartPermissionId int    `description:"权限id"`
+	PermissionName    string `description:"权限名称"`
+	IsUpgrade         int    `description:"是否升级,1是,0否"`
+	Remark            string `description:"备注区分主观客观"`
+}
+
+func GetCompanyPermissionList(companyId int) (items []*PermissionItem, err error) {
+	sql := ` SELECT b.chart_permission_id,b.permission_name,b.remark,a.is_upgrade
+			FROM company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
+			WHERE  a.company_id=?
+			AND c.is_suspend=0
+            AND b.cygx_auth=1
+			AND c.status IN('正式','试用','永续')
+			AND a.status IN('正式','试用','永续')   ORDER BY b.sort ASC `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, companyId).QueryRows(&items)
+	return
+}

+ 1 - 0
models/db.go

@@ -42,6 +42,7 @@ func init() {
 		new(CygxXzsChooseCategory),
 		new(CygxReportIndustrialSeaarchHistory),
 		new(CygxMicroRoadshowVideoHistory),
+		new(CygxAdvice),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 44 - 0
models/page_history_record.go

@@ -0,0 +1,44 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxPageHistoryRecord struct {
+	Id                     int       `orm:"column(id);pk"`
+	UserId                 int       `description:"用户ID"`
+	CreateTime             time.Time `description:"创建时间"`
+	Mobile                 string    `description:"手机号"`
+	Email                  string    `description:"邮箱"`
+	CompanyId              int       `description:"公司id"`
+	CompanyName            string    `description:"公司名称"`
+	DetailId               string    `description:"详情ID"`
+	ChartPermissionId      int       `description:"行业ID"`
+	IndustrialManagementId string    `description:"产业ID"`
+	PageType               string    `description:"页面类型,纪要:Summary,纪要搜索:SummarySearch,报告:Report,报告搜索:ReportSearch,产业列表:IndustryList,活动:Activit,活动搜索:ActivitSearch,活动详情:ActivitParticulars,报告详情:ReportParticulars,已结束活动:OverActivity"`
+}
+
+type CygxPageHistoryRecordRep struct {
+	DetailId               string `description:"详情ID"`
+	ChartPermissionId      int    `description:"行业ID"`
+	IndustrialManagementId string `description:"产业ID"`
+	PageType               string `description:"页面类型,纪要:Summary,纪要搜索:SummarySearch,报告:Report,报告搜索:ReportSearch,产业列表:IndustryList,活动:Activit,活动搜索:ActivitSearch,活动详情:ActivitParticulars,报告详情:ReportParticulars , 我的日程:MySchedule, 更多标签:LabelMore , 文章复制:ArticleCopy"`
+}
+
+type CygxPageHistoryRecordHtgjRep struct {
+	DetailId               string `description:"详情ID"`
+	ChartPermissionId      int    `description:"行业ID"`
+	IndustrialManagementId string `description:"产业ID"`
+	CompanyCode            string `description:"机构编码"`
+	CompanyName            string `description:"机构名称"`
+	Email                  string `description:"机构邮箱"`
+	Sign                   string `description:"签名"`
+}
+
+//添加
+func AddCygxPageHistoryRecord(item *CygxPageHistoryRecord) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 20 - 0
models/report.go

@@ -394,3 +394,23 @@ func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []
 	_, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
 	return
 }
+
+//报告榜单start
+type ArticleReportBillboardResp struct {
+	ArticleId      int    `description:"文章id"`
+	Title          string `description:"标题"`
+	PublishDate    string `description:"发布时间"`
+	PermissionName string `description:"行业名称"`
+	DepartmentId   int    `description:"作者Id"`
+	NickName       string `description:"作者昵称"`
+	IsCollect      bool   `description:"本人是否收藏"`
+	Pv             int    `description:"PV"`
+	CollectNum     int    `description:"收藏人数"`
+	Source         int    `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
+	List           []*IndustrialManagementIdInt
+}
+
+type ArticleReportBillboardLIstPageResp struct {
+	List   []*ArticleReportBillboardResp
+	Paging *paging.PagingItem
+}

+ 7 - 0
models/session.go

@@ -61,3 +61,10 @@ func BindSessionMobile(mobile, token string) (err error) {
 	_, err = o.Raw(sql, mobile, token).Exec()
 	return
 }
+
+//根据用户id和平台id获取用户关系
+func GetUserSessionByUserId(userId int) (item *CygxClptSession, err error) {
+	sql := `SELECT * FROM cygx_clpt_session WHERE user_id=? `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
+	return
+}

+ 61 - 6
models/user.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_clpt/utils"
 	"time"
@@ -136,11 +137,15 @@ type LoginResp struct {
 }
 
 type UserDetailResp struct {
-	UserId      int    `description:"用户id"`
-	Headimgurl  string `description:"用户头像"`
-	Mobile      string `description:"手机号"`
-	Email       string `description:"邮箱"`
-	CompanyName string `description:"客户名称"`
+	UserId              int    `description:"用户id"`
+	UserName            string `description:"用户名称"`
+	Headimgurl          string `description:"用户头像"`
+	Mobile              string `description:"手机号"`
+	Email               string `description:"邮箱"`
+	CompanyName         string `description:"客户名称"`
+	OutboundMobile      string `description:"外呼手机号"`
+	OutboundCountryCode string `description:"外呼手机号区号"`
+	PermissionName      string `description:"拥有权限分类,多个用英文逗号分隔"`
 }
 
 type CheckStatusResp struct {
@@ -174,7 +179,6 @@ type CountryCodeItem struct {
 type OutboundMobileItem struct {
 	OutboundMobile      string `description:"外呼手机号"`
 	OutboundCountryCode string `description:"外呼手机号区号"`
-	ActivityId          int    `description:"活动ID"`
 }
 
 type UserWhiteList struct {
@@ -247,3 +251,54 @@ type UserPermissionAuthInfo struct {
 	OperationMode string `description:"操作方式:Apply-立即申请; Call-拨号"`
 	PopupMsg      string `description:"权限弹窗信息"`
 }
+
+func AddOutboundMobile(item *OutboundMobileItem, userId int) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ?, is_msg_outbound_mobile= 1 WHERE user_id=? `
+	_, err = o.Raw(sql, item.OutboundMobile, item.OutboundCountryCode, userId).Exec()
+	if err != nil {
+		return
+	}
+	//if item.ActivityId > 0 {
+	//	sql = `UPDATE cygx_activity_signup SET outbound_mobile=? ,country_code = ?  WHERE user_id=? AND  activity_id = ?`
+	//	_, err = o.Raw(sql, item.OutboundMobile, item.OutboundCountryCode, userId, item.ActivityId).Exec()
+	//}
+	return
+}
+
+type Headimgurl struct {
+	Headimgurl string `description:"用户头像"`
+}
+
+//更改用户头像
+func UpdateUserHeadimgurl(headimgurl string, userId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE wx_user SET headimgurl = ? WHERE user_id=? `
+	_, err = o.Raw(sql, headimgurl, userId).Exec()
+	return
+}
+
+func GetArticleUserCollectCount(userId int) (count int, err error) {
+	sql := `SELECT COUNT(1) AS count FROM cygx_article_collect AS a INNER JOIN cygx_article as art ON art.article_id = a.article_id WHERE a.user_id=? AND art.publish_status = 1  `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&count)
+	return
+}
+
+func GetArticleUserCollectList(startSize, pageSize, userId int) (items []*ArticleReportBillboardResp, err error) {
+	sql := `SELECT a.* FROM cygx_article_collect AS a INNER JOIN cygx_article as art ON art.article_id = a.article_id
+			WHERE a.user_id=? 
+           ORDER BY a.create_time DESC LIMIT ?,? `
+	_, err = orm.NewOrm().Raw(sql, userId, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 54 - 0
routers/commentsRouter.go

@@ -7,6 +7,24 @@ import (
 
 func init() {
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ActivityCoAntroller"],
+        beego.ControllerComments{
+            Method: "ScheduleList",
+            Router: `/scheduleList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:AdviceController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:AdviceController"],
+        beego.ControllerComments{
+            Method: "ApplyApprove",
+            Router: `/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ArticleController"],
         beego.ControllerComments{
             Method: "AskAdd",
@@ -268,6 +286,33 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "CheckLogin",
+            Router: `/check/status`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "CollectList",
+            Router: `/collect/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "AddOutboundMobile",
+            Router: `/countryCcode/addOutboundMobile`,
+            AllowHTTPMethods: []string{"POST"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"],
         beego.ControllerComments{
             Method: "Detail",
@@ -277,6 +322,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "HeadimgurlUpdate",
+            Router: `/headimgurl/update`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:WechatCommonController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:WechatCommonController"],
         beego.ControllerComments{
             Method: "WechatLogin",

+ 11 - 0
routers/router.go

@@ -85,6 +85,17 @@ func init() {
 				&controllers.MicroRoadShowController{},
 			),
 		),
+		web.NSNamespace("/advice",
+			web.NSInclude(
+				&controllers.AdviceController{},
+			),
+		),
+		web.NSNamespace("/activity",
+			web.NSInclude(
+				&controllers.ActivityCoAntroller{},
+				&controllers.ActivityABaseController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 150 - 0
services/activity.go

@@ -0,0 +1,150 @@
+package services
+
+import (
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
+)
+
+//GetActivityVoiceResp 处理活动音频回放
+func GetActivityVoiceResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVoiceReq, err error) {
+	activityVoiceList, err := models.GetCygxActivityVoiceReqList(mapActivityId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+
+	mapActivityVoice := make(map[int]*models.CygxActivityVoiceReq)
+	if len(activityVoiceList) > 0 {
+		for _, v := range activityVoiceList {
+			mapActivityVoice[v.ActivityId] = v
+		}
+	}
+	mapItem = mapActivityVoice
+	return
+}
+
+//GetActivityVideoResp 处理活动视频频回放
+func GetActivityVideoResp(mapActivityId []int) (mapItem map[int]*models.CygxActivityVideoListResp, err error) {
+	var condition string
+	var ativityVIdstr string
+	for _, v := range mapActivityId {
+		ativityVIdstr += strconv.Itoa(v) + ","
+	}
+	if ativityVIdstr == "" {
+		return
+	}
+
+	ativityVIdstr = strings.TrimRight(ativityVIdstr, ",")
+	condition += ` AND art.activity_id IN  (` + ativityVIdstr + `) `
+	var pars []interface{}
+	//endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
+	//condition += ` AND art.activity_time > ? `
+	//pars = append(pars, endTime)
+	videoList, e := models.GetActivityVideoListAll(condition, pars, 0, 1000)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = e
+		return
+	}
+	mapActivityVideo := make(map[int]*models.CygxActivityVideoListResp)
+	if len(videoList) > 0 {
+		for _, v := range videoList {
+			mapActivityVideo[v.ActivityId] = v
+		}
+	}
+	mapItem = mapActivityVideo
+	return
+}
+
+func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.ActivityDetail) {
+	articleDetail = item
+	//IsShowAppointment       bool                       `description:"是否展示预约纪要"`
+	//IsShowOutboundCall      bool                       `description:"是否展示预约外呼"`
+	//IsShowMeetingReminder   bool                       `description:"是否展示会议提醒"`
+	//IsShowHelpSsk           bool                       `description:"是否展示帮我带问"`
+	//IsShowSignup            bool                       `description:"是否展示我要报名"`
+
+	//如果后台在添加活的时候,关联的报告类型不隐藏预约纪要按钮,而且满足以下展示预约纪要按钮类型就展示
+	//if articleDetail.IsHideAppointment == 0 {
+	//	articleDetail.IsShowAppointment = IsShowAppointmentByactivityInfo(articleDetail, articleDetail.ChartPermissionName)
+	//}
+	articleDetail.IsShowAppointment = false
+	//易董的操作按钮都隐藏
+	if articleDetail.YidongActivityId != "" {
+		articleDetail.IsShowSignup = false
+		articleDetail.IsShowDetails = true
+		return
+	}
+	//新的是否展示规则
+	if articleDetail.IsCanAppointmentMinutes == 1 {
+		articleDetail.IsShowAppointment = true
+	} else {
+		articleDetail.IsShowAppointment = false
+	}
+
+	//专家电话会 1
+	if articleDetail.ActivityTypeId == 1 {
+		articleDetail.IsShowOutboundCall = true
+		//if articleDetail.LimitPeopleNum == 0 {
+		//	articleDetail.IsShowMeetingReminder = true
+		//	articleDetail.IsShowHelpSsk = true
+		//}
+		articleDetail.IsShowMeetingReminder = true
+		articleDetail.IsShowHelpSsk = true
+	}
+
+	//分析师电话会 2
+	if articleDetail.ActivityTypeId == 2 {
+		articleDetail.IsShowOutboundCall = true
+		if articleDetail.LimitPeopleNum == 0 {
+			articleDetail.IsShowMeetingReminder = true
+		}
+	}
+
+	//公司调研电话会 3
+	if articleDetail.ActivityTypeId == 3 {
+		if articleDetail.LimitPeopleNum == 0 {
+			articleDetail.IsShowMeetingReminder = true
+			articleDetail.IsShowOutboundCall = true
+		} else {
+			articleDetail.IsShowSignup = true
+		}
+	}
+
+	//公司线下调研 4
+	if articleDetail.ActivityTypeId == 4 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//专家线下沙龙 5
+	if articleDetail.ActivityTypeId == 5 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//分析师线下沙龙 6
+	if articleDetail.ActivityTypeId == 6 {
+		articleDetail.IsShowSignup = true
+	}
+
+	//分析师电话会(C类) 7
+	if articleDetail.ActivityTypeId == 7 {
+		articleDetail.IsShowSignup = true
+	}
+	articleDetail.SourceType = 1
+	activityTimeText := articleDetail.ActivityTimeText
+	activityTimeText = strings.Replace(activityTimeText, "(", "(", -1)
+	activityTimeText = strings.Replace(activityTimeText, ")", ")", -1)
+	articleDetail.ActivityTimeText = activityTimeText
+	return
+}
+
+//判断预约纪要按钮是否显示
+func IsShowAppointment(activityTypeId int, chartPermissionName string) (isShowAppointment bool) {
+	if activityTypeId == 1 || activityTypeId == 2 || activityTypeId == 3 || activityTypeId == 4 {
+		isShowAppointment = true
+	}
+	if activityTypeId == 5 && chartPermissionName == "医药" {
+		isShowAppointment = true
+	}
+	return
+}

+ 277 - 0
services/activity_button.go

@@ -0,0 +1,277 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//获取用户已经报名的活动
+func GetActivitySignUpUserMap(activityIds []int, user *models.WxUserItem) (mapUserId map[int]int, err error) {
+	userId := user.UserId
+	var condition string
+	var pars []interface{}
+	activityIdsLen := len(activityIds)
+	if activityIdsLen > 0 {
+		condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
+		pars = append(pars, activityIds)
+	}
+	condition += ` AND user_id = ?  AND do_fail_type = 0 `
+	pars = append(pars, userId)
+	list, e := models.GetActivitySignuListByUser(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
+		return
+	}
+	mapUid := make(map[int]int)
+	for _, v := range list {
+		mapUid[v.ActivityId] = v.UserId
+	}
+	mapUserId = mapUid
+	return
+}
+
+//获取用户已经设置会议提醒的活动  cygx_activity_meeting_reminder
+func GetActivityReminderUserMasp(activityIds []int, user *models.WxUserItem) (mapUserId map[int]int, err error) {
+	userId := user.UserId
+	var condition string
+	var pars []interface{}
+	activityIdsLen := len(activityIds)
+	if activityIdsLen > 0 {
+		condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
+		pars = append(pars, activityIds)
+	}
+	condition += ` AND user_id = ?  `
+	pars = append(pars, userId)
+	list, e := models.GetCygxReminderListByUser(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
+		return
+	}
+	mapUid := make(map[int]int)
+	for _, v := range list {
+		mapUid[v.ActivityId] = v.UserId
+	}
+	mapUserId = mapUid
+	return
+}
+
+//获取用户已经预约纪要的活动
+func GetActivityAppointmentUserMap(activityIds []int, user *models.WxUserItem) (mapUserId map[int]int, err error) {
+	userId := user.UserId
+	var condition string
+	var pars []interface{}
+	activityIdsLen := len(activityIds)
+	if activityIdsLen > 0 {
+		condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
+		pars = append(pars, activityIds)
+	}
+	condition += ` AND user_id = ?  `
+	pars = append(pars, userId)
+	list, e := models.GetCygxAppointmentListByUser(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
+		return
+	}
+	mapUid := make(map[int]int)
+	for _, v := range list {
+		mapUid[v.ActivityId] = v.UserId
+	}
+	mapUserId = mapUid
+	return
+}
+
+//活动列表的展示  HandleActivityListButton
+func HandleActivityListButton(list []*models.ActivityDetail, user *models.WxUserItem) (items []*models.ActivityDetail, err error) {
+	var activityIds []int
+	var activitySpecilalIds []int
+	for k, v := range list {
+		if v.SourceType == 2 {
+			activitySpecilalIds = append(activitySpecilalIds, v.ActivityId)
+			//把专项调研的线下改为活动的线下类型
+			if v.ActivityType == 2 {
+				list[k].ActivityType = 0
+			}
+			list[k].IsShowSignup = true
+		} else {
+			activityIds = append(activityIds, v.ActivityId)
+		}
+	}
+	//处理活动
+	if len(activityIds) > 0 {
+		//处理用户是否报名
+		mapSignUp, e := GetActivitySignUpUserMap(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivitySignUpUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapSignUp[v.ActivityId]; ok {
+					list[k].IsSignup = 1
+				}
+			}
+		}
+		//处理用户是否预约纪要
+		mapAppointment, e := GetActivityAppointmentUserMap(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivityAppointmentUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapAppointment[v.ActivityId]; ok {
+					list[k].IsAppointment = 1
+				}
+			}
+		}
+		//处理用户是否预约会议提醒
+		mapReminder, e := GetActivityReminderUserMasp(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivityReminderUserMasp, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapReminder[v.ActivityId]; ok {
+					list[k].IsCancelMeetingReminder = 1
+				}
+			}
+		}
+	}
+
+	//处理专项产业调研
+	if len(activitySpecilalIds) > 0 {
+		//处理用户是否报名
+		UserMap, e := GetSpecialTripUserMap(activitySpecilalIds, user.UserId)
+		if e != nil {
+			err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType == 2 {
+				if _, ok := UserMap[v.ActivityId]; ok {
+					list[k].IsSignup = 1
+				}
+			}
+		}
+
+		for k, v := range list {
+			if v.SourceType == 2 {
+				resultTimeStart := utils.StrTimeToTime(v.ActivityTime)  //时间字符串格式转时间格式
+				resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
+				if resultTimeStart.After(time.Now()) {
+					list[k].ActiveState = strconv.Itoa(1)
+				} else if time.Now().After(resultTimeEnd) {
+					list[k].ActiveState = strconv.Itoa(3)
+				} else {
+					list[k].ActiveState = strconv.Itoa(2)
+				}
+			}
+		}
+	}
+
+	//var isShow bool
+	isShow, e := GetShowSustainableNew()
+	if e != nil {
+		err = errors.New("GetShowSustainableNew, Err: " + e.Error())
+		return
+	}
+	detail, e := models.GetConfigByCode("city_img_url")
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error())
+		return
+	}
+	detailChart, e := models.GetConfigByCode("chart_img_url")
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error())
+		return
+	}
+	addressList := strings.Split(detail.ConfigValue, "{|}")
+	mapAddress := make(map[string]string)
+	chartList := strings.Split(detailChart.ConfigValue, "{|}")
+	mapChart := make(map[string]string)
+	var cityName string
+	var chartName string
+	var imgUrl string
+	var imgUrlChart string
+	var mapActivityId []int
+	for _, v := range addressList {
+		vslice := strings.Split(v, "_")
+		cityName = vslice[0]
+		imgUrl = vslice[len(vslice)-1]
+		mapAddress[cityName] = imgUrl
+	}
+	for _, v := range chartList {
+		vslice := strings.Split(v, "_")
+		chartName = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapChart[chartName] = imgUrlChart
+	}
+	for k, v := range list {
+		if strings.Contains(v.ActivityName, "【") {
+			list[k].IsBrackets = 1
+		}
+		if v.SignupNum > v.LimitPeopleNum {
+			list[k].SignupNum = v.LimitPeopleNum
+		}
+		if isShow && strings.Contains(v.ChartPermissionName, "研选") {
+			list[k].IsShowSustainable = true
+		}
+		if strings.Contains(v.ChartPermissionName, "研选") && v.ActivityTypeId == 1 {
+			list[k].ActivityTypeName = "买方研选电话会"
+			list[k].ImgUrlText = utils.YAN_XUAN_IMG
+		}
+		if v.ActivityType == 0 {
+			if mapAddress[v.City] != "" {
+				list[k].ImgUrl = mapAddress[v.City]
+			} else {
+				list[k].ImgUrl = mapAddress["其它"]
+			}
+		} else {
+			if mapChart[v.ChartPermissionName] != "" {
+				list[k].ImgUrl = mapChart[v.ChartPermissionName]
+			}
+		}
+		expertTxt, _ := GetReportContentTextSub(v.Expert)
+		list[k].Expert = expertTxt
+		if v.IsHideAppointment == 0 {
+			list[k].IsShowAppointment = IsShowAppointment(v.ActivityTypeId, v.ChartPermissionName)
+		}
+		if v.ActivityTypeId == utils.C_CLASS_ACTIVITY_TYPE_ID {
+			list[k].IsCClassMeeting = true
+		}
+		mapActivityId = append(mapActivityId, v.ActivityId)
+	}
+
+	//处理音频回放
+	mapActivityVoice, e := GetActivityVoiceResp(mapActivityId)
+	if e != nil {
+		err = errors.New("GetActivityVoiceResp, Err: " + e.Error())
+		return
+	}
+
+	//处理视频回放
+	mapActivityVideo, e := GetActivityVideoResp(mapActivityId)
+	if e != nil {
+		err = errors.New("GetActivityVoiceResp, Err: " + e.Error())
+		return
+	}
+	for k, v := range list {
+		if mapActivityVoice[v.ActivityId] != nil {
+			list[k].FileType = 1
+			list[k].AudioLink = true
+			list[k].VoiceList = mapActivityVoice[v.ActivityId]
+		}
+		if mapActivityVideo[v.ActivityId] != nil {
+			list[k].FileType = 2
+			list[k].AudioLink = true
+			list[k].VideoDetail = mapActivityVideo[v.ActivityId]
+		}
+		items = append(items, ActivityButtonShow(v))
+	}
+	return
+}

+ 113 - 0
services/activity_my_schedule.go

@@ -0,0 +1,113 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"strconv"
+	"time"
+)
+
+//我的日程 GetScheduleAndSpecilList
+func GetScheduleAndSpecilList(user *models.WxUserItem, condition string, startSize, pageSize int) (items []*models.ActivityDetail, err error) {
+	var conditionSpecil string
+	var pars, parsSpecil []interface{}
+	condition += ` AND my.user_id = ?`
+	pars = append(pars, user.UserId)
+	conditionSpecil += ` AND my.user_id = ? AND my.is_cancel = 0 `
+	parsSpecil = append(parsSpecil, user.UserId)
+	list, e := models.GetScheduleAndSpecilList(condition, pars, conditionSpecil, parsSpecil, startSize, pageSize)
+	if e != nil {
+		err = errors.New("GetScheduleAndSpecilList, Err: " + e.Error())
+		return
+	}
+	var activityIds []int
+	var activitySpecilalIds []int
+	for k, v := range list {
+		if v.SourceType == 2 {
+			activitySpecilalIds = append(activitySpecilalIds, v.ActivityId)
+			//把专项调研的线下改为活动的线下类型
+			if v.ActivityType == 2 {
+				list[k].ActivityType = 0
+			}
+			list[k].IsShowSignup = true
+		} else {
+			activityIds = append(activityIds, v.ActivityId)
+		}
+	}
+	//处理活动
+	if len(activityIds) > 0 {
+		//处理用户是否报名
+		mapSignUp, e := GetActivitySignUpUserMap(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivitySignUpUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapSignUp[v.ActivityId]; ok {
+					list[k].IsSignup = 1
+				}
+			}
+		}
+		//处理用户是否预约纪要
+		mapAppointment, e := GetActivityAppointmentUserMap(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivityAppointmentUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapAppointment[v.ActivityId]; ok {
+					list[k].IsAppointment = 1
+				}
+			}
+		}
+		//处理用户是否预约会议提醒
+		mapReminder, e := GetActivityReminderUserMasp(activityIds, user)
+		if e != nil {
+			err = errors.New("GetActivityReminderUserMasp, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType != 2 {
+				if _, ok := mapReminder[v.ActivityId]; ok {
+					list[k].IsCancelMeetingReminder = 1
+				}
+			}
+		}
+	}
+
+	//处理专项产业调研
+	if len(activitySpecilalIds) > 0 {
+		//处理用户是否报名
+		UserMap, e := GetSpecialTripUserMap(activitySpecilalIds, user.UserId)
+		if e != nil {
+			err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
+			return
+		}
+		for k, v := range list {
+			if v.SourceType == 2 {
+				if _, ok := UserMap[v.ActivityId]; ok {
+					list[k].IsSignup = 1
+				}
+			}
+		}
+
+		for k, v := range list {
+			if v.SourceType == 2 {
+				resultTimeStart := utils.StrTimeToTime(v.ActivityTime)  //时间字符串格式转时间格式
+				resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
+				if resultTimeStart.After(time.Now()) {
+					list[k].ActiveState = strconv.Itoa(1)
+				} else if time.Now().After(resultTimeEnd) {
+					list[k].ActiveState = strconv.Itoa(3)
+				} else {
+					list[k].ActiveState = strconv.Itoa(2)
+				}
+			}
+		}
+	}
+	items = list
+	return
+}

+ 35 - 0
services/activity_special.go

@@ -0,0 +1,35 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+)
+
+//func init() {
+//	UpdateCygxActivitySpecialSignupNum()
+//}
+
+//获取用户已经报名的活动
+func GetSpecialTripUserMap(activityIds []int, userId int) (mapUserId map[int]int, err error) {
+	var condition string
+	var pars []interface{}
+	activityIdsLen := len(activityIds)
+	if activityIdsLen > 0 {
+		condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
+		pars = append(pars, activityIds)
+	}
+	condition += ` AND user_id = ?  AND is_cancel = 0 `
+	pars = append(pars, userId)
+	list, e := models.GetCygxActivitySpecialTripList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
+		return
+	}
+	mapUid := make(map[int]int)
+	for _, v := range list {
+		mapUid[v.ActivityId] = v.UserId
+	}
+	mapUserId = mapUid
+	return
+}

+ 31 - 0
services/config.go

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

+ 6 - 0
utils/constants.go

@@ -82,6 +82,7 @@ const (
 	OPEN_TOKEN_KEY                   string = "CLPT_OPEN_TOKEN_KEY" //策略品台开放平台的token key
 	OnlineTime                       string = "2021-06-01 00:00:01" //上线时间
 	HONG_GUAN_ID                     int    = 1
+	C_CLASS_ACTIVITY_TYPE_ID         int    = 7 //C类电话会会议ID
 )
 
 //模板消息推送类型
@@ -101,3 +102,8 @@ const (
 const (
 	TIME_CATEGORYID = 99999 //时间线的分类ID
 )
+
+const (
+	YI_YAO_QI_TA = "https://hzstatic.hzinsights.com/static/temp/20220922202209/20220922/2OQMBFplQE1R3bX1y3obX7JSwSuA.png"
+	YAN_XUAN_IMG = "https://hzstatic.hzinsights.com/static/temp/20221027202210/20221027/Dd8TrsMh8tNx2tGd5VeaQDyJVQfV.png"
+)