ziwen 1 year ago
parent
commit
893bf16e9a
3 changed files with 276 additions and 17 deletions
  1. 128 17
      controllers/home.go
  2. 17 0
      controllers/tag.go
  3. 131 0
      models/article.go

+ 128 - 17
controllers/home.go

@@ -682,8 +682,13 @@ func (this *HomeController) NewList() {
 		br.ErrMsg = "GetCountCompanyProductCompanyId,Err:" + err.Error()
 		return
 	}
-	var articleTypes, activityTypes, industries, subjectNames string
 
+	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 {
@@ -699,21 +704,102 @@ func (this *HomeController) NewList() {
 				br.ErrMsg = "GetCygxTagByTagId,Err:" + err.Error()
 				return
 			}
-			if tagInfo.ActivityTypes != "" {
-				activityTypes += tagInfo.ActivityTypes + ","
-			}
-			if tagInfo.ArticleTypes != "" {
-				articleTypes += tagInfo.ArticleTypes + ","
-			}
-			if tagInfo.Industries != "" {
-				industries += tagInfo.Industries + ","
-			}
-			if tagInfo.SubjectNames != "" {
-				subjectNames += tagInfo.SubjectNames + ","
+			// 只有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,",")
@@ -767,11 +853,36 @@ func (this *HomeController) NewList() {
 		subjectNamesCond += ` AND cis.subject_name In (`+ subjectNameStr +`) `
 	}
 
-	tagArticleIds, tagActivityIds, mmIds, err := models.GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, industryStr, subjectNameStr, articleTypeStr)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
-		return
+	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)

+ 17 - 0
controllers/tag.go

@@ -31,6 +31,23 @@ func (this *TagController) TagCustomizeList() {
 	}
 
 	var condition string
+
+	hasPermission, _, _, _, err := services.GetUserHasPermission(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 = "获取标签失败"

+ 131 - 0
models/article.go

@@ -823,3 +823,134 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 
 	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
+}