ziwen 1 ano atrás
pai
commit
a212b82c4a
2 arquivos alterados com 271 adições e 23 exclusões
  1. 129 20
      controllers/home.go
  2. 142 3
      models/article.go

+ 129 - 20
controllers/home.go

@@ -285,7 +285,11 @@ func (this *MobileHomeController) NewList() {
 	resp := new(models.HomeResourceDataListNewResp)
 
 	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 {
@@ -301,21 +305,102 @@ func (this *MobileHomeController) 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,",")
@@ -369,14 +454,38 @@ func (this *MobileHomeController) 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
+		}
 	}
 
-	//fmt.Println("condition:",condition)
+	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) + "'"
@@ -433,7 +542,7 @@ func (this *MobileHomeController) NewList() {
 			if tagArticleIds != "" {
 				condition = ` AND ((source = 'article' AND source_id IN (` + tagArticleIds + `) ) `
 				if mmIds != "" {
-					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + 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) + `) )) `
@@ -445,7 +554,7 @@ func (this *MobileHomeController) NewList() {
 			} else if tagActivityIds != "" {
 				condition = ` AND ((source = 'article' AND source_id IN (0))  `
 				if mmIds != "" {
-					condition = ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + 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) + `))) `

+ 142 - 3
models/article.go

@@ -334,14 +334,14 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 
 	actSql := ` SELECT GROUP_CONCAT(DISTINCT act.activity_id SEPARATOR ',') AS act_ids FROM cygx_activity as act `
 
-	mmSql := ` SELECT GROUP_CONCAT(DISTINCT mm.id SEPARATOR ',') AS mm_ids FROM cygx_morning_meeting_reviews as mm `
+	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_review_chapter  AS mmc ON mmc.meeting_id = mm.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 != "" {
@@ -349,7 +349,7 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 				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 += ` INNER JOIN cygx_morning_meeting_review_chapter  AS mmc ON mmc.meeting_id = mm.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 `
@@ -364,6 +364,9 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 			artSql += articleTypesCond
 		}
 		err = o.Raw(artSql).QueryRow(&artIds)
+		if err != nil{
+			return
+		}
 	}
 
 
@@ -379,6 +382,9 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 			actSql += activityTypesCond
 		}
 		err = o.Raw(actSql).QueryRow(&actIds)
+		if err != nil{
+			return
+		}
 	}
 
 	if strings.Contains(articleTypeStr, "晨会精华") {
@@ -391,7 +397,140 @@ func GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, indu
 			mmSql += ` AND im.industry_name In (` + industryStr + `) `
 		}
 		err = o.Raw(mmSql).QueryRow(&mmIds)
+		if err != nil{
+			return
+		}
+	}
+
+	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 `
+	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 `
+			}
+
+			isNeedAct = 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, "晨会精华") {
+			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 + `) `
+			}
+
+			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
 }