瀏覽代碼

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_9.9

xingzai 2 年之前
父節點
當前提交
74b7632097

文件差異過大導致無法顯示
+ 156 - 862
controllers/activity.go


+ 41 - 2
controllers/activity_special.go

@@ -10,7 +10,7 @@ import (
 	"time"
 )
 
-//专项调研活动
+// 专项调研活动
 type ActivitySpecialCoAntroller struct {
 	BaseAuthController
 }
@@ -230,6 +230,22 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 				br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
 				return
 			}
+			//流水记录表
+			itemBill := new(models.CygxActivitySpecialTripBill)
+			itemBill.UserId = user.UserId
+			itemBill.ActivityId = activityInfo.ActivityId
+			itemBill.CreateTime = time.Now()
+			itemBill.Mobile = user.Mobile
+			itemBill.Email = user.Email
+			itemBill.CompanyId = user.CompanyId
+			itemBill.CompanyName = user.CompanyName
+			itemBill.RealName = user.RealName
+			itemBill.Source = 1
+			itemBill.DoType = 1
+			itemBill.BillDetailed = -1 // 流水减一
+			itemBill.RegisterPlatform = 1
+			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+
 			go services.ActivitySpecialUserRmind(user, activityId, 2)
 			//判断是删除还是添加
 			if total == 0 {
@@ -259,7 +275,6 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 					br.ErrMsg = "操作失败,Err:" + err.Error()
 					return
 				}
-
 				//SignupStatus  int    `description:"返回状态:1:成功 、2 :人数已满 、3:调研次数已用完、 4:超时"`
 			} else {
 				updateParams := make(map[string]interface{})
@@ -273,7 +288,13 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 					br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
 					return
 				}
+				resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
+				//48小时之内的取消也扣除一次参会记录
+				if time.Now().Add(+time.Hour * 48).After(resultTime) {
+					itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
+				}
 			}
+			go models.AddCygxActivitySpecialTripBill(itemBill)
 		}
 	} else {
 		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermission(user)
@@ -332,11 +353,27 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
 		return
 	}
+	//流水记录表
+	itemBill := new(models.CygxActivitySpecialTripBill)
+	itemBill.UserId = user.UserId
+	itemBill.ActivityId = activityInfo.ActivityId
+	itemBill.CreateTime = time.Now()
+	itemBill.Mobile = user.Mobile
+	itemBill.Email = user.Email
+	itemBill.CompanyId = user.CompanyId
+	itemBill.CompanyName = user.CompanyName
+	itemBill.RealName = user.RealName
+	itemBill.Source = 1
+	itemBill.DoType = 2
+	itemBill.BillDetailed = 1 // 流水加一
+	itemBill.RegisterPlatform = 1
+	itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
 	//48小时之内的取消也扣除一次参会记录
 	var isValid int
 	if time.Now().Add(+time.Hour * 48).After(resultTime) {
 		isValid = 1
+		itemBill.BillDetailed = 0 //48小时之内取消的活动扣点不返回
 	}
 	err = models.CancelActivitySpecialTripIsValid(isValid, activityInfo.ActivityId, uid)
 	if err != nil {
@@ -344,6 +381,8 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 		br.ErrMsg = "CancelActivitySpecialTrip,Err:" + err.Error()
 		return
 	}
+	go models.AddCygxActivitySpecialTripBill(itemBill)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "已取消"

+ 23 - 16
controllers/article.go

@@ -93,27 +93,34 @@ func (this *ArticleController) Detail() {
 		var pars []interface{}
 		pars = make([]interface{}, 0)
 		condition = ` AND article_id  = ? `
-		pars = append(pars, articleId)
-		industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取信息失败,Err:" + err.Error()
-			return
-		}
-		if len(industrialList) > 0 {
-			industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
-			if err != nil {
+		reportMappingMap, _ := services.GetReportMappingMap()
+
+		if reportMappingMap[detail.CategoryId] {
+			chooseCategoryMap, _ := services.GetChooseCategoryMap(user)
+			detail.IsShowFollowButton = true
+			detail.IsFollowButton = chooseCategoryMap[detail.CategoryId]
+		} else {
+			pars = append(pars, articleId)
+			industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
+			if err != nil && err.Error() != utils.ErrNoRow() {
 				br.Msg = "获取信息失败"
-				br.ErrMsg = "GetActivitySignupResp,Err:" + err.Error()
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
 				return
 			}
-			for _, v := range industrialList {
-				fmt.Println(v.IndustrialManagementId)
-				if industryUserFollowMap[v.IndustrialManagementId] {
-					detail.IsFollowButton = true
+			if len(industrialList) > 0 {
+				industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
+				if err != nil {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "GetActivitySignupResp,Err:" + err.Error()
+					return
+				}
+				for _, v := range industrialList {
+					if industryUserFollowMap[v.IndustrialManagementId] {
+						detail.IsFollowButton = true
+					}
 				}
+				detail.IsShowFollowButton = true
 			}
-			detail.IsShowFollowButton = true
 		}
 	}
 	//是否属于专项调研报告

+ 12 - 2
controllers/chart_permission.go

@@ -6,7 +6,7 @@ import (
 	"hongze/hongze_cygx/utils"
 )
 
-//品种
+// 品种
 type ChartPermissionController struct {
 	BaseCommonController
 }
@@ -152,6 +152,7 @@ func (this *ChartPermissionAuthController) ReportDetail() {
 
 // @Title 获取策略下的所有分类
 // @Description 获取策略下的所有分类接口
+// @Param   ChartPermissionId   query   int  false     "行业id"
 // @Success 200 {object} models.ReportMappingResp
 // @router /strategyAll [get]
 func (this *ChartPermissionAuthController) StrategyDetail() {
@@ -166,8 +167,13 @@ func (this *ChartPermissionAuthController) StrategyDetail() {
 		br.Ret = 408
 		return
 	}
+	//默认给策略的ID
+	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	if chartPermissionId == 0 {
+		chartPermissionId = utils.CE_LUE_ID
+	}
 	uid := user.UserId
-	list, err := models.GetReportMappingStrategyHomeAll()
+	list, err := models.GetReportMappingStrategyHomeAll(chartPermissionId)
 
 	if err != nil {
 		br.Msg = "获取信息失败"
@@ -289,6 +295,10 @@ func (this *ChartPermissionAuthController) ReportDetailV7() {
 			resp.List[k].IsShowSustainable = true
 		}
 	}
+	item := new(models.ChartPermission)
+	item.PermissionName = utils.GU_SHOU_NAME
+	item.ChartPermissionId = utils.GU_SHOU_ID
+	resp.List = append(resp.List, item)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 54 - 8
controllers/industry.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"strconv"
 	"time"
@@ -47,18 +48,63 @@ func (this *IndustryController) Fllow() {
 	var pars []interface{}
 	var industrialIds []int
 	if source == "article" {
-		pars = make([]interface{}, 0)
-		condition = ` AND article_id  = ? `
-		pars = append(pars, sourceId)
-		industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
-		if err != nil && err.Error() != utils.ErrNoRow() {
+		articleDetail, err := models.GetArticleDetailById(sourceId)
+		if err != nil {
 			br.Msg = "获取信息失败"
 			br.ErrMsg = "获取信息失败,Err:" + err.Error()
 			return
 		}
-		if len(industrialList) > 0 {
-			for _, v := range industrialList {
-				industrialIds = append(industrialIds, v.IndustrialManagementId)
+		//判读是否属于策略的文章类型
+		reportMappingMap, _ := services.GetReportMappingMap()
+		if reportMappingMap[articleDetail.CategoryId] {
+			chooseCategoryMap, _ := services.GetChooseCategoryMap(user)
+			//判断用户是否关注策略对应分类
+			if !chooseCategoryMap[articleDetail.CategoryId] {
+				item := new(models.CygxXzsChooseCategory)
+				item.CategoryId = articleDetail.CategoryId
+				item.UserId = uid
+				item.Email = user.Email
+				item.Mobile = user.Mobile
+				item.RealName = user.RealName
+				item.CompanyId = user.CompanyId
+				item.CompanyName = user.CompanyName
+				item.CreateTime = time.Now()
+				item.ModifyTime = time.Now()
+				_, err = models.AddCygxCategoryFllow(item)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + err.Error()
+					return
+				}
+				resp.Status = 1
+			} else {
+				err = models.RemoveCygxCategoryFllow(user.Mobile, articleDetail.CategoryId)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "取消关注失败,Err:" + err.Error()
+					return
+				}
+				resp.Status = 2
+			}
+			br.Msg = "操作成功"
+			br.Ret = 200
+			br.Success = true
+			br.Data = resp
+			return
+		} else {
+			pars = make([]interface{}, 0)
+			condition = ` AND article_id  = ? `
+			pars = append(pars, sourceId)
+			industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			if len(industrialList) > 0 {
+				for _, v := range industrialList {
+					industrialIds = append(industrialIds, v.IndustrialManagementId)
+				}
 			}
 		}
 	} else if source == "activity" {

+ 1 - 1
controllers/report.go

@@ -1854,7 +1854,7 @@ func (this *ReportController) ResearchDetail() {
 			listFirst[k].ListName = "上市公司调研纪要篇"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211101/ujHXB48I8ay9T0XoPRI7lorz7OkL.png"
 		} else if v.Type == "SJDP" {
-			listFirst[k].ListName = "事件点评"
+			listFirst[k].ListName = "市场QA汇总"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/2a5cXafO3Iws4QcFp1bd5WPdYikV.png"
 		} else if v.Type == "YANX" {
 			listFirst[k].ListName = "买方研选"

+ 21 - 2
controllers/search.go

@@ -604,20 +604,39 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 			br.ErrMsg = "检索失败,Err:" + err.Error()
 			return
 		}
-		tmpResult, tmpTotalResult, err := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn, 1)
+		tmpResult, tmpTotalResult, err := services.EsArticleSearchBody(keyWord, startSize, pageSize, orderColumn, 1)
 		if err != nil {
 			br.Msg = "检索失败"
 			br.ErrMsg = "检索失败,Err:" + err.Error()
 			return
 		}
 		result = tmpResult
+		if int(tmpTotalResult) < currentIndex*pageSize {
+			startSizeBody := startSize - int(tmpTotalResult)
+			if startSizeBody < 0 {
+				startSizeBody = 0
+			}
+			var pageSizeBody int
+			pageSizeBody = pageSize - len(tmpResult)
+			tmpResultBody, tmpTotalBody, err := services.EsArticleSearchBody(keyWord, startSizeBody, pageSizeBody, orderColumn, 2)
+			if err != nil {
+				br.Msg = "检索失败"
+				br.ErrMsg = "检索失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpResultBody {
+				result = append(result, v)
+			}
+			tmpTotalResult += tmpTotalBody
+		}
+
 		if int(tmpTotalResult) < currentIndex*pageSize {
 			startSizeIk := startSize - int(tmpTotalResult)
 			if startSizeIk < 0 {
 				startSizeIk = 0
 			}
 			var pageSizeIk int
-			pageSizeIk = pageSize - len(tmpResult)
+			pageSizeIk = pageSize - len(result)
 			tmpResultIk, _, err := services.EsArticleSearch(keyWord, startSizeIk, pageSizeIk, orderColumn, 2)
 			if err != nil {
 				br.Msg = "检索失败"

+ 10 - 4
models/activity.go

@@ -84,8 +84,9 @@ type ActivitySingnupRep struct {
 }
 
 type ActivityCcustomerType struct {
-	CustomerTypeId int    `description:"活动类型id"`
-	CustomerName   string `description:"活动名称"`
+	CustomerTypeId  int    `description:"活动类型id"`
+	CustomerName    string `description:"活动名称"`
+	PermissionValue string `description:"用户权限对应的值"`
 }
 
 type ActivityCcustomerTypeList struct {
@@ -724,17 +725,18 @@ type CygxActivityLabelList struct {
 	TripStatus        int    `description:"行程进行状态 1:预报名,2:确定行程"`
 	City              string `description:"城市"`
 	Days              int    `description:"天数"`
+	ActivityTypeId    int    `description:"活动类型id"`
 }
 
 // 主题列表
 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,city
+	sql := `SELECT	activity_id,activity_type_id, label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort , yidong_activity_id,city
 		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 ?,? `
+	sql += ` GROUP BY art.activity_id ORDER BY ` + sortTime + ` ,art.activity_id DESC  LIMIT ?,? `
 
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
@@ -1014,6 +1016,7 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			art.chart_permission_id,
 			art.active_state,
 			t.activity_type,
+			t.img_url_text,
 			art.chart_permission_name,
 			art.distinguished_guest,
 			art.expert,
@@ -1025,6 +1028,7 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			art.activity_type_id,
 			art.limit_people_num,
 			art.is_limit_people,
+			art.city,
 			1 AS source_type,
 			art.activity_time 
 		FROM
@@ -1043,6 +1047,7 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			art.chart_permission_id,
 			"",
 			art.special_type AS activity_type,
+			"",
 			art.chart_permission_name,
 			"",
 			"",
@@ -1054,6 +1059,7 @@ func GetActivitySpecialSearcheList(condition string, pars []interface{}, conditi
 			"",
 			"",
 			"",
+			"",
 			2 AS source_type,
 			art.activity_time 
 		FROM

+ 5 - 5
models/activity_special.go

@@ -5,14 +5,14 @@ import (
 	"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"`
+	ChartPermissionId     int    `description:"行业Id"`
 	ResearchTheme         string `description:"调研主题"`
 	ActivityTimeText      string `description:"活动预期时间带文字"`
 	TripImgLink           string `description:"行程图片链接"`
@@ -40,7 +40,7 @@ type CygxActivitySpecialDetail struct {
 	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 != "" {
@@ -51,7 +51,7 @@ func GetActivitySpecialCount(condition string, pars []interface{}) (count int, e
 	return
 }
 
-//主题列表
+// 主题列表
 func GetActivitySpecialListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT	*
@@ -64,7 +64,7 @@ func GetActivitySpecialListAll(condition string, pars []interface{}, startSize,
 	return
 }
 
-//修改发布状态
+// 修改发布状态
 func UpdateActivitySpecialPublishStatus(publishStatus, activityId int) (err error) {
 	sql := ` UPDATE cygx_activity_special SET  publish_status= ?  WHERE activity_id = ?`
 	o := orm.NewOrm()

+ 78 - 9
models/activity_special_trip.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"fmt"
 	//"hongze/hongze_admin/models"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
@@ -50,7 +51,7 @@ func GetCygxActivitySpecialTripList(condition string, pars []interface{}) (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()
@@ -58,7 +59,7 @@ func GetUserActivitySpecialTripCount(uid, activityId int) (count int, err error)
 	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()
@@ -66,7 +67,7 @@ func GetActivitySpecialTripCountByActivityId(condition string, pars []interface{
 	return
 }
 
-//获取某一活动的报名的数量 (同时关联活动类型进行获取)
+// 获取某一活动的报名的数量 (同时关联活动类型进行获取)
 func GetActivitySpecialTripCountByActivitySpecial(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count
 		FROM
@@ -79,27 +80,60 @@ func GetActivitySpecialTripCountByActivitySpecial(condition string, pars []inter
 	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
+			 1= 1  	AND YEAR ( t.create_time )= YEAR (NOW()) ` + condition
 	o := orm.NewOrm()
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
-//添加
+// 添加
 func AddCygxActivitySpecialTrip(item *CygxActivitySpecialTrip) (err error) {
-	o := orm.NewOrm()
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
 	_, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	//itemBill := new(CygxActivitySpecialTripBill)
+	//itemBill.UserId = item.UserId
+	//itemBill.ActivityId = item.ActivityId
+	//itemBill.CreateTime = time.Now()
+	//itemBill.Mobile = item.Mobile
+	//itemBill.Email = item.Email
+	//itemBill.CompanyId = item.CompanyId
+	//itemBill.CompanyName = item.CompanyName
+	//itemBill.RealName = item.RealName
+	//itemBill.Source = 1
+	//itemBill.BillDetailed = -1 // 流水减一
+	//itemBill.DoType = 1
+	//itemBill.RegisterPlatform = 1
+	//itemBill.ChartPermissionId = itemActivity.ChartPermissionId
+	//
+	//_, err = o.Insert(itemBill)
+	//if err != nil {
+	//	return
+	//}
 	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=? `
@@ -107,10 +141,45 @@ func CancelActivitySpecialTrip(uid int, item *CygxActivitySpecialDetail) (err er
 	return
 }
 
-//CancelActivitySpecialTripIsValid  处理活动报名是否有效
+// 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
 }
+
+type CygxActivitySpecialTripInit 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"`
+	ChartPermissionId int       `description:"行业Id"`
+}
+
+func GetCygxActivitySpecialTripListinit(condition string, pars []interface{}) (item []*CygxActivitySpecialTripInit, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	t.*,
+	a.chart_permission_id 
+FROM
+	cygx_activity_special_trip AS t
+	INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
+WHERE
+	1 = 1 
+	AND is_valid = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 44 - 0
models/activity_special_trip_bill.go

@@ -0,0 +1,44 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySpecialTripBill 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:"用户实际名称"`
+	AdminId           int       `description:"销售/管理员ID"`
+	Source            int       `description:"来源,1小程序,2后台添加, 3开发人员手动添加"`
+	BillDetailed      int       `description:"流水明细,判断是进账还是出账"`
+	DoType            int       `description:"操作方式,1报名,2取消报名"`
+	RegisterPlatform  int       `description:"来源 1小程序,2:网页"`
+	ChartPermissionId int       `description:"行业id"`
+}
+
+// 添加
+func AddCygxActivitySpecialTripBill(item *CygxActivitySpecialTripBill) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func GetCygxActivitySpecialTripBill(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBill, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_special_trip_bill  
+			WHERE 1 = 1 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 2 - 3
models/article.go

@@ -215,12 +215,11 @@ func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err e
 func GetArticlePermission(companyId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			b.* 
+			a.chart_permission_name as  permission_name
 			FROM
 			cygx_report_mapping AS a
-			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id 
 			WHERE
-			a.category_id = ?`
+			a.category_id = ? LIMIT  1 `
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	//_, err = o.Raw(sql, companyId).QueryRows(&item)
 	return

+ 9 - 10
models/company.go

@@ -77,7 +77,7 @@ func GetCountCompanyDetailByIdGroup(companyId int) (count int, err error) {
 //}
 
 func GetCompanyPermission(companyId int) (permission string, err error) {
-	sql := ` SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name  ORDER BY b.sort ASC SEPARATOR ',') AS permission
+	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC SEPARATOR ',') AS permission
 			FROM company_report_permission AS a
 			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
 			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
@@ -128,7 +128,7 @@ func GetCompanyPermissionList(companyId int) (items []*PermissionItem, err error
 	return
 }
 
-//获取用户权限不限制状态
+// 获取用户权限不限制状态
 func GetCompanyPermissionByUserNoStatus(companyId int) (permission string, err error) {
 	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
 			FROM company_report_permission AS a
@@ -142,7 +142,7 @@ func GetCompanyPermissionByUserNoStatus(companyId int) (permission string, err e
 	return
 }
 
-//获取正式权限
+// 获取正式权限
 func GetCompanyPermissionByUserZhengShi(companyId int) (permission string, err error) {
 	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
 			FROM company_report_permission AS a
@@ -151,8 +151,7 @@ func GetCompanyPermissionByUserZhengShi(companyId int) (permission string, err e
 			WHERE  a.company_id=?
 			AND c.is_suspend=0
             AND b.cygx_auth=1
-			AND c.status IN('正式')
-			AND a.status IN('正式') `
+			AND c.status IN('正式') `
 	o := orm.NewOrm()
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
@@ -186,7 +185,7 @@ func GetCompanyDetailAllById(companyId int) (item *CompanyDetail, err error) {
 	return
 }
 
-//获取对应销售以及销售的手机号
+// 获取对应销售以及销售的手机号
 func GetSellerDetailAllByCompanyId(companyId int) (item *CompanyDetail, err error) {
 	sql := ` SELECT c.mobile ,c.real_name as seller_name
 			FROM
@@ -222,7 +221,7 @@ type CompanyProductDetial struct {
 	Scale     string `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
 }
 
-//获取对应销售以及销售的手机号
+// 获取对应销售以及销售的手机号
 func GetCompanyProductDetail(companyId, productId int) (item *CompanyProductDetial, err error) {
 	sql := ` SELECT * FROM company_product WHERE company_id = ? AND product_id = ?; `
 	o := orm.NewOrm()
@@ -230,7 +229,7 @@ func GetCompanyProductDetail(companyId, productId int) (item *CompanyProductDeti
 	return
 }
 
-//获取公司详情详情
+// 获取公司详情详情
 func GetCompanyByName(companyName string) (item *Company, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *  FROM company WHERE company_name = ? LIMIT 1`
@@ -238,7 +237,7 @@ func GetCompanyByName(companyName string) (item *Company, err error) {
 	return
 }
 
-//获取公司详情详情
+// 获取公司详情详情
 func GetCompanyByThirdName(tripartiteCompanyCode string) (item *Company, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT *  FROM company WHERE tripartite_company_code = ? LIMIT 1`
@@ -246,7 +245,7 @@ func GetCompanyByThirdName(tripartiteCompanyCode string) (item *Company, err err
 	return
 }
 
-//更新机构互动量
+// 更新机构互动量
 func UpdateComapanyInteractionNum(interactionNum, companyId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE company SET interaction_num = ? WHERE company_id=? `

+ 5 - 6
models/company_activity_trip.go

@@ -60,23 +60,22 @@ func GetCompanyPermissionByUserTrip(companyId int) (permission string, err error
 	return
 }
 
-//获取正式权限
+// 获取可查看升级权限的正式权限
 func GetCompanyPermissionByUserZhengShiTrip(companyId int) (permission string, err error) {
-	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
+	sql := ` SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
 			FROM company_report_permission AS a
 			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
 			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
 			WHERE  a.company_id=?
 			AND c.is_suspend=0
             AND b.cygx_auth=1
-			AND a.is_upgrade = 1 
-			AND c.status IN('正式')  `
+			AND ( a.is_upgrade = 1 AND c.STATUS = '正式' OR c.STATUS = '永续' ) `
 	o := orm.NewOrm()
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
 
-//GetCompanyReportPermissionUpgrade 获取升级的权限类型
+// GetCompanyReportPermissionUpgrade 获取升级的权限类型
 func GetCompanyReportPermissionUpgrade(companyId, productId int) (items []*CompanyReportPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -109,7 +108,7 @@ func GetChartPermissionByIds(permissionIds []string) (list []*ChartPermission, e
 	return
 }
 
-//GetCompanyPermissionNameCheck 通过名称判断客户是否开了某一类型的权限
+// GetCompanyPermissionNameCheck 通过名称判断客户是否开了某一类型的权限
 func GetCompanyPermissionNameCheck(companyId, productId int, permissionName string) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT

+ 22 - 0
models/company_user_type.go

@@ -0,0 +1,22 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxCompanyUserType struct {
+	Id             int `orm:"column(id);pk" description:"分析师id"`
+	CompanyId      int
+	CustomerTypeId int       `description:"用户身份ID"`
+	CreateTime     time.Time `description:"创建时间"`
+	ModifyTime     time.Time `description:"创建时间"`
+}
+
+// 通过活动ID获取详情
+func GetCygxCompanyUserType(companyId int) (item *CygxCompanyUserType, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *  FROM cygx_company_user_type AS a WHERE a.company_id=?  `
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}

+ 2 - 0
models/db.go

@@ -131,6 +131,8 @@ func init() {
 		new(CygxResearchSummaryVoiceHistory),
 		new(CygxMinutesSummaryVoiceHistory),
 		new(CygxReportSelectionVoiceHistory),
+		new(CygxActivitySpecialTripBill),
+		new(CygxXzsChooseCategory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 18 - 4
models/report_mapping.go

@@ -56,7 +56,7 @@ func GetReportMappingStrategyAll() (items []*ReportMapping, err error) {
 }
 
 // 获取策略下面的所有分类
-func GetReportMappingStrategyHomeAll() (items []*ReportMappingHome, err error) {
+func GetReportMappingStrategyHomeAll(chartPermissionId int) (items []*ReportMappingHome, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 	re.category_id,re.sub_category_name,re.match_type_name
@@ -65,12 +65,12 @@ FROM
 	INNER JOIN cygx_article AS art ON art.category_id = re.category_id 
 WHERE
 	re.report_type = 1 
-	AND re.chart_permission_id = 23 
+	AND re.chart_permission_id = ? 
 GROUP  BY
 	re.match_type_name
 ORDER BY
 	sort DESC , art.publish_date DESC`
-	_, err = o.Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
 }
 
@@ -136,7 +136,7 @@ func GetdetailByCategoryIdSet(categoryId int) (ids string, err error) {
 // 通过分类ID获取详情
 func GetdetailByCategoryIdPush(categoryId int) (item *ReportMapping, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_report_mapping WHERE category_id=? `
+	sql := `SELECT * FROM cygx_report_mapping WHERE category_id=?  LIMIT 1 `
 	err = o.Raw(sql, categoryId).QueryRow(&item)
 	return
 }
@@ -263,3 +263,17 @@ func GetReportMappingList(condition string, pars []interface{}) (items []*Report
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 获取所有的报告分类
+func GetReportMappingByPermissionName(chartPermissionName string) (items []*ReportMapping, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+				* 
+			FROM
+				cygx_report_mapping
+			WHERE
+				1 = 1 
+				AND chart_permission_name = ? `
+	_, err = o.Raw(sql, chartPermissionName).QueryRows(&items)
+	return
+}

+ 42 - 0
models/xzs_choose_category.go

@@ -0,0 +1,42 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxXzsChooseCategory struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户ID"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	CategoryId  int       `description:"权益文章对应分类,cygx_article"`
+	CreateTime  time.Time `description:"创建时间"`
+	ModifyTime  time.Time `description:"更新时间"`
+}
+
+// 根据手机号获取用户关注的产业
+func GetCygxXzsChooseCategoryList(mobile string) (items []*CygxXzsChooseCategory, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_xzs_choose_category WHERE mobile = ?`
+	_, err = o.Raw(sql, mobile).QueryRows(&items)
+	return
+}
+
+// 添加
+func AddCygxCategoryFllow(item *CygxXzsChooseCategory) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 删除
+func RemoveCygxCategoryFllow(mobile string, CategoryId int) (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE FROM cygx_xzs_choose_category WHERE mobile=? AND category_id=? `
+	_, err = o.Raw(sql, mobile, CategoryId).Exec()
+	return
+}

+ 8 - 17
routers/commentsRouter.go

@@ -124,15 +124,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
-        beego.ControllerComments{
-            Method: "ActivityList",
-            Router: `/list_del_test`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
             Method: "MeetingReminderAdd",
@@ -189,8 +180,8 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "SpecialDetail",
-            Router: `/special/detail`,
+            Method: "SpecialList",
+            Router: `/special/del_list`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -198,18 +189,18 @@ func init() {
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "SpecialMsg",
-            Router: `/special/follow`,
-            AllowHTTPMethods: []string{"post"},
+            Method: "SpecialDetail",
+            Router: `/special/detail`,
+            AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ActivityCoAntroller"],
         beego.ControllerComments{
-            Method: "SpecialList",
-            Router: `/special/list`,
-            AllowHTTPMethods: []string{"get"},
+            Method: "SpecialMsg",
+            Router: `/special/follow`,
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})

+ 232 - 51
services/activity.go

@@ -313,7 +313,6 @@ func EditUserOutboundMobile(cont context.Context) (err error) {
 
 // 获取 用户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户
 func GetUserType(companyId int) (userType int, permissionStrnew string, err error) {
-
 	var permissionStr, permissionZhengShiStr string
 	if companyId <= 1 {
 		userType = 0
@@ -331,43 +330,42 @@ func GetUserType(companyId int) (userType int, permissionStrnew string, err erro
 				err = errs
 				return
 			}
-			permissionStr, errs = models.GetCompanyPermissionByUser(companyId)
+			permissionStr, errs = models.GetCompanyPermission(companyId)
 			if errs != nil {
 				err = errs
 				return
 			}
+			permissionStrnew = permissionStr
+			//大套餐客户,数据库添加标识,
+			companyUserTypeDetail, errs := models.GetCygxCompanyUserType(companyId)
+			if errs != nil && errs.Error() != utils.ErrNoRow() {
+				err = errs
+				return
+			}
+			if companyUserTypeDetail != nil {
+				if companyUserTypeDetail.CustomerTypeId != 0 {
+					userType = companyUserTypeDetail.CustomerTypeId
+					return
+				}
+			}
 			permissionZhengShiStr, errs = models.GetCompanyPermissionByUserZhengShi(companyId)
 			if errs != nil {
 				err = errs
 				return
 			}
-
-			//1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户
+			//1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户、 10: 30W套餐客户
 			//大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
 			if companyDetail.Status == "永续" {
 				userType = 1
 			} else if companyDetail.Status == "试用" {
 				userType = 5
-			} else if companyDetail.Status == "正式" {
-				if permissionStr == "专家" {
-					userType = 4
-				} else if strings.Count(permissionZhengShiStr, "医药") == 2 && strings.Count(permissionZhengShiStr, "消费") == 2 && strings.Count(permissionZhengShiStr, "科技") == 2 && strings.Count(permissionZhengShiStr, "智造") == 2 {
-					userType = 2
-				} else {
-					userType = 3
-				}
-				if userType == 3 {
-					if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") {
-						userType = 4
-					}
-				}
 			} else if companyDetail.Status == "冻结" {
 				userType = 6
 			} else if companyDetail.Status == "流失" {
 				userType = 7
 			}
 			//大套餐客户定义:医药、消费、科技、智造、策略。5个行业中任意4个及以上是正式权限的,属于大套餐客户(医药、消费、科技、智造需要主客观都开)
-			if userType == 3 {
+			if userType == 0 && companyDetail.Status == "正式" {
 				var permissionZhegnshiNum int
 				if strings.Count(permissionZhengShiStr, "医药") == 2 {
 					permissionZhegnshiNum++
@@ -384,8 +382,17 @@ func GetUserType(companyId int) (userType int, permissionStrnew string, err erro
 				if strings.Count(permissionZhengShiStr, "策略") == 1 {
 					permissionZhegnshiNum++
 				}
+				if strings.Count(permissionZhengShiStr, "路演服务") == 1 {
+					permissionZhegnshiNum++
+				}
+				//if permissionZhegnshiNum == 6 {
+				//	userType = 2
+				//} else
+				//大套餐客户,数据库添加标识,条件大于等于四的都是 30W套餐客户
 				if permissionZhegnshiNum >= 4 {
-					userType = 2
+					userType = 10
+				} else {
+					userType = 3
 				}
 			}
 		}
@@ -394,6 +401,139 @@ func GetUserType(companyId int) (userType int, permissionStrnew string, err erro
 	return
 }
 
+// GetSpecialDetailUserPower 处理用户查看详情的权限
+func GetActivityDetailUserPower(user *models.WxUserItem, activityInfo *models.ActivityDetail) (havePower bool, err error) {
+	var companyDetailStatus string
+	var userTypeStr string
+	//如果是弘则的用户或者宏观的权限不做校验
+	if user.CompanyId == utils.HZ_COMPANY_ID || activityInfo.ChartPermissionName == utils.HONG_GUAN_NAME {
+		havePower = true
+		return
+	}
+	userType, permissionStr, e := GetUserType(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	if activityInfo.LimitPeopleNum > 0 {
+		mapUserType, e := GetActivityCcustomerTypeList()
+		if e != nil {
+			err = e
+			return
+		}
+		userTypeStr = mapUserType[userType]
+		// 永续客户、大套餐客户、30W套餐客户可以查看行业升级套餐客户 权限
+		if userTypeStr == "1" || userTypeStr == "2" || userTypeStr == "AA" {
+			if strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) && strings.Contains(activityInfo.CustomerTypeIds, "8") {
+				havePower = true
+				//return
+			}
+		}
+	}
+	//判断管理规模是否满足
+	companyProduct, e := models.GetCompanyProductDetail(user.CompanyId, 2)
+	if e != nil {
+		err = e
+		return
+	}
+	if companyProduct != nil && activityInfo.Scale != "" {
+		if strings.Contains(activityInfo.Scale, companyProduct.Scale) {
+			havePower = true
+		}
+	}
+
+	if user.CompanyId <= 1 {
+		return
+	} else {
+		if permissionStr == "" {
+			return
+		} else {
+			companyDetail, e := models.GetCompanyDetailById(user.CompanyId)
+			if e != nil {
+				err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+				return
+			}
+			if companyDetail == nil {
+				err = errors.New("客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId))
+				return
+			}
+			companyDetailStatus = companyDetail.Status
+		}
+	}
+	if activityInfo.ChartPermissionId == 1 {
+		havePower = true
+		return
+	}
+	if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 {
+		havePower = true
+	} else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") {
+		havePower = true
+	} else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") {
+		havePower = true
+	} else if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3 || activityInfo.ActivityTypeId == 4 || activityInfo.ActivityTypeId == 5) && strings.Contains(permissionStr, "专家") {
+		havePower = true
+	}
+	if (strings.Contains(activityInfo.ChartPermissionName, "研选") || activityInfo.ChartPermissionName == "策略") && strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+		havePower = true
+		return
+	}
+	if activityInfo.ActivityTypeId == 2 || activityInfo.ActivityTypeId == 6 || activityInfo.ActivityTypeId == 7 {
+		if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(主观)") {
+			havePower = true
+		} else {
+			havePower = false
+		}
+	} else {
+		if strings.Contains(permissionStr, activityInfo.ChartPermissionName+"(客观)") {
+			havePower = true
+		} else {
+			havePower = false
+		}
+	}
+	//如果主客观校验不通过,那么直接返回
+	if !havePower {
+		return
+	}
+
+	//如果是易董的活动且属于研选类型,只要开通任何权限就可以查看详情
+	if activityInfo.YidongActivityId != "" && permissionStr != "" && strings.Contains(activityInfo.ChartPermissionName, utils.CHART_PERMISSION_NAME_YANXUAN) {
+		havePower = true
+	}
+
+	permissionShengji, errs := models.GetCompanyPermissionByUserTrip(user.CompanyId)
+	if errs != nil {
+		err = errs
+		return
+	}
+
+	//fmt.Println("主客观2", havePower)
+	//if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) {
+	//	havePower = true
+	//}
+	//fmt.Println("主客观3", havePower)
+	//处理升级权限以及用户身份的 双重判断
+	if activityInfo.CustomerTypeIds != "" {
+		if !strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) && userTypeStr != "8" {
+			havePower = false
+			if strings.Contains(permissionShengji, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, "8") {
+				havePower = true
+			}
+		}
+	}
+	if havePower && activityInfo.LimitPeopleNum > 0 {
+		//对于一些特殊的活动,即使权限满足也不给产看
+		noPower, e := GetShareNoPowe(activityInfo, permissionStr, userType, user)
+		if e != nil {
+			err = errors.New("GetShareNoPowe, Err: " + e.Error())
+			return
+		}
+		if noPower {
+			havePower = false
+		}
+	}
+	return
+}
+
 // 校验被分享的用户是否有查看详情的权限
 func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, userType int, user *models.WxUserItem) (noPower bool, err error) {
 	//如果是弘则的就不进行可见权限校验
@@ -401,21 +541,33 @@ func GetShareNoPowe(activityInfo *models.ActivityDetail, permissionStr string, u
 		return
 	}
 	//var noPower bool
-	if (userType == 1 || userType == 4 || userType == 5) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
-		noPower = true
-	}
+	//if !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) {
+	//	noPower = true
+	//}
 	//1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户
-	if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
-		noPower = true
-	}
-	if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
-		noPower = true
-	}
-	if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
-		noPower = true
-	}
-	if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
-		noPower = true
+	//if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
+	//	noPower = true
+	//}
+	//if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
+	//	noPower = true
+	//}
+	//if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) {
+	//	noPower = true
+	//}
+	//if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) {
+	//	noPower = true
+	//}
+	fmt.Println(userType)
+	if userType == 8 {
+		permissionShengji, errs := models.GetCompanyPermissionByUserZhengShiTrip(user.CompanyId)
+		if errs != nil {
+			err = errs
+			return
+		}
+		if !strings.Contains(permissionShengji, activityInfo.ChartPermissionName) {
+			noPower = true
+			return
+		}
 	}
 	if !noPower {
 		noPower, err = CheckUserPowerByActivityChoose(user, activityInfo)
@@ -449,7 +601,6 @@ func CheckUserPowerByActivityChoose(user *models.WxUserItem, activityInfo *model
 			noPower = true
 		}
 	}
-	fmt.Println(noPower)
 	return
 }
 
@@ -534,26 +685,31 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	permissionNameStr = strings.Replace(permissionNameStr, "(主观)", "", -1)
 	permissionNameStr = strings.Replace(permissionNameStr, "(客观)", "", -1)
 	permissionNameStr = strings.TrimRight(permissionNameStr, ",")
-
+	mapUserType, e := GetActivityCcustomerTypeList()
+	if e != nil {
+		err = e
+		return
+	}
+	var userTypeStr string
+	userTypeStr = mapUserType[userType]
 	// 查研观向7.4-始终查询宏观的权限(无论是否有权限)
 	if permissionNameStr == `` {
 		permissionNameStr = `'宏观'`
 	} else {
 		permissionNameStr += `, '宏观'`
 	}
-
 	var condition string
 	var conditionAdmin string
 	var conditionHz string // 弘则权限处理
 	var sqlExport string   // 专家权限处理
-	permissionSqlStr = `  AND art.chart_permission_name  IN (` + permissionNameStr + `)`
-	sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
-	if userType == 2 {
-		sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
-	}
-	if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
-		sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
-	}
+	//permissionSqlStr = `  AND art.chart_permission_name  IN (` + permissionNameStr + `)`
+	sqlExport = ` AND (art.customer_type_ids LIKE '%` + userTypeStr + `%' `
+	//if userType == 2 {
+	//	sqlExport += ` OR  art.customer_type_ids LIKE '%3%' `
+	//}
+	//if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") {
+	//	sqlExport += ` OR  art.customer_type_ids LIKE '%4%' `
+	//}
 	sqlExport += `) `
 	// 如果是C类电话会就不展示内容,且合并到分析师电话会
 	if activityTypeId != "" {
@@ -621,8 +777,6 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 		condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'"
 	}
 
-	fmt.Println(keyWord)
-	fmt.Println(keyWordNoIk)
 	//有搜索条件传过来时,不判进行状态条件
 	if keyWord != "" {
 		if ikType == 2 || ikType == 3 {
@@ -683,20 +837,27 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 		if len(ativityVIdArry) > 0 {
 			ativityVIdstr := strings.Join(ativityVIdArry, ",")
 			condition += ` AND art.activity_id IN  (` + ativityVIdstr + `) `
+		} else {
+			condition += ` AND art.activity_id = 0    `
 		}
 	}
 
 	//查询全部可见的数据(是否全部客户可见)
 	//condition += ` AND art.visible_range != 1  AND art.publish_status = 1 `
 	condition += `   AND art.publish_status = 1 `
-	conditionHz = condition
+	if adminIds == "" {
+		//condition += `  AND art.visible_range != 1 `
+	} else {
+		condition += ` 	AND ( art.visible_range != 1  OR  (	 art.admin_id IN ( ` + adminIds + ` )  AND art.visible_range = 1 ))  `
+	}
 
+	conditionHz = condition
 	//活动仅决策人可见
 	if isMaker == 0 {
 		condition += ` AND art.is_maker_show = 0  `
 	}
 	conditionAdmin = condition + `  AND art.visible_range = 1 `
-	condition += `  AND art.visible_range != 1 `
+	//condition += `  AND art.visible_range != 1 `
 	if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") {
 		conditionOr += ` OR (  art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%'	 ` + condition + `) `
 	}
@@ -718,7 +879,10 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 	}
 
 	if adminIds != "" {
-		conditionOr += ` OR (  art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` + ` AND  art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
+		if userType == 3 {
+			conditionAdmin += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+		}
+		conditionOr += ` OR (  art.customer_type_ids LIKE '%` + userTypeStr + `%' ` + ` AND  art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
 		if companyProduct != nil {
 			if companyProduct.Scale != "" {
 				conditionOr += ` OR (  art.scale LIKE '%` + companyProduct.Scale + `%'` + ` AND  art.admin_id IN (` + adminIds + `) ` + conditionAdmin + `) `
@@ -726,8 +890,23 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 		}
 	}
 
+	conditionShengji, conditionZhengshi, conditionHangYe, e := ActivityLabelSpecialUserSql(user)
+	if e != nil {
+		err = errors.New("ActivityLabelSpecialUserSql, Err: " + e.Error())
+		return
+	}
+	if conditionShengji != "" {
+		conditionOr += ` OR (  art.is_limit_people = 1 AND ` + conditionShengji + condition + ` ) `
+	}
+	if conditionZhengshi != "" {
+		conditionOr += ` OR (  art.is_limit_people = 1 AND ` + conditionZhengshi + condition + ` ) `
+	}
+	if conditionHangYe != "" {
+		conditionOr += ` OR (  art.is_limit_people = 1 AND ` + conditionHangYe + condition + ` ) `
+	}
+
 	//弘则研究下的客户不做权限,限制,C类电话会,仅本组销售、部门管理员、admin、权益研究员账号能看到
-	if user.CompanyId == 16 {
+	if user.CompanyId == utils.HZ_COMPANY_ID {
 		mapMobile, e := GetAdminMobileMap()
 		if e != nil {
 			err = e
@@ -737,7 +916,9 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 			conditionOr += ` OR (  art.publish_status = 1 ` + conditionHz + `) `
 		}
 	}
-
+	if userType == 3 {
+		condition += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+	}
 	conditionActivity = condition + permissionSqlStr + sqlExport + conditionOr
 	return
 }

+ 11 - 4
services/activity_button.go

@@ -225,17 +225,24 @@ func HandleActivityListButton(list []*models.ActivityDetail, user *models.WxUser
 			list[k].ActivityTypeName = "买方研选电话会"
 			list[k].ImgUrlText = utils.YAN_XUAN_IMG
 		}
-		if v.ActivityType == 0 {
-			if mapAddress[v.City] != "" {
-				list[k].ImgUrl = mapAddress[v.City]
+		if v.SourceType == 1 {
+			if v.ActivityType == 0 {
+				if mapAddress[v.City] != "" {
+					list[k].ImgUrl = mapAddress[v.City]
+				} else {
+					list[k].ImgUrl = mapAddress["其它"]
+				}
 			} else {
-				list[k].ImgUrl = mapAddress["其它"]
+				if mapChart[v.ChartPermissionName] != "" {
+					list[k].ImgUrl = mapChart[v.ChartPermissionName]
+				}
 			}
 		} else {
 			if mapChart[v.ChartPermissionName] != "" {
 				list[k].ImgUrl = mapChart[v.ChartPermissionName]
 			}
 		}
+
 		expertTxt, _ := GetReportContentTextSub(v.Expert)
 		list[k].Expert = expertTxt
 		if v.IsHideAppointment == 0 {

+ 281 - 54
services/activity_special.go

@@ -15,6 +15,61 @@ import (
 //	UpdateCygxActivitySpecialSignupNum()
 //}
 
+// ActivityLabelSpecialUserSql 专项产业调研用户权限查询数据预处理
+func ActivityLabelSpecialUserSql(user *models.WxUserItem) (conditionShengji, conditionZhengshi, conditionHangYe string, err error) {
+	_, userType, e := HandleActivityLabelSpecialTripPermission(user)
+	if e != nil {
+		err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
+		return
+	}
+	// 8: 行业升级套餐客户:该活动对应行业为升级权限的客户
+	permissionShengji, errs := models.GetCompanyPermissionByUserZhengShiTrip(user.CompanyId)
+	if errs != nil {
+		err = errs
+		return
+	}
+	if permissionShengji != "" {
+		slicePerShengji := strings.Split(permissionShengji, ",")
+		permissionShengji = ""
+		for _, v := range slicePerShengji {
+			permissionShengji += "'" + v + "',"
+		}
+		permissionShengji = strings.TrimRight(permissionShengji, ",")
+		conditionShengji = ` art.customer_type_ids LIKE '%8%' AND art.chart_permission_name  IN (` + permissionShengji + `)`
+	}
+	//9:其他行业正式客户:前述所有正式客户以外的正式客户 查询处理
+	permissionZhengShiStr, errs := models.GetCompanyPermissionByUserZhengShi(user.CompanyId)
+	if errs != nil {
+		err = errs
+		return
+	}
+	if permissionZhengShiStr != "" {
+		slicePerZhengshi := strings.Split(permissionZhengShiStr, ",")
+		permissionZhengShiStr = ""
+		for _, v := range slicePerZhengshi {
+			if userType == 1 {
+				//研选权限处理(永续客户无法查看研选)
+				if !strings.Contains(v, utils.CHART_PERMISSION_NAME_YANXUAN) {
+					permissionZhengShiStr += "'" + v + "',"
+				}
+			} else {
+				permissionZhengShiStr += "'" + v + "',"
+			}
+		}
+		permissionZhengShiStr = strings.Replace(permissionZhengShiStr, "(主观)", "", -1)
+		permissionZhengShiStr = strings.Replace(permissionZhengShiStr, "(客观)", "", -1)
+		permissionZhengShiStr = strings.TrimRight(permissionZhengShiStr, ",")
+		permissionZhengShiStr += `, '宏观'`
+		if userType != 1 && userType != 2 && userType != 10 {
+			conditionHangYe = `  art.customer_type_ids LIKE '%3%'	   AND art.chart_permission_name    IN (` + permissionZhengShiStr + `)`
+		}
+		if userType == 3 {
+			conditionZhengshi = `  art.customer_type_ids LIKE '%9%'	   AND art.chart_permission_name  NOT  IN (` + permissionZhengShiStr + `)`
+		}
+	}
+	return
+}
+
 // 修改专项调研,用户与公司的参与数量
 func UpdateCygxActivitySpecialSignupNum(cont context.Context) (err error) {
 	defer func() {
@@ -79,7 +134,8 @@ func GetActivityLabelSpecialList(user *models.WxUserItem, isPower int, chartPerm
 		item = itemList
 		return
 	}
-	userType, e := GetSpecialUserType(user)
+	//userType, e := GetSpecialUserType(user)
+	userType, _, e := GetUserType(user.CompanyId)
 	if e != nil {
 		err = errors.New("GetSpecialUserType, Err: " + e.Error())
 		return
@@ -96,14 +152,15 @@ func GetActivityLabelSpecialList(user *models.WxUserItem, isPower int, chartPerm
 	}
 	//如果是永续的就按照普通的权限逻辑来查,如果不是就按照升级的逻辑来查
 	var condition string
+	var conditionUser string
 	if companyDetail.Status == "永续" {
-		condition, e = HandleActivityLabelSpecialPermission(user)
+		conditionUser, e = HandleActivityLabelSpecialPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
 		}
 	} else {
-		condition, e = HandleActivityLabelSpecialTripPermission(user)
+		conditionUser, _, e = HandleActivityLabelSpecialTripPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
@@ -111,7 +168,6 @@ func GetActivityLabelSpecialList(user *models.WxUserItem, isPower int, chartPerm
 	}
 	var pars []interface{}
 	condition += ` AND art.publish_status = 1  AND art.label != ''  AND art.is_offline = 0 `
-
 	//行业名称
 	if isPower == 1 {
 		condition += ` AND art.chart_permission_name  IN (` + permissionNameStr + `) `
@@ -119,18 +175,84 @@ func GetActivityLabelSpecialList(user *models.WxUserItem, isPower int, chartPerm
 	if chartPermissionIds != "" {
 		condition += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `) `
 	}
+
+	//condition += conditionUser
+	conditionShengji, conditionZhengshi, conditionHangYe, e := ActivityLabelSpecialUserSql(user)
+	if e != nil {
+		err = errors.New("ActivityLabelSpecialUserSql, Err: " + e.Error())
+		return
+	}
+
 	conditionTrip := condition
-	conditionTrip += ` AND art.activity_time_end > ` + "'" + time.Now().Format(utils.FormatDateTime) + " '"
-	conditionTrip += ` AND art.days > 0  ORDER BY art.activity_time ASC `
-	specialList, err := models.GetActivityLabelSpecialListAll(conditionTrip, pars, 0, 8)
+	conditionNoTrip := condition
+	conditionTripSql := condition
+	conditionNoTripSql := condition
+	conditionTrip += ` AND art.days > 0   AND art.activity_time_end  > '` + time.Now().Format(utils.FormatDateTime) + ` '`
+
+	var conditionZhengshiTrip string
+	var conditionShengjiTrip string
+	var conditionHangYeTrip string
+
+	//处理专项调研确认行程的其它正式客户权限查询
+	if conditionZhengshi != "" {
+		conditionZhengshiTrip = ` OR ( ` + conditionZhengshi + conditionTrip + ` )`
+	}
+	//处理升级权限查询
+	if conditionShengji != "" {
+		conditionShengjiTrip = ` OR ( ` + conditionShengji + conditionTrip + ` )`
+	}
+	//处理行业套餐客户权限查询
+	if conditionHangYe != "" {
+		conditionHangYeTrip = ` OR ( ` + conditionHangYe + conditionTrip + ` )`
+	}
+	if conditionZhengshi != "" {
+		conditionTrip += conditionZhengshiTrip
+	}
+	if conditionShengjiTrip != "" {
+		conditionTrip += conditionShengjiTrip
+	}
+	if conditionHangYeTrip != "" {
+		conditionTrip += conditionHangYeTrip
+	}
+
+	//行业套餐客户勾选项单独处理
+	if userType == 3 {
+		conditionTripSql += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+	}
+
+	conditionTripSql += conditionUser + conditionTrip + `  ORDER BY art.activity_time ASC `
+	specialList, err := models.GetActivityLabelSpecialListAll(conditionTripSql, pars, 0, 80)
 	if err != nil {
 		return
 	}
-	//if len(specialList) < 8 {
-	//	conditionTrip += ` AND art.days = 0  ORDER BY art.last_updated_time DESC`
-
-	condition += ` AND art.days = 0  ORDER BY art.last_updated_time DESC`
-	specialListNotrip, e := models.GetActivityLabelSpecialListAll(condition, pars, 0, 20)
+	conditionNoTrip += ` AND art.days = 0  `
+	var conditionShengjiNoTrip string
+	var conditionZhengshiNoTrip string
+	var conditionHangYeNoTrip string
+	if conditionShengji != "" {
+		conditionShengjiNoTrip = ` OR ( ` + conditionShengji + conditionNoTrip + ` )`
+	}
+	if conditionZhengshi != "" {
+		conditionZhengshiNoTrip = ` OR ( ` + conditionZhengshi + conditionNoTrip + ` )`
+	}
+	if conditionHangYe != "" {
+		conditionHangYeNoTrip = ` OR ( ` + conditionHangYe + conditionNoTrip + ` )`
+	}
+	if conditionShengji != "" {
+		conditionNoTrip += conditionShengjiNoTrip
+	}
+	if conditionZhengshi != "" {
+		conditionNoTrip += conditionZhengshiNoTrip
+	}
+	if conditionHangYe != "" {
+		conditionNoTrip += conditionHangYeNoTrip
+	}
+	//行业套餐客户勾选项单独处理
+	if userType == 3 {
+		conditionNoTripSql += `  AND art.chart_permission_name  IN (` + permissionNameStr + `) `
+	}
+	conditionNoTripSql += conditionUser + conditionNoTrip + ` ORDER BY art.last_updated_time DESC`
+	specialListNotrip, e := models.GetActivityLabelSpecialListAll(conditionNoTripSql, pars, 0, 200)
 	if e != nil {
 		err = e
 		return
@@ -184,25 +306,34 @@ func HandleActivityLabelSpecialPermission(user *models.WxUserItem) (condition st
 	}
 	permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
 	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.is_offline = 0  `
-	if permissionSqlStr != "" {
-		condition += ` AND art.chart_permission_name  IN (` + permissionSqlStr + `) `
-	}
+	//if permissionSqlStr != "" {
+	//	condition += ` AND art.chart_permission_name  IN (` + permissionSqlStr + `) `
+	//}
 	condition += ` AND  art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
 	return
 }
 
 // HandleActivityLabelSpecialPermisseion 处理专项产业调研的查询权限sql
-func HandleActivityLabelSpecialTripPermission(user *models.WxUserItem) (condition string, err error) {
+func HandleActivityLabelSpecialTripPermission(user *models.WxUserItem) (condition string, userType int, err error) {
 	permissionStr, e := GetCompanyPermission(user.CompanyId)
 	if e != nil {
 		err = errors.New("GetCompanyPermission, Err: " + e.Error())
 		return
 	}
-	userType, e := GetSpecialUserType(user)
+	userType, _, e = GetUserType(user.CompanyId)
+	//userType, e := GetSpecialUserType(user)
 	if e != nil {
 		err = errors.New("GetSpecialUserType, Err: " + e.Error())
 		return
 	}
+	mapUserType, e := GetActivityCcustomerTypeList()
+	if e != nil {
+		err = e
+		return
+	}
+	var userTypeStr string
+	userTypeStr = mapUserType[userType]
+	//fmt.Println(userType)
 	slicePer := strings.Split(permissionStr, ",")
 	var permissionSqlStr string
 	for _, v := range slicePer {
@@ -216,10 +347,13 @@ func HandleActivityLabelSpecialTripPermission(user *models.WxUserItem) (conditio
 	}
 	permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
 	condition = ` AND art.publish_status = 1  AND art.label != ''  AND art.is_offline = 0  `
-	if permissionSqlStr != "" {
+	if permissionSqlStr != "" && userType == 3 {
 		condition += ` AND art.chart_permission_name  IN (` + permissionSqlStr + `) `
 	}
-	condition += ` AND  art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
+	condition += ` AND  art.customer_type_ids LIKE '%` + userTypeStr + `%' `
+
+	//if userType != 2 {
+
 	return
 }
 
@@ -232,14 +366,15 @@ func GetActivitySpecialPrepareList(user *models.WxUserItem, startSize, pageSize
 	}
 	//如果是永续的就按照普通的权限逻辑来查,如果不是就按照升级的逻辑来查
 	var condition string
+	var conditionUser string
 	if companyDetail.Status == "永续" {
-		condition, e = HandleActivityLabelSpecialPermission(user)
+		conditionUser, e = HandleActivityLabelSpecialPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
 		}
 	} else {
-		condition, e = HandleActivityLabelSpecialTripPermission(user)
+		conditionUser, _, e = HandleActivityLabelSpecialTripPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
@@ -252,13 +387,46 @@ func GetActivitySpecialPrepareList(user *models.WxUserItem, startSize, pageSize
 		condition += ` AND art.research_theme LIKE ? `
 		pars = append(pars, keywords)
 	}
-	totalPrepare, e = models.GetActivitySpecialCount(condition, pars)
+
+	conditionShengji, conditionZhengshi, conditionHangYe, e := ActivityLabelSpecialUserSql(user)
+	if e != nil {
+		err = errors.New("ActivityLabelSpecialUserSql, Err: " + e.Error())
+		return
+	}
+	conditionNoTrip := condition
+	var conditionShengjiNoTrip string
+	var conditionZhengshiNoTrip string
+	var conditionHangYeNoTrip string
+	if conditionShengji != "" {
+		conditionShengjiNoTrip = ` OR ( ` + conditionShengji + conditionNoTrip + ` )`
+	}
+	if conditionZhengshi != "" {
+		conditionZhengshiNoTrip = ` OR ( ` + conditionZhengshi + conditionNoTrip + ` )`
+	}
+	//处理行业套餐权限查询
+	if conditionHangYe != "" {
+		conditionHangYeNoTrip = ` OR ( ` + conditionHangYe + conditionNoTrip + ` )`
+	}
+
+	if conditionShengji != "" {
+		conditionNoTrip += conditionShengjiNoTrip
+	}
+	if conditionZhengshi != "" {
+		conditionNoTrip += conditionZhengshiNoTrip
+	}
+	if conditionHangYe != "" {
+		conditionNoTrip += conditionHangYeNoTrip
+	}
+	conditionNoTripSql := conditionUser + conditionNoTrip
+	//condition += conditionUser + conditionOr
+	totalPrepare, e = models.GetActivitySpecialCount(conditionNoTripSql, pars)
 	if e != nil {
 		err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
 		return
 	}
-	condition += `  ORDER BY art.last_updated_time DESC `
-	list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
+
+	conditionNoTripSql += `  ORDER BY art.last_updated_time DESC `
+	list, e = models.GetCygxActivitySpecialDetailList(conditionNoTripSql, pars, user.UserId, startSize, pageSize)
 	if e != nil {
 		err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
 		return
@@ -271,7 +439,6 @@ func GetActivitySpecialPrepareList(user *models.WxUserItem, startSize, pageSize
 state 进行状态 1:未开始,2:进行中,3:已结束,4:未开始、进行中 不传默认查询全部items []*CygxActivitySpecialDetail
 */
 func GetActivityLabelSpecialConfirmList(user *models.WxUserItem, startSize, pageSize, state int, keywords string) (list []*models.CygxActivitySpecialDetail, totalConfirm int, err error) {
-	//var condition string
 	companyDetail, e := models.GetCompanyDetailByIdGroupTrip(user.CompanyId)
 	if e != nil && e.Error() != utils.ErrNoRow() {
 		err = errors.New("GetCompanyDetailByIdGroupTrip, Err: " + e.Error())
@@ -282,14 +449,16 @@ func GetActivityLabelSpecialConfirmList(user *models.WxUserItem, startSize, page
 	}
 	//如果是永续的就按照普通的权限逻辑来查,如果不是就按照升级的逻辑来查
 	var condition string
+	var conditionUser string
+	//var userType int
 	if companyDetail.Status == "永续" {
-		condition, e = HandleActivityLabelSpecialPermission(user)
+		conditionUser, e = HandleActivityLabelSpecialPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
 		}
 	} else {
-		condition, e = HandleActivityLabelSpecialTripPermission(user)
+		conditionUser, _, e = HandleActivityLabelSpecialTripPermission(user)
 		if e != nil {
 			err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
 			return
@@ -298,35 +467,68 @@ func GetActivityLabelSpecialConfirmList(user *models.WxUserItem, startSize, page
 	var pars []interface{}
 	condition += ` AND art.days >0  AND art.publish_status =1   AND art.is_offline = 0  `
 	if state == 1 {
-		condition += ` AND art.activity_time > ? `
-		pars = append(pars, time.Now())
+		condition += ` AND art.activity_time >  '` + time.Now().Format(utils.FormatDateTime) + `'`
 	}
 	if state == 2 {
-		condition += ` AND art.activity_time < ? `
-		pars = append(pars, time.Now())
-		condition += ` AND art.activity_time_end > ? `
-		pars = append(pars, time.Now())
+		condition += ` AND art.activity_time < '` + time.Now().Format(utils.FormatDateTime) + `'`
+		condition += ` AND art.activity_time_end > '` + time.Now().Format(utils.FormatDateTime) + `'`
 	}
 	if state == 3 {
-		condition += ` AND art.activity_time_end < ? `
-		pars = append(pars, time.Now())
+		condition += ` AND art.activity_time_end < '` + time.Now().Format(utils.FormatDateTime) + `'`
 	}
 	if state == 4 {
-		condition += ` AND art.activity_time_end > ? `
-		pars = append(pars, time.Now())
+		condition += ` AND art.activity_time_end > '` + time.Now().Format(utils.FormatDateTime) + `'`
 	}
 	if keywords != "" {
 		keywords = "%" + keywords + "%"
-		condition += ` AND art.research_theme LIKE ? `
-		pars = append(pars, keywords)
+		condition += ` AND art.research_theme LIKE  ` + keywords
+		//pars = append(pars, keywords)
+	}
+	conditionTrip := condition
+	conditionTripSql := condition
+
+	conditionShengji, conditionZhengshi, conditionHangYe, e := ActivityLabelSpecialUserSql(user)
+	if e != nil {
+		err = errors.New("ActivityLabelSpecialUserSql, Err: " + e.Error())
+		return
 	}
-	totalConfirm, e = models.GetActivitySpecialCount(condition, pars)
+	conditionTrip += ` AND art.days > 0   AND art.activity_time_end  > '` + time.Now().Format(utils.FormatDateTime) + ` '`
+
+	var conditionZhengshiTrip string
+	var conditionShengjiTrip string
+	var conditionHangYeTrip string
+
+	//处理专项调研确认行程的其它正式客户权限查询
+	if conditionZhengshi != "" {
+		conditionZhengshiTrip = ` OR ( ` + conditionZhengshi + conditionTrip + ` )`
+	}
+	//处理专项调研确认行程的升级权限查询
+	if conditionShengji != "" {
+		conditionShengjiTrip = ` OR ( ` + conditionShengji + conditionTrip + ` )`
+	}
+	//处理行业套餐客户权限查询
+	if conditionHangYe != "" {
+		conditionHangYeTrip = ` OR ( ` + conditionHangYe + conditionTrip + ` )`
+	}
+
+	if conditionZhengshi != "" {
+		conditionTrip += conditionZhengshiTrip
+	}
+	if conditionShengjiTrip != "" {
+		conditionTrip += conditionShengjiTrip
+	}
+	if conditionHangYeTrip != "" {
+		conditionTrip += conditionHangYeTrip
+	}
+	conditionTripSql += conditionUser + conditionTrip + `  ORDER BY art.activity_time ASC `
+
+	totalConfirm, e = models.GetActivitySpecialCount(conditionTripSql, pars)
 	if e != nil {
 		err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
 		return
 	}
 	condition += `  ORDER BY art.activity_time ASC `
-	list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
+	list, e = models.GetCygxActivitySpecialDetailList(conditionTripSql, pars, user.UserId, startSize, pageSize)
 	if e != nil {
 		err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
 		return
@@ -409,9 +611,9 @@ func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int,
 		err = errors.New("GetActivityLabelSpecialConfirmList11, Err: " + e.Error())
 		return
 	}
-	if totalConfirm == 0 {
-		return
-	}
+	//if totalConfirm == 0 {
+	//	return
+	//}
 	if currentIndex == 1 && len(listConfirm) > 0 {
 		listConfirm[0].Explain = utils.ACtIVITY_SPECIAL_TRIP_EXPLAIN
 	}
@@ -445,7 +647,6 @@ func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int,
 		}
 	}
 	total = totalConfirm + totalPrepare
-
 	//处理封面图片
 	detail, e := models.GetConfigByCode("city_img_url")
 	if e != nil {
@@ -699,29 +900,49 @@ func GetSpecialUserType(user *models.WxUserItem) (userType int, err error) {
 
 // GetSpecialDetailUserPower 处理用户查看专项调研详情的权限
 func GetSpecialDetailUserPower(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (havePower bool, err error) {
-	permissionStr, e := GetCompanyPermissionUpgrade(user.CompanyId)
+	if user.CompanyId == utils.HZ_COMPANY_ID {
+		havePower = true
+		return
+	}
+	userType, _, e := GetUserType(user.CompanyId)
 	if e != nil {
-		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		err = errors.New("GetSpecialUserType, Err: " + e.Error())
 		return
 	}
-	fmt.Println(permissionStr)
-	//如果没有对应的升级权限,则返回
-	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
+	if userType == 0 {
 		return
 	}
-	userType, e := GetSpecialUserType(user)
+	mapUserType, e := GetActivityCcustomerTypeList()
 	if e != nil {
-		err = errors.New("GetSpecialUserType, Err: " + e.Error())
+		err = e
 		return
 	}
-	if userType == 0 {
+	var userTypeStr string
+	userTypeStr = mapUserType[userType]
+	// 永续客户、大套餐客户可以查看行业升级套餐客户 权限
+	if userTypeStr == "1" || userTypeStr == "2" {
+		if strings.Contains(activityInfo.CustomerTypeIds, userTypeStr) || strings.Contains(activityInfo.CustomerTypeIds, "8") {
+			havePower = true
+			return
+		}
+	}
+
+	permissionStr, e := GetCompanyPermissionUpgrade(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	//如果没有对应的升级权限,则返回
+	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
 		return
 	}
+	//userType, e := GetSpecialUserType(user)
+
 	var pars []interface{}
 	var condition string
 	var userTypes string
 	condition += `  AND art.publish_status = 1 AND art.is_offline = 0   `
-	userTypes = "%" + strconv.Itoa(userType) + "%"
+	userTypes = "%" + userTypeStr + "%"
 	condition += ` AND art.customer_type_ids LIKE ? `
 	pars = append(pars, userTypes)
 
@@ -735,6 +956,12 @@ func GetSpecialDetailUserPower(user *models.WxUserItem, activityInfo *models.Cyg
 	}
 	if total == 1 {
 		havePower = true
+		return
+	}
+
+	if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, "8") {
+		havePower = true
+		return
 	}
 	return
 }

+ 27 - 18
services/activity_special_trip.go

@@ -51,14 +51,15 @@ func SpecialTripPopupMsg(activityInfo *models.CygxActivitySpecialDetail, user *m
 	return
 }
 
-//获取用户剩余报名次数
+// 获取用户剩余报名次数
 func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, tripRemaining int, err error) {
 
 	//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
 	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
-	var tripTota int
+	//var tripTota int
 	var airborneTota int
-	userType, _, e := GetActivitySpecialUserType(user.CompanyId)
+	//userType, _, e := GetActivitySpecialUserType(user.CompanyId)
+	userType, _, e := GetUserType(user.CompanyId)
 	if e != nil {
 		err = errors.New("获取客户身份信息失败 GetActivitySpecialUserType, Err: " + e.Error())
 		return
@@ -81,20 +82,25 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 			err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
-
-		condition += ` AND is_valid = 1 `
-
-		tripTota, e = models.GetActivitySpecialTripCountByActivitySpecial(condition, pars)
+		//condition += ` AND is_valid = 1 `
+		//查询当年的数据
+		condition += ` AND create_time >= ?  `
+		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
+		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
 		if e != nil {
 			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
-		tripTota += airborneTota
-		if tripTota >= 12 {
+		var TripBillNum int
+		for _, v := range listTripBill {
+			TripBillNum += v.BillDetailed
+		}
+		tripRemaining = 10 - airborneTota + TripBillNum
+		if tripRemaining <= 0 {
 			errMsg = msgTemplate
 			return
 		}
-		tripRemaining = 12 - tripTota
+		//tripRemaining = 12 - tripTota
 	} else {
 		var condition string
 		var pars []interface{}
@@ -110,25 +116,28 @@ func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *model
 			err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
-
-		condition += ` AND is_valid = 1 `
-
-		tripTota, e = models.GetActivitySpecialTripCountByActivitySpecial(condition, pars)
+		//查询当年的数据
+		condition += ` AND create_time >= ?  `
+		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
+		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
 		if e != nil {
 			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
-		tripTota += airborneTota
-		if tripTota >= 6 {
+		var TripBillNum int
+		for _, v := range listTripBill {
+			TripBillNum += v.BillDetailed
+		}
+		tripRemaining = 5 - airborneTota + TripBillNum
+		if tripRemaining <= 0 {
 			errMsg = msgTemplate
 			return
 		}
-		tripRemaining = 6 - tripTota
 	}
 	return
 }
 
-//用户搜专项调研操作操作行为,模板消息推送
+// 用户搜专项调研操作操作行为,模板消息推送
 func ActivitySpecialUserRmind(user *models.WxUserItem, activityId, TripStatus int) (err error) {
 	defer func() {
 		if err != nil {

+ 15 - 0
services/admin.go

@@ -15,3 +15,18 @@ func GetAdminMobileMap() (mapItem map[string]string, err error) {
 	mapItem = mapMobile
 	return
 }
+
+func GetActivityCcustomerTypeList() (mapItem map[int]string, err error) {
+	list, e := models.GetActivityCcustomerTypeList()
+	if e != nil {
+		err = e
+		return
+	}
+	mapUserType := make(map[int]string)
+	for _, v := range list {
+		mapUserType[v.CustomerTypeId] = v.PermissionValue
+	}
+	mapUserType[0] = "0"
+	mapItem = mapUserType
+	return
+}

+ 20 - 12
services/article.go

@@ -674,15 +674,16 @@ func GetArticleListByApi(cont context.Context) (err error) {
 	return
 }
 
-func init122() {
-	allList, err := models.GetArticleAll()
-
-	fmt.Println(err)
-	for _, v := range allList {
-		HandleArticleListByApi(v.ArticleId)
-	}
+//func init() {
+//allList, err := models.GetArticleAll()
+//
+//fmt.Println(err)
+//for _, v := range allList {
+//	HandleArticleListByApi(v.ArticleId)
+//}
+//HandleArticleListByApi(7930)
 
-}
+//}
 
 // 处理同步过来的文章
 func HandleArticleListByApi(artcleId int) (err error) {
@@ -1160,7 +1161,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 }
 
 //func init() {
-//	DoArticleOnenIdWxTemplateMsg(6940)
+//	DoArticleOnenIdWxTemplateMsg(8081)
 //}
 
 // 过滤策略平台报告,研选报告重复推送,以及权限勾选的推送
@@ -1191,6 +1192,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	articleInfo.Abstract, _ = GetReportContentTextSub(articleInfo.Abstract)
 	var chartPermissionId int
 
+	//固收的权限,暂时当策略的逻辑一样处理
 	var chartPermissionName string
 	reportMapDetail, err := models.GetdetailByCategoryIdPush(articleInfo.CategoryId)
 	if err != nil {
@@ -1198,6 +1200,8 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	}
 	if reportMapDetail.ChartPermissionId == utils.CE_LUE_ID {
 		chartPermissionId = utils.CE_LUE_ID
+	} else if reportMapDetail.ChartPermissionId == utils.GU_SHOU_ID {
+		chartPermissionId = utils.GU_SHOU_ID
 	} else {
 		if reportMapDetail.PermissionType == 1 {
 			chartPermissionName = reportMapDetail.ChartPermissionName + "(主观)"
@@ -1214,7 +1218,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	//文章关联的产业
 	var industryName string
 	var industrialManagementId string
-	if chartPermissionId == utils.CE_LUE_ID {
+	if chartPermissionId == utils.CE_LUE_ID || chartPermissionId == utils.GU_SHOU_ID {
 		industryName = reportMapDetail.SubCategoryName
 	} else {
 		detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
@@ -1298,6 +1302,9 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	slicepermissionId := strings.Split(strconv.Itoa(chartPermissionId), ",")
 	if len(slicepermissionId) > 0 {
 		for _, v := range slicepermissionId {
+			if v == strconv.Itoa(utils.GU_SHOU_ID) {
+				v = strconv.Itoa(utils.CE_LUE_ID)
+			}
 			permissionIdList = append(permissionIdList, v)
 		}
 		condition += ` AND p.chart_permission_id  IN (` + utils.GetOrmInReplace(len(slicepermissionId)) + ` )  `
@@ -1307,12 +1314,13 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	if err != nil {
 		return err
 	}
+	//return
 	for _, v := range openidPowerList {
 		mapOpenidPower[v.UserId] = v.OpenId
 	}
 	//获取关注这个文章对应产业的用户的 openid
 	mapOpenidFllow := make(map[int]string)
-	if chartPermissionId != utils.CE_LUE_ID {
+	if chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
 		openidFllowList, err := models.GetCygxUserFllowOpenid(articleId)
 		if err != nil {
 			return err
@@ -1359,7 +1367,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	keyword4 := articleInfo.Abstract
 	mapAlreadySend := make(map[int]int)
 	//如果是策略就按照策略的推送方式来写
-	if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME {
+	if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME || reportMapDetail.ChartPermissionName == utils.GU_SHOU_NAME {
 		//获取提交过推送规则的用户的 openid
 		mapUserFllowCeLue := make(map[int]string)
 		userFllowCeLueList, err := models.GetCygxUserFllowCeLueOpenid(articleInfo.CategoryId)

+ 83 - 4
services/company_permission.go

@@ -7,7 +7,7 @@ import (
 	"strings"
 )
 
-//GetCompanyPermission 获取公司对应的权限名称
+// GetCompanyPermission 获取公司对应的权限名称
 func GetCompanyPermission(companyId int) (permissionStr string, err error) {
 	permissionStr, err = models.GetCompanyPermission(companyId)
 	if err != nil {
@@ -18,7 +18,7 @@ func GetCompanyPermission(companyId int) (permissionStr string, err error) {
 	return
 }
 
-//GetCompanyPermissionUpgrade 获取公司对应的升级权限名称
+// GetCompanyPermissionUpgrade 获取公司对应的升级权限名称
 func GetCompanyPermissionUpgrade(companyId int) (permissionStr string, err error) {
 	permissionStr, err = models.GetCompanyPermissionByUserTrip(companyId)
 	if err != nil {
@@ -29,7 +29,7 @@ func GetCompanyPermissionUpgrade(companyId int) (permissionStr string, err error
 	return
 }
 
-//获取用户对应的权限申请状态
+// 获取用户对应的权限申请状态
 func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
 	//HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
 	uid := user.UserId
@@ -68,13 +68,36 @@ func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerNam
 					hasPermission = 5
 				}
 			}
+		} else {
+			sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetSellerByCompanyIdCheckFicc_Qy, Err: " + e.Error())
+				return
+			}
+			if sellerItemQy != nil {
+				hasPermission = 2
+				sellerMobile = sellerItemQy.Mobile
+				sellerName = sellerItemQy.RealName
+			} else {
+				//获取FICC销售信息
+				sellerItemFicc, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1)
+				if e != nil && e.Error() != utils.ErrNoRow() {
+					err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+					return
+				}
+				if sellerItemFicc != nil {
+					hasPermission = 3
+				} else {
+					hasPermission = 5
+				}
+			}
 		}
 	}
 	popupMsg = "需要升级行业套餐权限才可参与此活动,请联系对口销售"
 	return
 }
 
-//获取用户对应的权限申请状态 文章详情
+// 获取用户对应的权限申请状态 文章详情
 func GetUserHasPermissionArticle(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
 	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
 	uid := user.UserId
@@ -116,3 +139,59 @@ func GetUserHasPermissionArticle(user *models.WxUserItem) (hasPermission int, se
 	popupMsg = "需要升级行业套餐权限才可查看此报告,请联系对口销售"
 	return
 }
+
+// 获取用户对应的权限申请状态 活动详情
+func GetUserHasPermissionActivity(user *models.WxUserItem, activityInfo *models.ActivityDetail) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
+	//HasPermission     int    `description:"操作方式,1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请,5:有IFCC、无权益"`
+	uid := user.UserId
+	applyCount, e := models.GetApplyRecordCount(uid)
+	if e != nil {
+		err = errors.New("GetApplyRecordCount, Err: " + e.Error())
+		return
+	}
+	popupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
+	companyItem, err := models.GetCompanyDetailById(user.CompanyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			if applyCount > 0 {
+				hasPermission = 4
+			} else {
+				//获取FICC销售信息
+				sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1)
+				if e != nil && e.Error() != utils.ErrNoRow() {
+					err = e
+					return
+				}
+				if sellerItem != nil {
+					hasPermission = 5
+				} else {
+					hasPermission = 3
+				}
+			}
+			hasPermission = hasPermission
+			popupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限"
+			return
+		} else {
+			return
+		}
+	}
+	if companyItem.ProductId == 2 {
+		hasPermission = 2
+		sellerMobile = companyItem.Mobile
+		sellerName = companyItem.SellerName
+		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCompanyPermission, Err: " + e.Error())
+			return
+		}
+		if companyPermission == "专家" {
+			popupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
+
+		} else {
+			popupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile
+		}
+	} else {
+		hasPermission = 5
+	}
+	return
+}

+ 32 - 0
services/config.go

@@ -47,3 +47,35 @@ func GetIndustryUserFollowMap(user *models.WxUserItem) (itemMap map[int]bool, er
 	itemMap = follwMap
 	return
 }
+
+func init1231() {
+	var condition string
+	var pars []interface{}
+
+	condition += ` AND  t.id < 10000 	 `
+
+	list, err := models.GetCygxActivitySpecialTripListinit(condition, pars)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	for _, v := range list {
+		//流水记录表
+		itemBill := new(models.CygxActivitySpecialTripBill)
+		itemBill.UserId = v.UserId
+		itemBill.ActivityId = v.ActivityId
+		itemBill.CreateTime = v.CreateTime
+		itemBill.Mobile = v.Mobile
+		itemBill.Email = v.Email
+		itemBill.CompanyId = v.CompanyId
+		itemBill.CompanyName = v.CompanyName
+		itemBill.RealName = v.RealName
+		itemBill.Source = 1
+		itemBill.DoType = 1
+		itemBill.BillDetailed = -1 // 流水减一
+		itemBill.RegisterPlatform = 1
+		itemBill.ChartPermissionId = v.ChartPermissionId
+		go models.AddCygxActivitySpecialTripBill(itemBill)
+	}
+}

+ 300 - 1
services/elastic.go

@@ -901,6 +901,11 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 		keyWordArr = append(keyWordArr, keyWord)
 		keyWordLen = len(keyWordArr)
 	}
+	fmt.Println(keyWordArr)
+	//如果没有联想词,而且查询的还是联想词就返回
+	if ikType == 2 && keyWordLen == 1 {
+		return
+	}
 	//Es 的高级查询有 自定义排序 文档一时半会儿撸不懂,先做多次查询手动过滤 2023.2.2
 	//ikType 查询方式 ,0:查所有 、 1:查询键入词 、 2:查询除了查询键入词之外的联想词
 	mustMap := make([]interface{}, 0)
@@ -1045,6 +1050,11 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 			"order": "desc",
 		},
 	})
+	//sortMap = append(sortMap, map[string]interface{}{
+	//	"_score": map[string]interface{}{
+	//		"order": "desc",
+	//	},
+	//})
 	//高亮
 	highlightMap := make(map[string]interface{}, 0)
 	highlightMap = map[string]interface{}{
@@ -1110,9 +1120,286 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 				}
 				searchItem := new(models.SearchItem)
 				searchItem.ArticleId, _ = strconv.Atoi(v.Id)
+				if len(v.Highlight["Annotation"]) > 0 {
+					for _, vText := range v.Highlight["Annotation"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
+				if len(v.Highlight["Abstract"]) > 0 {
+					for _, vText := range v.Highlight["Abstract"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
 				if len(v.Highlight["BodyText"]) > 0 {
-					searchItem.Body = v.Highlight["BodyText"]
+					for _, vText := range v.Highlight["BodyText"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
+
+				if len(searchItem.Body) == 0 {
+					bodyRune := []rune(article.BodyText)
+					bodyRuneLen := len(bodyRune)
+					if bodyRuneLen > 100 {
+						bodyRuneLen = 100
+					}
+					body := string(bodyRune[:bodyRuneLen])
+					searchItem.Body = []string{body}
+				}
+
+				//if len(v.Highlight["BodyText"]) > 0 {
+				//	searchItem.Body = v.Highlight["BodyText"]
+				//} else {
+				//	bodyRune := []rune(article.BodyText)
+				//	bodyRuneLen := len(bodyRune)
+				//	if bodyRuneLen > 100 {
+				//		bodyRuneLen = 100
+				//	}
+				//	body := string(bodyRune[:bodyRuneLen])
+				//	searchItem.Body = []string{body}
+				//}
+				var title string
+				if len(v.Highlight["Title"]) > 0 {
+					title = v.Highlight["Title"][0]
 				} else {
+					title = article.Title
+				}
+				searchItem.Title = title
+				searchItem.PublishDate = article.PublishDate
+				searchItem.ExpertBackground = article.ExpertBackground
+				searchItem.CategoryId = article.CategoryId
+				for _, v_result := range result {
+					if v_result.ArticleId == searchItem.ArticleId {
+						isAppend = true
+					}
+				}
+				if !isAppend {
+					result = append(result, searchItem)
+				}
+			}
+		}
+		total = searchByMatch.Hits.TotalHits.Value
+	}
+	return
+}
+
+func EsArticleSearchBody(keyWord string, startSize, pageSize int, orderColumn string, searchType int) (result []*models.SearchItem, total int64, err error) {
+	if keyWord == "" {
+		return
+	}
+	indexName := utils.IndexName
+	client := utils.Client
+
+	//Es 的高级查询有 自定义排序 文档一时半会儿撸不懂,先做多次查询手动过滤 2023.2.2
+	//ikType 查询方式 ,0:查所有 、 1:查询键入词 、 2:查询除了查询键入词之外的联想词
+	mustMap := make([]interface{}, 0)
+	shouldMap := make(map[string]interface{}, 0)
+	shouldMapquery := make([]interface{}, 0)
+
+	mustNotMap := make([]interface{}, 0)
+	shouldNotMap := make(map[string]interface{}, 0)
+	shouldNotMapquery := make([]interface{}, 0)
+	// @Param   OrderColumn   query   int  true       "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
+	//keyWordWeight := GetWeight(keyWordLen)
+	var boost int
+
+	//如果是 2:查询标题,摘要,核心观点的词
+	if searchType == 1 {
+		shouldMapquery = append(shouldMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Title"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+		shouldMapquery = append(shouldMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Abstract"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+		shouldMapquery = append(shouldMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Annotation"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+	}
+
+	//如果是 2:查询body的相关词
+	if searchType == 2 {
+
+		shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Title"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+		shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Abstract"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+		shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"Annotation"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+
+		//shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+		//	"function_score": map[string]interface{}{
+		//		"query": map[string]interface{}{
+		//			"multi_match": map[string]interface{}{
+		//				//"boost":  (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
+		//				"boost":  boost, //给查询的值赋予权重
+		//				"fields": []interface{}{"BodyText"},
+		//				"query":  keyWord,
+		//			},
+		//		},
+		//	},
+		//})
+		shouldMapquery = append(shouldMapquery, map[string]interface{}{
+			"function_score": map[string]interface{}{
+				"query": map[string]interface{}{
+					"multi_match": map[string]interface{}{
+						//"boost":  (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
+						"boost":  boost, //给查询的值赋予权重
+						"fields": []interface{}{"BodyText"},
+						"query":  keyWord,
+					},
+				},
+			},
+		})
+	}
+
+	shouldMap = map[string]interface{}{
+		"should": shouldMapquery,
+	}
+
+	shouldNotMap = map[string]interface{}{
+		"should": shouldNotMapquery,
+	}
+	//排序
+	sortMap := make([]interface{}, 0)
+
+	//时间
+	sortMap = append(sortMap, map[string]interface{}{
+		"PublishDate": map[string]interface{}{
+			"order": "desc",
+		},
+	})
+	//高亮
+	highlightMap := make(map[string]interface{}, 0)
+	highlightMap = map[string]interface{}{
+		"fields": map[string]interface{}{
+			"BodyText":   map[string]interface{}{},
+			"Title":      map[string]interface{}{},
+			"Abstract":   map[string]interface{}{},
+			"Annotation": map[string]interface{}{},
+		},
+		//样式 红色
+		"post_tags": []interface{}{"</font>"},
+		"pre_tags":  []interface{}{"<font color='red'>"},
+	}
+
+	mustMap = append(mustMap, map[string]interface{}{
+		"bool": shouldMap,
+	})
+	mustNotMap = append(mustNotMap, map[string]interface{}{
+		"bool": shouldNotMap,
+	})
+
+	queryMap := map[string]interface{}{
+		"query": map[string]interface{}{
+			"bool": map[string]interface{}{
+				"must": mustMap,
+			},
+		},
+	}
+	//把第一次的筛选条件过滤掉
+	if searchType == 2 {
+		queryMap = map[string]interface{}{
+			"query": map[string]interface{}{
+				"bool": map[string]interface{}{
+					"must":     mustMap,
+					"must_not": mustNotMap,
+				},
+			},
+		}
+	}
+	if orderColumn == "Matching" {
+		queryMap["sort"] = sortMap
+	}
+	queryMap["from"] = startSize
+	queryMap["size"] = pageSize
+	queryMap["highlight"] = highlightMap
+	jsonBytes, _ := json.Marshal(queryMap)
+	fmt.Println(string(jsonBytes))
+	//utils.FileLog.Info(string(jsonBytes))
+	request := client.Search(indexName).Source(queryMap) // sets the JSON request
+	searchByMatch, err := request.Do(context.Background())
+	if searchByMatch != nil {
+		if searchByMatch.Hits != nil {
+			for _, v := range searchByMatch.Hits.Hits {
+				var isAppend bool
+				articleJson, err := v.Source.MarshalJSON()
+				if err != nil {
+					return nil, 0, err
+				}
+				article := new(models.CygxArticleEs)
+				err = json.Unmarshal(articleJson, &article)
+				if err != nil {
+					return nil, 0, err
+				}
+				searchItem := new(models.SearchItem)
+				searchItem.ArticleId, _ = strconv.Atoi(v.Id)
+				if len(v.Highlight["Annotation"]) > 0 {
+					for _, vText := range v.Highlight["Annotation"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
+				if len(v.Highlight["Abstract"]) > 0 {
+					for _, vText := range v.Highlight["Abstract"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
+				if len(v.Highlight["BodyText"]) > 0 {
+					for _, vText := range v.Highlight["BodyText"] {
+						searchItem.Body = append(searchItem.Body, vText)
+					}
+				}
+
+				if len(searchItem.Body) == 0 {
 					bodyRune := []rune(article.BodyText)
 					bodyRuneLen := len(bodyRune)
 					if bodyRuneLen > 100 {
@@ -1121,6 +1408,18 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 					body := string(bodyRune[:bodyRuneLen])
 					searchItem.Body = []string{body}
 				}
+
+				//if len(v.Highlight["BodyText"]) > 0 {
+				//	searchItem.Body = v.Highlight["BodyText"]
+				//} else {
+				//	bodyRune := []rune(article.BodyText)
+				//	bodyRuneLen := len(bodyRune)
+				//	if bodyRuneLen > 100 {
+				//		bodyRuneLen = 100
+				//	}
+				//	body := string(bodyRune[:bodyRuneLen])
+				//	searchItem.Body = []string{body}
+				//}
 				var title string
 				if len(v.Highlight["Title"]) > 0 {
 					title = v.Highlight["Title"][0]

+ 26 - 0
services/report_mapping.go

@@ -0,0 +1,26 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+)
+
+func GetReportMappingMap() (mapResp map[int]bool, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetReportMappingMap, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+	mapResp = make(map[int]bool, 0)
+	list, err := models.GetReportMappingByPermissionName(utils.CE_LUE_NAME)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			mapResp[v.CategoryId] = true
+		}
+	}
+	return
+
+}

+ 1 - 0
services/resource_data.go

@@ -198,6 +198,7 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 			} else {
 				v.TripStatus = 2
 				v.TripImgLink = v.TripImgLinkFix
+				v.ActivityTimeText = v.ActivityTimeTextByDay
 			}
 			resultTimeStart := utils.StrTimeToTime(v.ActivityTime)  //时间字符串格式转时间格式
 			resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式

+ 29 - 0
services/xzs_choose_category.go

@@ -0,0 +1,29 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+)
+
+func GetChooseCategoryMap(wxUser *models.WxUserItem) (mapResp map[int]bool, err error) {
+	if wxUser.Mobile == "" {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetChooseCategoryMap, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+	mapResp = make(map[int]bool, 0)
+	list, err := models.GetCygxXzsChooseCategoryList(wxUser.Mobile)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			mapResp[v.CategoryId] = true
+		}
+	}
+	return
+
+}

+ 13 - 13
services/yidong.go

@@ -12,7 +12,7 @@ import (
 	"time"
 )
 
-//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+// GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
 func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int) {
 	mapIndustrySwName := map[string]int{
 		"家用电器": utils.XIAO_FEI_ID,
@@ -69,7 +69,7 @@ func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int)
 	return
 }
 
-//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+// GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
 func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName string) {
 	mapIndustrySwName := map[string]string{
 		"家用电器": utils.XIAO_FEI_NAME,
@@ -126,7 +126,7 @@ func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName s
 	return
 }
 
-//获取易董token
+// 获取易董token
 func GetYiDongToken() (token string, err error) {
 	defer func() {
 		if err != nil {
@@ -177,7 +177,7 @@ func GetYiDongToken() (token string, err error) {
 	return
 }
 
-//获取易董活动列表
+// 获取易董活动列表
 func GetYiDongActivity(cont context.Context) (err error) {
 	//func GetYiDongActivity() (err error) {
 	defer func() {
@@ -257,11 +257,11 @@ func GetYiDongActivity(cont context.Context) (err error) {
 			item.YidongActivityId = v.ID
 			item.ActivityTypeId = 3
 			item.ActivityTypeName = "公司调研电话会"
-			sliceCompanyInfo := strings.Split(v.Title, "(")
-			sliceActivityTitle := strings.Split(v.Title, ")")
+			sliceCompanyInfo := strings.Split(v.CompanyInfo, "(")
+			sliceActivityTitle := strings.Split(v.CompanyInfo, ")")
 			companyInfo := sliceCompanyInfo[0]
 			if len(sliceActivityTitle) > 1 {
-				item.ActivityName = companyInfo + sliceActivityTitle[len(sliceActivityTitle)-1]
+				item.ActivityName = companyInfo + v.Title
 			} else {
 				item.ActivityName = v.Title
 			}
@@ -336,7 +336,7 @@ func GetYiDongActivity(cont context.Context) (err error) {
 	return
 }
 
-//获取易董活动详情
+// 获取易董活动详情
 func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetail, err error) {
 	defer func() {
 		if err != nil {
@@ -390,7 +390,7 @@ func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetai
 	return
 }
 
-//生成用户相关信息接口 获取用户tgc
+// 生成用户相关信息接口 获取用户tgc
 func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error) {
 	defer func() {
 		if err != nil {
@@ -441,7 +441,7 @@ func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error
 	return
 }
 
-//GetYiDongOriginalLink 将易懂的短连接转为长链接
+// GetYiDongOriginalLink 将易懂的短连接转为长链接
 func GetYiDongOriginalLink(item *models.ActivityDetail) (yidongLongLink string, err error) {
 	defer func() {
 		if err != nil {
@@ -504,7 +504,7 @@ func GetYiDongOriginalLink(item *models.ActivityDetail) (yidongLongLink string,
 	return
 }
 
-//处理易董这边过来的时间格式
+// 处理易董这边过来的时间格式
 func GetActivityTextTime(timeYidong string) (timeText string) {
 	strTime := timeYidong
 	startTime := utils.StrTimeToTime(strTime)
@@ -546,7 +546,7 @@ func init232() {
 	//fmt.Println(timeText)
 }
 
-//GetYiDongActivityMeeting获取易董到会详情
+// GetYiDongActivityMeeting获取易董到会详情
 func GetYiDongActivityMeeting(cont context.Context) (err error) {
 	var condition string
 
@@ -672,7 +672,7 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 	return
 }
 
-//YidongActivityGroup 添加活动与产业标的的关联
+// YidongActivityGroup 添加活动与产业标的的关联
 func YidongActivityGroup(subjectName string, activityId int) (err error) {
 	subjectList, err := models.GetCygxIndustrialSubjectList(subjectName)
 	if err != nil {

+ 3 - 0
utils/constants.go

@@ -13,6 +13,7 @@ const (
 	FormatDateTimeNoSecond = "2006-01-02 15:04"        //完整时间格式
 	FormatDateTimeUnSpace  = "20060102150405"          //完整时间格式
 	PageSize15             = 15                        //列表页每页数据量
+	FormatYearDate         = "2006"                    //日期格式
 	PageSize5              = 5
 	PageSize10             = 10
 	PageSize20             = 20
@@ -98,6 +99,8 @@ const (
 	HZ_COMPANY_ID                    int    = 16                                                                                                                                                                                                 // 弘则公司的ID
 	HONG_GUAN_NAME                   string = "宏观"
 	HONG_GUAN_ID                     int    = 1
+	GU_SHOU_NAME                     string = "固收"
+	GU_SHOU_ID                       int    = 100000   // 自定义权限类型ID ,十万起步
 	YAN_XUAN_ARTICLE_TYPE_IDS        string = "1,2,12" // 属于研选的报告类型ID
 	NO_YAN_XUAN_ARTICLE_TYPE_IDS     string = "13"     // 不属于研选的报告类型ID
 )

部分文件因文件數量過多而無法顯示