Răsfoiți Sursa

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

xingzai 2 ani în urmă
părinte
comite
5d20240351
6 a modificat fișierele cu 172 adăugiri și 71 ștergeri
  1. 1 1
      controllers/activity.go
  2. 26 4
      controllers/search.go
  3. 12 16
      models/article.go
  4. 16 4
      models/report.go
  5. 113 42
      services/elastic.go
  6. 4 4
      utils/config.go

+ 1 - 1
controllers/activity.go

@@ -742,7 +742,7 @@ func (this *ActivityCoAntroller) SignupAdd() {
 				}
 				if totalRestrict >= 1 {
 					signupStatus = "BreakPromise"
-					resp.PopupMsg = "由于爽约次数过多,您暂时被限制报名资格"
+					resp.PopupMsg = "由于爽约次数过多,您暂时被限制报名资格,请联系对口销售"
 					item.FailType = 3
 				}
 				totalSignupCompany, err := models.GetActivitySignupCompanyCount(activityId, user.CompanyId)

+ 26 - 4
controllers/search.go

@@ -598,15 +598,37 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 	var result []*models.SearchItem
 	var total int64
 	if listType == 1 || listType == 2 {
-		tmpResult, tmpTotal, tmpErr := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn)
-		result = tmpResult
-		total = tmpTotal
-		err = tmpErr
+		_, tmpTotal, err := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn, 0)
+		if err != nil {
+			br.Msg = "检索失败"
+			br.ErrMsg = "检索失败,Err:" + err.Error()
+			return
+		}
+		tmpResult, tmpTotalResult, err := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn, 1)
 		if err != nil {
 			br.Msg = "检索失败"
 			br.ErrMsg = "检索失败,Err:" + err.Error()
 			return
 		}
+		result = tmpResult
+		if int(tmpTotalResult) < currentIndex*pageSize {
+			startSizeIk := startSize - int(tmpTotalResult)
+			if startSizeIk < 0 {
+				startSizeIk = 0
+			}
+			var pageSizeIk int
+			pageSizeIk = pageSize - len(tmpResult)
+			tmpResultIk, _, err := services.EsArticleSearch(keyWord, startSizeIk, pageSizeIk, orderColumn, 2)
+			if err != nil {
+				br.Msg = "检索失败"
+				br.ErrMsg = "检索失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpResultIk {
+				result = append(result, v)
+			}
+		}
+		total = tmpTotal
 		if len(result) == 0 {
 			result = make([]*models.SearchItem, 0)
 		}

+ 12 - 16
models/article.go

@@ -76,7 +76,7 @@ type CygxArticleEs struct {
 	MatchTypeName    string `description:"匹配类型"`
 }
 
-//新增文章
+// 新增文章
 func AddCygxArticle(item *CygxArticle) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -247,7 +247,7 @@ func ModifyArticleExpert(articleId int, expertNumStr, expertContentStr, intervie
 	return
 }
 
-//更改文章发布状态
+// 更改文章发布状态
 func UpdateArticlePublish(articleId, publishStatus int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE cygx_article SET publish_status=? WHERE article_id=? `
@@ -271,11 +271,7 @@ func GetArticleDetailTestById(articleId int) (item *ArticleDetail, err error) {
 
 func GetArticleAll() (item []*ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_article WHERE article_id  IN (7667,
-5282,
-5215,
-4615,
-4902) `
+	sql := `SELECT * FROM cygx_article WHERE is_summary=1`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
@@ -293,7 +289,7 @@ func GetArticleAll2() (item []*ArticleDetail, err error) {
 	return
 }
 
-//获取文章列表
+// 获取文章列表
 func GetArticleList(condition string, pars []interface{}) (items []*ArticleDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT	article_id FROM cygx_article  WHERE 1= 1 ` + condition
@@ -364,7 +360,7 @@ type CygxArticles struct {
 	ReportType       int    `description:"报告类型,1行业报告,2产业报告,0无"`
 }
 
-//新增文章
+// 新增文章
 func AddCygxArticles(item *CygxArticle) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
@@ -437,7 +433,7 @@ func GetPermissionMappingCategoryID() (item []*PermissionMappingCategoryRep, err
 	return
 }
 
-//检查用户是否阅读某一分类最新文章
+// 检查用户是否阅读某一分类最新文章
 func GetUserIsReadThisNewCategoryArticleCount(categoryId, uid int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) as count FROM
 	cygx_article_history_record 
@@ -453,7 +449,7 @@ type ArticleId struct {
 	ArticleId int `description:"文章id"`
 }
 
-//获取自定义分类的文章ID
+// 获取自定义分类的文章ID
 func GetCustomArticleId() (item []*ArticleId, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT article_id  FROM cygx_article WHERE is_custom = 1 `
@@ -468,7 +464,7 @@ type ArticleFollowDetail struct {
 	MacNum int `description:"本人是否收藏这个文章"`
 }
 
-//获取文章被关注被收藏的详情
+// 获取文章被关注被收藏的详情
 func GetArticleFollowDetail(articleId, uid int) (item *ArticleFollowDetail, err error) {
 	//d_num 作者被关注的数量 、 md_num 本人是否关注这个作者 、ac_num 文章被收藏的数量 、 mac_num 本人是否收藏这个文章
 	o := orm.NewOrm()
@@ -488,7 +484,7 @@ WHERE
 	return
 }
 
-//日度点评的数据同步
+// 日度点评的数据同步
 type ReportDetail struct {
 	Id                 int    `orm:"column(id)" description:"报告Id"`
 	AddType            int    `description:"新增方式:1:新增报告,2:继承报告"`
@@ -659,7 +655,7 @@ WHERE
 	return
 }
 
-//通过文章ID获取文章所关联的标的ID
+// 通过文章ID获取文章所关联的标的ID
 func GetSubjectIds(articleId int) (subjects string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT industrial_subject_id ORDER BY id ASC SEPARATOR ',' ) AS subjects 
@@ -670,7 +666,7 @@ func GetSubjectIds(articleId int) (subjects string, err error) {
 	return
 }
 
-//修改发布状态
+// 修改发布状态
 func UpdateIsClassFail(articleId int) (err error) {
 	sql := `UPDATE cygx_article SET  is_class_fail=1  WHERE article_id=? `
 	o := orm.NewOrm()
@@ -684,7 +680,7 @@ type SummaryArticleStock struct {
 	Stock     string `description:"个股标签"`
 }
 
-//综述报告
+// 综述报告
 func GetSummaryArticle(chartPermissionId int) (items []*SummaryArticleStock, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT

+ 16 - 4
models/report.go

@@ -152,9 +152,15 @@ func IndustrialUserRecordArticleCount(userId, industrialManagementId, categoryId
 FROM
 	cygx_article_history_record 
 WHERE
-	article_id = ( SELECT article_id FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ORDER BY publish_date DESC LIMIT 0, 1 ) 
+	article_id = ( SELECT article_id FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_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 = ? ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1 ) 
 	AND user_id = ? `
-	err = o.Raw(sql, industrialManagementId, categoryId, userId).QueryRow(&count)
+	err = o.Raw(sql, industrialManagementId, categoryId, categoryId, userId).QueryRow(&count)
 	return
 }
 
@@ -162,8 +168,14 @@ WHERE
 func GetNewIndustrialUserRecordArticle(industrialManagementId, categoryId int) (item *ArticleDetail, err error) {
 	o := orm.NewOrm()
 	//sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ORDER BY publish_date DESC LIMIT 0, 1`
-	sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id = ? ORDER BY publish_date DESC LIMIT 0, 1`
-	err = o.Raw(sql, industrialManagementId, categoryId).QueryRow(&item)
+	sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_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 = ? ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1`
+	err = o.Raw(sql, industrialManagementId, categoryId, categoryId).QueryRow(&item)
 	return
 }
 

+ 113 - 42
services/elastic.go

@@ -35,7 +35,7 @@ func NewClient() (client *elastic.Client, err error) {
 	return
 }
 
-//创建文章阅读记录的Es索引
+// 创建文章阅读记录的Es索引
 func CreateIndexNameArticleHistory() {
 	indexName := utils.IndexNameArticleHistory
 	mappingJson := `{
@@ -101,7 +101,7 @@ func CreateIndexNameArticleHistory() {
 	EsCreateIndex(indexName, mappingJson)
 }
 
-//func UpdateWxUserLabel(cont context.Context) (err error) {
+// func UpdateWxUserLabel(cont context.Context) (err error) {
 func AddAllArticleHistory(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
@@ -261,7 +261,7 @@ func AddAllArticleHistory(cont context.Context) (err error) {
 	return
 }
 
-//新增数据
+// 新增数据
 func EsAddArticleHistoryData(item *models.EsUserInteraction) (err error) {
 	defer func() {
 		if err != nil {
@@ -285,8 +285,8 @@ func EsAddArticleHistoryData(item *models.EsUserInteraction) (err error) {
 	return
 }
 
-//indexName:索引名称
-//mappingJson:表结构
+// indexName:索引名称
+// mappingJson:表结构
 func EsCreateIndex(indexName, mappingJson string) (err error) {
 
 	client := utils.Client
@@ -312,7 +312,7 @@ func EsCreateIndex(indexName, mappingJson string) (err error) {
 	return
 }
 
-//新增和修改数据
+// 新增和修改数据
 func EsAddOrEditData(indexName, docId string, item *ElasticTestArticleDetail) (err error) {
 	defer func() {
 		if err != nil {
@@ -360,7 +360,7 @@ func EsAddOrEditData(indexName, docId string, item *ElasticTestArticleDetail) (e
 	return
 }
 
-//新增和修改数据
+// 新增和修改数据
 func EsAddOrEditDataV4(indexName, docId string, item *ElasticTestArticleDetailV4) (err error) {
 	defer func() {
 		if err != nil {
@@ -409,7 +409,7 @@ func EsAddOrEditDataV4(indexName, docId string, item *ElasticTestArticleDetailV4
 	return
 }
 
-//删除数据
+// 删除数据
 func EsDeleteData(indexName, docId string) (err error) {
 	client := utils.Client
 	//if err != nil {
@@ -723,7 +723,7 @@ func EsSearchReport(indexName, keyWord string, startSize, pageSize, userId int)
 	return
 }
 
-//分页
+// 分页
 func EsMultiMatchFunctionScoreQueryTimeSortPage(indexName, keyWord string, startSize, pageSize, userId int) (result []*models.SearchItem, total int64, err error) {
 	client := utils.Client
 	keyWordArr, err := GetIndustryMapNameSliceV2(keyWord)
@@ -887,42 +887,105 @@ func EsMultiMatchFunctionScoreQuerySortPage(indexName, keyWord string, startSize
 	return
 }
 
-func init23423() {
-	EsArticleSearch("立高食品", 0, 10, "34")
-}
+//func init23423() {
+//	EsArticleSearch("立高食品", 0, 10, "34")
+//}
 
-func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string) (result []*models.SearchItem, total int64, err error) {
+func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string, ikType int) (result []*models.SearchItem, total int64, err error) {
 	indexName := utils.IndexName
 	client := utils.Client
 	keyWordArr, err := GetIndustryMapNameSliceV3(keyWord)
 	keyWordArr = RemoveDuplicatesAndEmpty(keyWordArr)
-	fmt.Println(keyWordArr)
 	keyWordLen := len(keyWordArr)
 	if keyWordLen <= 0 {
 		keyWordArr = append(keyWordArr, keyWord)
 		keyWordLen = len(keyWordArr)
 	}
-	fmt.Println(keyWordArr)
+	//Es 的高级查询有 自定义排序 文档一时半会儿撸不懂,先做多次查询手动过滤 2023.2.2
+	//ikType 查询方式 ,0:查所有 、 1:查询键入词 、 2:查询除了查询键入词之外的联想词
 	mustMap := make([]interface{}, 0)
 	shouldMap := make(map[string]interface{}, 0)
-	//shouldMapquery := make(map[string]interface{}, 0)
 	shouldMapquery := make([]interface{}, 0)
+
+	mustNotMap := make([]interface{}, 0)
+	shouldNotMap := make(map[string]interface{}, 0)
+	shouldNotMapquery := make([]interface{}, 0)
 	// @Param   OrderColumn   query   int  true       "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
 	//keyWordWeight := GetWeight(keyWordLen)
-	//var boost int
+	var boost int
 	//lenkeyWordArr := len(keyWordArr)
-	for _, v := range keyWordArr {
-		//if k == 0 {
-		//	boost = 2 * 1000
-		//} else {
-		//	boost = 1000
-		//}
+	for k, v := range keyWordArr {
+		if k == 0 {
+			boost = 2 * 1000
+		} else {
+			boost = 1
+		}
+
+		//如果是 2:查询除了查询键入词之外的联想词
+		if k == 0 && ikType == 2 {
+			if v != "" {
+				shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+					"function_score": map[string]interface{}{
+						"query": map[string]interface{}{
+							"multi_match": map[string]interface{}{
+								//"boost":  (lenkeyWordArr - k) * boost, //给查询的值赋予权重
+								"boost":  boost, //给查询的值赋予权重
+								"fields": []interface{}{"Title"},
+								"query":  v,
+							},
+						},
+					},
+				})
+				shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+					"function_score": map[string]interface{}{
+						"query": map[string]interface{}{
+							"multi_match": map[string]interface{}{
+								"boost":  boost, //给查询的值赋予权重
+								"fields": []interface{}{"Abstract"},
+								"query":  v,
+							},
+						},
+					},
+				})
+				shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+					"function_score": map[string]interface{}{
+						"query": map[string]interface{}{
+							"multi_match": map[string]interface{}{
+								"boost":  boost, //给查询的值赋予权重
+								"fields": []interface{}{"Annotation"},
+								"query":  v,
+							},
+						},
+					},
+				})
+
+				shouldNotMapquery = append(shouldNotMapquery, map[string]interface{}{
+					"function_score": map[string]interface{}{
+						"query": map[string]interface{}{
+							"multi_match": map[string]interface{}{
+								//"boost":  (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
+								"boost":  boost, //给查询的值赋予权重
+								"fields": []interface{}{"BodyText"},
+								"query":  v,
+							},
+						},
+					},
+				})
+			}
+			continue
+		}
+		//如果是 1:查询键入词
+		if k > 0 && ikType == 1 {
+			continue
+		}
+
 		if v != "" {
 			shouldMapquery = append(shouldMapquery, map[string]interface{}{
 				"function_score": map[string]interface{}{
 					"query": map[string]interface{}{
 						"multi_match": map[string]interface{}{
 							//"boost":  (lenkeyWordArr - k) * boost, //给查询的值赋予权重
+							"boost":  boost, //给查询的值赋予权重
 							"fields": []interface{}{"Title"},
 							"query":  v,
 						},
@@ -933,7 +996,7 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 				"function_score": map[string]interface{}{
 					"query": map[string]interface{}{
 						"multi_match": map[string]interface{}{
-							//"boost":  (lenkeyWordArr - k) * boost, //给查询的值赋予权重
+							"boost":  boost, //给查询的值赋予权重
 							"fields": []interface{}{"Abstract"},
 							"query":  v,
 						},
@@ -944,18 +1007,20 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 				"function_score": map[string]interface{}{
 					"query": map[string]interface{}{
 						"multi_match": map[string]interface{}{
-							//"boost":  (lenkeyWordArr - k) * boost, //给查询的值赋予权重
+							"boost":  boost, //给查询的值赋予权重
 							"fields": []interface{}{"Annotation"},
 							"query":  v,
 						},
 					},
 				},
 			})
+
 			shouldMapquery = append(shouldMapquery, map[string]interface{}{
 				"function_score": map[string]interface{}{
 					"query": map[string]interface{}{
 						"multi_match": map[string]interface{}{
 							//"boost":  (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
+							"boost":  boost, //给查询的值赋予权重
 							"fields": []interface{}{"BodyText"},
 							"query":  v,
 						},
@@ -967,8 +1032,13 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 	shouldMap = map[string]interface{}{
 		"should": shouldMapquery,
 	}
+
+	shouldNotMap = map[string]interface{}{
+		"should": shouldNotMapquery,
+	}
 	//排序
 	sortMap := make([]interface{}, 0)
+
 	//时间
 	sortMap = append(sortMap, map[string]interface{}{
 		"PublishDate": map[string]interface{}{
@@ -992,6 +1062,10 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 	mustMap = append(mustMap, map[string]interface{}{
 		"bool": shouldMap,
 	})
+	mustNotMap = append(mustNotMap, map[string]interface{}{
+		"bool": shouldNotMap,
+	})
+
 	queryMap := map[string]interface{}{
 		"query": map[string]interface{}{
 			"bool": map[string]interface{}{
@@ -999,14 +1073,25 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 			},
 		},
 	}
+	//把第一次键入词的筛选条件过滤掉
+	if ikType == 2 {
+		queryMap = map[string]interface{}{
+			"query": map[string]interface{}{
+				"bool": map[string]interface{}{
+					"must":     mustMap,
+					"must_not": mustNotMap,
+				},
+			},
+		}
+	}
 	if orderColumn == "Matching" {
 		queryMap["sort"] = sortMap
 	}
 	queryMap["from"] = startSize
 	queryMap["size"] = pageSize
 	queryMap["highlight"] = highlightMap
-	//jsonBytes, _ := json.Marshal(queryMap)
-	//fmt.Println(string(jsonBytes))
+	jsonBytes, _ := json.Marshal(queryMap)
+	fmt.Println(string(jsonBytes))
 	//utils.FileLog.Info(string(jsonBytes))
 	request := client.Search(indexName).Source(queryMap) // sets the JSON request
 	searchByMatch, err := request.Do(context.Background())
@@ -1025,18 +1110,8 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 				}
 				searchItem := new(models.SearchItem)
 				searchItem.ArticleId, _ = strconv.Atoi(v.Id)
-				if len(v.Highlight["BodyText"]) > 0 || len(v.Highlight["Abstract"]) > 0 || len(v.Highlight["Annotation"]) > 0 {
+				if len(v.Highlight["BodyText"]) > 0 {
 					searchItem.Body = v.Highlight["BodyText"]
-					if len(v.Highlight["Abstract"]) > 0 {
-						for _, vRed := range v.Highlight["Abstract"] {
-							searchItem.Body = append(searchItem.Body, vRed)
-						}
-					}
-					if len(v.Highlight["Annotation"]) > 0 {
-						for _, vRed := range v.Highlight["Annotation"] {
-							searchItem.Body = append(searchItem.Body, vRed)
-						}
-					}
 				} else {
 					bodyRune := []rune(article.BodyText)
 					bodyRuneLen := len(bodyRune)
@@ -1068,9 +1143,5 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 		}
 		total = searchByMatch.Hits.TotalHits.Value
 	}
-	//fmt.Println(result)
-	//for _, v := range result {
-	//	fmt.Println(v)
-	//}
 	return
 }

+ 4 - 4
utils/config.go

@@ -18,7 +18,7 @@ var (
 	Re          error        //redis错误
 )
 
-//微信配置信息
+// 微信配置信息
 var (
 	WxId        string //微信原始ID
 	WxAppId     string //查研观向小程序
@@ -45,7 +45,7 @@ var (
 	WxMsgTemplateIdArticleUserRemindXzs string //用户阅读报告通知-模板ID(小助手)
 )
 
-//微信公众号配置信息
+// 微信公众号配置信息
 var (
 	WxPublicId        string //微信原始ID
 	WxPublicAppId     string
@@ -83,7 +83,7 @@ var (
 	ShangHaiCrmApiLink        string //上海CRM用户同步api调用地址
 )
 
-//模板消息推送
+// 模板消息推送
 var (
 	SendWxTemplateMsgUrl string
 )
@@ -159,7 +159,7 @@ func init() {
 		WxPublicAppId = "wx4a844c734d8c8e56"
 		WxPublicAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
 		WxPublicId = "gh_b67e0049fb8c"
-		IndexName = "cygx_article_v1213"
+		IndexName = "cygx_article_v02_01"
 		IndexNameArticleHistory = "cygx_article_history_v07_08"
 
 		//接收附件邮箱