Browse Source

Merge branch 'hotfix/v4.8.23.1' into release/v4.8.30

lizhikun 2 years ago
parent
commit
819e2722fb

+ 2 - 2
src/jfw/modules/bigmember/src/entity/marketAnalysis/customizad_distribution.go

@@ -317,7 +317,7 @@ func (mae *MarketAnalysisEntity) MarketTime() (map[string]interface{}, error) {
 	rMap := make(map[string]interface{})
 	rMapData := make(map[string]interface{})
 	thisRow := marketTime{}
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return nil, fmt.Errorf("未查询到项目")
 	}
@@ -604,7 +604,7 @@ func (mae *MarketAnalysisEntity) BuyerWinnerAnalysis() map[string]interface{} {
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(datas, ","))
 	log.Printf("final PurchasingAnalysiseQuery sql: %s", finalSql)
 	t := time.Now()
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return nil
 	}

+ 9 - 6
src/jfw/modules/bigmember/src/entity/marketAnalysis/customized_analysis.go

@@ -1,12 +1,13 @@
 package marketAnalysis
 
 import (
-	"encoding/json"
-	"fmt"
 	util "app.yhyue.com/moapp/jybase/common"
 	elastic "app.yhyue.com/moapp/jybase/es"
-	"strings"
+	"encoding/json"
+	"fmt"
 	util2 "jy/src/jfw/modules/bigmember/src/util"
+	"log"
+	"strings"
 )
 
 const (
@@ -15,14 +16,14 @@ const (
 	query_top10                = `,"sort": [{"sortprice": "desc"}],"from": 0,"size": 10`
 	aggs_area_amounttop3       = `"area_amount_top3":{"terms":{"field":"area","exclude":["全国"],"order":[{"area_amount":"desc"}],"size":3},"aggs":{"area_amount":{"sum":{"field":"sortprice"}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"area_winner_amount":"desc"}],"size":3},"aggs":{"area_winner_amount":{"sum":{"field":"sortprice"}}}}}}`
 	aggs_area_counttop3        = `"area_count_top3":{"terms":{"field":"area","exclude":["全国"],"order":[{"area_count":"desc"}],"size":3},"aggs":{"area_count":{"filter":{"match_all":{}}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"area_winner_count":"desc"}],"size":3},"aggs":{"area_winner_count":{"filter":{"match_all":{}}}}}}}`
-	aggs_buyerclass            = `"buyerclass_scale":{"terms":{"field":"buyerclass","exclude":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
+	aggs_buyerclass            = `"buyerclass_scale":{"terms":{"field":"buyerclass","size":2000,"exclude":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
 	aggs_buyerclass_other      = `"buyerclass_scale_other":{"terms":{"field":"buyerclass","include":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{"match_all":{}}}}}`
 	aggs_buyerclass_counttop3  = `"buyerclass_count_top3":{"terms":{"field":"buyerclass","exclude":["其它",""],"order":[{"buyerclass_count":"desc"}],"size":3},"aggs":{"buyerclass_count":{"filter":{"match_all":{}}},"bidcount_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"buyer_winner_count":"desc"}],"size":3},"aggs":{"buyer_winner_count":{"filter":{"match_all":{}}}}}}}`
 	aggs_buyerclass_amounttop3 = `"buyerclass_amount_top3":{"terms":{"field":"buyerclass","exclude":["其它",""],"order":[{"buyerclass_amount":"desc"}],"size":3},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"winner_top":{"terms":{"field":"entidlist","exclude": ["-"],"order":[{"buyer_winner_amount":"desc"}],"size":3},"aggs":{"buyer_winner_amount":{"sum":{"field":"sortprice"}}}}}}`
 	sortprice_str              = `{"key":"<10万","from":0.0000000000001,"to":100000},{"key":"10万-50万","from":100000,"to":500000},{"key":"50万-100万","from":500000,"to":1000000},{"key":"100万-500万","from":1000000,"to":5000000},{"key":"500万-1000万","from":5000000,"to":10000000},{"key":"1000万-1亿","from":10000000,"to":100000000},{"key":"≥1亿","from":100000000}`
 	aggs_all_c_m               = `"project_count": {"filter": {"match_all":{}}},"project_count_not0": {"filter": {"range": {"sortprice": {"gt": 0}}}},"project_amount": {"sum": {"field": "sortprice"}}`
 	query_id                   = `{"query": {"bool": {"must": [{"term": {"entidlist": "%s"}}]}},"size": 1}`
-	query_idto                 = `{"query": {"bool": {"must": [{"terms": {"qyxy.id": ["%s"]}}]}},"_source":["_id","company_name"],"size": %d}`
+	query_idto                 = `{"query": {"bool": {"must": [{"terms": {"id": ["%s"]}}]}},"_source":["_id","company_name"],"size": %d}`
 )
 
 type AreaCTop struct {
@@ -185,6 +186,7 @@ func IDToName(ids []string) (iMap map[string]string) {
 	iMap = map[string]string{}
 	d := strings.Join(ids, `","`)
 	finalSql := fmt.Sprintf(query_idto, d, len(ids))
+	log.Println("IDToName sql:", finalSql)
 	hits := elastic.Get("qyxy", "qyxy", finalSql)
 	if hits == nil || len(*hits) == 0 {
 		return
@@ -213,7 +215,8 @@ func (mae *MarketAnalysisEntity) AllData() (rMap map[string]interface{}, err err
 		aggs = append(aggs, aggs_buyerclass, aggs_buyerclass_other, aggs_buyerclass_amounttop3, aggs_buyerclass_counttop3)
 	}
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggs, ","))
-	res, _ := util2.GetAggs("projectset", "projectset", finalSql)
+	log.Println("allData sql:", finalSql)
+	res := util2.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return
 	}

+ 1 - 1
src/jfw/modules/bigmember/src/entity/marketAnalysis/scaleRefineQuery.go

@@ -101,7 +101,7 @@ func (mae *MarketAnalysisEntity) marketScaleRefineQuery() (rMap map[string]inter
 	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggsGroup, ","))
 	//fmt.Println("finalSql-----4", finalSql)
 	rMap = map[string]interface{}{}
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return
 	}

+ 24 - 25
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -112,8 +112,8 @@ func CreatePortraitManagerForContacts(session *httpsession.Session, entType int6
 	return &Portrait{uid, session}, nil
 }
 
-//CreateSubVipPortraitManager 超级订阅权限校验
-//int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
+// CreateSubVipPortraitManager 超级订阅权限校验
+// int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
 func CreateSubVipPortraitManager(userid string, pageFlag, searchValue string, isWinner bool, session *httpsession.Session) (*Portrait, int, error, bool) {
 	if userid == "" {
 		return nil, -1, errors.New("未登录"), true
@@ -218,7 +218,7 @@ func paseDateToint64(dateStr string) (timeStamp int64) {
 
 //画像接口===============================================================================
 
-//GetEntIdByName 获取企业id
+// GetEntIdByName 获取企业id
 func (this *Portrait) GetEntIdByName(entName string) (string, error) {
 	if entName == "" {
 		return "", errors.New("企业名称异常")
@@ -230,7 +230,7 @@ func (this *Portrait) GetEntIdByName(entName string) (string, error) {
 	return entId, nil
 }
 
-//GetWinnerContactsMsg 企业画像-获取历史项目联系方式
+// GetWinnerContactsMsg 企业画像-获取历史项目联系方式
 func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
@@ -238,11 +238,12 @@ func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface
 	return GetProjectContactsMsg("", entId), nil
 }
 
-//GetWinnerNewMsg 企业画像-查询最新项目动态
-//增加 match 搜索词
-//	  matchType 搜索范围
-//    area 项目地区
-//    pushTime 发布时间
+// GetWinnerNewMsg 企业画像-查询最新项目动态
+// 增加 match 搜索词
+//
+//		  matchType 搜索范围
+//	   area 项目地区
+//	   pushTime 发布时间
 func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
 	return pwp.GetWinnerList()
 }
@@ -261,7 +262,7 @@ type dataExportKeywords struct {
 	Keyword string `json:"keyword"` //关键词
 }
 
-//SaveExportRecord 保存数据到出记录
+// SaveExportRecord 保存数据到出记录
 func (this *Portrait) SaveExportRecord(pwp *PortraitProjectScreen, ids []string, ent, flag string) (string, error) {
 	var keyWords []dataExportKeywords
 	for _, k := range pwp.Screen.KeyWordArr {
@@ -292,16 +293,15 @@ func (this *Portrait) SaveExportRecord(pwp *PortraitProjectScreen, ids []string,
 	return "", fmt.Errorf("选择导出异常")
 }
 
-//GetWinnerNewCount 企业画像-查询最新项目数量(前端用于展示是否加载更多)
+// GetWinnerNewCount 企业画像-查询最新项目数量(前端用于展示是否加载更多)
 func (this *Portrait) GetWinnerNewCount(entId string) int64 {
 	if entId == "" {
 		return -1
 	}
-	count := GetWinnerNewProjectCount(entId)
-	return count
+	return GetNewBiddingCount(entId, "")
 }
 
-//WinnerPortraitData 企业画像-查询
+// WinnerPortraitData 企业画像-查询
 func (this *Portrait) WinnerPortraitData(screen *PortraitScreen) (map[string]interface{}, error) {
 	if screen.Ent == "" {
 		return nil, errors.New("企业名称异常")
@@ -329,7 +329,7 @@ func (this *Portrait) WinnerPortraitData(screen *PortraitScreen) (map[string]int
 	return resMap, nil
 }
 
-//WinnerMiniPortraitData 三级页引流
+// WinnerMiniPortraitData 三级页引流
 func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface{}, error) {
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
@@ -342,7 +342,7 @@ func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface
 	return miniReturnMap, nil
 }
 
-//GetBuyerContactsMsg 采购单位联系人
+// GetBuyerContactsMsg 采购单位联系人
 func (this *Portrait) GetBuyerContactsMsg(buyerName string) ([]map[string]interface{}, error) {
 	if buyerName == "" {
 		return nil, errors.New("企业名称异常")
@@ -350,20 +350,19 @@ func (this *Portrait) GetBuyerContactsMsg(buyerName string) ([]map[string]interf
 	return GetProjectContactsMsg(buyerName, ""), nil
 }
 
-//GetBuyerNewCount 采购单位画像-查询最新项目数量(前端用于展示是否加载更多)
+// GetBuyerNewCount 采购单位画像-查询最新项目数量(前端用于展示是否加载更多)
 func (this *Portrait) GetBuyerNewCount(buyer string) int64 {
 	if buyer == "" {
 		return -1
 	}
-	count := GetBuyerNewProjectCount(buyer)
-	return count
+	return GetNewBiddingCount("", buyer)
 }
 
-//BuyerPortraitData 采购单位画像-查询
-//flag 分段请求标识 a年度统计和节支率等 b重点合作企业 c合作企业注册资本、地区、年份分布
-//a段数据=timeRange、city、province、buyerclass、bidamount_count、fail_count、project_count、winner_count、otherProvincesWinnerCount、yearData、monthData、moneyRange、bidtypeData、rate、top12、topAgencyData
-//b段数据=topShow
-//c段数据=withCapitalData、withAreaData、withEstablishData
+// BuyerPortraitData 采购单位画像-查询
+// flag 分段请求标识 a年度统计和节支率等 b重点合作企业 c合作企业注册资本、地区、年份分布
+// a段数据=timeRange、city、province、buyerclass、bidamount_count、fail_count、project_count、winner_count、otherProvincesWinnerCount、yearData、monthData、moneyRange、bidtypeData、rate、top12、topAgencyData
+// b段数据=topShow
+// c段数据=withCapitalData、withAreaData、withEstablishData
 func (this *Portrait) BuyerPortraitData(screen *PortraitScreen, flag string) (map[string]interface{}, error) {
 	if screen.Ent == "" {
 		return nil, errors.New("企业名称异常")
@@ -402,7 +401,7 @@ func (this *Portrait) BuyerPortraitData(screen *PortraitScreen, flag string) (ma
 	return buyerPortraitData, nil
 }
 
-//BuyerMiniPortraitData 采购单位引流接口
+// BuyerMiniPortraitData 采购单位引流接口
 func (this *Portrait) BuyerMiniPortraitData(buyer string) (map[string]interface{}, error) {
 	if buyer == "" {
 		return nil, errors.New("企业名称异常")

+ 13 - 13
src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go

@@ -16,7 +16,7 @@ import (
 
 const (
 	buyer_query_address    = `{"query":{"bool":{"must":[{"term":{"buyer_name":"%s"}}]}},"size":1,"_source":["city","province","buyerclass"]}`
-	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation"}},"allWinnerList":{"terms":{"field":"entidlist","size":4000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
+	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation"}},"allWinnerList":{"terms":{"field":"entidlist","size":10000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
 	queryTermByIdSql       = `{"terms":{"_id":[%s]}}`
 
 	queryMustSql                = `{"query":{"bool":{"must":[%s]}}}`
@@ -24,12 +24,6 @@ const (
 	buyerWithEntPortraitSqlPage = `{"query":{"bool":{"must":[%s]}},"_source":["_id","company_area","capital","establish_date","tag_business"],"from":%d,"size":%d}`
 )
 
-// GetBuyerNewProjectCount 采购单位最新中标动态数量查询
-func GetBuyerNewProjectCount(buyer string) int64 {
-	defer qutil.Catch()
-	return elastic.Count("projectset", "projectset", fmt.Sprintf(`{"query":{"bool":{"must":[{"term": {"buyer": "%s"}},{"range":{"jgtime":{"gte":%d}}}]}}}`, buyer, time.Now().AddDate(-5, 0, 0).Unix()))
-}
-
 // GetBuyerMsg 获取采购单位基本信息
 func GetBuyerMsg(entName string) (city, province, buyerclass string) {
 	list := elastic.Get("buyer", "buyer", fmt.Sprintf(buyer_query_address, entName))
@@ -132,7 +126,7 @@ func BuyerPortraitSearch(screen *PortraitScreen) (map[string]interface{}, error)
 
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(buyerPortraitSearchSql, strings.Join(mustQueryArr, ","), bidamountTimeRange, getMoneyRange(), comminTimeRange, comminTimeRange)
-	res, count := util.GetAggs("projectset", "projectset", doSearchSql)
+	res, count := util.GetAggsWithCount("projectset", "projectset", doSearchSql)
 	//log.Println("buyerSearchSql", doSearchSql)
 	if res == nil {
 		return nil, errors.New(fmt.Sprintf("%s采购单位画像查询异常\n", screen.Ent))
@@ -565,8 +559,17 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 	//根据注册资本聚合
 	var winnerIdList []string
 	allWinnerMap := map[string]AllWinner{}
+
+	capitalAggs := map[int][]string{}     //注册资本
+	areaAggs := map[string][]string{}     //地区
+	establishAggs := map[int][]string{}   //成立日期
+	businessAggs := map[string][]string{} //企业标签
+
 	for _, winner := range *listData {
 		winnerIdList = append(winnerIdList, winner.WinnerId)
+		if winner.WinnerId == "" || winner.WinnerId == "-" {
+			businessAggs["其他"] = append(businessAggs["其他"], "-")
+		}
 		allWinnerMap[winner.WinnerId] = winner
 	}
 	tBegin := time.Now()
@@ -604,11 +607,6 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 		return nil, 0, errors.New("中标企业查询结果为空")
 	}
 
-	capitalAggs := map[int][]string{}     //注册资本
-	areaAggs := map[string][]string{}     //地区
-	establishAggs := map[int][]string{}   //成立日期
-	businessAggs := map[string][]string{} //企业标签
-
 	for _, entMsg := range entMsgList {
 		if len(entMsg) < 2 {
 			continue
@@ -633,6 +631,8 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 		if businessStr := qutil.ObjToString(entMsg["tag_business"]); businessStr != "" {
 			firstTag := strings.Split(businessStr, ",")[0]
 			businessAggs[firstTag] = append(businessAggs[firstTag], companyId)
+		} else {
+			businessAggs["其他"] = append(businessAggs["其他"], companyId)
 		}
 	}
 	thisProvinceWinnerCount := 0

+ 6 - 6
src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go

@@ -1,19 +1,19 @@
 package entity
 
 import (
-	"jy/src/jfw/modules/bigmember/src/db"
+	qutil "app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
 	"errors"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/db"
+	"jy/src/jfw/modules/bigmember/src/util"
 	"log"
-	qutil "app.yhyue.com/moapp/jybase/common"
-	elastic "app.yhyue.com/moapp/jybase/es"
-	"app.yhyue.com/moapp/jybase/redis"
 	"regexp"
 	"sort"
 	"strings"
 	"time"
-	"jy/src/jfw/modules/bigmember/src/util"
 )
 
 const (
@@ -218,7 +218,7 @@ func GetWinnerPortraitSearch(screen *PortraitScreen) (map[string]interface{}, er
 	//开始查询
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(winnerPortraitSearchSql, strings.Join(mustQueryArr, ","), comminTimeRange, comminTimeRange, bidamountTimeRange)
-	res, docCount := util.GetAggs("projectset", "projectset", doSearchSql)
+	res, docCount := util.GetAggsWithCount("projectset", "projectset", doSearchSql)
 	log.Println("winnerPortraitSql", doSearchSql)
 	if res == nil {
 		return nil, errors.New(fmt.Sprintf("%s中标企业画像查询异常\n", screen.Ent))

+ 6 - 6
src/jfw/modules/bigmember/src/entity/portrait_manager.go

@@ -1,10 +1,10 @@
 package entity
 
 import (
-	"jy/src/jfw/modules/bigmember/src/config"
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
+	"jy/src/jfw/modules/bigmember/src/config"
 	"log"
-	"app.yhyue.com/moapp/jybase/redis"
 	"sync"
 	"time"
 )
@@ -31,7 +31,7 @@ func init() {
 	DoSearchCheck = NewSearchCheck()
 }
 
-//SearchRepeatCheck 防止重复查询
+// SearchRepeatCheck 防止重复查询
 type SearchRepeatCheck struct {
 	DoSearching map[string]bool //正在查询的
 	Check       sync.RWMutex    //锁
@@ -137,14 +137,14 @@ func Qyhx_search(obj *PortraitSearch) {
 	log.Printf("%s %s 检索完成 耗时%v\n", obj.EntName, obj.DoType, time.Since(start))
 }
 
-//upDataQxhxRedis 客户画像存储
+// upDataQxhxRedis 客户画像存储
 func upDataQxhxRedis(redisKey string, data interface{}) {
 	if data != nil {
 		redis.Put("other", redisKey, data, 60*60*24*config.Config.PortraitCacheDay) //走配置文件缓存时长
 	}
 }
 
-//TryFunc 画像查询,读存缓存
+// TryFunc 画像查询,读存缓存
 func TryFunc(f func(string, string) map[string]interface{}, ent, do string, times int) map[string]interface{} {
 	for i := times; i > 0; i-- {
 		if r := f(ent, do); r != nil {
@@ -155,7 +155,7 @@ func TryFunc(f func(string, string) map[string]interface{}, ent, do string, time
 	return nil
 }
 
-//GetPortraitCache 空筛选读缓存数据
+// GetPortraitCache 空筛选读缓存数据
 func GetPortraitCache(winner, doType string) map[string]interface{} {
 	hxObj := getInitPortraitSearch(winner, doType)
 	if rBytes, err := redis.GetBytes("other", hxObj.RedisKey); err == nil && len(*rBytes) != 0 {

+ 19 - 4
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -135,7 +135,7 @@ func (ps *PortraitScreen) GetProjectSelectItems(isWinner bool) (map[string]inter
 	}
 	doSearchSql := fmt.Sprintf(newBiddingSearchShowSql, entMatch, time.Date(time.Now().Year()-4, 1, 1, 0, 0, 0, 0, time.Local).Unix())
 	//log.Println("GetProjectSelectItems doSearchSql", doSearchSql)
-	res, _ := util.GetAggs(projectIndex, projectType, doSearchSql)
+	res := util.GetAggs(projectIndex, projectType, doSearchSql)
 	if res == nil {
 		return nil, fmt.Errorf("此企业无信息或获取信息列表检索条件出错")
 	}
@@ -309,10 +309,25 @@ func (pwp *PortraitProjectScreen) GetWinnerListIds() (ids []string, err error) {
 	return
 }
 
-// GetWinnerNewProjectCount 企业中标-中标动态数量(近五年)
-func GetWinnerNewProjectCount(entId string) int64 {
+// GetNewBiddingCount 获取标讯数量
+func GetNewBiddingCount(winnerId, buyer string) int64 {
 	defer qutil.Catch()
-	return elastic.Count(biddingIndex, biddingType, fmt.Sprintf(`{"query":{"bool":{"must":[{"term": {"entidlist": "%s"}},{"range":{"publishtime":{"gte":%d}}}]}}}`, entId, time.Now().AddDate(-5, 0, 0).Unix()))
+	if winnerId == "" && buyer == "" {
+		return 0
+	}
+	var mustQuery []string
+
+	ps := new(PortraitScreen)
+	st, et := ps.PareTimeSelect(false)
+	mustQuery = append(mustQuery, fmt.Sprintf(`{"range":{"publishtime":{"gte":%d,"lte":%d}}}`, st.Unix(), et.Unix()))
+
+	if winnerId != "" {
+		mustQuery = append(mustQuery, fmt.Sprintf(`{"term": {"entidlist": "%s"}}`, winnerId))
+	}
+	if buyer != "" {
+		mustQuery = append(mustQuery, fmt.Sprintf(`{"term": {"buyer": "%s"}}`, buyer))
+	}
+	return elastic.Count(biddingIndex, biddingType, fmt.Sprintf(`{"query":{"bool":{"must":[%s]}}}`, strings.Join(mustQuery, ",")))
 }
 
 // GetBuyerListSearch 采购单位中标动态查询

+ 22 - 26
src/jfw/modules/bigmember/src/service/use/use.go

@@ -70,7 +70,7 @@ func (u *Use) SubPageMoveTip() {
 	})
 }
 
-//首次使用加入大会员
+// 首次使用加入大会员
 func (u *Use) Add() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -201,7 +201,7 @@ func (u *Use) Add() {
 	u.ServeJson(r)
 }
 
-//用户大会员信息
+// 用户大会员信息
 func (u *Use) Info() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -265,7 +265,7 @@ func (u *Use) Info() {
 	u.ServeJson(r)
 }
 
-//初始化信息
+// 初始化信息
 func (u *Use) Echo() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "entname") {
 		return
@@ -338,7 +338,7 @@ func (u *Use) Echo() {
 				  "size": 0
 				}
 		`
-		res, _ := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query, name))
+		res := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query, name))
 		echo_map["area"] = GetData(res, "group_area")    //地区
 		echo_map["buyer"] = GetData(res, "group_buyer")  //采购单位集合
 		industrys := GetData(res, "group_topscopeclass") //industry行业
@@ -423,7 +423,7 @@ func (u *Use) Echo() {
 		by := `"` + strings.Replace(buyer, `,`, `","`, -1) + `"`
 		industry := StringArrToString(industrys)
 		is := `"` + strings.Replace(industry, `,`, `","`, -1) + `"`
-		res2, _ := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query2, by, is))
+		res2 := util.GetAggs(db.DbConf.Elascit_index, db.DbConf.Elascit_type, fmt.Sprintf(query2, by, is))
 		winners, ids := []string{}, []string{}
 		if winners := GetData(res2, "g_winner"); len(winners) > 0 {
 			winners, ids = gitWinnersIds(winners)
@@ -435,7 +435,7 @@ func (u *Use) Echo() {
 	u.ServeJson(r)
 }
 
-//附件下载
+// 附件下载
 func (u *Use) Attachment() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "infoId") {
 		return
@@ -477,7 +477,7 @@ func (u *Use) Attachment() {
 	u.ServeJson(r)
 }
 
-//邮件附件下载 ios
+// 邮件附件下载 ios
 func (u *Use) Email_attachement() {
 	if !R.CheckReqParam(u.ResponseWriter, u.Request, "email", "downurl") {
 		return
@@ -492,7 +492,7 @@ func (u *Use) Email_attachement() {
 	u.ServeJson(r)
 }
 
-//会员权益
+// 会员权益
 func (u *Use) Equity() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -573,7 +573,7 @@ func (u *Use) Equity() {
 	u.ServeJson(r)
 }
 
-//大会员权益修改
+// 大会员权益修改
 func (u *Use) Update() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -665,7 +665,7 @@ type UserInfo struct {
 	VipBefore202209 bool                  `json:"vipBefore202209"` //超级订阅:超前项目权限
 }
 
-//是否使用过首次使用
+// 是否使用过首次使用
 func (u *Use) IsAdd() {
 	r := func() Result {
 		uRefer := u.Refer()
@@ -758,7 +758,6 @@ func (u *Use) IsAdd() {
 	u.ServeJson(r)
 }
 
-//
 func initEntSess(phone string) int {
 	list := db.Mysql.SelectBySql(`select a.id,a.isNew,a.name,b.id as user_id from entniche_info a
 						inner join entniche_user b on (a.status=1 and b.phone=? and b.power=1 and a.id=b.ent_id)
@@ -770,7 +769,6 @@ func initEntSess(phone string) int {
 	return 0
 }
 
-//
 func intStringsJoin(is []int) string {
 	var str = []string{}
 	for _, v := range is {
@@ -779,7 +777,7 @@ func intStringsJoin(is []int) string {
 	return strings.Join(str, ",")
 }
 
-//AI中标预测历史记录
+// AI中标预测历史记录
 func (u *Use) Aiused_history() {
 	r := func() Result {
 		userid := qu.ObjToString(u.GetSession("userId"))
@@ -831,7 +829,7 @@ func (u *Use) Aiused_history() {
 	u.ServeJson(r)
 }
 
-//获取当前登录用户的手机号
+// 获取当前登录用户的手机号
 func Phone(userId string) (string, string) {
 	u, ok := db.Mgo.FindById("user", userId, `{"s_phone":1,"s_m_phone":1}`)
 	if ok && u != nil {
@@ -844,7 +842,7 @@ func Phone(userId string) (string, string) {
 	return "", ""
 }
 
-//获取聚合遍历结果
+// 获取聚合遍历结果
 func GetData(res esV7.Aggregations, field string) []string {
 	arr := []string{}
 	if g, ok := res.Children(field); ok {
@@ -862,7 +860,7 @@ func GetData(res esV7.Aggregations, field string) []string {
 	return arr
 }
 
-//数组转string
+// 数组转string
 func StringArrToString(arr []string) string {
 	s := ""
 	if len(arr) <= 0 {
@@ -878,7 +876,7 @@ func StringArrToString(arr []string) string {
 	return s
 }
 
-//合并
+// 合并
 func Merge(echo_map map[string]interface{}, userid string, session *httpsession.Session) map[string]interface{} {
 	m := map[string]interface{}{}
 	for _, v := range echo_map["area"].([]string) {
@@ -947,12 +945,12 @@ func Merge(echo_map map[string]interface{}, userid string, session *httpsession.
 	return echo_map
 }
 
-//合并数组并去重
+// 合并数组并去重
 func MergeArr(arr1, arr2 []string) []string {
 	return DeleteRepeat(append(arr1, arr2...))
 }
 
-//去重
+// 去重
 func DeleteRepeat(slice []string) []string {
 	m := make(map[string]int)
 	slice_repeat := []string{}
@@ -974,7 +972,7 @@ func DeleteRepeat(slice []string) []string {
  --->   { key:["关1"] },{ key:["关2"] },{ key:["附1"] }
 */
 
-//合并关键词(超级订阅关键词)
+// 合并关键词(超级订阅关键词)
 func MergeKeyWords(kw []map[string]interface{}) []map[string]interface{} {
 	keywords := []map[string]interface{}{}
 	a_key := []map[string]interface{}{}
@@ -1023,7 +1021,7 @@ func MergeKeyWords(kw []map[string]interface{}) []map[string]interface{} {
 	return keywords
 }
 
-//子账号列表
+// 子账号列表
 func SubAccout(userid string) []string {
 	account := []string{}
 	res, ok := db.Mgo.Find("user", map[string]interface{}{
@@ -1041,7 +1039,7 @@ func SubAccout(userid string) []string {
 	return account
 }
 
-//获取AI中标预测次数 (return 剩余次数 已使用次数)
+// 获取AI中标预测次数 (return 剩余次数 已使用次数)
 func GetSurplusCount(userid string) (int, int) {
 	//大会员用户服务详情表
 	data := db.Mysql.SelectBySql(`SELECT a.s_serviceid, a.i_frequency FROM `+jy.BigmemberUserPowerTable+` a WHERE a.s_userid = ? AND a.i_status = 0 AND a.s_serviceid in (6,15)`, userid)
@@ -1059,7 +1057,6 @@ func GetSurplusCount(userid string) (int, int) {
 	return forecastCount, bidfileCount
 }
 
-//
 func addOldent(userid, entname string) {
 	if db.Mgo.Count("jylab_followent", map[string]interface{}{"s_userid": userid, "s_entname": entname}) > 0 {
 		return
@@ -1075,7 +1072,6 @@ func addOldent(userid, entname string) {
 	db.Mgo.Save("jylab_followent", data)
 }
 
-//
 func Combo(userid string, member_status int) (combo_name string) {
 	data := db.Mysql.SelectBySql(`SELECT filter FROM dataexport_order WHERE filter LIKE '%"comboId"%'
 			AND user_id =? AND filter  NOT LIKE  '%"comboId":0%'
@@ -1110,7 +1106,7 @@ func Combo(userid string, member_status int) (combo_name string) {
 	return
 }
 
-//根据企业名称获取企业id
+// 根据企业名称获取企业id
 func gitWinnersIds(winners []string) (names []string, ids []string) {
 	names, ids = []string{}, []string{}
 	queryName := `"` + strings.Join(winners, `","`) + `"`
@@ -1125,7 +1121,7 @@ func gitWinnersIds(winners []string) (names []string, ids []string) {
 	return
 }
 
-//合并大会员关键词
+// 合并大会员关键词
 func MergeMemberKw(old, new []map[string]interface{}) []map[string]interface{} {
 	//判断是否有相同的分类名称
 	sameBl, index := false, -1

+ 10 - 2
src/jfw/modules/bigmember/src/util/aggsSearchUtil.go

@@ -5,8 +5,16 @@ import (
 	esV7 "github.com/olivere/elastic/v7"
 )
 
-//GetAggs 聚合查询
-func GetAggs(index, itype, query string) (esV7.Aggregations, int64) {
+// GetAggs 聚合查询
+func GetAggs(index, itype, query string) esV7.Aggregations {
+	v1, _, _ := elastic.GetAggs(index, itype, query)
+	return v1
+}
+
+func GetAggsWithCount(index, itype, query string) (esV7.Aggregations, int64) {
+	if len(query) > 0 {
+		query = `{"track_total_hits": true,` + query[1:]
+	}
 	v1, v2, _ := elastic.GetAggs(index, itype, query)
 	return v1, v2
 }