Browse Source

fix:超前项目es查询

duxin 2 năm trước cách đây
mục cha
commit
ea9ee342c4

+ 40 - 0
common/advancedProject.go

@@ -0,0 +1,40 @@
+package common
+
+import (
+	"encoding/json"
+	"fmt"
+	"leadGeneration/util"
+	"log"
+)
+
+func (mae *MarketAnalysisEntity) AdvancedProject() map[string]interface{} {
+	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), projectsNumber, mae.Size, projectsSort)
+	log.Println("定制化分析报告sql查询:", finalSql)
+	res, _, data := util.GetAggs("bidding", "bidding", finalSql)
+	if res == nil || len(res) == 0 || data == nil || len(data) == 0 {
+		return nil
+	}
+	var thisRow SuperProjects
+	for name, object := range res {
+		bArr, err := object.MarshalJSON()
+		if len(bArr) == 0 || err != nil {
+			continue
+		}
+		if name == "projects_number" {
+			if json.Unmarshal(bArr, &thisRow.ProjectsNumber) != nil {
+				continue
+			}
+		}
+	}
+	redisData := make(map[string]interface{})
+	for _, v := range thisRow.ProjectsNumber.Buckets {
+		redisData[v.Key] = v.DocCount
+	}
+	resData := make([]map[string]interface{}, len(data))
+	for i, v := range data {
+		if json.Unmarshal(*v.Source, &resData[i]) != nil {
+			continue
+		}
+	}
+	return nil
+}

+ 19 - 5
common/commonSearch.go

@@ -4,19 +4,28 @@ import (
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"fmt"
 	"strings"
-	"time"
 )
 
 // GetCommonQuerySqlWithAggs 此方法用于聚合查询
 func (mae *MarketAnalysisEntity) GetCommonQuerySqlWithAggs() string {
-	return fmt.Sprintf(mae.GetCommonQuerySql(), `,"aggs":{%s},"size":0`)
+	return fmt.Sprintf(mae.GetCommonQuerySql(), `,"aggs":{%s},"size":%d %s`)
 }
 
 // GetCommonQuerySql 公共筛选
 func (mae *MarketAnalysisEntity) GetCommonQuerySql() string {
-	var musts, bools []string
+	var (
+		musts, bools []string
+		name         string
+	)
 	//时间
-	musts = append(musts, fmt.Sprintf(`{"range":{"firsttime":{"gte":%d,"lte":%d}}}`, time.Now().AddDate(-1, 0, 0).Unix(), time.Now().Unix()))
+	if mae.Types == 1 {
+		name = "firsttime"
+	} else if mae.Types == 2 {
+		name = "publishtime"
+	}
+
+	musts = append(musts, fmt.Sprintf(`{"range":{"%s":{"gte":%d}}}`, name, mae.FormatParam.STime))
+
 	//地区
 	/*if len(mae.FormatParam.Area) > 0 || len(mae.FormatParam.City) > 0 {
 		var areaCity []string
@@ -36,8 +45,13 @@ func (mae *MarketAnalysisEntity) GetCommonQuerySql() string {
 	if len(mae.FormatParam.BuyerClass) > 0 {
 		musts = append(musts, fmt.Sprintf(`{"terms":{"buyerclass":["%s"]}}`, strings.Join(mae.FormatParam.BuyerClass, `","`)))
 	}*/
+	if len(mae.FormatParam.SubType) > 0 {
+		musts = append(musts, fmt.Sprintf(`{"terms":{"subtype":["%s"]}}`, strings.Join(mae.FormatParam.SubType, `","`)))
+	}
 	//分析报告中标状态限制
-	musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
+	if mae.Types == 1 {
+		musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
+	}
 	//订阅词
 	for _, v := range getAllKeywordArr(mae.FormatParam.KeysItems) {
 		if sql := getKeyWordSql(v); sql != "" {

+ 2 - 2
common/customizedAnalysis.go

@@ -13,9 +13,9 @@ var Analysis = []string{"<10万", "10万-50万", "50万-100万", "100万-500万"
 func (mae *MarketAnalysisEntity) PotentialCustomizeAnalysis() map[string]interface{} {
 	var aggs []string
 	aggs = append(aggs, aggs_buyerclass, buyer_procurement_scale, winner_procurement_scale)
-	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggs, ","))
+	finalSql := fmt.Sprintf(mae.GetCommonQuerySqlWithAggs(), strings.Join(aggs, ","), mae.Size, "")
 	log.Println("定制化分析报告sql查询:", finalSql)
-	res, _ := util.GetAggs("projectset", "projectset", finalSql)
+	res, _, _ := util.GetAggs("projectset", "projectset", finalSql)
 	if res == nil || len(res) == 0 {
 		return nil
 	}

+ 19 - 1
common/marketAnalysisEntity.go

@@ -3,6 +3,10 @@ package common
 const (
 	//客户分布
 	aggs_buyerclass = `"buyerclass_scale":{"terms":{"field":"buyerclass","exclude":["其它",""]},"aggs":{"buyerclass_amount":{"sum":{"field":"sortprice"}},"buyerclass_total":{"filter":{}}}}`
+	//超前项目数量
+	projectsNumber = `"projects_number":{"terms":{"field":"subtype"}}`
+	projectsSort   = `,"sort": [{"publishtime":"desc"}]`
+
 	//采购单位分布
 	buyer_procurement_scale = `"project_amount":{"sum":{"field":"sortprice"}},"buyer_amount_distribution": {"terms": {"field": "buyer","size": 0},"aggs": {"amount": {"sum": {"field": "sortprice"}}}}`
 	//中标单位分布
@@ -12,8 +16,19 @@ const (
 	query_bool_must_and = `{"bool": {"must": [%s]%s}}`
 	PSearch_DecMust     = `"bidstatus": ["中标","成交","合同","单一"]`
 	query_bool_must     = `{"terms": {%s}}`
+
+	bidTime = `{"":{"publishtime":{"gt":%d}}}`
 )
 
+type SuperProjects struct {
+	ProjectsNumber struct {
+		Buckets []struct {
+			Key      string `json:"key"`
+			DocCount int    `json:"doc_count"`
+		} `json:"buckets"`
+	} `json:"projects_number"`
+}
+
 type Aggregation struct {
 	WinnerAmountDistribution struct {
 		DocCountErrorUpperBound int `json:"doc_count_error_upper_bound"`
@@ -64,15 +79,18 @@ type MarketAnalysisEntity struct {
 	//BaseParam   AnalysisRequestParam
 	FormatParam AnalysisRequestFormat
 	//UId, Pid    string
+	Types int //1 f分析报告 2超前项目
+	Size  int
 }
 
 // AnalysisRequestFormat 格式化后参数
 type AnalysisRequestFormat struct {
 	KeysItems []keyWordGroup
 	//Area, City   []string //省份城市
-	//STime, ETime int64    //开始结束时间
+	STime, ETime int64 //开始结束时间
 	//Industry     []string //行业
 	//BuyerClass   []string //采购单位类型
+	SubType []string //采购单位类型
 }
 
 // keyWordGroup 订阅词结构体

+ 2 - 1
util/aggsSearchUtil.go

@@ -9,7 +9,7 @@ import (
 )
 
 // GetAggs 聚合查询
-func GetAggs(index, itype, query string) (aggs elastic2.Aggregations, count int64) {
+func GetAggs(index, itype, query string) (aggs elastic2.Aggregations, count int64, hist []*elastic2.SearchHit) {
 	defer util.Catch()
 	client := elastic.GetEsConn()
 	defer func() {
@@ -33,6 +33,7 @@ func GetAggs(index, itype, query string) (aggs elastic2.Aggregations, count int6
 			log.Println("从ES查询出错", err.Error())
 		}
 		count = searchResult.Hits.TotalHits
+		hist = searchResult.Hits.Hits
 		aggs = searchResult.Aggregations
 	}
 	return