Browse Source

Merge branch 'cygx_10.8'

# Conflicts:
#	models/db.go
#	services/company_permission.go
ziwen 1 year ago
parent
commit
f0228592ea
10 changed files with 802 additions and 12 deletions
  1. 258 12
      controllers/home.go
  2. 99 0
      controllers/tag.go
  3. 201 0
      models/article.go
  4. 122 0
      models/cygx_tag.go
  5. 29 0
      models/cygx_tag_history.go
  6. 1 0
      models/db.go
  7. 18 0
      routers/commentsRouter.go
  8. 5 0
      routers/router.go
  9. 31 0
      services/company_permission.go
  10. 38 0
      services/tag.go

+ 258 - 12
controllers/home.go

@@ -639,6 +639,7 @@ func (this *HomeController) ListHomeArtAndChart() {
 
 // @Title 首页列表接口
 // @Description 首页列表接口
+// @Param   TagIds   query   string  true       "标签选择"
 // @Param   PageSize   query   int  true       "每页数据条数"
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Success 200 {object} models.HomeArtAndChartListResp
@@ -658,6 +659,7 @@ func (this *HomeController) NewList() {
 	}
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
+	tagIds := this.GetString("TagIds")
 
 	var startSize int
 	if pageSize <= 0 {
@@ -680,15 +682,218 @@ func (this *HomeController) NewList() {
 		br.ErrMsg = "GetCountCompanyProductCompanyId,Err:" + err.Error()
 		return
 	}
-	//condition += " AND source = 'article' "
+
+	var articleTypes, activityTypes, industries, subjectNames string
+	articleTypeCondSlice := make([]string,0)
+	activityTypesCondSlice := make([]string,0)
+	industriesCondSlice := make([]string,0)
+	subjectNamesSlice := make([]string,0)
+	articleTypeSlice := make([]string,0)
+	if tagIds != "" {
+		tags := strings.Split(tagIds, ",")
+		for _, tagIdStr := range tags {
+			tagId, err := strconv.Atoi(tagIdStr)
+			if err != nil {
+				br.Msg = "转换失败"
+				br.ErrMsg = "tagid转换失败,Err:" + err.Error()
+				return
+			}
+			tagInfo, err := models.GetCygxTagByTagId(tagId)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "GetCygxTagByTagId,Err:" + err.Error()
+				return
+			}
+			// 只有AB或CD的情况
+			if (tagInfo.ActivityTypes == "" && tagInfo.ArticleTypes == "") || (tagInfo.Industries == "" && tagInfo.SubjectNames == "") {
+				if tagInfo.ActivityTypes != "" {
+					activityTypes += tagInfo.ActivityTypes + ","
+				}
+				if tagInfo.ArticleTypes != "" {
+					articleTypes += tagInfo.ArticleTypes + ","
+				}
+				if tagInfo.Industries != "" {
+					industries += tagInfo.Industries + ","
+				}
+				if tagInfo.SubjectNames != "" {
+					subjectNames += tagInfo.SubjectNames + ","
+				}
+			} else {
+				// ABCD都有的情况
+				// 每一个tag都单独处理
+				var articleType, activityType, industry, subjectName string
+
+				if tagInfo.ActivityTypes != "" {
+					activityType = tagInfo.ActivityTypes
+				}
+				if tagInfo.ArticleTypes != "" {
+					articleType = tagInfo.ArticleTypes
+				}
+				if tagInfo.Industries != "" {
+					industry = tagInfo.Industries
+				}
+				if tagInfo.SubjectNames != "" {
+					subjectName = tagInfo.SubjectNames
+				}
+				articleTypeCond := ``
+				var articleTypeStr string
+				if articleType != "" {
+					articleTypeSlice := strings.Split(articleType, ",")
+					newArticleTypeSlice := make([]string,0)
+					for _, s := range articleTypeSlice {
+						newArticleTypeSlice = append(newArticleTypeSlice, "'"+ s + "'")
+					}
+					articleTypeStr = strings.Join(newArticleTypeSlice, ",")
+					articleTypeStr = strings.TrimRight(articleTypeStr,",")
+					articleTypeCond += ` AND (art.sub_category_name In (`+ articleTypeStr +`) OR (art.article_type_name In (`+ articleTypeStr +`) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
+				}
+				activityTypesCond := ``
+				if activityType != "" {
+					activityTypeSlice := strings.Split(activityType, ",")
+					newActivityTypeSlice := make([]string,0)
+					for _, s := range activityTypeSlice {
+						newActivityTypeSlice = append(newActivityTypeSlice, "'"+ s + "'")
+					}
+					activityTypeStr := strings.Join(newActivityTypeSlice, ",")
+					activityTypeStr = strings.TrimRight(activityTypeStr,",")
+					activityTypesCond += ` AND act.activity_type_name In (`+ activityTypeStr +`) `
+				}
+				industriesCond := ``
+				var industryStr string
+				if industry != "" {
+					industrieSlice := strings.Split(industry, ",")
+					newIndustrieSlice := make([]string,0)
+					for _, s := range industrieSlice {
+						newIndustrieSlice = append(newIndustrieSlice, "'"+ s + "'")
+					}
+					industryStr = strings.Join(newIndustrieSlice, ",")
+					industryStr = strings.TrimRight(industryStr, ",")
+					industriesCond += ` AND im.industry_name In (`+ industryStr +`) `
+				}
+				subjectNamesCond := ``
+				var subjectNameStr string
+				if subjectName != "" {
+					subjectNameSlice := strings.Split(subjectName, ",")
+					newSubjectNameSlice := make([]string,0)
+					for _, s := range subjectNameSlice {
+						newSubjectNameSlice = append(newSubjectNameSlice, "'"+ s + "'")
+					}
+					subjectNameStr = strings.Join(newSubjectNameSlice, ",")
+					subjectNameStr = strings.TrimRight(subjectNameStr, ",")
+					subjectNamesCond += ` AND cis.subject_name In (`+ subjectNameStr +`) `
+				}
+				articleTypeCondSlice = append(articleTypeCondSlice, articleTypeCond)
+				activityTypesCondSlice = append(activityTypesCondSlice, activityTypesCond)
+				industriesCondSlice = append(industriesCondSlice, industryStr)
+				subjectNamesSlice = append(subjectNamesSlice, subjectNameStr)
+				articleTypeSlice = append(articleTypeSlice, articleType)
+			}
+
+		}
+	}
+
+	// 先拿abdc都有的tag取合集的ids。。。
+	soloTagArticleIds, soloTagActivityIds, soloMmIds, err := models.GetCygxCygxArticleListByConditionSoloTag(articleTypeCondSlice, activityTypesCondSlice, industriesCondSlice, subjectNamesSlice, articleTypeSlice)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
+		return
+	}
+
+	articleTypes = strings.TrimRight(articleTypes,",")
+	activityTypes = strings.TrimRight(activityTypes,",")
+	industries = strings.TrimRight(industries,",")
+	subjectNames = strings.TrimRight(subjectNames,",")
+
+	articleTypesCond := ``
+	var articleTypeStr string
+	if articleTypes != "" {
+		articleTypeSlice := strings.Split(articleTypes, ",")
+		newArticleTypeSlice := make([]string,0)
+		for _, s := range articleTypeSlice {
+			newArticleTypeSlice = append(newArticleTypeSlice, "'"+ s + "'")
+		}
+		articleTypeStr = strings.Join(newArticleTypeSlice, ",")
+		articleTypeStr = strings.TrimRight(articleTypeStr,",")
+		articleTypesCond += ` AND (art.sub_category_name In (`+ articleTypeStr +`) OR (art.article_type_name In (`+ articleTypeStr +`) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
+	}
+	activityTypesCond := ``
+	if activityTypes != "" {
+		activityTypeSlice := strings.Split(activityTypes, ",")
+		newActivityTypeSlice := make([]string,0)
+		for _, s := range activityTypeSlice {
+			newActivityTypeSlice = append(newActivityTypeSlice, "'"+ s + "'")
+		}
+		activityTypeStr := strings.Join(newActivityTypeSlice, ",")
+		activityTypeStr = strings.TrimRight(activityTypeStr,",")
+		activityTypesCond += ` AND act.activity_type_name In (`+ activityTypeStr +`) `
+	}
+	industriesCond := ``
+	var industryStr string
+	if industries != "" {
+		industrieSlice := strings.Split(industries, ",")
+		newIndustrieSlice := make([]string,0)
+		for _, s := range industrieSlice {
+			newIndustrieSlice = append(newIndustrieSlice, "'"+ s + "'")
+		}
+		industryStr = strings.Join(newIndustrieSlice, ",")
+		industryStr = strings.TrimRight(industryStr, ",")
+		industriesCond += ` AND im.industry_name In (`+ industryStr +`) `
+	}
+	subjectNamesCond := ``
+	var subjectNameStr string
+	if subjectNames != "" {
+		subjectNameSlice := strings.Split(subjectNames, ",")
+		newSubjectNameSlice := make([]string,0)
+		for _, s := range subjectNameSlice {
+			newSubjectNameSlice = append(newSubjectNameSlice, "'"+ s + "'")
+		}
+		subjectNameStr = strings.Join(newSubjectNameSlice, ",")
+		subjectNameStr = strings.TrimRight(subjectNameStr, ",")
+		subjectNamesCond += ` AND cis.subject_name In (`+ subjectNameStr +`) `
+	}
+
+	var tagArticleIds,tagActivityIds, mmIds string
+	if articleTypesCond != "" || activityTypesCond != "" || industryStr != "" || subjectNameStr != ""{
+		tagArticleIds, tagActivityIds, mmIds, err = models.GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, industryStr, subjectNameStr, articleTypeStr)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取单个标签ids失败,Err:" + err.Error()
+			return
+		}
+	}
+
+	if soloTagArticleIds != "" {
+		if tagArticleIds != "" {
+			tagArticleIds += "," + soloTagArticleIds
+		} else {
+			tagArticleIds = soloTagArticleIds
+		}
+	}
+	if soloTagActivityIds != "" {
+		if tagActivityIds != "" {
+			tagActivityIds += "," + soloTagActivityIds
+		} else {
+			tagActivityIds = soloTagActivityIds
+		}
+	}
+	if soloMmIds != "" {
+		if mmIds != "" {
+			mmIds += "," + soloMmIds
+		} else {
+			mmIds = soloMmIds
+		}
+	}
+
+	//fmt.Println("condition:",condition)
+
 	//查询近一个月的数据
 	conditionInit = " AND publish_date  >   '" + time.Now().AddDate(0, 0, -30).Format(utils.FormatDateTime) + "'"
+	//conditionInit += `  AND source IN ('newchart')`
 	if user.CompanyId <= 1 || totalRai == 0 {
-		condition += " AND source IN ('roadshow','article','activityvideo','activityvoice') " + conditionInit
-		if user.Mobile == "" && user.Email == "" {
-			startSize = 0
-			pageSize = 4
-		}
+		condition += " AND source IN ('roadshow','article') "
+		startSize = 0
+		pageSize = 4
 	} else {
 		condition += ` AND source NOT IN ('activity','activityspecial','newchart') ` + conditionInit
 		conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "1,2,3", "", 0, 0, "", 0, 1)
@@ -701,7 +906,11 @@ func (this *HomeController) NewList() {
 		var conditionOrder string
 		conditionOrder = ` ORDER BY art.activity_time DESC ,  art.active_state ASC   `
 		conditionActivity += conditionOrder
-		listActivity, err := models.GetActivityListHomeNew(conditionActivity, 0, 200)
+		actPageSize := 200
+		if tagIds != "" {
+			actPageSize = 2000
+		}
+		listActivity, err := models.GetActivityListHomeNew(conditionActivity, 0, actPageSize)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取可见活动数据失败,Err:" + err.Error()
@@ -713,10 +922,7 @@ func (this *HomeController) NewList() {
 			activityIds = append(activityIds, v.ActivityId)
 		}
 		lenActivityIds := len(activityIds)
-		if lenActivityIds > 0 {
-			condition += ` OR ( source = 'activity' AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) ` + conditionInit + ` )    `
-			pars = append(pars, activityIds)
-		}
+
 
 		listActivitySpecial, _, err := services.GetActivitySpecialList(user, 1, 200, "")
 		if err != nil {
@@ -730,11 +936,51 @@ func (this *HomeController) NewList() {
 			activityspecialIds = append(activityspecialIds, v.ActivityId)
 		}
 		lenActivityspecialIds := len(activityspecialIds)
-		if lenActivityspecialIds > 0 {
+
+
+		if tagIds != "" {
+			if tagArticleIds != "" {
+				condition = ` AND ((source = 'article' AND source_id IN (` + tagArticleIds + `) ) `
+				if mmIds != "" {
+					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+				}
+				if tagActivityIds != "" && lenActivityIds > 0 {
+					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) )) `
+					pars = append(pars, activityIds)
+				} else {
+					// 无可见活动
+					condition += ` OR (source = 'activity' AND source_id IN (0))) `
+				}
+			} else if tagActivityIds != "" {
+				condition = ` AND ((source = 'article' AND source_id IN (0))  `
+				if mmIds != "" {
+					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+				}
+				if tagActivityIds != "" && lenActivityIds > 0 {
+					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `))) `
+					pars = append(pars, activityIds)
+				} else {
+					// 无可见活动
+					condition += ` OR (source = 'activity' AND source_id IN (0))) `
+				}
+			} else if mmIds != "" {
+				condition = ` AND ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+			} else {
+				condition += ` AND ((source = 'article' AND source_id IN (0)) OR (source = 'activity' AND source_id IN (0))) `
+			}
+		}
+
+		if lenActivityIds > 0 && tagIds == "" {
+			condition += ` OR ( source = 'activity' AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) ` + conditionInit + ` )    `
+			pars = append(pars, activityIds)
+		}
+
+		if lenActivityspecialIds > 0  && tagIds == "" {
 			condition += ` OR ( source = 'activityspecial' AND source_id IN (` + utils.GetOrmInReplace(lenActivityspecialIds) + `) ` + conditionInit + ` )   `
 			pars = append(pars, activityspecialIds)
 		}
 	}
+	//fmt.Println("condition:",condition)
 	total, err := models.GetResourceDataCount(condition, pars)
 	if err != nil {
 		br.Msg = "获取失败"

+ 99 - 0
controllers/tag.go

@@ -0,0 +1,99 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+)
+
+type TagController struct {
+	BaseAuthController
+}
+
+
+// @Title 获取标签列表-自定义顺序
+// @Description 获取标签列表-自定义顺序接口
+// @Success 200 {object} cygx.ChartPermissionResp
+// @router /list/custom [get]
+func (this *TagController) TagCustomizeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.User
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var condition string
+
+	hasPermission, err := services.GetUserHasPermissionSimple(sysUser)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+		return
+	}
+	if hasPermission > 1 {
+		list := make([]*models.CygxTagList, 0)
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = list
+		return
+	}
+
+
+	list, err := models.GetCygxTagList(condition)
+	if err != nil {
+		br.Msg = "获取标签失败"
+		br.ErrMsg = "获取标签信息失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
+// @Title 记录点击信息
+// @Description 记录点击信息
+// @Param	request	body cygx.CygxTagIdReq true "type json string"
+// @Success 200 Ret=200 发布成功
+// @router /add/history [post]
+func (this *TagController) History() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.CygxTagIdReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	tagId := req.TagId
+	if tagId == 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,id不可为空"
+		return
+	}
+	go services.AddCygxTagHistory(user, tagId)
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}

+ 201 - 0
models/article.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"strings"
 	"time"
 )
 
@@ -753,3 +754,203 @@ func GetCygxArticleCount(condition string, pars []interface{}) (count int, err e
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
+
+// 列表
+func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, industryStr, subjectNameStr, articleTypeStr string) (artIds, actIds, mmIds string, err error) {
+	o := orm.NewOrm()
+	artSql := `SELECT GROUP_CONCAT(DISTINCT art.article_id SEPARATOR ',') AS art_ids FROM cygx_article as art `
+
+	actSql := ` SELECT GROUP_CONCAT(DISTINCT act.activity_id SEPARATOR ',') AS act_ids FROM cygx_activity as act `
+
+	mmSql := ` SELECT GROUP_CONCAT(DISTINCT mmc.id SEPARATOR ',') AS mm_ids FROM cygx_morning_meeting_review_chapter as mmc `
+
+	if industryStr != "" {
+		artSql += ` INNER JOIN cygx_industrial_article_group_management  AS iam ON iam.article_id = art.article_id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=iam.industrial_management_id  `
+		actSql += ` INNER JOIN cygx_industrial_activity_group_management  AS iam ON iam.activity_id = act.activity_id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=iam.industrial_management_id  `
+		mmSql += ` INNER JOIN cygx_morning_meeting_reviews  AS mm ON mmc.meeting_id = mm.id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=mmc.industry_id  `
+	}
+	if subjectNameStr != "" {
+		artSql += ` INNER JOIN cygx_industrial_article_group_subject  AS ias ON ias.article_id = art.article_id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=ias.industrial_subject_id  `
+		actSql += ` INNER JOIN cygx_industrial_activity_group_subject  AS ias ON ias.activity_id = act.activity_id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=ias.industrial_subject_id  `
+		mmSql += ` IINNER JOIN cygx_morning_meeting_reviews  AS mm ON mmc.meeting_id = mm.id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=mmc.industrial_subject_ids  `
+	}
+	artSql += ` WHERE 1=1 `
+	if articleTypesCond != "" || (articleTypesCond == "" && activityTypesCond == "") {
+		if industryStr != "" && subjectNameStr != "" {
+			artSql += articleTypesCond + ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+		} else if industryStr == "" && subjectNameStr != "" {
+			artSql += articleTypesCond + ` AND  cis.subject_name In (` + subjectNameStr + `) `
+		} else if industryStr != "" && subjectNameStr == "" {
+			artSql += articleTypesCond + ` AND im.industry_name In (` + industryStr + `) `
+		} else {
+			artSql += articleTypesCond
+		}
+		err = o.Raw(artSql).QueryRow(&artIds)
+	}
+
+
+	actSql += ` WHERE 1=1 `
+	if activityTypesCond != "" || (articleTypesCond == "" && activityTypesCond == "") {
+		if industryStr != "" && subjectNameStr != "" {
+			actSql += activityTypesCond + ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+		} else if industryStr == "" && subjectNameStr != "" {
+			actSql += activityTypesCond + ` AND  cis.subject_name In (` + subjectNameStr + `) `
+		} else if industryStr != "" && subjectNameStr == "" {
+			actSql += activityTypesCond + ` AND im.industry_name In (` + industryStr + `) `
+		} else {
+			actSql += activityTypesCond
+		}
+		err = o.Raw(actSql).QueryRow(&actIds)
+	}
+
+	if strings.Contains(articleTypeStr, "晨会精华") {
+		mmSql += ` WHERE 1=1 `
+		if industryStr != "" && subjectNameStr != "" {
+			mmSql +=  ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+		} else if industryStr == "" && subjectNameStr != "" {
+			mmSql += ` AND  cis.subject_name In (` + subjectNameStr + `) `
+		} else if industryStr != "" && subjectNameStr == "" {
+			mmSql += ` AND im.industry_name In (` + industryStr + `) `
+		}
+		err = o.Raw(mmSql).QueryRow(&mmIds)
+	}
+
+	return
+}
+
+
+
+// 单个tag时用,取合集
+func GetCygxCygxArticleListByConditionSoloTag(articleTypeCondSlice, activityTypesCondSlice, industriesCondSlice, subjectNamesSlice, articleTypeSlice []string) (artIds, actIds, mmIds string, err error) {
+	o := orm.NewOrm()
+	artSql := `SELECT GROUP_CONCAT(DISTINCT art.article_id SEPARATOR ',') AS art_ids FROM cygx_article as art `
+
+	actSql := ` SELECT GROUP_CONCAT(DISTINCT act.activity_id SEPARATOR ',') AS act_ids FROM cygx_activity as act `
+
+	mmSql := ` SELECT GROUP_CONCAT(DISTINCT mmc.id SEPARATOR ',') AS mm_ids FROM cygx_morning_meeting_review_chapter as mmc `
+
+	for _, s := range industriesCondSlice {
+		if s != ""{
+			artSql += ` INNER JOIN cygx_industrial_article_group_management  AS iam ON iam.article_id = art.article_id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=iam.industrial_management_id  `
+			actSql += ` INNER JOIN cygx_industrial_activity_group_management  AS iam ON iam.activity_id = act.activity_id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=iam.industrial_management_id  `
+			mmSql += ` INNER JOIN cygx_morning_meeting_reviews  AS mm ON mmc.meeting_id = mm.id 
+				INNER JOIN cygx_industrial_management AS im ON im.industrial_management_id=mmc.industry_id  `
+
+			break
+		}
+	}
+	for _, s := range subjectNamesSlice {
+		if s != ""{
+			artSql += ` INNER JOIN cygx_industrial_article_group_subject  AS ias ON ias.article_id = art.article_id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=ias.industrial_subject_id  `
+			actSql += ` INNER JOIN cygx_industrial_activity_group_subject  AS ias ON ias.activity_id = act.activity_id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=ias.industrial_subject_id  `
+			mmSql += ` IINNER JOIN cygx_morning_meeting_reviews  AS mm ON mmc.meeting_id = mm.id 
+				INNER JOIN cygx_industrial_subject AS cis ON cis.industrial_subject_id=mmc.industrial_subject_ids  `
+
+			break
+		}
+	}
+	artSql += ` WHERE 1=1 AND ((1=1 `
+	actSql += ` WHERE 1=1 AND ((1=1 `
+	mmSql += ` WHERE 1=1 AND ((1=1 `
+	var isNeedArt, isNeedAct, isNeedMm bool
+	for i, _ := range articleTypeCondSlice {
+		articleTypesCond := articleTypeCondSlice[i]
+		activityTypesCond := activityTypesCondSlice[i]
+		industryStr := industriesCondSlice[i]
+		subjectNameStr := subjectNamesSlice[i]
+		articleTypeStr := articleTypeSlice[i]
+
+
+		if articleTypesCond != "" || (articleTypesCond == "" && activityTypesCond == "") {
+			if industryStr != "" && subjectNameStr != "" {
+				artSql += articleTypesCond + ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+			} else if industryStr == "" && subjectNameStr != "" {
+				artSql += articleTypesCond + ` AND  cis.subject_name In (` + subjectNameStr + `) `
+			} else if industryStr != "" && subjectNameStr == "" {
+				artSql += articleTypesCond + ` AND im.industry_name In (` + industryStr + `) `
+			} else {
+				artSql += articleTypesCond
+			}
+
+			if i == len(articleTypeCondSlice) -1 {
+				artSql += `)) `
+			} else {
+				artSql += `) OR (1=1 `
+			}
+
+			isNeedArt = true
+		}
+
+
+
+		if activityTypesCond != "" || (articleTypesCond == "" && activityTypesCond == "") {
+			if industryStr != "" && subjectNameStr != "" {
+				actSql += activityTypesCond + ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+			} else if industryStr == "" && subjectNameStr != "" {
+				actSql += activityTypesCond + ` AND  cis.subject_name In (` + subjectNameStr + `) `
+			} else if industryStr != "" && subjectNameStr == "" {
+				actSql += activityTypesCond + ` AND im.industry_name In (` + industryStr + `) `
+			} else {
+				actSql += activityTypesCond
+			}
+
+			if i == len(articleTypeCondSlice) -1 {
+				actSql += `)) `
+			} else {
+				actSql += `) OR (1=1 `
+			}
+
+			isNeedAct = true
+		}
+
+		if strings.Contains(articleTypeStr, "晨会精华") {
+			if industryStr != "" && subjectNameStr != "" {
+				mmSql +=  ` AND (im.industry_name In (` + industryStr + `) OR cis.subject_name In (` + subjectNameStr + `) )`
+			} else if industryStr == "" && subjectNameStr != "" {
+				mmSql += ` AND  cis.subject_name In (` + subjectNameStr + `) `
+			} else if industryStr != "" && subjectNameStr == "" {
+				mmSql += ` AND im.industry_name In (` + industryStr + `) `
+			}
+
+			if i == len(articleTypeCondSlice) -1 {
+				mmSql += `)) `
+			} else {
+				mmSql += `) OR (1=1 `
+			}
+
+			isNeedMm = true
+		}
+	}
+
+	if isNeedArt {
+		err = o.Raw(artSql).QueryRow(&artIds)
+		if err != nil{
+			return
+		}
+	}
+	if isNeedAct{
+		err = o.Raw(actSql).QueryRow(&actIds)
+		if err != nil{
+			return
+		}
+	}
+	if isNeedMm {
+		err = o.Raw(mmSql).QueryRow(&mmIds)
+		if err != nil{
+			return
+		}
+	}
+
+
+	return
+}

+ 122 - 0
models/cygx_tag.go

@@ -0,0 +1,122 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxTag struct {
+	TagId         int64     `orm:"column(tag_id);pk"`
+	TagName       string    `orm:"column(tag_name);NOT NULL"`       // 标签名
+	ArticleTypes  string    `orm:"column(article_types);NOT NULL"`  // 报告系列
+	ActivityTypes string    `orm:"column(activity_types);NOT NULL"` // 活动类型
+	Industries    string    `orm:"column(industries);NOT NULL"`     // 产业
+	SubjectNames  string    `orm:"column(subject_names);NOT NULL"`  // 标的
+	Sort          int       `orm:"column(sort);"`                   // 优先级
+	ModifyTime    time.Time `orm:"column(modify_time)"`             // 修改时间
+	CreateTime    time.Time `orm:"column(create_time)"`             // 创建时间
+	OnlineTime    time.Time `orm:"column(online_time)"`             // 上线时间
+	OfflineTime   time.Time `orm:"column(offline_time)"`            // 下线时间
+	Status        int       `orm:"column(status);NOT NULL"`         // 状态:0-禁用 1-启用
+}
+
+// 添加标签
+func AddCygxTag(item *CygxTag) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(item)
+	return
+}
+
+func (m *CygxTag) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(m, cols...)
+	return
+}
+
+type CygxTagList struct {
+	TagId         int64  `orm:"column(tag_id);pk"`
+	TagName       string `orm:"column(tag_name);NOT NULL"`       // 标签名
+	ArticleTypes  string `orm:"column(article_types);NOT NULL"`  // 报告系列
+	ActivityTypes string `orm:"column(activity_types);NOT NULL"` // 活动类型
+	Industries    string `orm:"column(industries);NOT NULL"`     // 产业
+	SubjectNames  string `orm:"column(subject_names);NOT NULL"`  // 标的
+	Sort          int    `orm:"column(sort);"`                   // 优先级
+	ModifyTime    string `orm:"column(modify_time)"`             // 修改时间
+	CreateTime    string `orm:"column(create_time)"`             // 创建时间
+	OnlineTime    string `orm:"column(online_time)"`             // 上线时间
+	OfflineTime   string `orm:"column(offline_time)"`            // 下线时间
+	Status        int    `orm:"column(status);NOT NULL"`         // 状态:0-禁用 1-启用
+}
+
+
+// 获取tag列表
+func GetCygxTagList(cond string) (items []*CygxTagList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_tag  WHERE 1=1 AND status = 1 `
+	if cond != "" {
+		sql += cond
+	} else {
+		sql += `  ORDER BY sort ASC `
+	}
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateCygxTagStatus(id, status int) (err error) {
+	o := orm.NewOrm()
+	sql := ``
+	if status == 1 {
+		sql = ` UPDATE  cygx_tag
+			SET
+			  status =1,
+			  online_time = NOW(),
+			  modify_time = NOW() 
+			WHERE tag_id = ?`
+	} else {
+		sql = ` UPDATE  cygx_tag
+			SET
+			  status =0,
+			  offline_time = NOW(),
+			  modify_time = NOW() 
+			WHERE tag_id = ?`
+	}
+
+	_, err = o.Raw(sql, id).Exec()
+	return
+}
+
+// GetCygxTagByTagId 根据指标id获取指标信息
+func GetCygxTagByTagId(tagId int) (item *CygxTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_tag WHERE tag_id=? `
+	err = o.Raw(sql, tagId).QueryRow(&item)
+	return
+}
+
+// GetCygxTagMinSort 获取最小不等于0的排序
+func GetCygxTagMinSort() (sort int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT min(sort) FROM cygx_tag WHERE  sort <> 0 `
+	err = o.Raw(sql).QueryRow(&sort)
+	return
+}
+
+// MoveDownCygxTagBySort 往下移动
+func MoveDownCygxTagBySort(prevSort, currentSort int) (err error) {
+	o := orm.NewOrm()
+	sql := `update cygx_tag set sort = sort - 1 where sort <= ? and sort> ? `
+	_, err = o.Raw(sql, prevSort, currentSort).Exec()
+	return
+}
+
+// MoveUpCygxTagBySort 往下移动
+func MoveUpCygxTagBySort(prevSort, currentSort int) (err error) {
+	o := orm.NewOrm()
+	sql := `update cygx_tag set sort = sort + 1 where sort >= ? and sort< ? `
+	_, err = o.Raw(sql, prevSort, currentSort).Exec()
+	return
+}
+
+type CygxTagIdReq struct {
+	TagId int `description:"TagId"`
+}

+ 29 - 0
models/cygx_tag_history.go

@@ -0,0 +1,29 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxTagHistory struct {
+	Id               int `orm:"column(id);pk"`
+	TagId         int `description:"TagId等于0新增,大于零修改"`
+	UserId           int
+	CreateTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	ModifyTime       time.Time `description:"修改时间"`
+	RealName         string    `description:"用户实际名称"`
+	SellerName       string    `description:"所属销售"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
+}
+
+// 添加历史信息
+func AddCygxTagHistory(item *CygxTagHistory) (lastId int64, err error) {
+	o := orm.NewOrm()
+	item.ModifyTime = time.Now()
+	lastId, err = o.Insert(item)
+	return
+}

+ 1 - 0
models/db.go

@@ -154,6 +154,7 @@ func init() {
 		new(CygxInviteCompany),
 		new(CygxActivityPointsBill),
 		new(CygxActivityPointsCompany),
+		new(CygxTagHistory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 18 - 0
routers/commentsRouter.go

@@ -1303,6 +1303,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:TagController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:TagController"],
+        beego.ControllerComments{
+            Method: "History",
+            Router: `/add/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:TagController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:TagController"],
+        beego.ControllerComments{
+            Method: "TagCustomizeList",
+            Router: `/list/custom`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserCommonController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserCommonController"],
         beego.ControllerComments{
             Method: "LoginPublic",

+ 5 - 0
routers/router.go

@@ -159,6 +159,11 @@ func init() {
 				&controllers.BannerController{},
 			),
 		),
+		web.NSNamespace("/tag",
+			web.NSInclude(
+				&controllers.TagController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 31 - 0
services/company_permission.go

@@ -250,3 +250,34 @@ func GetSellNameMapByCompanyIds(companyIds []int) (respMap map[int]string) {
 	}
 	return
 }
+
+
+//获取用户对应的权限简单版
+func GetUserHasPermissionSimple(user *models.WxUserItem) (hasPermission int, err error) {
+	//HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下(ficc),3:无该品类权限,已提交过申请,4:无该品类权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	uid := user.UserId
+	applyCount, e := models.GetApplyRecordCount(uid)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	if user.CompanyId <= 1 {
+		if applyCount == 0 {
+			hasPermission = 5
+		} else {
+			hasPermission = 6
+		}
+	} else {
+		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
+		if e != nil {
+			err = errors.New("GetCompanyPermission, Err: " + e.Error())
+			return
+		}
+		if companyPermission != "" {
+			hasPermission = 1
+		} else {
+			hasPermission = 3
+		}
+	}
+	return
+}

+ 38 - 0
services/tag.go

@@ -0,0 +1,38 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"time"
+)
+
+func AddCygxTagHistory(user *models.WxUserItem, tagId int) (err error) {
+	if user.UserId == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("tag点击信息记录失败"+err.Error()+"tagId"+strconv.Itoa(tagId)+"userId:"+strconv.Itoa(user.UserId), 2)
+		}
+	}()
+	historyRecord := new(models.CygxTagHistory)
+	historyRecord.UserId = user.UserId
+	historyRecord.TagId = tagId
+	historyRecord.CreateTime = time.Now()
+	historyRecord.Mobile = user.Mobile
+	historyRecord.Email = user.Email
+	historyRecord.CompanyId = user.CompanyId
+	historyRecord.CompanyName = user.CompanyName
+	historyRecord.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	historyRecord.RealName = user.RealName
+	if sellerItem != nil {
+		historyRecord.SellerName = sellerItem.RealName
+	}
+	_, err = models.AddCygxTagHistory(historyRecord)
+	return
+}