Selaa lähdekoodia

Merge branch 'cygx_v2' of hongze/hongze_cygx into master

hongze 4 vuotta sitten
vanhempi
commit
eb94cd107c

+ 55 - 27
controllers/article.go

@@ -2,7 +2,6 @@ package controllers
 
 import (
 	"encoding/json"
-	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
@@ -56,7 +55,6 @@ func (this *ArticleController) Detail() {
 		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
 		return
 	}
-
 	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
 	if user.CompanyId > 1 {
 		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
@@ -65,17 +63,15 @@ func (this *ArticleController) Detail() {
 			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 			return
 		}
-
 		detail, err = models.GetArticleDetailById(articleId)
 		if err != nil {
 			br.Msg = "获取信息失败"
 			br.ErrMsg = "获取信息失败,Err:" + err.Error()
 			return
 		}
-		fmt.Println(detail.Department)
-
 		detail.Body = html.UnescapeString(detail.Body)
-		detail.Abstract = html.UnescapeString(detail.Abstract)
+		//detail.Abstract = html.UnescapeString(detail.Abstract)
+		detail.Abstract, _ = services.GetReportContentTextSub(detail.Abstract)
 		if companyPermission == "" {
 			if applyCount > 0 {
 				hasPermission = 5
@@ -86,7 +82,38 @@ func (this *ArticleController) Detail() {
 			goto Loop
 		} else {
 			hasFree = 1
-			articlePermission, err := models.GetArticlePermission(detail.SubCategoryName)
+			// 原有的权限校验 更改于 2021-05-18
+			//articlePermission, err := models.GetArticlePermission(detail.SubCategoryName)
+			//fmt.Println(articlePermission)
+			//fmt.Println(detail.SubCategoryName)
+			//if err != nil {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			//	return
+			//}
+			//if articlePermission == nil {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			//	return
+			//}
+			//for _, p := range articlePermission {
+			//	if strings.Contains(companyPermission, p.PermissionName) {
+			//		hasPermission = 1
+			//		historyRecord := new(models.CygxArticleHistoryRecord)
+			//		historyRecord.UserId = uid
+			//		historyRecord.ArticleId = articleId
+			//		historyRecord.CreateTime = time.Now()
+			//		historyRecord.Mobile = user.Mobile
+			//		historyRecord.Email = user.Email
+			//		historyRecord.CompanyId = user.CompanyId
+			//		historyRecord.CompanyName = user.CompanyName
+			//		go models.AddCygxArticleHistoryRecord(historyRecord)
+			//		break
+			//	} else { //无该行业权限
+			//		hasPermission = 3
+			//	}
+			//}
+			articlePermission, err := models.GetArticlePermission(detail.CategoryId)
 			if err != nil {
 				br.Msg = "获取信息失败"
 				br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
@@ -94,25 +121,22 @@ func (this *ArticleController) Detail() {
 			}
 			if articlePermission == nil {
 				br.Msg = "获取信息失败"
-				br.ErrMsg = "报告权限不存在,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+				br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 				return
 			}
-			for _, p := range articlePermission {
-				if strings.Contains(companyPermission, p.PermissionName) {
-					hasPermission = 1
-					historyRecord := new(models.CygxArticleHistoryRecord)
-					historyRecord.UserId = uid
-					historyRecord.ArticleId = articleId
-					historyRecord.CreateTime = time.Now()
-					historyRecord.Mobile = user.Mobile
-					historyRecord.Email = user.Email
-					historyRecord.CompanyId = user.CompanyId
-					historyRecord.CompanyName = user.CompanyName
-					go models.AddCygxArticleHistoryRecord(historyRecord)
-					break
-				} else { //无该行业权限
-					hasPermission = 3
-				}
+			if strings.Contains(companyPermission, articlePermission.PermissionName) {
+				hasPermission = 1
+				historyRecord := new(models.CygxArticleHistoryRecord)
+				historyRecord.UserId = uid
+				historyRecord.ArticleId = articleId
+				historyRecord.CreateTime = time.Now()
+				historyRecord.Mobile = user.Mobile
+				historyRecord.Email = user.Email
+				historyRecord.CompanyId = user.CompanyId
+				historyRecord.CompanyName = user.CompanyName
+				go models.AddCygxArticleHistoryRecord(historyRecord)
+			} else { //无该行业权限
+				hasPermission = 3
 			}
 			if hasPermission == 1 {
 				key := "CYGX_ARTICLE_" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid)
@@ -138,18 +162,15 @@ func (this *ArticleController) Detail() {
 			br.ErrMsg = "判断是否已收藏失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 			return
 		}
-
 		if collectCount > 0 {
 			detail.IsCollect = true
 		}
-
 		interviewApplyItem, err := models.GetArticleInterviewApply(uid, articleId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取信息失败"
 			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 			return
 		}
-
 		if interviewApplyItem != nil && interviewApplyItem.InterviewApplyId > 0 {
 			detail.IsInterviewApply = true
 			detail.InterviewApplyStatus = interviewApplyItem.Status
@@ -396,6 +417,13 @@ func (this *ArticleCommonController) Detail() {
 		detail.Body = html.UnescapeString(detail.Body)
 		detail.Abstract = html.UnescapeString(detail.Abstract)
 	}
+	sellerList, err := models.GetSellerList(detail.ArticleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + ";articleId" + strconv.Itoa(detail.ArticleId)
+		return
+	}
+	detail.SellerList = sellerList
 	resp.Detail = detail
 	br.Ret = 200
 	br.Success = true

+ 72 - 23
controllers/report.go

@@ -68,6 +68,8 @@ func (this *ReportController) TradeList() {
 // @Description 获取产业报告分类列表接口
 // @Param   ChartPermissionId   query   int  true       "分类ID"
 // @Param   OrderColumn   query   int  true       "排序字段 ,NewTime最近更新 ,Recommend弘则推荐"
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Success 200 {object} models.IndustrialManagementList
 // @router /home/industryList [get]
 func (this *ReportController) IndustryList() {
@@ -86,37 +88,85 @@ func (this *ReportController) IndustryList() {
 	var orderSrt string
 	ChartPermissionId, _ := this.GetInt("ChartPermissionId")
 	orderColumn := this.GetString("OrderColumn")
-
-	if orderColumn == " " {
-		orderColumn = "NewTime"
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
 	}
-	if ChartPermissionId < 1 {
-		br.Msg = "请输入分类ID"
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+	resp := new(models.IndustrialManagementList)
+	var total int
+	var list []*models.IndustrialManagement
+	totalTopList, errTop := models.GetIndustrialManagemenCountTop(ChartPermissionId, uid)
+	totalTop := len(totalTopList)
+	if errTop != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + errTop.Error()
 		return
 	}
-	listTop, err := models.GetIndustrialManagementTopAll(ChartPermissionId, uid)
-	if err != nil {
+	totalNoTopList, errNoTop := models.GetIndustrialManagemenCountNoTop(ChartPermissionId, uid)
+	totalNoTop := len(totalNoTopList)
+	if errNoTop != nil {
 		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		br.ErrMsg = "获取品种信息失败,Err:" + errNoTop.Error()
 		return
 	}
-	fmt.Println(len(listTop))
-	for k, _ := range listTop {
-		listTop[k].IsTop = true
+	total = totalTop + totalNoTop
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	if orderColumn == "" {
+		orderColumn = "NewTime"
+	}
+	if ChartPermissionId < 1 {
+		br.Msg = "请输入分类ID"
+		return
 	}
 	if orderColumn == "NewTime" {
-		orderSrt = "art.publish_date DESC"
+		orderSrt = "update_time DESC"
 	} else {
 		orderSrt = "man.recommended_index DESC"
 	}
-
-	list, err := models.GetIndustrialManagementAll(ChartPermissionId, uid, orderSrt)
-	if err != nil {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
-		return
+	//全部都是置顶
+	if totalTop >= currentIndex*pageSize {
+		listTop, err := models.GetIndustrialManagementTopAll(ChartPermissionId, uid, startSize, pageSize)
+		for k, _ := range listTop {
+			listTop[k].IsTop = true
+		}
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		list = listTop
+	} else if totalTop < (currentIndex-1)*pageSize { //全部都是不置顶
+		listNoTop, err := models.GetIndustrialManagementAll(ChartPermissionId, uid, orderSrt, startSize-totalTop, pageSize)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		list = listNoTop
+	} else { //部分置顶,部分不置顶
+		listTop, err := models.GetIndustrialManagementTopAll(ChartPermissionId, uid, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		for k, _ := range listTop {
+			listTop[k].IsTop = true
+		}
+		listNoTop, err := models.GetIndustrialManagementAll(ChartPermissionId, uid, orderSrt, 0, pageSize-len(listTop))
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+			return
+		}
+		list = append(listTop, listNoTop...)
 	}
-	list = append(listTop, list...)
 	for k, v := range list {
 		var analystStr string
 		analystList, err := models.GetIndustrialAnalystAll(v.IndustrialManagementId)
@@ -156,10 +206,9 @@ func (this *ReportController) IndustryList() {
 		if recordCount == 0 {
 			list[k].IsRed = true
 		}
-
 	}
-	resp := new(models.IndustrialManagementList)
 	resp.List = list
+	resp.Paging = page
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -275,14 +324,14 @@ func (this *ReportController) List() {
 	total, err := models.GetReportIndustrialCount(categoryId, industrialManagementId)
 	if err != nil {
 		br.Msg = "获取信息失败"
-		br.Msg = "获取帖子总数失败,Err:" + err.Error()
+		br.ErrMsg = "获取帖子总数失败,Err:" + err.Error()
 		return
 	}
 	page = paging.GetPaging(currentIndex, pageSize, total)
 	list, err := models.GetReportIndustrialList(pars, categoryId, industrialManagementId, uid, startSize, pageSize)
 	if err != nil {
 		br.Msg = "获取信息失败"
-		br.Msg = "获取帖子数据失败,Err:" + err.Error()
+		br.ErrMsg = "获取帖子数据失败,Err:" + err.Error()
 		return
 	}
 	lenList := len(list)

+ 22 - 1
controllers/search.go

@@ -18,6 +18,7 @@ type SearchController struct {
 // @Param   PageSize   query   int  true       "每页数据条数"
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   KeyWord   query   string  true       "搜索关键词"
+// @Param   OrderColumn   query   int  true       "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
 // @Success 200 {object} models.SearchItem
 // @router /list [get]
 func (this *SearchController) SearchList() {
@@ -39,6 +40,7 @@ func (this *SearchController) SearchList() {
 
 	fmt.Println(startSize)
 	keyWord := this.GetString("KeyWord")
+	orderColumn := this.GetString("OrderColumn")
 	if keyWord == "" {
 		br.Msg = "请输入搜索词"
 		br.ErrMsg = "请输入搜索词"
@@ -50,6 +52,10 @@ func (this *SearchController) SearchList() {
 		br.Ret = 408
 		return
 	}
+
+	if orderColumn == "" {
+		orderColumn = "Comprehensive"
+	}
 	/*
 		categoryList, err := models.GetCategoryByCompanyId(user.CompanyId)
 		if err != nil {
@@ -67,7 +73,22 @@ func (this *SearchController) SearchList() {
 	//indexName := "article_list"
 	indexName := utils.IndexName
 	pageSize = 20
-	result, total, err := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize,user.UserId) //services.EsMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize) //services.EsMatchQuery(indexName, keyWord)
+	var result []*models.SearchItem
+	var total int64
+	var err error
+	if orderColumn == "PublishDate" {
+		tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, pageSize, user.UserId)
+		result = tmpResult
+		total = tmpTotal
+		err = tmpErr
+	} else {
+		tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
+		result = tmpResult
+		total = tmpTotal
+		err = tmpErr
+	}
+
+	//result, total, err := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId) //services.EsMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize) //services.EsMatchQuery(indexName, keyWord)
 	//result, total, err := services.SearchByKeyWordBack(indexName, keyWord, startSize, pageSize,user.UserId)
 	//result, total, err := services.EsMultiMatchFunctionScoreQueryFix(indexName, keyWord, startSize, pageSize)
 	if err != nil {

+ 24 - 19
controllers/tactics.go

@@ -61,7 +61,7 @@ func (this *TacticsController) List() {
 	resp := new(models.TacticsListResp)
 	page := paging.GetPaging(currentIndex, pageSize, total)
 
-	if categoryId < 1 {
+	if categoryId < 0 {
 		listTactics, err := models.GetReportMappingStrategyAll()
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取信息失败"
@@ -103,6 +103,13 @@ func (this *TacticsController) List() {
 			list[k].IsRed = true
 		}
 	}
+	detail, errCategory := models.GetdetailByCategoryId(categoryId)
+	if errCategory != nil && errCategory.Error() != utils.ErrNoRow() {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取信息失败,Err:" + errCategory.Error()
+		return
+	}
+	resp.MatchTypeName = detail.MatchTypeName
 	resp.List = list
 	resp.Paging = page
 	br.Ret = 200
@@ -177,7 +184,7 @@ func (this *TacticsController) Detail() {
 			goto Loop
 		} else {
 			hasFree = 1
-			articlePermission, err := models.GetReportPermission(detail.SubCategoryName)
+			articlePermission, err := models.GetArticlePermission(detail.CategoryId)
 			if err != nil {
 				br.Msg = "获取信息失败"
 				br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
@@ -188,24 +195,22 @@ func (this *TacticsController) Detail() {
 				br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 				return
 			}
-			for _, p := range articlePermission {
-				fmt.Println(p)
-				if strings.Contains(companyPermission, p.PermissionName) {
-					hasPermission = 1
-					historyRecord := new(models.CygxArticleHistoryRecord)
-					historyRecord.UserId = uid
-					historyRecord.ArticleId = articleId
-					historyRecord.CreateTime = time.Now()
-					historyRecord.Mobile = user.Mobile
-					historyRecord.Email = user.Email
-					historyRecord.CompanyId = user.CompanyId
-					historyRecord.CompanyName = user.CompanyName
-					go models.AddCygxArticleHistoryRecord(historyRecord)
-					break
-				} else { //无该行业权限
-					hasPermission = 3
-				}
+			if strings.Contains(companyPermission, articlePermission.PermissionName) {
+				hasPermission = 1
+				historyRecord := new(models.CygxArticleHistoryRecord)
+				historyRecord.UserId = uid
+				historyRecord.ArticleId = articleId
+				historyRecord.CreateTime = time.Now()
+				historyRecord.Mobile = user.Mobile
+				historyRecord.Email = user.Email
+				historyRecord.CompanyId = user.CompanyId
+				historyRecord.CompanyName = user.CompanyName
+				go models.AddCygxArticleHistoryRecord(historyRecord)
+
+			} else { //无该行业权限
+				hasPermission = 3
 			}
+
 		}
 		collectCount, err := models.GetArticleCollectCount(uid, articleId)
 		if err != nil && err.Error() != utils.ErrNoRow() {

+ 20 - 5
models/article.go

@@ -74,6 +74,7 @@ type ArticleDetail struct {
 	SellerName           string `description:"销售名称"`
 	ArticleIdMd5         string `description:"纪要id"`
 	IsClass              int    `description:"是否归类,1是,0否"`
+	CategoryId           int    `description:"分类ID"`
 	SellerList           []*SellerRep
 }
 
@@ -117,12 +118,26 @@ func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err e
 	return
 }
 
-func GetArticlePermission(categoryName string) (item []*ChartPermission, err error) {
+//func GetArticlePermission(categoryName string) (item []*ChartPermission, err error) {
+//	o := orm.NewOrm()
+//	sql := ` SELECT b.* FROM cygx_permission_mapping AS a
+//			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+//			WHERE a.sub_category_name=? `
+//	_, err = o.Raw(sql, categoryName).QueryRows(&item)
+//	return
+//}
+
+func GetArticlePermission(companyId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
-	sql := ` SELECT b.* FROM cygx_permission_mapping AS a
-			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
-			WHERE a.sub_category_name=? `
-	_, err = o.Raw(sql, categoryName).QueryRows(&item)
+	sql := `SELECT
+			b.* 
+			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 = ?`
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	//_, err = o.Raw(sql, companyId).QueryRows(&item)
 	return
 }
 

+ 17 - 1
models/company.go

@@ -22,6 +22,21 @@ func GetCompanyDetailById(companyId int) (item *CompanyDetail, err error) {
 	return
 }
 
+//原有权限叫校验,下方更改与2021-5.18
+//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
+//			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 a.product_id=2
+//            AND b.show_type=1
+//			AND c.status IN('正式','试用','永续') `
+//	o := orm.NewOrm()
+//	err = o.Raw(sql, companyId).QueryRow(&permission)
+//	return
+//}
+
 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
 			FROM company_report_permission AS a
@@ -29,7 +44,8 @@ func GetCompanyPermission(companyId int) (permission string, err error) {
 			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 a.product_id=2
-            AND b.show_type=1
+			AND c.is_suspend=0
+            AND b.is_report=1
 			AND c.status IN('正式','试用','永续') `
 	o := orm.NewOrm()
 	err = o.Raw(sql, companyId).QueryRow(&permission)

+ 77 - 36
models/industrial_management.go

@@ -12,51 +12,92 @@ type IndustrialManagementRep struct {
 	LayoutTime        string `description:"布局时间"`
 }
 
+type IndustrialManagementCount struct {
+	IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
+}
+
+//获取产业置顶数量分类列表
+func GetIndustrialManagemenCountTop(ChartPermissionId, uid int) (items []*IndustrialManagementCount, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			man_g.industrial_management_id 
+			FROM
+			cygx_industrial_article_group_management AS man_g
+			WHERE
+			man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_management WHERE chart_permission_id = ? ) 
+			AND man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) 
+			GROUP BY
+			man_g.industrial_management_id`
+	_, err = o.Raw(sql, ChartPermissionId, uid).QueryRows(&items)
+	return
+}
+
+//获取产业不置顶数量
+func GetIndustrialManagemenCountNoTop(ChartPermissionId, uid int) (items []*IndustrialManagementCount, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			man_g.industrial_management_id 
+			FROM
+			cygx_industrial_article_group_management AS man_g
+			WHERE
+			man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_management WHERE chart_permission_id = ? ) 
+			AND man_g.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) 
+			GROUP BY
+			man_g.industrial_management_id`
+	_, err = o.Raw(sql, ChartPermissionId, uid).QueryRows(&items)
+	return
+}
+
 //产业列表 不置顶
-func GetIndustrialManagementAll(ChartPermissionId, uid int, orderSrt string) (items []*IndustrialManagement, err error) {
+func GetIndustrialManagementAll(ChartPermissionId, uid int, orderSrt string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-	man.*,
-	art.publish_date AS update_time,(
-	SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(uid) + ` AND rec.article_id = art.article_id ) AS readnum 
-FROM
-	cygx_industrial_management AS man
-	INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
-	INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
-	INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id 
-WHERE
-	man.chart_permission_id = ? 
-	AND man.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ` + strconv.Itoa(uid) + ` ) 
-	AND re.report_type = 2 
-	AND art.is_report = 1
-GROUP BY
-	man.industry_name 
-ORDER BY ` + orderSrt
-	_, err = o.Raw(sql, ChartPermissionId).QueryRows(&items)
+			man.*,
+            MAX( art.publish_date ) AS update_time ,(
+			SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(uid) + ` AND rec.article_id = art.article_id ) AS readnum 
+			FROM
+			cygx_industrial_management AS man
+			INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
+			INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
+			INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id 
+			WHERE
+			man.chart_permission_id = ? 
+			AND man.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ` + strconv.Itoa(uid) + ` ) 
+			AND re.report_type = 2 
+			AND art.is_report = 1
+			AND art.is_class = 1
+			GROUP BY
+			man.industry_name 
+			ORDER BY ` + orderSrt + ` LIMIT ?,?`
+	//fmt.Println(sql)
+	//fmt.Println(startSize)
+	//fmt.Println(pageSize)
+	_, err = o.Raw(sql, ChartPermissionId, startSize, pageSize).QueryRows(&items)
 	return
 }
 
 //产业列表 -置顶
-func GetIndustrialManagementTopAll(ChartPermissionId, uid int) (items []*IndustrialManagement, err error) {
+func GetIndustrialManagementTopAll(ChartPermissionId, uid, startSize, pageSize int) (items []*IndustrialManagement, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-	man.*
-FROM
-	cygx_industrial_management AS man
-     INNER  JOIN cygx_industry_top as top ON man.industrial_management_id = top.industrial_management_id 
-	INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
-	INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
-	INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id 
-WHERE
-	man.chart_permission_id = ` + strconv.Itoa(ChartPermissionId) + `
-	AND top.user_id = ` + strconv.Itoa(uid) + `
-	AND re.report_type = 2 
-	AND art.is_report = 1
-GROUP BY
-	man.industry_name 
-ORDER BY
-	top.create_time DESC`
-	_, err = o.Raw(sql).QueryRows(&items)
+			man.*
+			FROM
+			cygx_industrial_management AS man
+            INNER  JOIN cygx_industry_top as top ON man.industrial_management_id = top.industrial_management_id 
+			INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
+			INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
+			INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id 
+			WHERE
+			man.chart_permission_id = ` + strconv.Itoa(ChartPermissionId) + `
+			AND top.user_id = ` + strconv.Itoa(uid) + `
+			AND re.report_type = 2 
+			AND art.is_report = 1
+			AND art.is_class = 1
+			GROUP BY
+			man.industry_name 
+			ORDER BY
+			top.create_time DESC 	LIMIT ?,?`
+	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return
 }
 

+ 22 - 5
models/report.go

@@ -2,12 +2,14 @@ package models
 
 import (
 	"rdluck_tools/orm"
+	"rdluck_tools/paging"
 	"strconv"
 	//"rdluck_tools/paging"
 )
 
 type IndustrialManagementList struct {
-	List []*IndustrialManagement
+	Paging *paging.PagingItem
+	List   []*IndustrialManagement
 }
 
 type IndustrialManagement struct {
@@ -44,9 +46,16 @@ FROM
 	INNER JOIN cygx_industrial_article_group_management as man_g ON man_g.article_id = a.article_id
 WHERE
 	a.publish_status = 1 
-	AND category_id  = ?
+	AND category_id IN (SELECT
+	category_id 
+FROM
+	cygx_report_mapping 
+WHERE
+	chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ` + strconv.Itoa(categoryId) + ` ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ` + strconv.Itoa(categoryId) + ` ) )
+	AND a.is_class = 1
 	AND man_g.industrial_management_id = ?`
-	err = o.Raw(sql, categoryId, industrialManagementId).QueryRow(&count)
+	err = o.Raw(sql, industrialManagementId).QueryRow(&count)
 	return
 }
 
@@ -59,10 +68,17 @@ FROM
 	INNER JOIN cygx_industrial_article_group_management as man_g ON man_g.article_id = a.article_id
 WHERE
 	a.publish_status = 1 
-	AND category_id  = ?
+	AND category_id  IN (SELECT
+	category_id 
+FROM
+	cygx_report_mapping 
+WHERE
+	chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ` + strconv.Itoa(categoryId) + ` ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ` + strconv.Itoa(categoryId) + ` ) )
+    AND a.is_class = 1
 	AND man_g.industrial_management_id = ?`
 	sql += ` ORDER BY publish_date DESC LIMIT ?,? `
-	_, err = o.Raw(sql, pars, categoryId, industrialManagementId, startSize, pageSize).QueryRows(&items)
+	_, err = o.Raw(sql, pars, industrialManagementId, startSize, pageSize).QueryRows(&items)
 	return
 }
 
@@ -74,6 +90,7 @@ func IndustrialToArticleCategory(industrialManagementId int) (items []*Industria
 	INNER JOIN cygx_article AS art ON art.category_id = map.category_id
 	INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = art.article_id
 	WHERE map.report_type = 2 
+    AND art.is_report = 1
 	AND man_g.industrial_management_id =?
 	GROUP BY map.match_type_name`
 	_, err = o.Raw(sql, industrialManagementId).QueryRows(&items)

+ 11 - 1
models/report_mapping.go

@@ -7,7 +7,7 @@ import (
 type ReportMapping struct {
 	CategoryId      int    `description:"分类ID"`
 	SubCategoryName string `description:"主题"`
-	MathTypeName    string `description:"分类名称"`
+	MatchTypeName   string `description:"分类名称"`
 	IsRed           bool   `description:"是否标红"`
 }
 
@@ -78,6 +78,8 @@ func GetTradeAll(uid, ChartPermissionId int) (items []*TradeReportMapping, err e
 	WHERE
 	re.chart_permission_id = ?
 	AND re.report_type = 1
+	AND art.is_class = 1
+	AND re.chart_permission_id != 21
 	ORDER BY art.publish_date DESC
 	LIMIT 0,1`
 	_, err = o.Raw(sql, uid, ChartPermissionId).QueryRows(&items)
@@ -96,3 +98,11 @@ type IndustrialToArticleCategoryListRep struct {
 	IndustrialManagementId int    `description:"产业D"`
 	List                   []*IndustrialToArticleCategoryRep
 }
+
+//通过分类ID获取详情
+func GetdetailByCategoryId(categoryId int) (item *ReportMapping, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_mapping WHERE report_type=1 AND category_id=? `
+	err = o.Raw(sql, categoryId).QueryRow(&item)
+	return
+}

+ 3 - 2
models/tactics.go

@@ -113,8 +113,9 @@ func GetTacticsListAll2() (list []*Tactics2, err error) {
 }
 
 type TacticsListResp struct {
-	Paging *paging.PagingItem
-	List   []*ReportArticle
+	Paging        *paging.PagingItem
+	MatchTypeName string `description:"匹配类型"`
+	List          []*ReportArticle
 }
 
 func GetReportTacticsList(condition string, pars []interface{}, userId, startSize, pageSize int) (items []*ReportArticle, err error) {

+ 173 - 2
services/elastic.go

@@ -461,8 +461,8 @@ func EsMultiMatchFunctionScoreQuery(indexName, keyWord string, startSize, pageSi
 						}
 						searchItem.Title = title
 						searchItem.PublishDate = article.PublishDate
-						for _,v_result := range result{
-							if v_result.ArticleId == searchItem.ArticleId{
+						for _, v_result := range result {
+							if v_result.ArticleId == searchItem.ArticleId {
 								isAppend = true
 							}
 						}
@@ -643,3 +643,174 @@ func GetArrSum(intArr []int) (sum int) {
 //	fmt.Println(keyWordArr)
 //	fmt.Println("end")
 //}
+
+func EsMultiMatchFunctionScoreQuerySort(indexName, keyWord string, startSize, pageSize, userId int, orderColumn string) (result []*models.SearchItem, total int64, err error) {
+	client, err := NewClient()
+	keyWordArr, err := GetIndustryMapNameSliceV3(keyWord)
+	keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
+	//artidArr := make([]elastic.Query, 0)
+	//matchArr := make([]elastic.Query, 0)
+	n := 0
+	keyWordLen := len(keyWordArr)
+	if keyWordLen <= 0 {
+		keyWordArr = append(keyWordArr, keyWord)
+		keyWordLen = len(keyWordArr)
+	}
+
+	// @Param   OrderColumn   query   int  true       "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
+	utils.FileLog.Info("SearchKeyWord:%s, userId:%s", keyWordArr, strconv.Itoa(userId))
+	//keyWordWeight := GetWeight(keyWordLen)
+	for _, v := range keyWordArr {
+		if v != "" {
+			matchArr := make([]elastic.Query, 0)
+			boolquery := elastic.NewBoolQuery()
+			bodyFunctionQuery := elastic.NewFunctionScoreQuery()
+			//if orderColumn == "PublishDate" {
+			//	multiMatch := elastic.NewMultiMatchQuery(v, "Title", "BodyText")
+			//	bodyFunctionQuery.Query(multiMatch)
+			//} else {
+			//	multiMatch := elastic.NewMultiMatchQuery(v, "Title", "BodyText").Analyzer("ik_smart")
+			//	bodyFunctionQuery.Query(multiMatch)
+			//}
+			multiMatch := elastic.NewMultiMatchQuery(v, "Title", "BodyText").Analyzer("ik_smart")
+			bodyFunctionQuery.Query(multiMatch)
+			matchArr = append(matchArr, bodyFunctionQuery)
+			boolquery.Should(matchArr...)
+			highlight := elastic.NewHighlight()
+			highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
+			highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
+			request := client.Search(indexName).Highlight(highlight).Sort("PublishDate", false).From(startSize).Size(pageSize).Query(boolquery)
+			if orderColumn == "Matching" {
+				request = client.Search(indexName).Highlight(highlight).From(startSize).Size(pageSize).Query(boolquery)
+			}
+			searchByMatch, err := request.Do(context.Background())
+			if err != nil {
+				return nil, 0, err
+			}
+			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.CygxArticle)
+						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["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
+						for _, v_result := range result {
+							if v_result.ArticleId == searchItem.ArticleId {
+								isAppend = true
+							}
+						}
+						if !isAppend {
+							result = append(result, searchItem)
+						}
+					}
+				}
+				//total += searchByMatch.Hits.TotalHits.Value
+			}
+		}
+		n++
+	}
+	total = int64(len(result))
+	return
+}
+
+func EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord string, startSize, pageSize, userId int) (result []*models.SearchItem, total int64, err error) {
+	client, err := NewClient()
+	keyWordArr, err := GetIndustryMapNameSliceV2(keyWord)
+
+	keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
+	boolquery := elastic.NewBoolQuery()
+	matchArr := make([]elastic.Query, 0)
+
+	n := 0
+	keyWordLen := len(keyWordArr)
+	if keyWordLen <= 0 {
+		keyWordArr = append(keyWordArr, keyWord)
+		keyWordLen = len(keyWordArr)
+	}
+	fmt.Println(keyWordArr)
+	utils.FileLog.Info("SearchKeyWord:%s, userId:%s", keyWordArr, strconv.Itoa(userId))
+	for _, v := range keyWordArr {
+		if v != "" {
+			multiMatch := elastic.NewMultiMatchQuery(v, "Title", "BodyText")
+			bodyFunctionQuery := elastic.NewFunctionScoreQuery()
+			bodyFunctionQuery.Query(multiMatch)
+			matchArr = append(matchArr, bodyFunctionQuery)
+		}
+		n++
+	}
+	boolquery.Should(matchArr...)
+	highlight := elastic.NewHighlight()
+	highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
+	highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
+	request := client.Search(indexName).Highlight(highlight).Sort("PublishDate", false).From(startSize).Size(pageSize).Query(boolquery)
+	searchByMatch, err := request.Do(context.Background())
+	if searchByMatch != nil {
+		matchResult, _ := json.Marshal(searchByMatch)
+		utils.FileLog.Info("%s", string(matchResult))
+		if searchByMatch.Hits != nil {
+			for _, v := range searchByMatch.Hits.Hits {
+				articleJson, err := v.Source.MarshalJSON()
+				utils.FileLog.Info("%s", string(articleJson))
+				if err != nil {
+					return nil, 0, err
+				}
+				article := new(models.CygxArticle)
+				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["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
+				result = append(result, searchItem)
+			}
+		}
+		total = searchByMatch.Hits.TotalHits.Value
+	}
+	return
+}

+ 17 - 19
services/tactics.go

@@ -307,7 +307,6 @@ func SyncTacticsListAddreport() (err error) {
 	//	fmt.Println("GetTacticsList Err:", errsu.Error())
 	//	return
 	//}
-
 	noSummaryArticleIds := "3454,3456,3457,3459,2449,2450,2453,2454,2459,2530,2583,2663,2670,2699,2715,2732,2748,2759,2399,2356,2870,3173,2978,2826,3470" //非纪要库类型的文章ID
 	listNoSummaryArticleIds := strings.Split(noSummaryArticleIds, ",")
 	listPermission, errper := models.GetPermissionMappingCategoryID()
@@ -344,11 +343,6 @@ func SyncTacticsListAddreport() (err error) {
 			} else {
 				v.ReportType = 2 //是否属于产业报告
 			}
-			//if v.CategoryId == 64 || v.CategoryId == 87 || v.CategoryId == 80 {
-			//	v.ReportType = 2 //是否属于行业报告
-			//} else {
-			//	v.ReportType = 1 //是否属于产业报告
-			//}
 		}
 		v.Department = "弘则权益研究"
 		fmt.Println(k, v.ArticleId)
@@ -364,25 +358,28 @@ func SyncTacticsListAddreport() (err error) {
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			fmt.Println("AddCygxArticle Err:", err.Error())
 			return err
-
 		}
-		fmt.Println(v.IsClass)
 		v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1)
 		expertNumStr, expertContentStr, interviewDateStr := BodyAnalysis(v.Body)
+		var titleNew string
+		titleNew = v.Title
+		// 7资金流向 、11大类资产 、51每日复盘 、80医药周报
+		if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 {
+			if v.UpdateFrequency == "daily" {
+				titleNew = v.Title + "(" + strconv.Itoa(v.PublishDate.Year())[2:len(strconv.Itoa(v.PublishDate.Year()))-0] + v.PublishDate.Format("01") + strconv.Itoa(v.PublishDate.Day()) + ")"
+			} else if v.UpdateFrequency == "weekly" {
+				titleNew = v.Title + utils.WeekByDate(v.PublishDate)
+			}
+		}
+		if v.CategoryId == 80 {
+			titleNew = v.Title + utils.WeekByDate(v.PublishDate)
+		}
 		if count > 0 {
 			fmt.Println(k, v.ArticleId, "edit")
-			//articleInfo, err := models.GetArticleDetailById(v.ArticleId)
-			//if err != nil {
-			//	br.Msg = "同步失败!文章ID:" + strconv.Itoa(v.ArticleId)
-			//	br.ErrMsg = "同步失败,Err:" + err.Error()
-			//	return
-			//}
-			//if articleInfo.IsClass == 1 {
-			//	v.IsClass = 1
-			//}
 			bodyText, _ := GetReportContentTextSub(v.Body)
 			updateParams := make(map[string]interface{})
-			updateParams["Title"] = v.Title
+			//updateParams["Title"] = v.Title
+			updateParams["Title"] = titleNew
 			updateParams["TitleEn"] = v.TitleEn
 			updateParams["UpdateFrequency"] = v.UpdateFrequency
 			updateParams["CreateDate"] = v.CreateDate
@@ -415,7 +412,8 @@ func SyncTacticsListAddreport() (err error) {
 			item := new(models.CygxArticle)
 			articleIdInt := v.ArticleId
 			item.ArticleId = articleIdInt
-			item.Title = v.Title
+			//item.Title = v.Title
+			item.Title = titleNew
 			item.TitleEn = v.TitleEn
 			item.UpdateFrequency = v.UpdateFrequency
 			item.CreateDate = v.CreateDate

+ 27 - 1
utils/common.go

@@ -566,6 +566,32 @@ func TimeRemoveHms(strTime string) string {
 	year := resultTime.Year()
 	month := resultTime.Format("01")
 	day1 := resultTime.Day()
-	Ymd = strconv.Itoa(year) + "." + month + "." + strconv.Itoa(day1)
+	if day1 < 10 {
+		Ymd = strconv.Itoa(year) + "." + month + ".0" + strconv.Itoa(day1)
+	} else {
+		Ymd = strconv.Itoa(year) + "." + month + "." + strconv.Itoa(day1)
+	}
 	return Ymd
 }
+
+//判断时间是当年的第几周
+func WeekByDate(t time.Time) string {
+	var resultSAtr string
+	t = t.AddDate(0, 0, -8) // 减少八天跟老数据标题统一
+	yearDay := t.YearDay()
+	yearFirstDay := t.AddDate(0, 0, -yearDay+1)
+	firstDayInWeek := int(yearFirstDay.Weekday())
+	//今年第一周有几天
+	firstWeekDays := 1
+	if firstDayInWeek != 0 {
+		firstWeekDays = 7 - firstDayInWeek + 1
+	}
+	var week int
+	if yearDay <= firstWeekDays {
+		week = 1
+	} else {
+		week = (yearDay-firstWeekDays)/7 + 2
+	}
+	resultSAtr = "(" + strconv.Itoa(t.Year()) + "年第" + strconv.Itoa(week) + "周" + ")"
+	return resultSAtr
+}

+ 2 - 2
utils/config.go

@@ -74,7 +74,7 @@ func init() {
 		WxPublicAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
 		WxPublicId = "gh_b67e0049fb8c"
 		//IndexName="cygx_article_v1"
-		IndexName="cygx_article_v2"
+		IndexName = "cygx_article_v2"
 	} else {
 		WxAppId = "wxcc32b61f96720d2f"
 		WxAppSecret = "06894933fafb24dafead7eaae09c08e0"
@@ -88,7 +88,7 @@ func init() {
 		WxPublicAppId = "wx9b5d7291e581233a"
 		WxPublicAppSecret = "f4d52e34021eee262dce9682b31f8861"
 		WxPublicId = "gh_5dc508325c6f"
-		IndexName="test_article"
+		IndexName = "test_article"
 	}
 }