Эх сурвалжийг харах

Merge branch 'dev/v4.8.28_dx' of qmx/jy into release/v4.8.28

duxin 2 жил өмнө
parent
commit
adf3822b8a

+ 496 - 443
src/jfw/modules/bigmember/src/entity/analysis.go

@@ -1,487 +1,540 @@
 package entity
 
 import (
-	qutil "app.yhyue.com/moapp/jybase/common"
-	"fmt"
-	"jy/src/jfw/modules/bigmember/src/util"
-	"log"
-	"regexp"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
+    qutil "app.yhyue.com/moapp/jybase/common"
+    "fmt"
+    "jy/src/jfw/modules/bigmember/src/util"
+    "log"
+    "regexp"
+    "strconv"
+    "strings"
+    "sync"
+    "time"
 )
 
 var (
-	query      = `{"track_total_hits": true,"query":{"bool":{"must":[%s]}},"_source":[%s],"sort":[%s],"from":%d,"size":%d,"aggs":{%s}}`
-	query_bool = `{"bool":{"should":[%s],"minimum_should_match":%d}}`
-	//关键词匹配
-	multi_match_public = `{"multi_match":{"query":%s,"type":"phrase","fields":[%s]}}`
-	//filter 基础匹配
-	query_bool_must = `{"terms": {%s}}`
-	//query must
-	query_bool_must_and = `{"bool": {"must": [%s]%s}}`
-	//采购单位和中标企业所有合作项目明细
-	query_allmsg_buyer_winner = `{"query":{"bool":{"must":[{"term":{"buyer":"%s"}},{"term":{"s_winner":"%s"}}]}},"_source":[%s],"from":0,"size":%d,"sort":[{"jgtime":"desc"}],"aggs":{"sum_project":{"sum":{"field":"sortprice"}}}}`
+    query      = `{"track_total_hits": true,"query":{"bool":{"must":[%s]}},"_source":[%s],"sort":[%s],"from":%d,"size":%d,"aggs":{%s}}`
+    query_bool = `{"bool":{"should":[%s],"minimum_should_match":%d}}`
+    //关键词匹配
+    multi_match_public = `{"multi_match":{"query":%s,"type":"phrase","fields":[%s]}}`
+    //filter 基础匹配
+    query_bool_must = `{"terms": {%s}}`
+    //query must
+    query_bool_must_and = `{"bool": {"must": [%s]%s}}`
+    //采购单位和中标企业所有合作项目明细
+    query_allmsg_buyer_winner = `{"query":{"bool":{"must":[{"term":{"buyer":"%s"}},{"term":{"s_winner":"%s"}}]}},"_source":[%s],"from":0,"size":%d,"sort":[{"jgtime":"desc"}],"aggs":{"sum_project":{"sum":{"field":"sortprice"}}}}`
 )
 
 const (
-	PSearch_DecField    = `"projectname","_id","buyer","firsttime","area","city","s_winner","review_experts","budget","bidamount","project_rate","bidtype","ids","winnerorder","entidlist","bidtype","bidcycle","buyerclass","jgtime","list"`
-	PSearch_DecMust     = `"bidstatus": ["中标","成交","合同"]`
-	PSearch_DecSimCount = 100                 //决策分析类似项目明细数据量
-	PSearch_DecSort     = `{"jgtime":"desc"}` //决策分析类似项目明细排序
+    PSearch_DecField    = `"projectname","_id","buyer","firsttime","area","city","s_winner","review_experts","budget","bidamount","project_rate","bidtype","ids","winnerorder","entidlist","bidtype","bidcycle","buyerclass","jgtime","list"`
+    PSearch_DecMust     = `"bidstatus": ["中标","成交","合同"]`
+    PSearch_DecSimCount = 100                 //决策分析类似项目明细数据量
+    PSearch_DecSort     = `{"jgtime":"desc"}` //决策分析类似项目明细排序
 )
 
 var RegExperts = regexp.MustCompile("^[\\p{Han}]{2,4}$")
 
 // 查询此中标企业 和 此采购单位 所有合作的项目
 func (this *AnalysisDec) GetAllBWQueryByBW() string {
-	return fmt.Sprintf(query_allmsg_buyer_winner, this.Buyer, this.Winner, PSearch_DecField, PSearch_DecSimCount)
+    return fmt.Sprintf(query_allmsg_buyer_winner, this.Buyer, this.Winner, PSearch_DecField, PSearch_DecSimCount)
 }
 
 // //投标决策分析查询语句-中标企业和采购单位 类似项目明细
 func (this *AnalysisDec) DecQueryNewSimilarMsgByBW() (qstr string) {
-	//基础查询
-	bools := []string{}
-	musts := []string{}
-	var BWExists = 0
-	//中标单位 类似项目合作历史||采购单位类似项目
-	if this.Winner != "" {
-		BWExists += 1
-		winnerterms := `{"terms":{"s_winner":[`
-		for k, v := range strings.Split(this.Winner, ",") {
-			if k > 0 {
-				winnerterms += `,`
-			}
-			winnerterms += `"` + v + `"`
-		}
-		winnerterms += `]}}`
-		musts = append(musts, winnerterms)
-	}
-	//中标单位 类似项目合作历史||采购单位类似项目
-	if this.Buyer != "" && this.SearchItem == 1 {
-		buyerterms := fmt.Sprintf(`{"query_string": {"default_field": "buyer","query": "*%s*"}}`, this.Buyer)
-		BWExists += 1
-		musts = append(musts, buyerterms)
-	}
-	//searchType ==1; buyer & winner 不能为空
-	if BWExists < 2 && this.SearchType == 1 {
-		this.SearchType = 0
-	}
-	if this.SearchItem == 2 {
-		//省份
-		areaCity := []string{}
-		citys := []string{}
-		if len(this.Area) > 0 {
-			areaquery := `{"terms":{"area":[`
-			var i = 0
-			for k, v := range this.Area {
-				if len(qutil.ObjArrToStringArr(v.([]interface{}))) == 0 {
-					if i > 0 {
-						areaquery += `,`
-					}
-					areaquery += `"` + strings.ReplaceAll(strings.ReplaceAll(k, "省", ""), "市", "") + `"`
-					i += 1
-				} else {
-					citys = append(citys, qutil.ObjArrToStringArr(v.([]interface{}))...)
-				}
-			}
-			areaquery += `]}}`
-			if i > 0 {
-				areaCity = append(areaCity, areaquery)
-			}
-		}
-		//城市
-		if len(citys) > 0 {
-			//城市对应前三十个
-			if len(citys) > 30 {
-				citys = citys[:30]
-			}
-			areaquery := `{"terms":{"city":[`
-			for k, v := range citys {
-				if k > 0 {
-					areaquery += `,`
-				}
-				areaquery += `"` + v + `"`
-			}
-			areaquery += `]}}`
-			areaCity = append(areaCity, areaquery)
-		}
-		if len(areaCity) > 0 {
-			musts = append(musts, strings.Join(areaCity, ","))
-		}
-	}
+    //基础查询
+    bools := []string{}
+    musts := []string{}
+    var BWExists = 0
+    //中标单位 类似项目合作历史||采购单位类似项目
+    if this.Winner != "" {
+        BWExists += 1
+        winnerterms := `{"terms":{"s_winner":[`
+        for k, v := range strings.Split(this.Winner, ",") {
+            if k > 0 {
+                winnerterms += `,`
+            }
+            winnerterms += `"` + v + `"`
+        }
+        winnerterms += `]}}`
+        musts = append(musts, winnerterms)
+    }
+    //中标单位 类似项目合作历史||采购单位类似项目
+    if this.Buyer != "" && this.SearchItem == 1 {
+        buyerterms := fmt.Sprintf(`{"query_string": {"default_field": "buyer","query": "*%s*"}}`, this.Buyer)
+        BWExists += 1
+        musts = append(musts, buyerterms)
+    }
+    //searchType ==1; buyer & winner 不能为空
+    if BWExists < 2 && this.SearchType == 1 {
+        this.SearchType = 0
+    }
+    if this.SearchItem == 2 {
+        //省份
+        areaCity := []string{}
+        citys := []string{}
+        if len(this.Area) > 0 {
+            areaquery := `{"terms":{"area":[`
+            var i = 0
+            for k, v := range this.Area {
+                if len(qutil.ObjArrToStringArr(v.([]interface{}))) == 0 {
+                    if i > 0 {
+                        areaquery += `,`
+                    }
+                    areaquery += `"` + strings.ReplaceAll(strings.ReplaceAll(k, "省", ""), "市", "") + `"`
+                    i += 1
+                } else {
+                    citys = append(citys, qutil.ObjArrToStringArr(v.([]interface{}))...)
+                }
+            }
+            areaquery += `]}}`
+            if i > 0 {
+                areaCity = append(areaCity, areaquery)
+            }
+        }
+        //城市
+        if len(citys) > 0 {
+            //城市对应前三十个
+            if len(citys) > 30 {
+                citys = citys[:30]
+            }
+            areaquery := `{"terms":{"city":[`
+            for k, v := range citys {
+                if k > 0 {
+                    areaquery += `,`
+                }
+                areaquery += `"` + v + `"`
+            }
+            areaquery += `]}}`
+            areaCity = append(areaCity, areaquery)
+        }
+        if len(areaCity) > 0 {
+            musts = append(musts, strings.Join(areaCity, ","))
+        }
+    }
 
-	//金额区间
-	if this.MinPrice > 0 || this.MaxPrice > 0 {
-		pricequery := `{"range":{"sortprice":{`
-		if this.MinPrice > 0 {
-			pricequery += `"gte":` + strconv.Itoa(this.MinPrice*10000)
-		}
-		if this.MinPrice > 0 && this.MaxPrice > 0 {
-			pricequery += `,`
-		}
-		if this.MaxPrice > 0 {
-			pricequery += `"lt":` + strconv.Itoa(this.MaxPrice*10000)
-		}
-		pricequery += `}}}`
-		musts = append(musts, pricequery)
-	}
+    //金额区间
+    if this.MinPrice > 0 || this.MaxPrice > 0 {
+        pricequery := `{"range":{"sortprice":{`
+        if this.MinPrice > 0 {
+            pricequery += `"gte":` + strconv.Itoa(this.MinPrice*10000)
+        }
+        if this.MinPrice > 0 && this.MaxPrice > 0 {
+            pricequery += `,`
+        }
+        if this.MaxPrice > 0 {
+            pricequery += `"lt":` + strconv.Itoa(this.MaxPrice*10000)
+        }
+        pricequery += `}}}`
+        musts = append(musts, pricequery)
+    }
 
-	//检索日期
-	var (
-		gteTime time.Time
-		gte     int64
-	)
-	sTime := time.Now()
-	switch this.LimitTime {
-	case "oneYear":
-		gteTime = sTime.AddDate(-1, 0, 0)
-	case "threeYear":
-		gteTime = sTime.AddDate(-3, 0, 0)
-	case "fiveYear": // 默认近五年
-		gteTime = sTime.AddDate(-5, 0, 0)
-	default:
-		gte = qutil.Int64All(P_Starttime)
-	}
-	if this.LimitTime != "" {
-		gte = time.Date(gteTime.Year(), 1, 1, 0, 0, 0, 0, time.Local).Unix()
-	}
-	//检索日期
-	if gte > 0 {
-		musts = append(musts, fmt.Sprintf(`{"range":{"jgtime":{"gte":%d,"lt":%d}}}`, gte, sTime.Unix()))
-	}
-	//中标项目
-	if PSearch_DecMust != "" {
-		musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
-	}
-	//招标行业
-	if this.Industry != "" {
-		subscopeclass := `{"terms":{"subscopeclass":[`
-		for k, v := range strings.Split(this.Industry, ",") {
-			if k > 0 {
-				subscopeclass += `,`
-			}
-			subscopeclass += `"` + v + `"`
-		}
-		subscopeclass += `]}}`
-		musts = append(musts, subscopeclass)
-	}
-	//采购单位类型
-	if len(this.BuyerClass) > 0 {
-		Buyerclass := `{"terms":{"buyerclass":[`
-		for k, v := range this.BuyerClass {
-			if k > 0 {
-				Buyerclass += `,`
-			}
-			Buyerclass += `"` + v + `"`
-		}
-		Buyerclass += `]}}`
-		musts = append(musts, Buyerclass)
-	}
-	boolsNum := 0
-	//should
-	if len(this.BuyerContent) > 0 {
-		boolsNum = 1
-		findfields := `"projectname.pname","purchasing"`
-		multi_match := fmt.Sprintf(multi_match_public, "%s", findfields)
-		for _, kv := range this.BuyerContent {
-			shoulds := []string{}
-			must_not := []string{}
-			//关键词
-			for _, v := range kv.Keyword {
-				shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+v+"\""))
-			}
-			//附加词
-			if len(kv.Appended) > 0 {
-				for _, vv := range kv.Appended {
-					shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
-				}
-			}
-			if len(kv.Exclude) > 0 {
-				//排除词
-				for _, vv := range kv.Exclude {
-					must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
-				}
-			}
-			//添加
-			if len(shoulds) > 0 {
-				notStr := ""
-				if len(must_not) > 0 {
-					notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
-				}
-				bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
-			}
-		}
-	}
-	if len(bools) > 0 {
-		musts = append(musts, fmt.Sprintf(query_bool, strings.Join(bools, ","), boolsNum))
-	}
-	if this.Page == 0 {
-		this.Page = 1
-	}
-	if this.PageSize == 0 {
-		this.PageSize = 10
-	}
-	qstr = fmt.Sprintf(query, strings.Join(musts, ","), PSearch_DecField, PSearch_DecSort, (this.Page-1)*this.PageSize, this.PageSize, "")
-	log.Println("投标决策分析查询语句-中标企业和采购单位 类似项目明细", qstr)
-	return qstr
+    //检索日期
+    var (
+        gteTime time.Time
+        gte     int64
+    )
+    sTime := time.Now()
+    switch this.LimitTime {
+    case "oneYear":
+        gteTime = sTime.AddDate(-1, 0, 0)
+    case "threeYear":
+        gteTime = sTime.AddDate(-3, 0, 0)
+    case "fiveYear": // 默认近五年
+        gteTime = sTime.AddDate(-5, 0, 0)
+    default:
+        gte = qutil.Int64All(P_Starttime)
+    }
+    if this.LimitTime != "" {
+        gte = time.Date(gteTime.Year(), 1, 1, 0, 0, 0, 0, time.Local).Unix()
+    }
+    //检索日期
+    if gte > 0 {
+        musts = append(musts, fmt.Sprintf(`{"range":{"jgtime":{"gte":%d,"lt":%d}}}`, gte, sTime.Unix()))
+    }
+    //中标项目
+    if PSearch_DecMust != "" {
+        musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
+    }
+    //招标行业
+    if this.Industry != "" {
+        subscopeclass := `{"terms":{"subscopeclass":[`
+        for k, v := range strings.Split(this.Industry, ",") {
+            if k > 0 {
+                subscopeclass += `,`
+            }
+            subscopeclass += `"` + v + `"`
+        }
+        subscopeclass += `]}}`
+        musts = append(musts, subscopeclass)
+    }
+    //采购单位类型
+    if len(this.BuyerClass) > 0 {
+        Buyerclass := `{"terms":{"buyerclass":[`
+        for k, v := range this.BuyerClass {
+            if k > 0 {
+                Buyerclass += `,`
+            }
+            Buyerclass += `"` + v + `"`
+        }
+        Buyerclass += `]}}`
+        musts = append(musts, Buyerclass)
+    }
+    boolsNum := 0
+    //should
+    if len(this.BuyerContent) > 0 {
+        boolsNum = 1
+        findfields := `"projectname.pname","purchasing"`
+        multi_match := fmt.Sprintf(multi_match_public, "%s", findfields)
+        for _, kv := range this.BuyerContent {
+            shoulds := []string{}
+            must_not := []string{}
+            //关键词
+            for _, v := range kv.Keyword {
+                shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+v+"\""))
+            }
+            //附加词
+            if len(kv.Appended) > 0 {
+                for _, vv := range kv.Appended {
+                    shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
+                }
+            }
+            if len(kv.Exclude) > 0 {
+                //排除词
+                for _, vv := range kv.Exclude {
+                    must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
+                }
+            }
+            //添加
+            if len(shoulds) > 0 {
+                notStr := ""
+                if len(must_not) > 0 {
+                    notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
+                }
+                bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
+            }
+        }
+    }
+    if len(bools) > 0 {
+        musts = append(musts, fmt.Sprintf(query_bool, strings.Join(bools, ","), boolsNum))
+    }
+    if this.Page == 0 {
+        this.Page = 1
+    }
+    if this.PageSize == 0 {
+        this.PageSize = 10
+    }
+    qstr = fmt.Sprintf(query, strings.Join(musts, ","), PSearch_DecField, PSearch_DecSort, (this.Page-1)*this.PageSize, this.PageSize, "")
+    log.Println("投标决策分析查询语句-中标企业和采购单位 类似项目明细", qstr)
+    return qstr
 }
 
 func ThisLock(userId string) *sync.Mutex {
-	UIL.Lock()
-	if UIL.DecLock[userId] == nil {
-		UIL.DecLock[userId] = &sync.Mutex{}
-	}
-	UIL.Unlock()
-	return UIL.DecLock[userId]
+    UIL.Lock()
+    if UIL.DecLock[userId] == nil {
+        UIL.DecLock[userId] = &sync.Mutex{}
+    }
+    UIL.Unlock()
+    return UIL.DecLock[userId]
 }
 
 // 采购内容 精准or模糊匹配处理
 func BuyerContentStruct(BC []ViewKeyWord) (arr []ViewKeyWord) {
-	if len(BC) > 0 {
-		for _, kw := range BC {
-			if kw.MatchWay == 1 {
-				for _, kk := range kw.Keyword {
-					arr = append(arr, ViewKeyWord{
-						Keyword: []string{kk},
-						Exclude: kw.Exclude,
-					})
-				}
-				for _, kk := range kw.Appended {
-					arr = append(arr, ViewKeyWord{
-						Keyword: []string{kk},
-						Exclude: kw.Exclude,
-					})
-				}
-			} else {
-				arr = append(arr, kw)
-			}
-		}
-	}
-	return arr
+    if len(BC) > 0 {
+        for _, kw := range BC {
+            if kw.MatchWay == 1 {
+                for _, kk := range kw.Keyword {
+                    arr = append(arr, ViewKeyWord{
+                        Keyword: []string{kk},
+                        Exclude: kw.Exclude,
+                    })
+                }
+                for _, kk := range kw.Appended {
+                    arr = append(arr, ViewKeyWord{
+                        Keyword: []string{kk},
+                        Exclude: kw.Exclude,
+                    })
+                }
+            } else {
+                arr = append(arr, kw)
+            }
+        }
+    }
+    return arr
 }
 
 // 决策分析 根据字段权重排序 中标企业和中标价格
 var (
-	bidtype_score        = 1 //采购方式
-	review_experts_score = 1 //评审专家
-	zbtime_score         = 1 //招标时间
-	bidamount_score      = 2 //中标价格
-	budget_score         = 2 //预算
-	project_rate_score   = 1 //折扣率
-	winnerorder_score    = 1 //中标候选人
+    bidtype_score        = 1 //采购方式
+    review_experts_score = 1 //评审专家
+    zbtime_score         = 1 //招标时间
+    bidamount_score      = 2 //中标价格
+    budget_score         = 2 //预算
+    project_rate_score   = 1 //折扣率
+    winnerorder_score    = 1 //中标候选人
 )
 
+//NewSequence 成交时间
+func NewSequence(seqData []map[string]interface{}) []map[string]interface{} {
+    var data []map[string]interface{}
+    for _, v := range seqData {
+        var score = 0
+        if v["s_winner"] != nil && qutil.InterfaceToStr(v["s_winner"]) != "" {
+            var s_winner = qutil.ObjToString(v["s_winner"])
+            entidlist, _ := v["entidlist"].([]interface{})
+            //中标单位id
+            winnerList := strings.Split(s_winner, ",")
+            if len(entidlist) == len(winnerList) {
+                var entidlists []string
+                for _, v2 := range entidlist {
+                    entidlists = append(entidlists, util.EncodeId(qutil.InterfaceToStr(v2)))
+                }
+                v["entidlist"] = entidlists
+            } else {
+                delete(v, "entidlist") //中标单位id有误 删除id处理
+            }
+        }
+        //评审专家
+        review_experts := []string{}
+        if v["review_experts"] != nil {
+            for _, v1 := range qutil.ObjArrToStringArr(v["review_experts"].([]interface{})) {
+                if RegExperts.MatchString(v1) {
+                    review_experts = append(review_experts, v1)
+                }
+            }
+            v["review_experts"] = review_experts
+        }
+        if len(review_experts) > 0 {
+            score += review_experts_score
+        }
+        list, _ := v["list"].([]interface{})
+        if len(list) > 0 {
+            listMap, _ := list[0].(map[string]interface{})
+            v["subtype"] = listMap["subtype"]
+            delete(v, "list")
+        }
+
+        if v["ids"] != nil {
+            ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
+            if len(ids) > 0 {
+                v["infoid"] = util.EncodeId(ids[0])
+                delete(v, "ids")
+            }
+        }
+        v["_id"] = util.EncodeId(v["_id"].(string))
+        data = append(data, v)
+    }
+    return data
+}
+
 func Sequence(seqData []map[string]interface{}) []map[string]interface{} {
-	var sequenceArr3 = []map[string]interface{}{}
-	var sequenceArr4 = []map[string]interface{}{}
-	var sequenceArr5 = []map[string]interface{}{}
-	var sequenceArr6 = []map[string]interface{}{}
-	var sequenceArr7 = []map[string]interface{}{}
-	var sequenceArr8 = []map[string]interface{}{}
-	var sequenceArr9 = []map[string]interface{}{}
-	for k, v := range seqData {
-		var score = 0
-		if v["s_winner"] != nil && qutil.InterfaceToStr(v["s_winner"]) != "" {
-			var s_winner = qutil.ObjToString(v["s_winner"])
-			entidlist, _ := v["entidlist"].([]interface{})
-			//中标单位id
-			winnerList := strings.Split(s_winner, ",")
-			if len(entidlist) == len(winnerList) {
-				var entidlists []string
-				for _, v2 := range entidlist {
-					entidlists = append(entidlists, util.EncodeId(qutil.InterfaceToStr(v2)))
-				}
-				v["entidlist"] = entidlists
-			} else {
-				delete(v, "entidlist") //中标单位id有误 删除id处理
-			}
-			//var s_length = 0
-			//for _, v1 := range winnerList {
-			//	if RegWinner.MatchString(v1) {
-			//		s_length += 1
-			//	}
-			//}
-			//if s_length == 0 {
-			//	continue
-			//}
-		}
-		//评审专家
-		review_experts := []string{}
-		if v["review_experts"] != nil {
-			for _, v1 := range qutil.ObjArrToStringArr(v["review_experts"].([]interface{})) {
-				if RegExperts.MatchString(v1) {
-					review_experts = append(review_experts, v1)
-				}
-			}
-			v["review_experts"] = review_experts
-		}
-		if len(review_experts) > 0 {
-			score += review_experts_score
-		}
-		list, _ := v["list"].([]interface{})
-		if len(list) > 0 {
-			listMap, _ := list[0].(map[string]interface{})
-			v["subtype"] = listMap["subtype"]
-			delete(v, "list")
-		}
-		//采购方式
-		if v["bidtype"] != nil && qutil.ObjToString(v["bidtype"].(string)) != "" {
-			score += bidtype_score
-		}
-		//招标时间
-		if v["firsttime"] != nil && qutil.Float64All(v["firsttime"].(float64)) > 0 {
-			score += zbtime_score
-		}
-		//预算
-		if v["budget"] != nil && qutil.Float64All(v["budget"].(float64)) > 0 {
-			score += budget_score
-		}
-		//中标价格
-		if v["bidamount"] != nil && qutil.Float64All(v["bidamount"].(float64)) > 0 {
-			score += bidamount_score
-		}
-		//折扣率
-		if v["project_rate"] != nil && qutil.Float64All(v["project_rate"].(float64)) > 0 {
-			score += project_rate_score
-		}
-		//中标候选人
-		if v["winnerorder"] != nil && len(qutil.ObjArrToStringArr(v["winnerorder"].([]interface{}))) > 0 {
-			score += winnerorder_score
-		}
-		//低于三分排除
-		if score < 4 {
-			// continue
-		}
-		if v["ids"] != nil {
-			ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
-			if len(ids) > 0 {
-				v["infoid"] = util.EncodeId(ids[0])
-				delete(v, "ids")
-			}
-		}
-		v["_id"] = util.EncodeId(v["_id"].(string))
-		switch score {
-		case 4:
-			sequenceArr4 = append(sequenceArr4, seqData[k])
-		case 5:
-			sequenceArr5 = append(sequenceArr5, seqData[k])
-		case 6:
-			sequenceArr6 = append(sequenceArr6, seqData[k])
-		case 7:
-			sequenceArr7 = append(sequenceArr7, seqData[k])
-		case 8:
-			sequenceArr8 = append(sequenceArr8, seqData[k])
-		case 9:
-			sequenceArr9 = append(sequenceArr9, seqData[k])
-		default:
-			sequenceArr3 = append(sequenceArr3, seqData[k])
-		}
-	}
-	return append(append(append(append(append(append(sequenceArr9, sequenceArr8...), sequenceArr7...), sequenceArr6...), sequenceArr5...), sequenceArr4...), sequenceArr3...)
+    var sequenceArr3 = []map[string]interface{}{}
+    var sequenceArr4 = []map[string]interface{}{}
+    var sequenceArr5 = []map[string]interface{}{}
+    var sequenceArr6 = []map[string]interface{}{}
+    var sequenceArr7 = []map[string]interface{}{}
+    var sequenceArr8 = []map[string]interface{}{}
+    var sequenceArr9 = []map[string]interface{}{}
+    for k, v := range seqData {
+        var score = 0
+        if v["s_winner"] != nil && qutil.InterfaceToStr(v["s_winner"]) != "" {
+            var s_winner = qutil.ObjToString(v["s_winner"])
+            entidlist, _ := v["entidlist"].([]interface{})
+            //中标单位id
+            winnerList := strings.Split(s_winner, ",")
+            if len(entidlist) == len(winnerList) {
+                var entidlists []string
+                for _, v2 := range entidlist {
+                    entidlists = append(entidlists, util.EncodeId(qutil.InterfaceToStr(v2)))
+                }
+                v["entidlist"] = entidlists
+            } else {
+                delete(v, "entidlist") //中标单位id有误 删除id处理
+            }
+            //var s_length = 0
+            //for _, v1 := range winnerList {
+            //	if RegWinner.MatchString(v1) {
+            //		s_length += 1
+            //	}
+            //}
+            //if s_length == 0 {
+            //	continue
+            //}
+        }
+        //评审专家
+        review_experts := []string{}
+        if v["review_experts"] != nil {
+            for _, v1 := range qutil.ObjArrToStringArr(v["review_experts"].([]interface{})) {
+                if RegExperts.MatchString(v1) {
+                    review_experts = append(review_experts, v1)
+                }
+            }
+            v["review_experts"] = review_experts
+        }
+        if len(review_experts) > 0 {
+            score += review_experts_score
+        }
+        list, _ := v["list"].([]interface{})
+        if len(list) > 0 {
+            listMap, _ := list[0].(map[string]interface{})
+            v["subtype"] = listMap["subtype"]
+            delete(v, "list")
+        }
+        //采购方式
+        if v["bidtype"] != nil && qutil.ObjToString(v["bidtype"].(string)) != "" {
+            score += bidtype_score
+        }
+        //招标时间
+        if v["firsttime"] != nil && qutil.Float64All(v["firsttime"].(float64)) > 0 {
+            score += zbtime_score
+        }
+        //预算
+        if v["budget"] != nil && qutil.Float64All(v["budget"].(float64)) > 0 {
+            score += budget_score
+        }
+        //中标价格
+        if v["bidamount"] != nil && qutil.Float64All(v["bidamount"].(float64)) > 0 {
+            score += bidamount_score
+        }
+        //折扣率
+        if v["project_rate"] != nil && qutil.Float64All(v["project_rate"].(float64)) > 0 {
+            score += project_rate_score
+        }
+        //中标候选人
+        if v["winnerorder"] != nil && len(qutil.ObjArrToStringArr(v["winnerorder"].([]interface{}))) > 0 {
+            score += winnerorder_score
+        }
+        //低于三分排除
+        if score < 4 {
+            // continue
+        }
+        if v["ids"] != nil {
+            ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
+            if len(ids) > 0 {
+                v["infoid"] = util.EncodeId(ids[0])
+                delete(v, "ids")
+            }
+        }
+        v["_id"] = util.EncodeId(v["_id"].(string))
+        switch score {
+        case 4:
+            sequenceArr4 = append(sequenceArr4, seqData[k])
+        case 5:
+            sequenceArr5 = append(sequenceArr5, seqData[k])
+        case 6:
+            sequenceArr6 = append(sequenceArr6, seqData[k])
+        case 7:
+            sequenceArr7 = append(sequenceArr7, seqData[k])
+        case 8:
+            sequenceArr8 = append(sequenceArr8, seqData[k])
+        case 9:
+            sequenceArr9 = append(sequenceArr9, seqData[k])
+        default:
+            sequenceArr3 = append(sequenceArr3, seqData[k])
+        }
+    }
+    return append(append(append(append(append(append(sequenceArr9, sequenceArr8...), sequenceArr7...), sequenceArr6...), sequenceArr5...), sequenceArr4...), sequenceArr3...)
 }
 
 func GetReviewExpertsProjects(expertName string, area map[string]interface{}, business_scope []ViewKeyWord, buyer, limitTime string, searchItem, projectScope, page, pageSize int) string {
-	var query = `{"track_total_hits": true,"query":{"bool":{"must":[{"bool":{"should":[%s],"must":[%s]}},{"bool":{"should":[%s],"minimum_should_match":%d}},{"term":{"review_experts":"%s"}}]}},"_source":[%s],"sort":[%s],"from":%d,"size":%d}`
+    var query = `{"track_total_hits": true,"query":{"bool":{"must":[{"bool":{"should":[%s],"must":[%s]}},{"bool":{"should":[%s],"minimum_should_match":%d}},{"term":{"review_experts":"%s"}}]}},"_source":[%s],"sort":[%s],"from":%d,"size":%d}`
 
-	//基础查询
-	bools := []string{}
-	musts := []string{}
-	shoulds := []string{}
+    //基础查询
+    bools := []string{}
+    musts := []string{}
+    shoulds := []string{}
 
-	if searchItem == 1 { //采购单位同类型检索
-		//项目采购单位 模糊匹配
-		buyerSql := fmt.Sprintf(`{"query_string": {"default_field": "buyer","query": "*%s*"}}`, buyer)
-		musts = append(musts, buyerSql)
-	}
+    if searchItem == 1 { //采购单位同类型检索
+        //项目采购单位 模糊匹配
+        buyerSql := fmt.Sprintf(`{"query_string": {"default_field": "buyer","query": "*%s*"}}`, buyer)
+        musts = append(musts, buyerSql)
+    }
 
-	if searchItem == 2 { //地区同类型检索
-		//省份
-		areaCity := []string{}
-		//citys := []string{}
-		if len(area) > 0 {
-			areaquery := `{"terms":{"area":[`
-			var i = 0
-			for k, v := range area {
-				if len(qutil.ObjArrToStringArr(v.([]interface{}))) == 0 {
-					if i > 0 {
-						areaquery += `,`
-					}
-					areaquery += `"` + strings.ReplaceAll(strings.ReplaceAll(k, "省", ""), "市", "") + `"`
-					i += 1
-				}
-			}
-			areaquery += `]}}`
-			if i > 0 {
-				areaCity = append(areaCity, areaquery)
-			}
-		}
+    if searchItem == 2 { //地区同类型检索
+        //省份
+        areaCity := []string{}
+        //citys := []string{}
+        if len(area) > 0 {
+            areaquery := `{"terms":{"area":[`
+            var i = 0
+            for k, v := range area {
+                if len(qutil.ObjArrToStringArr(v.([]interface{}))) == 0 {
+                    if i > 0 {
+                        areaquery += `,`
+                    }
+                    areaquery += `"` + strings.ReplaceAll(strings.ReplaceAll(k, "省", ""), "市", "") + `"`
+                    i += 1
+                }
+            }
+            areaquery += `]}}`
+            if i > 0 {
+                areaCity = append(areaCity, areaquery)
+            }
+        }
 
-		if len(areaCity) > 0 {
-			musts = append(musts, strings.Join(areaCity, ","))
-		}
-	}
+        if len(areaCity) > 0 {
+            musts = append(musts, strings.Join(areaCity, ","))
+        }
+    }
 
-	//检索日期
-	if limitTime != "" {
-		var (
-			gteTime time.Time
-			gte     int64
-		)
-		sTime := time.Now()
-		switch limitTime {
-		case "oneYear":
-			gteTime = sTime.AddDate(-1, 0, 0)
-		case "threeYear":
-			gteTime = sTime.AddDate(-3, 0, 0)
-		default: // 默认近五年
-			gteTime = sTime.AddDate(-5, 0, 0)
-		}
-		gte = time.Date(gteTime.Year(), 1, 1, 0, 0, 0, 0, time.Local).Unix()
-		musts = append(musts, fmt.Sprintf(`{"range":{"jgtime":{"gte":%d,"lt":%d}}}`, gte, sTime.Unix()))
-	}
-	//中标项目
-	if PSearch_DecMust != "" {
-		musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
-	}
-	boolsNum := 0
-	//should
-	if len(business_scope) > 0 && projectScope != 1 {
-		boolsNum = 1
-		findfields := `"projectname.pname","purchasing"`
-		multi_match := fmt.Sprintf(multi_match_public, "%s", findfields)
-		for _, kv := range business_scope {
-			shoulds := []string{}
-			must_not := []string{}
-			//关键词
-			for _, v := range kv.Keyword {
-				shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+v+"\""))
-			}
-			//附加词
-			if len(kv.Appended) > 0 {
-				for _, vv := range kv.Appended {
-					shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
-				}
-			}
-			if len(kv.Exclude) > 0 {
-				//排除词
-				for _, vv := range kv.Exclude {
-					must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
-				}
-			}
-			//添加
-			if len(shoulds) > 0 {
-				notStr := ""
-				if len(must_not) > 0 {
-					notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
-				}
-				bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
-			}
-		}
-	}
-	start := (page - 1) * pageSize
-	qstr := fmt.Sprintf(query, strings.Join(shoulds, ","), strings.Join(musts, ","), strings.Join(bools, ","), boolsNum, expertName, PSearch_DecField, `{"jgtime":"desc"}`, start, pageSize)
-	log.Println("str:", qstr)
-	return qstr
+    //检索日期
+    if limitTime != "" {
+        var (
+            gteTime time.Time
+            gte     int64
+        )
+        sTime := time.Now()
+        switch limitTime {
+        case "oneYear":
+            gteTime = sTime.AddDate(-1, 0, 0)
+        case "threeYear":
+            gteTime = sTime.AddDate(-3, 0, 0)
+        default: // 默认近五年
+            gteTime = sTime.AddDate(-5, 0, 0)
+        }
+        gte = time.Date(gteTime.Year(), 1, 1, 0, 0, 0, 0, time.Local).Unix()
+        musts = append(musts, fmt.Sprintf(`{"range":{"jgtime":{"gte":%d,"lt":%d}}}`, gte, sTime.Unix()))
+    }
+    //中标项目
+    if PSearch_DecMust != "" {
+        musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
+    }
+    boolsNum := 0
+    //should
+    if len(business_scope) > 0 && projectScope != 1 {
+        boolsNum = 1
+        findfields := `"projectname.pname","purchasing"`
+        multi_match := fmt.Sprintf(multi_match_public, "%s", findfields)
+        for _, kv := range business_scope {
+            shoulds := []string{}
+            must_not := []string{}
+            //关键词
+            for _, v := range kv.Keyword {
+                shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+v+"\""))
+            }
+            //附加词
+            if len(kv.Appended) > 0 {
+                for _, vv := range kv.Appended {
+                    shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
+                }
+            }
+            if len(kv.Exclude) > 0 {
+                //排除词
+                for _, vv := range kv.Exclude {
+                    must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
+                }
+            }
+            //添加
+            if len(shoulds) > 0 {
+                notStr := ""
+                if len(must_not) > 0 {
+                    notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
+                }
+                bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
+            }
+        }
+    }
+    start := (page - 1) * pageSize
+    qstr := fmt.Sprintf(query, strings.Join(shoulds, ","), strings.Join(musts, ","), strings.Join(bools, ","), boolsNum, expertName, PSearch_DecField, `{"jgtime":"desc"}`, start, pageSize)
+    log.Println("str:", qstr)
+    return qstr
 }

+ 239 - 239
src/jfw/modules/bigmember/src/entity/analysisEntName.go

@@ -2,17 +2,17 @@
 package entity
 
 import (
-	qutil "app.yhyue.com/moapp/jybase/common"
-	elastic "app.yhyue.com/moapp/jybase/es"
-	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
-	"fmt"
-	"jy/src/jfw/modules/bigmember/src/db"
-	"jy/src/jfw/modules/bigmember/src/util"
-	"log"
-	"regexp"
-	"strings"
-	"sync"
-	"time"
+    qutil "app.yhyue.com/moapp/jybase/common"
+    elastic "app.yhyue.com/moapp/jybase/es"
+    "app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+    "fmt"
+    "jy/src/jfw/modules/bigmember/src/db"
+    "jy/src/jfw/modules/bigmember/src/util"
+    "log"
+    "regexp"
+    "strings"
+    "sync"
+    "time"
 )
 
 /*
@@ -23,35 +23,35 @@ limit 取几条
 var pnquery = `{"query": {"bool": {"must": [{"match": {"%s": "%s"}}]}},"_source": ["projectname","_id","buyer","firsttime","area","city","sourceinfoid"],"from": 0,"size": %d}`
 
 func GetProNameImmediate(sType, name string, limit int) []map[string]interface{} {
-	var queryName string
-	if sType == "1" {
-		var list []map[string]interface{}
-		r := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query": {"match_phrase": {"name": "%s"}},"_source": ["name"],"size": %d}`, name, limit))
-		if r != nil {
-			for _, v := range *r {
-				list = append(list, map[string]interface{}{"buyer": qutil.InterfaceToStr(v["name"])})
-			}
-		}
-		return list
-	} else {
-		queryName = fmt.Sprintf(pnquery, "projectname.pname", name, limit)
-	}
+    var queryName string
+    if sType == "1" {
+        var list []map[string]interface{}
+        r := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query": {"match_phrase": {"name": "%s"}},"_source": ["name"],"size": %d}`, name, limit))
+        if r != nil {
+            for _, v := range *r {
+                list = append(list, map[string]interface{}{"buyer": qutil.InterfaceToStr(v["name"])})
+            }
+        }
+        return list
+    } else {
+        queryName = fmt.Sprintf(pnquery, "projectname.pname", name, limit)
+    }
 
-	list := elastic.Get("projectset", "projectset", queryName)
-	if list == nil {
-		return nil
-	}
-	return *list
+    list := elastic.Get("projectset", "projectset", queryName)
+    if list == nil {
+        return nil
+    }
+    return *list
 }
 
 // 根据项目名称查询项目信息
 func GetProInfoById(ids, sourceinfoids []string) []map[string]interface{} {
-	var res []map[string]interface{}
-	if len(ids) > 0 {
-		res = *elastic.GetById("projectset", "projectset", ids[0])
-	}
-	if (res == nil || len(res) == 0) && len(sourceinfoids) > 0 {
-		query := `{"query": {
+    var res []map[string]interface{}
+    if len(ids) > 0 {
+        res = *elastic.GetById("projectset", "projectset", ids[0])
+    }
+    if (res == nil || len(res) == 0) && len(sourceinfoids) > 0 {
+        query := `{"query": {
 					"bool": {
 						"must": [{
 							"term": {
@@ -71,9 +71,9 @@ func GetProInfoById(ids, sourceinfoids []string) []map[string]interface{} {
 			 	"from": 0,
 				"size": 1
 			}`
-		res = *elastic.Get("projectset", "projectset", query)
-	}
-	return res
+        res = *elastic.Get("projectset", "projectset", query)
+    }
+    return res
 }
 
 var pcquery = `{"query": {"bool": {"must": [{"terms": {"%s": [%s]}}],"must_not": [],"should": []}},"from": 0,"size": 20,"sort": []}`
@@ -81,128 +81,128 @@ var qurySql = `{"query": {"bool": {"must": [],"must_not": [],"should": [%s]}},"f
 
 // 采购单位模糊
 func GetEntBlur(entName []string) []map[string]interface{} {
-	var data []string
-	for _, v := range entName {
-		data = append(data, fmt.Sprintf(`{"query_string": {"default_field": "buyer_name","query": "*%s*"}}`, v))
-	}
-	query := fmt.Sprintf(qurySql, strings.Join(data, ","))
-	list := elastic.Get("buyer", "buyer", query)
-	if list == nil {
-		return nil
-	}
-	return *list
+    var data []string
+    for _, v := range entName {
+        data = append(data, fmt.Sprintf(`{"query_string": {"default_field": "buyer_name","query": "*%s*"}}`, v))
+    }
+    query := fmt.Sprintf(qurySql, strings.Join(data, ","))
+    list := elastic.Get("buyer", "buyer", query)
+    if list == nil {
+        return nil
+    }
+    return *list
 }
 
 func GetEntPC(entName []string) []map[string]interface{} {
-	query := fmt.Sprintf(pcquery, "buyer_name", `"`+strings.Join(entName, `","`)+`"`)
-	list := elastic.Get("buyer", "buyer", query)
-	if list == nil {
-		return nil
-	}
-	return *list
+    query := fmt.Sprintf(pcquery, "buyer_name", `"`+strings.Join(entName, `","`)+`"`)
+    list := elastic.Get("buyer", "buyer", query)
+    if list == nil {
+        return nil
+    }
+    return *list
 }
 
 type EnterQYXYInfo struct {
-	Name string
-	Id   string
-	Area string
-	City string
+    Name string
+    Id   string
+    Area string
+    City string
 }
 
 // 企业库是否有此企业信息
 func GetEntInfo(entName []string, p string) (entName_r []*EnterQYXYInfo) {
-	if len(entName) > 0 {
-		query := map[string]interface{}{}
-		if p == "C" {
-			query["company_name"] = map[string]interface{}{
-				"$in": entName,
-			}
-		} else {
-			query["_id"] = map[string]interface{}{
-				"$in": entName,
-			}
-		}
-		sess := db.Mgo_Ent.GetMgoConn()
-		defer db.Mgo_Ent.DestoryMongoConn(sess)
-		it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1, "company_area": 1, "company_city": 1}).Iter()
-		for m := make(map[string]interface{}); it.Next(&m); {
-			if m["company_name"] != nil && m["company_name"].(string) != "" {
-				entName_r = append(entName_r, &EnterQYXYInfo{
-					Id:   m["_id"].(string),
-					Name: qutil.ObjToString(m["company_name"]),
-					Area: qutil.ObjToString(m["company_area"]),
-					City: qutil.ObjToString(m["company_city"]),
-				})
-			}
-		}
-	}
-	return entName_r
+    if len(entName) > 0 {
+        query := map[string]interface{}{}
+        if p == "C" {
+            query["company_name"] = map[string]interface{}{
+                "$in": entName,
+            }
+        } else {
+            query["_id"] = map[string]interface{}{
+                "$in": entName,
+            }
+        }
+        sess := db.Mgo_Ent.GetMgoConn()
+        defer db.Mgo_Ent.DestoryMongoConn(sess)
+        it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1, "company_area": 1, "company_city": 1}).Iter()
+        for m := make(map[string]interface{}); it.Next(&m); {
+            if m["company_name"] != nil && m["company_name"].(string) != "" {
+                entName_r = append(entName_r, &EnterQYXYInfo{
+                    Id:   m["_id"].(string),
+                    Name: qutil.ObjToString(m["company_name"]),
+                    Area: qutil.ObjToString(m["company_area"]),
+                    City: qutil.ObjToString(m["company_city"]),
+                })
+            }
+        }
+    }
+    return entName_r
 }
 
 // 企业库是否有此企业信息
 func GetEntInfoByQYXY(entName []string, p string) []*EnterQYXYInfo {
-	entName_r := []*EnterQYXYInfo{}
-	if len(entName) > 0 {
-		query := map[string]interface{}{}
-		if p == "C" {
-			query["company_name"] = map[string]interface{}{
-				"$in": entName,
-			}
-		} else {
-			query["_id"] = map[string]interface{}{
-				"$in": entName,
-			}
-		}
-		sess := db.Mgo_Ent.GetMgoConn()
-		defer db.Mgo_Ent.DestoryMongoConn(sess)
-		it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1, "company_area": 1, "company_city": 1}).Iter()
-		for m := make(map[string]interface{}); it.Next(&m); {
-			if m["company_name"] != nil && m["company_name"].(string) != "" {
-				entName_r = append(entName_r, &EnterQYXYInfo{
-					Id:   m["_id"].(string),
-					Name: qutil.ObjToString(m["company_name"]),
-					Area: qutil.ObjToString(m["company_area"]),
-					City: qutil.ObjToString(m["company_city"]),
-				})
-			}
-		}
-	}
-	return entName_r
+    entName_r := []*EnterQYXYInfo{}
+    if len(entName) > 0 {
+        query := map[string]interface{}{}
+        if p == "C" {
+            query["company_name"] = map[string]interface{}{
+                "$in": entName,
+            }
+        } else {
+            query["_id"] = map[string]interface{}{
+                "$in": entName,
+            }
+        }
+        sess := db.Mgo_Ent.GetMgoConn()
+        defer db.Mgo_Ent.DestoryMongoConn(sess)
+        it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1, "company_area": 1, "company_city": 1}).Iter()
+        for m := make(map[string]interface{}); it.Next(&m); {
+            if m["company_name"] != nil && m["company_name"].(string) != "" {
+                entName_r = append(entName_r, &EnterQYXYInfo{
+                    Id:   m["_id"].(string),
+                    Name: qutil.ObjToString(m["company_name"]),
+                    Area: qutil.ObjToString(m["company_area"]),
+                    City: qutil.ObjToString(m["company_city"]),
+                })
+            }
+        }
+    }
+    return entName_r
 }
 
 // 企业库是否有此企业信息 并返回加密后id
 func GetEntIdByQYXY(entName string) string {
-	var entId = ""
-	if entName != "" {
-		query := map[string]interface{}{
-			"company_name": entName,
-		}
-		sess := db.Mgo_Ent.GetMgoConn()
-		defer db.Mgo_Ent.DestoryMongoConn(sess)
-		it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1}).Iter()
-		for m := make(map[string]interface{}); it.Next(&m); {
-			if m["company_name"] != nil && m["company_name"].(string) != "" {
-				entId = m["_id"].(string)
-			}
-		}
-	}
-	return entId
+    var entId = ""
+    if entName != "" {
+        query := map[string]interface{}{
+            "company_name": entName,
+        }
+        sess := db.Mgo_Ent.GetMgoConn()
+        defer db.Mgo_Ent.DestoryMongoConn(sess)
+        it := sess.DB(db.Mgo_Ent.DbName).C("qyxy_std").Find(query).Select(map[string]interface{}{"company_name": 1, "_id": 1}).Iter()
+        for m := make(map[string]interface{}); it.Next(&m); {
+            if m["company_name"] != nil && m["company_name"].(string) != "" {
+                entId = m["_id"].(string)
+            }
+        }
+    }
+    return entId
 }
 
 // 中标企业库是否有此企业注册金额
 func GetWinnerCapitals(entName []string) map[string]int64 {
-	esSql := `{"query": {"bool": {"must": [{"terms": {"id": [%s]}}],"must_not": [],"should": []}},"_source":["id","capital"],"from": 0,"size": %d,"sort": [],"aggs": {}}`
-	querySql := fmt.Sprintf(esSql, strings.Join(entName, ","), len(entName))
-	r := elastic.Get("qyxy", "qyxy", querySql)
-	if r == nil || len(*r) == 0 {
-		return nil
-	}
-	entName_capitals := map[string]int64{}
-	for _, v := range *r {
-		id := util.EncodeId(qutil.InterfaceToStr(v["id"]))
-		entName_capitals[id] = qutil.Int64All(v["capital"])
-	}
-	return entName_capitals
+    esSql := `{"query": {"bool": {"must": [{"terms": {"id": [%s]}}],"must_not": [],"should": []}},"_source":["id","capital"],"from": 0,"size": %d,"sort": [],"aggs": {}}`
+    querySql := fmt.Sprintf(esSql, strings.Join(entName, ","), len(entName))
+    r := elastic.Get("qyxy", "qyxy", querySql)
+    if r == nil || len(*r) == 0 {
+        return nil
+    }
+    entName_capitals := map[string]int64{}
+    for _, v := range *r {
+        id := util.EncodeId(qutil.InterfaceToStr(v["id"]))
+        entName_capitals[id] = qutil.Int64All(v["capital"])
+    }
+    return entName_capitals
 }
 
 var P_Starttime = "1514736000" //2018.01.01
@@ -210,131 +210,131 @@ var P_Starttime = "1514736000" //2018.01.01
 var RegWinner = regexp.MustCompile(".+[司院厂所心处普学]$")
 
 type UserInfoLock struct {
-	sync.Mutex
-	DecLock  map[string]*sync.Mutex
-	ForWLock map[string]*sync.Mutex
+    sync.Mutex
+    DecLock  map[string]*sync.Mutex
+    ForWLock map[string]*sync.Mutex
 }
 
 var UIL *UserInfoLock
 
 func NewUserInfoLock() *UserInfoLock {
-	return &UserInfoLock{
-		DecLock:  make(map[string]*sync.Mutex),
-		ForWLock: make(map[string]*sync.Mutex),
-	}
+    return &UserInfoLock{
+        DecLock:  make(map[string]*sync.Mutex),
+        ForWLock: make(map[string]*sync.Mutex),
+    }
 }
 
 // 决策分析-中标企业和采购单位 其他项目明细
 type AnalysisDec struct {
-	Area             map[string]interface{} //地区
-	BuyerContent     []ViewKeyWord          //采购内容
-	BuyerClass       []string               //采购单位类型
-	Sid              string                 //项目招标信息id
-	Pname            string                 //项目名称
-	Industry         string                 //招标行业
-	MinPrice         int                    //最小价格
-	MaxPrice         int                    //最大价格
-	Buyer            string                 //采购单位
-	ServiceId        int                    //大会员服务id
-	MobileModel      string                 //手机型号
-	AppVersion       string                 //app版本号
-	Winner           string                 //中标企业
-	SearchType       int                    //默认0:中标企业||采购单位||(中标企业&&采购单位)-类似项目明细;1:中标企业和采购单位其他项目明细 2:分析项目明细 3:专家项目明细
-	UserId           string                 //用户id
-	IsPower          bool                   //是否有权限
-	UserLock         sync.Mutex             //用户锁
-	Buyer_BuyerClass string                 //当前采购单位的采购单位类型
-	ExpertName       string                 //专家名字
-	ProjectScope     int                    //0 同类项目(默认搜索) 1 全部项目
-	LimitTime        string
-	SearchItem       int
-	Page             int //页码
-	PageSize         int //数量
+    Area             map[string]interface{} //地区
+    BuyerContent     []ViewKeyWord          //采购内容
+    BuyerClass       []string               //采购单位类型
+    Sid              string                 //项目招标信息id
+    Pname            string                 //项目名称
+    Industry         string                 //招标行业
+    MinPrice         int                    //最小价格
+    MaxPrice         int                    //最大价格
+    Buyer            string                 //采购单位
+    ServiceId        int                    //大会员服务id
+    MobileModel      string                 //手机型号
+    AppVersion       string                 //app版本号
+    Winner           string                 //中标企业
+    SearchType       int                    //默认0:中标企业||采购单位||(中标企业&&采购单位)-类似项目明细;1:中标企业和采购单位其他项目明细 2:分析项目明细 3:专家项目明细
+    UserId           string                 //用户id
+    IsPower          bool                   //是否有权限
+    UserLock         sync.Mutex             //用户锁
+    Buyer_BuyerClass string                 //当前采购单位的采购单位类型
+    ExpertName       string                 //专家名字
+    ProjectScope     int                    //0 同类项目(默认搜索) 1 全部项目
+    LimitTime        string
+    SearchItem       int
+    Page             int //页码
+    PageSize         int //数量
 }
 
 /*已选条件--关键词*/
 type ViewKeyWord struct {
-	Keyword  []string `json:"key"`       //关键词
-	Appended []string `json:"appendkey"` //附加词
-	Exclude  []string `json:"notkey"`    //排除词
-	MatchWay int      `json:"matchway"`  //匹配模式
+    Keyword  []string `json:"key"`       //关键词
+    Appended []string `json:"appendkey"` //附加词
+    Exclude  []string `json:"notkey"`    //排除词
+    MatchWay int      `json:"matchway"`  //匹配模式
 }
 
 func CheckPower(session *httpsession.Session) (string, bool) {
-	main_userId, _, member_status := util.MainUserId(session)
-	return main_userId, member_status > 0
+    main_userId, _, member_status := util.MainUserId(session)
+    return main_userId, member_status > 0
 }
 
 func (this *AnalysisDec) GetProjectInfoByBW() (count int64, res []map[string]interface{}) {
-	//this.UserLock.Lock()
-	//defer this.UserLock.Unlock()
-	//采购单位的采购类型
-	//if this.Buyer != "" {
-	//	buyerData := GetEntPC(strings.Split(this.Buyer, ","))
-	//	if buyerData != nil && len(buyerData) > 0 {
-	//		buyer_one := *qutil.ObjToMap(buyerData[0])
-	//		if buyer_one["buyerclass"] != nil {
-	//			this.Buyer_BuyerClass = buyer_one["buyerclass"].(string)
-	//		}
-	//	}
-	//}
-	this.ParameterCheck()
-	//this.BuyerContent = BuyerContentStruct(this.BuyerContent)
-	//中标企业和采购单位类似项目明细
-	decQuery := this.DecQueryNewSimilarMsgByBW()
-	tm := time.Now()
-	//其他项目明细
-	switch this.SearchType {
-	case 0: //分析项目明细||中标单位项目明细
-		_, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
-	case 1:
-		_, _idMap := this.GetAllMsgByBW(decQuery)
-		//中标企业和采购单位 所有项目明细
-		allQuery := this.GetAllBWQueryByBW()
-		allMsg, _ := this.GetAllMsgByBW(allQuery)
-		if len(allMsg) > 0 {
-			for _, v := range allMsg {
-				id := qutil.ObjToString(v["_id"])
-				if _idMap[id] {
-					continue
-				}
-				res = append(res, v)
-			}
-		}
-	case 2: //中标单位top10项目明细
-		_, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
-	case 3: // 专家明细
-		decQuery := GetReviewExpertsProjects(this.ExpertName, this.Area, this.BuyerContent, this.Buyer, this.LimitTime, this.SearchItem, this.ProjectScope, this.Page, this.PageSize)
-		_, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
-		log.Println("各类项目明细耗时:", time.Since(tm))
-		return count, res
-	}
-	log.Println("各类项目明细耗时:", time.Since(tm))
-	return count, Sequence(res)
+    //this.UserLock.Lock()
+    //defer this.UserLock.Unlock()
+    //采购单位的采购类型
+    //if this.Buyer != "" {
+    //	buyerData := GetEntPC(strings.Split(this.Buyer, ","))
+    //	if buyerData != nil && len(buyerData) > 0 {
+    //		buyer_one := *qutil.ObjToMap(buyerData[0])
+    //		if buyer_one["buyerclass"] != nil {
+    //			this.Buyer_BuyerClass = buyer_one["buyerclass"].(string)
+    //		}
+    //	}
+    //}
+    this.ParameterCheck()
+    //this.BuyerContent = BuyerContentStruct(this.BuyerContent)
+    //中标企业和采购单位类似项目明细
+    decQuery := this.DecQueryNewSimilarMsgByBW()
+    tm := time.Now()
+    //其他项目明细
+    switch this.SearchType {
+    case 0: //分析项目明细||中标单位项目明细
+        _, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
+    case 1:
+        _, _idMap := this.GetAllMsgByBW(decQuery)
+        //中标企业和采购单位 所有项目明细
+        allQuery := this.GetAllBWQueryByBW()
+        allMsg, _ := this.GetAllMsgByBW(allQuery)
+        if len(allMsg) > 0 {
+            for _, v := range allMsg {
+                id := qutil.ObjToString(v["_id"])
+                if _idMap[id] {
+                    continue
+                }
+                res = append(res, v)
+            }
+        }
+    case 2: //中标单位top10项目明细
+        _, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
+    case 3: // 专家明细
+        decQuery := GetReviewExpertsProjects(this.ExpertName, this.Area, this.BuyerContent, this.Buyer, this.LimitTime, this.SearchItem, this.ProjectScope, this.Page, this.PageSize)
+        _, count, res = elastic.GetAggs("projectset", "projectset", decQuery)
+        log.Println("各类项目明细耗时:", time.Since(tm))
+
+    }
+    log.Println("各类项目明细耗时:", time.Since(tm))
+    return count, NewSequence(res)
 }
 
 func (this *AnalysisDec) ParameterCheck() {
-	this.BuyerContent = BuyerContentStruct(this.BuyerContent)
-	switch this.SearchType {
-	case 0: //类似项目 过滤无用字段
-		this.Winner = ""
-		this.ExpertName = ""
-	case 2: //中标top10项目明细 过滤无用字段
-		this.ExpertName = ""
-	case 3: //专家项目明细 过滤无用字段
-		this.Winner = ""
-	}
+    this.BuyerContent = BuyerContentStruct(this.BuyerContent)
+    switch this.SearchType {
+    case 0: //类似项目 过滤无用字段
+        this.Winner = ""
+        this.ExpertName = ""
+    case 2: //中标top10项目明细 过滤无用字段
+        this.ExpertName = ""
+    case 3: //专家项目明细 过滤无用字段
+        this.Winner = ""
+    }
 }
 
 // 获取数据
 func (this *AnalysisDec) GetAllMsgByBW(decQuery string) (res []map[string]interface{}, idMap map[string]bool) {
-	newRes := elastic.Get("projectset", "projectset", decQuery)
-	if newRes != nil {
-		idMap = map[string]bool{}
-		res = *newRes
-		for _, v := range *newRes {
-			idMap[qutil.ObjToString(v["_id"])] = true
-		}
-	}
-	return res, idMap
+    newRes := elastic.Get("projectset", "projectset", decQuery)
+    if newRes != nil {
+        idMap = map[string]bool{}
+        res = *newRes
+        for _, v := range *newRes {
+            idMap[qutil.ObjToString(v["_id"])] = true
+        }
+    }
+    return res, idMap
 }

+ 944 - 1061
src/jfw/modules/bigmember/src/service/analysis/decision.go

@@ -2,61 +2,60 @@
 package analysis
 
 import (
-	elastic "app.yhyue.com/moapp/jybase/es"
-	"encoding/json"
-	"fmt"
-	"jy/src/jfw/modules/bigmember/src/config"
-	"jy/src/jfw/modules/bigmember/src/entity"
-	"jy/src/jfw/modules/bigmember/src/util"
-	"log"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
+    elastic "app.yhyue.com/moapp/jybase/es"
+    "encoding/json"
+    "fmt"
+    "jy/src/jfw/modules/bigmember/src/config"
+    "jy/src/jfw/modules/bigmember/src/entity"
+    "jy/src/jfw/modules/bigmember/src/util"
+    "log"
+    "strconv"
+    "sync"
+    "time"
 
-	. "app.yhyue.com/moapp/jybase/api"
-	qutil "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+    . "app.yhyue.com/moapp/jybase/api"
+    qutil "app.yhyue.com/moapp/jybase/common"
+    "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 
 type DecParam struct {
-	SearchItem    int
-	Area          map[string]interface{} //地区
-	BuyerContent  []ViewKeyWord          //采购内容
-	BuyerClass    []string               //采购单位行业
-	Sid           string                 //项目招标信息id
-	Pname         string                 //项目名称
-	Industry      string                 //招标行业
-	MinPrice      int                    //最小价格
-	MaxPrice      int                    //最大价格
-	Buyer         string                 //采购单位
-	ServiceId     int                    //大会员服务id
-	MobileModel   string                 //手机型号
-	AppVersion    string                 //app版本号
-	LimitTime     string                 //检索日期
-	ProjectScope  int                    //0 同类项目(默认搜索) 1 全部项目
-	HotWinnerType int                    // 热门中标企业top10 排序 0 默认金额排序 1:数量
+    SearchItem    int
+    Area          map[string]interface{} //地区
+    BuyerContent  []ViewKeyWord          //采购内容
+    BuyerClass    []string               //采购单位行业
+    Sid           string                 //项目招标信息id
+    Pname         string                 //项目名称
+    Industry      string                 //招标行业
+    MinPrice      int                    //最小价格
+    MaxPrice      int                    //最大价格
+    Buyer         string                 //采购单位
+    ServiceId     int                    //大会员服务id
+    MobileModel   string                 //手机型号
+    AppVersion    string                 //app版本号
+    LimitTime     string                 //检索日期
+    ProjectScope  int                    //0 同类项目(默认搜索) 1 全部项目
+    HotWinnerType int                    // 热门中标企业top10 排序 0 默认金额排序 1:数量
 }
 
 /*已选条件--关键词*/
 type ViewKeyWord struct {
-	Keyword  []string `json:"key"`       //关键词
-	Appended []string `json:"appendkey"` //附加词
-	Exclude  []string `json:"notkey"`    //排除词
-	MatchWay int      `json:"matchway"`  //匹配模式
+    Keyword  []string `json:"key"`       //关键词
+    Appended []string `json:"appendkey"` //附加词
+    Exclude  []string `json:"notkey"`    //排除词
+    MatchWay int      `json:"matchway"`  //匹配模式
 }
 
 type GetProParam struct {
-	ExpertName   string //专家名字
-	LimitTime    string //检索日期
-	ProjectScope int    //0 同类项目(默认搜索) 1 全部项目
-	SearchItem   int
-	Area         map[string]interface{} //地区
-	Buyer        string                 //采购单位
-	ServiceId    int                    //大会员服务id
-	BuyerContent []ViewKeyWord          //采购内容
-	Page         int
-	PageSize     int
+    ExpertName   string //专家名字
+    LimitTime    string //检索日期
+    ProjectScope int    //0 同类项目(默认搜索) 1 全部项目
+    SearchItem   int
+    Area         map[string]interface{} //地区
+    Buyer        string                 //采购单位
+    ServiceId    int                    //大会员服务id
+    BuyerContent []ViewKeyWord          //采购内容
+    Page         int
+    PageSize     int
 }
 
 // 投标决策分析id
@@ -64,1062 +63,946 @@ var ServiceId = 6
 
 // 采购单位和中标企业 其他项目明细/类似项目明细
 func (this *Analysis) ProjectInfoByBW() {
-	defer qutil.Catch()
-	r := func() Result {
-		if this.Method() != "POST" {
-			return Result{Data: nil, Error_msg: Error_msg_1005}
-		}
-		if string(this.Body()) == "" {
-			return Result{Data: nil, Error_msg: Error_msg_1003}
-		}
-		EAD := entity.AnalysisDec{}
-		//接收参数
-		json.Unmarshal(this.Body(), &EAD)
-		if len(EAD.BuyerContent) == 0 {
-			return Result{Data: nil, Error_msg: Error_msg_1003}
-		}
-		//是否是大会员用户
-		if EAD.UserId, EAD.IsPower = entity.CheckPower(this.Session()); !EAD.IsPower {
-			return Result{Data: nil, Error_msg: Error_msg_1004}
-		}
-		EAD.ServiceId = ServiceId
-		//EAD.UserLock = *entity.ThisLock(EAD.UserId)
+    defer qutil.Catch()
+    r := func() Result {
+        if this.Method() != "POST" {
+            return Result{Data: nil, Error_msg: Error_msg_1005}
+        }
+        if string(this.Body()) == "" {
+            return Result{Data: nil, Error_msg: Error_msg_1003}
+        }
+        EAD := entity.AnalysisDec{}
+        //接收参数
+        json.Unmarshal(this.Body(), &EAD)
+        if len(EAD.BuyerContent) == 0 {
+            return Result{Data: nil, Error_msg: Error_msg_1003}
+        }
+        //是否是大会员用户
+        if EAD.UserId, EAD.IsPower = entity.CheckPower(this.Session()); !EAD.IsPower {
+            return Result{Data: nil, Error_msg: Error_msg_1004}
+        }
+        EAD.ServiceId = ServiceId
+        //EAD.UserLock = *entity.ThisLock(EAD.UserId)
 
-		count, res := EAD.GetProjectInfoByBW()
-		return Result{Data: map[string]interface{}{"count": count, "res": res}}
-	}()
-	this.ServeJson(r)
+        count, res := EAD.GetProjectInfoByBW()
+        return Result{Data: map[string]interface{}{"count": count, "res": res}}
+    }()
+    this.ServeJson(r)
 }
 
 // 试用用户分析
 func (this *Analysis) TrialInfo() {
-	defer qutil.Catch()
-	userId, _ := this.GetSession("userId").(string)
-	rData, errMsg := func() (interface{}, error) {
-		baseMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-		if baseMsg == nil {
-			return -2, nil
-		}
-		//试用用户
-		var isTrialBool = false
-		if baseMsg.Status == 4 {
-			isTrialBool = true
-		}
-		//非试用用户 不做统计
-		if !isTrialBool {
-			return 1, nil
-		}
-		//是否是已预测过得项目
-		pname := this.GetString("pname")
-		sid := this.GetString("sid")
-		serviceId, _ := this.GetInteger("serviceid")
-		if pname == "" || sid == "" {
-			return -2, nil
-		}
-		if serviceId == 0 {
-			serviceId = 6
-		}
-		ai, _, decision_count := AnalysisPower("P", userId, pname, sid, serviceId)
-		if ai == 1 {
-			return 1, nil
-		}
-		if decision_count >= 0 {
-			return decision_count, nil
-		}
-		return 0, nil
-	}()
-	if errMsg != nil {
-		log.Printf("%s 获取此用户试用信息出错-%s", userId, errMsg)
-	}
-	this.ServeJson(NewResult(rData, errMsg))
+    defer qutil.Catch()
+    userId, _ := this.GetSession("userId").(string)
+    rData, errMsg := func() (interface{}, error) {
+        baseMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+        if baseMsg == nil {
+            return -2, nil
+        }
+        //试用用户
+        var isTrialBool = false
+        if baseMsg.Status == 4 {
+            isTrialBool = true
+        }
+        //非试用用户 不做统计
+        if !isTrialBool {
+            return 1, nil
+        }
+        //是否是已预测过得项目
+        pname := this.GetString("pname")
+        sid := this.GetString("sid")
+        serviceId, _ := this.GetInteger("serviceid")
+        if pname == "" || sid == "" {
+            return -2, nil
+        }
+        if serviceId == 0 {
+            serviceId = 6
+        }
+        ai, _, decision_count := AnalysisPower("P", userId, pname, sid, serviceId)
+        if ai == 1 {
+            return 1, nil
+        }
+        if decision_count >= 0 {
+            return decision_count, nil
+        }
+        return 0, nil
+    }()
+    if errMsg != nil {
+        log.Printf("%s 获取此用户试用信息出错-%s", userId, errMsg)
+    }
+    this.ServeJson(NewResult(rData, errMsg))
 }
 
 // 决策分析内容-普通用户
 func (this *Analysis) FreeDecInfo() {
-	defer qutil.Catch()
-	var regMap = Result{
-		Data:       []map[string]interface{}{},
-		Error_code: Error_code,
-		Error_msg:  "",
-	}
-	if this.Method() == METHOD {
-		//接受前端参数
-		getRes := new(DecParam)
-		if string(this.Body()) != "" {
-			//接收参数
-			json.Unmarshal(this.Body(), &getRes)
-		}
+    defer qutil.Catch()
+    var regMap = Result{
+        Data:       []map[string]interface{}{},
+        Error_code: Error_code,
+        Error_msg:  "",
+    }
+    if this.Method() == METHOD {
+        //接受前端参数
+        getRes := new(DecParam)
+        if string(this.Body()) != "" {
+            //接收参数
+            json.Unmarshal(this.Body(), &getRes)
+        }
 
-		if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
-			userId, _ := this.GetSession("userId").(string)
-			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-			mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
-			entity.UIL.Lock()
-			if entity.UIL.DecLock[mainUserid] == nil {
-				entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
-			}
-			entity.UIL.Unlock()
-			entity.UIL.DecLock[mainUserid].Lock()
-			defer entity.UIL.DecLock[mainUserid].Unlock()
-			if getRes.ServiceId == 0 {
-				getRes.ServiceId = 6
-			}
-			//采购单位的采购类型
-			buyer_buyerClass := ""
-			getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
-			decQuery := DecQueryFree(getRes.Area, getRes.BuyerContent, getRes.LimitTime, getRes.Buyer, getRes.SearchItem)
-			regMap.Data = getDecInfoFree(decQuery, buyer_buyerClass, getRes)
-			//投标决策分析历史记录
-			go SaveDecHistortList(getRes, userId, mainUserid, phone, "", 0, this.Request, "free")
-		} else {
-			regMap.Error_code = Error_code_1002
-			regMap.Error_msg = Error_msg_1002
-		}
-	} else {
-		regMap.Error_code = Error_code_1005
-		regMap.Error_msg = Error_msg_1005
-	}
-	this.ServeJson(regMap)
+        if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
+            userId, _ := this.GetSession("userId").(string)
+            bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+            mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
+            entity.UIL.Lock()
+            if entity.UIL.DecLock[mainUserid] == nil {
+                entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
+            }
+            entity.UIL.Unlock()
+            entity.UIL.DecLock[mainUserid].Lock()
+            defer entity.UIL.DecLock[mainUserid].Unlock()
+            if getRes.ServiceId == 0 {
+                getRes.ServiceId = 6
+            }
+            //采购单位的采购类型
+            buyer_buyerClass := ""
+            getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
+            decQuery := DecQueryFree(getRes.Area, getRes.BuyerContent, getRes.LimitTime, getRes.Buyer, getRes.SearchItem)
+            regMap.Data = getDecInfoFree(decQuery, buyer_buyerClass, getRes)
+            //投标决策分析历史记录
+            go SaveDecHistortList(getRes, userId, mainUserid, phone, "", 0, this.Request, "free")
+        } else {
+            regMap.Error_code = Error_code_1002
+            regMap.Error_msg = Error_msg_1002
+        }
+    } else {
+        regMap.Error_code = Error_code_1005
+        regMap.Error_msg = Error_msg_1005
+    }
+    this.ServeJson(regMap)
 }
 
 // 决策分析内容
 func (this *Analysis) DecInfo() {
-	defer qutil.Catch()
-	var regMap = Result{
-		Data:       []map[string]interface{}{},
-		Error_code: Error_code,
-		Error_msg:  "",
-	}
-	if this.Method() == METHOD {
-		//接受前端参数
-		getRes := new(DecParam)
-		if string(this.Body()) != "" {
-			//接收参数
-			json.Unmarshal(this.Body(), &getRes)
-		}
+    defer qutil.Catch()
+    var regMap = Result{
+        Data:       []map[string]interface{}{},
+        Error_code: Error_code,
+        Error_msg:  "",
+    }
+    if this.Method() == METHOD {
+        //接受前端参数
+        getRes := new(DecParam)
+        if string(this.Body()) != "" {
+            //接收参数
+            json.Unmarshal(this.Body(), &getRes)
+        }
 
-		if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
-			var decCount = 0   //功能剩余次数
-			var base64Key = "" //加密串
-			userId, _ := this.GetSession("userId").(string)
-			//是否是子账号
-			//main_userId, phone, member_status := util.MainUserId(this.Session())
-			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-			mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
-			isAble := false
-			if len(bigMsg.Data.Member.MemberPowerList) > 0 {
-				for _, v := range bigMsg.Data.Member.MemberPowerList {
-					if v == 6 {
-						isAble = true
-					}
-				}
-			}
-			if !isAble {
-				regMap.Error_code = Error_code_1004
-				regMap.Error_msg = Error_msg_1004
-			} else {
-				entity.UIL.Lock()
-				if entity.UIL.DecLock[mainUserid] == nil {
-					entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
-				}
-				entity.UIL.Unlock()
-				entity.UIL.DecLock[mainUserid].Lock()
-				defer entity.UIL.DecLock[mainUserid].Unlock()
-				if getRes.ServiceId == 0 {
-					getRes.ServiceId = 6
-				}
-				var buyer_buyerClass string
-				//采购单位的采购类型
-				/*
-				   if getRes.Buyer != "" {
-				   	buyerData := entity.GetEntBlur(strings.Split(getRes.Buyer, ","))
-				   	if buyerData != nil && len(buyerData) > 0 {
-				   		buyer_one := *qutil.ObjToMap(buyerData[0])
-				   		if buyer_one["buyerclass"] != nil {
-				   			buyer_buyerClass = buyer_one["buyerclass"].(string)
-				   		}
-				   	}
-				   }*/
-				getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
-				//各维度项目数量
-				all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
-				var isAnalyze bool
-				if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
-					(getRes.SearchItem == 2 && area_count == 0) {
-					isAnalyze = true
-				}
-				if isAnalyze {
-					regMap.Data = map[string]interface{}{
-						"PAnalysis":  nil,
-						"PCount":     all_count,
-						"AreaCount":  area_count,
-						"BuyerCount": buyer_count,
-					}
-					this.ServeJson(regMap)
-					return
-				}
+        if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
+            var decCount = 0   //功能剩余次数
+            var base64Key = "" //加密串
+            userId, _ := this.GetSession("userId").(string)
+            //是否是子账号
+            //main_userId, phone, member_status := util.MainUserId(this.Session())
+            bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+            mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
+            isAble := false
+            if len(bigMsg.Data.Member.MemberPowerList) > 0 {
+                for _, v := range bigMsg.Data.Member.MemberPowerList {
+                    if v == 6 {
+                        isAble = true
+                    }
+                }
+            }
+            if !isAble {
+                regMap.Error_code = Error_code_1004
+                regMap.Error_msg = Error_msg_1004
+            } else {
+                entity.UIL.Lock()
+                if entity.UIL.DecLock[mainUserid] == nil {
+                    entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
+                }
+                entity.UIL.Unlock()
+                entity.UIL.DecLock[mainUserid].Lock()
+                defer entity.UIL.DecLock[mainUserid].Unlock()
+                if getRes.ServiceId == 0 {
+                    getRes.ServiceId = 6
+                }
+                var buyer_buyerClass string
+                //采购单位的采购类型
+                /*
+                   if getRes.Buyer != "" {
+                   	buyerData := entity.GetEntBlur(strings.Split(getRes.Buyer, ","))
+                   	if buyerData != nil && len(buyerData) > 0 {
+                   		buyer_one := *qutil.ObjToMap(buyerData[0])
+                   		if buyer_one["buyerclass"] != nil {
+                   			buyer_buyerClass = buyer_one["buyerclass"].(string)
+                   		}
+                   	}
+                   }*/
+                getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
+                //各维度项目数量
+                all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
+                var isAnalyze bool
+                if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
+                    (getRes.SearchItem == 2 && area_count == 0) {
+                    isAnalyze = true
+                }
+                if isAnalyze {
+                    regMap.Data = map[string]interface{}{
+                        "PAnalysis":  nil,
+                        "PCount":     all_count,
+                        "AreaCount":  area_count,
+                        "BuyerCount": buyer_count,
+                    }
+                    this.ServeJson(regMap)
+                    return
+                }
 
-				var rMap = sync.Map{}
-				sy := sync.WaitGroup{}
-				for _, v := range []int{1, 2, 3} {
-					sy.Add(1)
-					go func(stype int) {
-						defer sy.Done()
-						decQuery := DecQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, stype)
-						aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, stype)
-						for k, v1 := range aggsArr {
-							rMap.Store(k, v1)
-						}
-					}(v)
-				}
-				sy.Wait()
-				rMaps := make(map[string]interface{})
-				rMap.Range(func(key, value interface{}) bool {
-					rMaps[qutil.InterfaceToStr(key)] = value
-					return true
-				})
-				regMap.Data = map[string]interface{}{
-					"PAnalysis":  rMaps,
-					"PCount":     all_count,
-					"AreaCount":  area_count,
-					"BuyerCount": buyer_count,
-				}
-				//投标决策分析历史记录
-				go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
-			}
-		} else {
-			regMap.Error_code = Error_code_1002
-			regMap.Error_msg = Error_msg_1002
-		}
-	} else {
-		regMap.Error_code = Error_code_1005
-		regMap.Error_msg = Error_msg_1005
-	}
-	this.ServeJson(regMap)
+                var rMap = sync.Map{}
+                sy := sync.WaitGroup{}
+                for _, v := range []int{1, 2, 3} {
+                    sy.Add(1)
+                    go func(stype int) {
+                        defer sy.Done()
+                        decQuery := DecQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, stype)
+                        aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, stype)
+                        for k, v1 := range aggsArr {
+                            rMap.Store(k, v1)
+                        }
+                    }(v)
+                }
+                sy.Wait()
+                rMaps := make(map[string]interface{})
+                rMap.Range(func(key, value interface{}) bool {
+                    rMaps[qutil.InterfaceToStr(key)] = value
+                    return true
+                })
+                regMap.Data = map[string]interface{}{
+                    "PAnalysis":  rMaps,
+                    "PCount":     all_count,
+                    "AreaCount":  area_count,
+                    "BuyerCount": buyer_count,
+                }
+                //投标决策分析历史记录
+                go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
+            }
+        } else {
+            regMap.Error_code = Error_code_1002
+            regMap.Error_msg = Error_msg_1002
+        }
+    } else {
+        regMap.Error_code = Error_code_1005
+        regMap.Error_msg = Error_msg_1005
+    }
+    this.ServeJson(regMap)
 }
 
 func (this *Analysis) HotWinnerTop() {
-	defer qutil.Catch()
-	var regMap = Result{
-		Data:       []map[string]interface{}{},
-		Error_code: Error_code,
-		Error_msg:  "",
-	}
-	if this.Method() == METHOD {
-		//接受前端参数
-		getRes := new(DecParam)
-		if string(this.Body()) != "" {
-			//接收参数
-			json.Unmarshal(this.Body(), &getRes)
-		}
+    defer qutil.Catch()
+    var regMap = Result{
+        Data:       []map[string]interface{}{},
+        Error_code: Error_code,
+        Error_msg:  "",
+    }
+    if this.Method() == METHOD {
+        //接受前端参数
+        getRes := new(DecParam)
+        if string(this.Body()) != "" {
+            //接收参数
+            json.Unmarshal(this.Body(), &getRes)
+        }
 
-		if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
-			//是否是子账号
-			//main_userId, phone, member_status := util.MainUserId(this.Session())
-			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-			isAble := false
-			if len(bigMsg.Data.Member.MemberPowerList) > 0 {
-				for _, v := range bigMsg.Data.Member.MemberPowerList {
-					if v == 6 {
-						isAble = true
-					}
-				}
-			}
-			if !isAble {
-				regMap.Error_code = Error_code_1004
-				regMap.Error_msg = Error_msg_1004
-			} else {
-				if getRes.ServiceId == 0 {
-					getRes.ServiceId = 6
-				}
-				//采购单位的采购类型
-				buyer_buyerClass := ""
-				getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
-				decQuery := DecWinnerQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.HotWinnerType)
-				aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
-				//top明细数量错误问题特殊处理 数量重新查询
-				var rMap = sync.Map{}
-				sy := sync.WaitGroup{}
-				winnerAmount, _ := aggsArr["winnerAmount"].([]*DecWinnerInfo)
-				if len(winnerAmount) > 0 {
-					for _, v := range winnerAmount {
-						sy.Add(1)
-						go func(winner string) {
-							defer sy.Done()
-							winnerSql := DecQueryNewSimilarMsgByBW(winner, getRes, 0)
-							_, count, _ := elastic.GetAggs(P_INDEX, P_TYPE, winnerSql)
-							rMap.Store(winner, count)
-						}(v.Key)
-					}
-					sy.Wait()
-					for _, v := range winnerAmount {
-						if v1, ok := rMap.Load(v.Key); ok {
-							v.Doc_count = qutil.Float64All(v1)
-						}
-					}
-					sortkey := "doc_count" //默认金额
-					if getRes.HotWinnerType == 0 {
-						sortkey = "total_project"
-					}
-					util.SortData(&winnerAmount, sortkey, true) //排序
-					aggsArr["winnerAmount"] = winnerAmount
-				}
+        if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
+            //是否是子账号
+            //main_userId, phone, member_status := util.MainUserId(this.Session())
+            bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+            isAble := false
+            if len(bigMsg.Data.Member.MemberPowerList) > 0 {
+                for _, v := range bigMsg.Data.Member.MemberPowerList {
+                    if v == 6 {
+                        isAble = true
+                    }
+                }
+            }
+            if !isAble {
+                regMap.Error_code = Error_code_1004
+                regMap.Error_msg = Error_msg_1004
+            } else {
+                if getRes.ServiceId == 0 {
+                    getRes.ServiceId = 6
+                }
+                //采购单位的采购类型
+                buyer_buyerClass := ""
+                getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
+                decQuery := DecWinnerQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.HotWinnerType)
+                aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
+                //top明细数量错误问题特殊处理 数量重新查询
+                var rMap = sync.Map{}
+                sy := sync.WaitGroup{}
+                winnerAmount, _ := aggsArr["winnerAmount"].([]*DecWinnerInfo)
+                if len(winnerAmount) > 0 {
+                    for _, v := range winnerAmount {
+                        sy.Add(1)
+                        go func(winner string) {
+                            defer sy.Done()
+                            winnerSql := DecQueryNewSimilarMsgByBW(winner, getRes, 0)
+                            _, count, _ := elastic.GetAggs(P_INDEX, P_TYPE, winnerSql)
+                            rMap.Store(winner, count)
+                        }(v.Key)
+                    }
+                    sy.Wait()
+                    for _, v := range winnerAmount {
+                        if v1, ok := rMap.Load(v.Key); ok {
+                            v.Doc_count = qutil.Float64All(v1)
+                        }
+                    }
+                    sortkey := "doc_count" //默认金额
+                    if getRes.HotWinnerType == 0 {
+                        sortkey = "total_project"
+                    }
+                    util.SortData(&winnerAmount, sortkey, true) //排序
+                    aggsArr["winnerAmount"] = winnerAmount
+                }
 
-				regMap.Data = map[string]interface{}{
-					"PAnalysis": aggsArr,
-				}
-			}
-		} else {
-			regMap.Error_code = Error_code_1002
-			regMap.Error_msg = Error_msg_1002
-		}
-	} else {
-		regMap.Error_code = Error_code_1005
-		regMap.Error_msg = Error_msg_1005
-	}
-	this.ServeJson(regMap)
+                regMap.Data = map[string]interface{}{
+                    "PAnalysis": aggsArr,
+                }
+            }
+        } else {
+            regMap.Error_code = Error_code_1002
+            regMap.Error_msg = Error_msg_1002
+        }
+    } else {
+        regMap.Error_code = Error_code_1005
+        regMap.Error_msg = Error_msg_1005
+    }
+    this.ServeJson(regMap)
 }
 
 // 决策分析内容-评标专家top十
 func (this *Analysis) DecReviewExperts() {
-	defer qutil.Catch()
-	var regMap = Result{
-		Data:       []map[string]interface{}{},
-		Error_code: Error_code,
-		Error_msg:  "",
-	}
-	if this.Method() == METHOD {
-		//接受前端参数
-		getRes := new(DecParam)
-		if string(this.Body()) != "" {
-			//接收参数
-			json.Unmarshal(this.Body(), &getRes)
-		}
+    defer qutil.Catch()
+    var regMap = Result{
+        Data:       []map[string]interface{}{},
+        Error_code: Error_code,
+        Error_msg:  "",
+    }
+    if this.Method() == METHOD {
+        //接受前端参数
+        getRes := new(DecParam)
+        if string(this.Body()) != "" {
+            //接收参数
+            json.Unmarshal(this.Body(), &getRes)
+        }
 
-		if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
-			//是否是子账号
-			//main_userId, phone, member_status := util.MainUserId(this.Session())
-			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-			isAble := false
-			if len(bigMsg.Data.Member.MemberPowerList) > 0 {
-				for _, v := range bigMsg.Data.Member.MemberPowerList {
-					if v == 6 {
-						isAble = true
-					}
-				}
-			}
-			if !isAble {
-				regMap.Error_code = Error_code_1004
-				regMap.Error_msg = Error_msg_1004
-			} else {
-				if getRes.ServiceId == 0 {
-					getRes.ServiceId = 6
-				}
-				//各维度项目数量
-				all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
-				var isAnalyze bool
-				if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
-					(getRes.SearchItem == 2 && area_count == 0) {
-					isAnalyze = true
-				}
-				if isAnalyze {
-					regMap.Data = map[string]interface{}{
-						"PAnalysis": nil,
-					}
-					this.ServeJson(regMap)
-					return
-				}
-				// getRes.Buyer = "北京市交通委员会密云公路分局"
-				//采购单位的采购类型
-				buyer_buyerClass := ""
-				getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
-				decQuery := DecReviewExpertsQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, buyer_buyerClass, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
-				aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
-				//log.Println("专家top10", aggsArr["reviewExperts"])
-				var expertlist []map[string]interface{}
-				if reviewExperts, ok := aggsArr["reviewExperts"].([]map[string]interface{}); ok {
-					for k, v := range reviewExperts {
-						if k < 10 {
-							expertName := qutil.ObjToString(v["key"])
-							decQuery := ExpertsCooperationProjectCount(expertName, getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
-							_, count, _ := elastic.GetAggs("projectset", "projectset", decQuery)
-							v["doc_count"] = count
-							expertlist = append(expertlist, v)
-						} else {
-							break
-						}
-					}
-					util.SortData(&expertlist, "doc_count", true)
-					aggsArr["reviewExperts"] = expertlist
-				}
+        if getRes.Area != nil && getRes.Buyer != "" && len(getRes.BuyerContent) > 0 {
+            //是否是子账号
+            //main_userId, phone, member_status := util.MainUserId(this.Session())
+            bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+            isAble := false
+            if len(bigMsg.Data.Member.MemberPowerList) > 0 {
+                for _, v := range bigMsg.Data.Member.MemberPowerList {
+                    if v == 6 {
+                        isAble = true
+                    }
+                }
+            }
+            if !isAble {
+                regMap.Error_code = Error_code_1004
+                regMap.Error_msg = Error_msg_1004
+            } else {
+                if getRes.ServiceId == 0 {
+                    getRes.ServiceId = 6
+                }
+                //各维度项目数量
+                all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
+                var isAnalyze bool
+                if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
+                    (getRes.SearchItem == 2 && area_count == 0) {
+                    isAnalyze = true
+                }
+                if isAnalyze {
+                    regMap.Data = map[string]interface{}{
+                        "PAnalysis": nil,
+                    }
+                    this.ServeJson(regMap)
+                    return
+                }
+                // getRes.Buyer = "北京市交通委员会密云公路分局"
+                //采购单位的采购类型
+                buyer_buyerClass := ""
+                getRes.BuyerContent = BuyerContentStruct(getRes.BuyerContent)
+                decQuery := DecReviewExpertsQuery(getRes.Area, getRes.BuyerContent, getRes.Buyer, buyer_buyerClass, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
+                aggsArr := getDecInfo(decQuery, buyer_buyerClass, getRes, 0)
+                //log.Println("专家top10", aggsArr["reviewExperts"])
+                var expertlist []map[string]interface{}
+                if reviewExperts, ok := aggsArr["reviewExperts"].([]map[string]interface{}); ok {
+                    for k, v := range reviewExperts {
+                        if k < 10 {
+                            expertName := qutil.ObjToString(v["key"])
+                            decQuery := ExpertsCooperationProjectCount(expertName, getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime, getRes.SearchItem, getRes.ProjectScope)
+                            _, count, _ := elastic.GetAggs("projectset", "projectset", decQuery)
+                            v["doc_count"] = count
+                            expertlist = append(expertlist, v)
+                        } else {
+                            break
+                        }
+                    }
+                    util.SortData(&expertlist, "doc_count", true)
+                    aggsArr["reviewExperts"] = expertlist
+                }
 
-				regMap.Data = map[string]interface{}{
-					"PAnalysis": aggsArr,
-				}
-				//投标决策分析历史记录
-				//go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
-			}
-		} else {
-			regMap.Error_code = Error_code_1002
-			regMap.Error_msg = Error_msg_1002
-		}
-	} else {
-		regMap.Error_code = Error_code_1005
-		regMap.Error_msg = Error_msg_1005
-	}
-	this.ServeJson(regMap)
+                regMap.Data = map[string]interface{}{
+                    "PAnalysis": aggsArr,
+                }
+                //投标决策分析历史记录
+                //go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
+            }
+        } else {
+            regMap.Error_code = Error_code_1002
+            regMap.Error_msg = Error_msg_1002
+        }
+    } else {
+        regMap.Error_code = Error_code_1005
+        regMap.Error_msg = Error_msg_1005
+    }
+    this.ServeJson(regMap)
 }
 
 type TRecentProject struct {
-	//RecentProject struct {
-	Hits struct {
-		Total struct {
-			Value    int    `json:"value"`
-			Relation string `json:"relation"`
-		} `json:"total"`
-		MaxScore interface{} `json:"max_score"`
-		Hits     []struct {
-			Index  string      `json:"_index"`
-			Type   string      `json:"_type"`
-			Id     string      `json:"_id"`
-			Score  interface{} `json:"_score"`
-			Source struct {
-				Bidamount   float64 `json:"bidamount"`
-				Projectname string  `json:"projectname"`
-				Jgtime      int     `json:"jgtime"`
-				Id          string  `json:"id"`
-			} `json:"_source"`
-			Sort []int `json:"sort"`
-		} `json:"hits"`
-	} `json:"hits"`
-	//} `json:"recent_project"`
+    //RecentProject struct {
+    Hits struct {
+        Total struct {
+            Value    int    `json:"value"`
+            Relation string `json:"relation"`
+        } `json:"total"`
+        MaxScore interface{} `json:"max_score"`
+        Hits     []struct {
+            Index  string      `json:"_index"`
+            Type   string      `json:"_type"`
+            Id     string      `json:"_id"`
+            Score  interface{} `json:"_score"`
+            Source struct {
+                Bidamount   float64 `json:"bidamount"`
+                Projectname string  `json:"projectname"`
+                Jgtime      int     `json:"jgtime"`
+                Id          string  `json:"id"`
+            } `json:"_source"`
+            Sort []int `json:"sort"`
+        } `json:"hits"`
+    } `json:"hits"`
+    //} `json:"recent_project"`
 }
 
 // 投标决策分析
 func getDecInfoFree(decQuery, buyer_buyerClass string, dec *DecParam) map[string]interface{} {
-	t1 := time.Now()
-	//
-	var aggsArr = map[string]interface{}{}
-	//聚合
-	aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
-	if aggs != nil {
-		//项目数量
-		if all_counts, ok := aggs.Children("all_counts"); ok {
-			all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
-			aggsArr["all_counts"] = string(all_counts_val)
-		}
-		//项目涉及中标企业
-		if all_winners, ok := aggs.Children("all_winners"); ok {
-			all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
-			aggsArr["all_winners"] = string(all_winners_val)
-		}
-		//项目金额
-		if all_money, ok := aggs.Children("all_money"); ok {
-			all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
-			all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
-			aggsArr["all_money"] = all_money_float
-		}
-		//项目专家
-		if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
-			all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
-			aggsArr["all_review_experts"] = string(all_review_experts_val)
-		}
-		//标书编制周期
-		if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					var buckets = []map[string]interface{}{}
-					for _, v := range aggsMap {
-						buckets = append(buckets, map[string]interface{}{
-							"key":       v["key"],
-							"doc_count": v["doc_count"],
-						})
-					}
-					aggsArr["bidcycle_ranges"] = buckets
-				}
-			}
-		}
-	}
-	log.Println("运行时间:", time.Since(t1))
-	return aggsArr
+    t1 := time.Now()
+    //
+    var aggsArr = map[string]interface{}{}
+    //聚合
+    aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
+    if aggs != nil {
+        //项目数量
+        if all_counts, ok := aggs.Children("all_counts"); ok {
+            all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
+            aggsArr["all_counts"] = string(all_counts_val)
+        }
+        //项目涉及中标企业
+        if all_winners, ok := aggs.Children("all_winners"); ok {
+            all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
+            aggsArr["all_winners"] = string(all_winners_val)
+        }
+        //项目金额
+        if all_money, ok := aggs.Children("all_money"); ok {
+            all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
+            all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
+            aggsArr["all_money"] = all_money_float
+        }
+        //项目专家
+        if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
+            all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
+            aggsArr["all_review_experts"] = string(all_review_experts_val)
+        }
+        //标书编制周期
+        if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    var buckets = []map[string]interface{}{}
+                    for _, v := range aggsMap {
+                        buckets = append(buckets, map[string]interface{}{
+                            "key":       v["key"],
+                            "doc_count": v["doc_count"],
+                        })
+                    }
+                    aggsArr["bidcycle_ranges"] = buckets
+                }
+            }
+        }
+    }
+    log.Println("运行时间:", time.Since(t1))
+    return aggsArr
 }
 
 // 投标决策分析
 func getDecInfo(decQuery, buyer_buyerClass string, dec *DecParam, buyerSty int) map[string]interface{} {
-	t1 := time.Now()
-	//
-	var aggsArr = map[string]interface{}{}
-	/*
-		//类似项目采购单位采购历史
-		var buyerHistroyList = []map[string]interface{}{}
-		  if dec.Buyer != "" && buyerSty == 1 {
-		  	list := GetListByBuyer(dec)
-		  	if list != nil && len(list) > 0 {
-		  		for _, v := range list {
-		  			var firsttime = v["firsttime"]
-		  			infoid := ""
-		  			if v["ids"] != nil {
-		  				ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
-		  				if len(ids) > 0 {
-		  					infoid = util.EncodeId(ids[0])
-		  				}
-		  			}
-		  			var projectMap = map[string]interface{}{
-		  				"projectname": v["projectname"],
-		  				"_id":         util.EncodeId(v["_id"].(string)),
-		  				"area":        v["area"],
-		  				"bidstatus":   v["bidstatus"],
-		  				"firsttime":   FormatDateWithObj(&firsttime, Date_Short_Layout),
-		  				"infoid":      infoid,
-		  			}
-		  			buyerHistroyList = append(buyerHistroyList, projectMap)
-		  		}
-		  	}
-		  	aggsArr["buyerHistroyList"] = buyerHistroyList
-		  }*/
-	//聚合
-	aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
+    t1 := time.Now()
+    //
+    var aggsArr = map[string]interface{}{}
+    /*
+    	//类似项目采购单位采购历史
+    	var buyerHistroyList = []map[string]interface{}{}
+    	  if dec.Buyer != "" && buyerSty == 1 {
+    	  	list := GetListByBuyer(dec)
+    	  	if list != nil && len(list) > 0 {
+    	  		for _, v := range list {
+    	  			var firsttime = v["firsttime"]
+    	  			infoid := ""
+    	  			if v["ids"] != nil {
+    	  				ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
+    	  				if len(ids) > 0 {
+    	  					infoid = util.EncodeId(ids[0])
+    	  				}
+    	  			}
+    	  			var projectMap = map[string]interface{}{
+    	  				"projectname": v["projectname"],
+    	  				"_id":         util.EncodeId(v["_id"].(string)),
+    	  				"area":        v["area"],
+    	  				"bidstatus":   v["bidstatus"],
+    	  				"firsttime":   FormatDateWithObj(&firsttime, Date_Short_Layout),
+    	  				"infoid":      infoid,
+    	  			}
+    	  			buyerHistroyList = append(buyerHistroyList, projectMap)
+    	  		}
+    	  	}
+    	  	aggsArr["buyerHistroyList"] = buyerHistroyList
+    	  }*/
+    //聚合
+    aggs, _ := GetAggs(P_INDEX, P_TYPE, decQuery)
 
-	log.Println("-请求数据时间-:", time.Since(t1))
-	if aggs != nil {
-		//标书编制周期
-		if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					var buckets = []map[string]interface{}{}
-					for _, v := range aggsMap {
-						buckets = append(buckets, map[string]interface{}{
-							"key":       v["key"],
-							"doc_count": v["doc_count"],
-						})
-					}
-					aggsArr["bidcycle_ranges"] = buckets
-				}
-			}
-		}
-		//类似项目预算统计分析
-		if aggs_budget, ok := aggs.Children("budget_ranges"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := aggs_budget.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					var buckets = []map[string]interface{}{}
-					for _, v := range aggsMap {
-						var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
-						var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
-						var avg interface{} = nil
-						if avg_rate["value"] != nil {
-							// avg = avg_rate["value"].(interface{})
-						}
-						var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
-						var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
-						if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
-							var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
-							var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
-							if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
-								avg = (sum_budget - sum_bidamount) / sum_budget
-							}
-						}
-						buckets = append(buckets, map[string]interface{}{
-							"key":       v["key"],
-							"doc_count": v["doc_count"],
-							"avg":       avg,
-						})
-					}
-					aggsArr["budgetAnalysis"] = buckets
-				}
-			}
-		}
-		//类似项目地区分布分析
-		if aggs_area, ok := aggs.Children("group_area"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := aggs_area.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					var buckets = []map[string]interface{}{}
-					for _, v := range aggsMap {
-						//类似项目数量
-						var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
-						var doc_count = 0
-						if group_counts_map["value"] != nil {
-							doc_count = qutil.IntAll(group_counts_map["value"])
-						}
-						//类似项目规模
-						var sum_bidamount_map = *qutil.ObjToMap(v["sum_bidamount"].(map[string]interface{}))
-						var bidamount_sum_map = sum_bidamount_map["bidamount_sum"].(map[string]interface{})
-						var bidamount_sum float64 = 0
-						if bidamount_sum_map["value"] != nil {
-							bidamount_sum = qutil.RetainDecimal(qutil.Float64All(bidamount_sum_map["value"].(interface{})), 2)
-						}
-						buckets = append(buckets, map[string]interface{}{
-							"key":           v["key"],
-							"doc_count":     doc_count,
-							"bidamount_sum": bidamount_sum,
-						})
-					}
-					aggsArr["group_area"] = buckets
-				}
-			}
-		}
-		var buyer_buyerClass_bool = false
-		//类似项目采购单位类型分析
-		if group_buyerclass, ok := aggs.Children("group_buyerclass"); ok {
-			if group_buyerclass_c, ok := group_buyerclass.Children("group_buyerclass_c"); ok {
-				var aggsMap []map[string]interface{}
-				bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
-				if len(bs) > 0 {
-					json.Unmarshal(bs, &aggsMap)
-					if len(aggsMap) > 0 {
-						// log.Println(aggsMap)
-						var buckets = []map[string]interface{}{}
-						for _, v := range aggsMap {
-							if v["key"].(string) == "" {
-								continue
-							}
-							var this_bool = false
-							if buyer_buyerClass != "" && buyer_buyerClass == v["key"].(string) {
-								buyer_buyerClass_bool = true
-								this_bool = true
-							}
-							//类似项目数量
-							var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
-							var doc_count = 0
-							if group_counts_map["value"] != nil {
-								doc_count = qutil.IntAll(group_counts_map["value"])
-							}
-							//类似项目规模
-							var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
-							var group_money float64 = 0
-							if group_money_map["value"] != nil {
-								group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
-							}
-							//平均折扣率
-							var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
-							var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
-							var avg interface{} = nil
-							if avg_rate["value"] != nil {
-								// avg = avg_rate["value"].(interface{})
-							}
-							var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
-							var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
-							if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
-								var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
-								var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
-								if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
-									avg = (sum_budget - sum_bidamount) / sum_budget
-								}
-							}
-							buckets = append(buckets, map[string]interface{}{
-								"key":       v["key"],    //采购单位类型名称
-								"doc_count": doc_count,   //类似项目总数
-								"doc_money": group_money, //类似项目规模
-								"avg":       avg,         //平均折扣率
-								"main":      this_bool,   //当前采购单位得采购单位类型
-							})
-						}
-						aggsArr["group_buyerclass"] = buckets
-					}
-				}
-			}
-		}
-		//此采购单位得采购类型 buyer_buyerclass
-		if group_buyer_buyerclass, ok := aggs.Children("group_buyer_buyerclass"); ok && !buyer_buyerClass_bool {
-			var buyer_buyerclass_map map[string]interface{}
-			if group_buyerclass_c, ok := group_buyer_buyerclass.Children("group_buyerclass_c"); ok {
-				var aggsMap []map[string]interface{}
-				bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
-				if len(bs) > 0 {
-					json.Unmarshal(bs, &aggsMap)
-					if len(aggsMap) > 0 {
-						for _, v := range aggsMap {
-							//类似项目数量
-							var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
-							var doc_count = 0
-							if group_counts_map["value"] != nil {
-								doc_count = qutil.IntAll(group_counts_map["value"])
-							}
-							//类似项目规模
-							var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
-							var group_money float64 = 0
-							if group_money_map["value"] != nil {
-								group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
-							}
-							//平均折扣率
-							var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
-							var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
-							var avg interface{} = nil
-							if avg_rate["value"] != nil {
-								// avg = avg_rate["value"].(interface{})
-							}
-							var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
-							var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
-							if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
-								var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
-								var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
-								if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
-									avg = (sum_budget - sum_bidamount) / sum_budget
-								}
-							}
-							buyer_buyerclass_map = map[string]interface{}{
-								"key":       v["key"],    //采购单位类型名称
-								"doc_count": doc_count,   //类似项目总数
-								"doc_money": group_money, //类似项目规模
-								"avg":       avg,         //平均折扣率
-								"main":      true,        //当前采购单位得采购单位类型
-							}
-						}
-					}
-				}
-			}
-			if aggsArr["group_buyerclass"] != nil && buyer_buyerclass_map != nil {
-				group_buyerclass_buyers := aggsArr["group_buyerclass"].([]map[string]interface{})
-				buyers_len := len(group_buyerclass_buyers)
-				if buyers_len < 10 {
-					group_buyerclass_buyers = append(group_buyerclass_buyers, buyer_buyerclass_map)
-				} else {
-					group_buyerclass_buyers = append(group_buyerclass_buyers[:buyers_len-1], buyer_buyerclass_map)
-				}
-				aggsArr["group_buyerclass"] = group_buyerclass_buyers
-			}
-		}
-		//专家评审
-		if aggs_review_experts, ok := aggs.Children("group_review_experts"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := aggs_review_experts.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					if len(aggsMap) > 10 {
-						aggsMap = aggsMap[:10]
-					}
-					var _aggsMap = []map[string]interface{}{}
-					for k, v := range aggsMap {
-						if !entity.RegExperts.MatchString(qutil.ObjToString(v["key"])) {
-							continue
-						}
-						var recentProject TRecentProject
-						rp, err := json.Marshal(v["recent_project"])
-						if err == nil {
-							err = json.Unmarshal(rp, &recentProject)
-							if err == nil && len(recentProject.Hits.Hits) > 0 {
-								data := recentProject.Hits.Hits[0]
-								v["jgtime"] = data.Source.Jgtime //成交时间
-							}
-						}
-						delete(aggsMap[k], "recent_project")
-						_aggsMap = append(_aggsMap, aggsMap[k])
-					}
-					aggsArr["reviewExperts"] = _aggsMap
-				}
-			}
-		}
-		//项目数量
-		if all_counts, ok := aggs.Children("all_counts"); ok {
-			all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
-			aggsArr["all_counts"] = string(all_counts_val)
-		}
-		//项目金额
-		if all_money, ok := aggs.Children("all_money"); ok {
-			all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
-			all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
-			aggsArr["all_money"] = all_money_float
-		}
-		//项目涉及中标企业
-		if all_winners, ok := aggs.Children("all_winners"); ok {
-			all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
-			aggsArr["all_winners"] = string(all_winners_val)
-		}
-		//项目专家
-		if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
-			all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
-			aggsArr["all_review_experts"] = string(all_review_experts_val)
-		}
-		//中标企业
-		if aggs_winner, ok := aggs.Children("group_winner"); ok {
-			var aggsMap []map[string]interface{}
-			bs, _ := aggs_winner.Aggregations["buckets"].MarshalJSON()
-			if len(bs) > 0 {
-				var winners = []string{}
-				json.Unmarshal(bs, &aggsMap)
-				if len(aggsMap) > 0 {
-					if len(aggsMap) > 10 {
-						aggsMap = aggsMap[:10]
-					}
-					var buckets = []*DecWinnerInfo{}
-					for _, v := range aggsMap {
-						//if !entity.RegWinner.MatchString(qutil.ObjToString(v["key"])) {
-						//	continue
-						//}
-						//类似项目金额
-						var total_map = *qutil.ObjToMap(v["total"].(map[string]interface{}))
-						var total_project = 0
-						if total_map["value"] != nil {
-							total_project = qutil.IntAll(total_map["value"])
-						}
+    log.Println("-请求数据时间-:", time.Since(t1))
+    if aggs != nil {
+        //标书编制周期
+        if bidcycle_ranges, ok := aggs.Children("bidcycle_ranges"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := bidcycle_ranges.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    var buckets = []map[string]interface{}{}
+                    for _, v := range aggsMap {
+                        buckets = append(buckets, map[string]interface{}{
+                            "key":       v["key"],
+                            "doc_count": v["doc_count"],
+                        })
+                    }
+                    aggsArr["bidcycle_ranges"] = buckets
+                }
+            }
+        }
+        //类似项目预算统计分析
+        if aggs_budget, ok := aggs.Children("budget_ranges"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := aggs_budget.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    var buckets = []map[string]interface{}{}
+                    for _, v := range aggsMap {
+                        var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
+                        var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
+                        var avg interface{} = nil
+                        if avg_rate["value"] != nil {
+                            // avg = avg_rate["value"].(interface{})
+                        }
+                        var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
+                        var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
+                        if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
+                            var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
+                            var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
+                            if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
+                                avg = (sum_budget - sum_bidamount) / sum_budget
+                            }
+                        }
+                        buckets = append(buckets, map[string]interface{}{
+                            "key":       v["key"],
+                            "doc_count": v["doc_count"],
+                            "avg":       avg,
+                        })
+                    }
+                    aggsArr["budgetAnalysis"] = buckets
+                }
+            }
+        }
+        //类似项目地区分布分析
+        if aggs_area, ok := aggs.Children("group_area"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := aggs_area.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    var buckets = []map[string]interface{}{}
+                    for _, v := range aggsMap {
+                        //类似项目数量
+                        var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
+                        var doc_count = 0
+                        if group_counts_map["value"] != nil {
+                            doc_count = qutil.IntAll(group_counts_map["value"])
+                        }
+                        //类似项目规模
+                        var sum_bidamount_map = *qutil.ObjToMap(v["sum_bidamount"].(map[string]interface{}))
+                        var bidamount_sum_map = sum_bidamount_map["bidamount_sum"].(map[string]interface{})
+                        var bidamount_sum float64 = 0
+                        if bidamount_sum_map["value"] != nil {
+                            bidamount_sum = qutil.RetainDecimal(qutil.Float64All(bidamount_sum_map["value"].(interface{})), 2)
+                        }
+                        buckets = append(buckets, map[string]interface{}{
+                            "key":           v["key"],
+                            "doc_count":     doc_count,
+                            "bidamount_sum": bidamount_sum,
+                        })
+                    }
+                    aggsArr["group_area"] = buckets
+                }
+            }
+        }
+        var buyer_buyerClass_bool = false
+        //类似项目采购单位类型分析
+        if group_buyerclass, ok := aggs.Children("group_buyerclass"); ok {
+            if group_buyerclass_c, ok := group_buyerclass.Children("group_buyerclass_c"); ok {
+                var aggsMap []map[string]interface{}
+                bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
+                if len(bs) > 0 {
+                    json.Unmarshal(bs, &aggsMap)
+                    if len(aggsMap) > 0 {
+                        // log.Println(aggsMap)
+                        var buckets = []map[string]interface{}{}
+                        for _, v := range aggsMap {
+                            if v["key"].(string) == "" {
+                                continue
+                            }
+                            var this_bool = false
+                            if buyer_buyerClass != "" && buyer_buyerClass == v["key"].(string) {
+                                buyer_buyerClass_bool = true
+                                this_bool = true
+                            }
+                            //类似项目数量
+                            var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
+                            var doc_count = 0
+                            if group_counts_map["value"] != nil {
+                                doc_count = qutil.IntAll(group_counts_map["value"])
+                            }
+                            //类似项目规模
+                            var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
+                            var group_money float64 = 0
+                            if group_money_map["value"] != nil {
+                                group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
+                            }
+                            //平均折扣率
+                            var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
+                            var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
+                            var avg interface{} = nil
+                            if avg_rate["value"] != nil {
+                                // avg = avg_rate["value"].(interface{})
+                            }
+                            var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
+                            var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
+                            if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
+                                var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
+                                var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
+                                if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
+                                    avg = (sum_budget - sum_bidamount) / sum_budget
+                                }
+                            }
+                            buckets = append(buckets, map[string]interface{}{
+                                "key":       v["key"],    //采购单位类型名称
+                                "doc_count": doc_count,   //类似项目总数
+                                "doc_money": group_money, //类似项目规模
+                                "avg":       avg,         //平均折扣率
+                                "main":      this_bool,   //当前采购单位得采购单位类型
+                            })
+                        }
+                        aggsArr["group_buyerclass"] = buckets
+                    }
+                }
+            }
+        }
+        //此采购单位得采购类型 buyer_buyerclass
+        if group_buyer_buyerclass, ok := aggs.Children("group_buyer_buyerclass"); ok && !buyer_buyerClass_bool {
+            var buyer_buyerclass_map map[string]interface{}
+            if group_buyerclass_c, ok := group_buyer_buyerclass.Children("group_buyerclass_c"); ok {
+                var aggsMap []map[string]interface{}
+                bs, _ := group_buyerclass_c.Aggregations["buckets"].MarshalJSON()
+                if len(bs) > 0 {
+                    json.Unmarshal(bs, &aggsMap)
+                    if len(aggsMap) > 0 {
+                        for _, v := range aggsMap {
+                            //类似项目数量
+                            var group_counts_map = *qutil.ObjToMap(v["group_counts"].(map[string]interface{}))
+                            var doc_count = 0
+                            if group_counts_map["value"] != nil {
+                                doc_count = qutil.IntAll(group_counts_map["value"])
+                            }
+                            //类似项目规模
+                            var group_money_map = *qutil.ObjToMap(v["group_money"].(map[string]interface{}))
+                            var group_money float64 = 0
+                            if group_money_map["value"] != nil {
+                                group_money = qutil.RetainDecimal(qutil.Float64All(group_money_map["value"].(interface{})), 4)
+                            }
+                            //平均折扣率
+                            var avg_rate_map = *qutil.ObjToMap(v["avg_rate"].(map[string]interface{}))
+                            var avg_rate = avg_rate_map["avg_rate"].(map[string]interface{})
+                            var avg interface{} = nil
+                            if avg_rate["value"] != nil {
+                                // avg = avg_rate["value"].(interface{})
+                            }
+                            var sum_budget_map = avg_rate_map["sum_budget"].(map[string]interface{})
+                            var sum_bidamount_map = avg_rate_map["sum_bidamount"].(map[string]interface{})
+                            if sum_budget_map["value"] != nil && sum_bidamount_map["value"] != nil {
+                                var sum_budget float64 = qutil.RetainDecimal(qutil.Float64All(sum_budget_map["value"].(interface{})), 4)       //预算总额
+                                var sum_bidamount float64 = qutil.RetainDecimal(qutil.Float64All(sum_bidamount_map["value"].(interface{})), 4) //中标总额
+                                if sum_bidamount > 0 && sum_budget > 0 && sum_bidamount <= sum_budget {
+                                    avg = (sum_budget - sum_bidamount) / sum_budget
+                                }
+                            }
+                            buyer_buyerclass_map = map[string]interface{}{
+                                "key":       v["key"],    //采购单位类型名称
+                                "doc_count": doc_count,   //类似项目总数
+                                "doc_money": group_money, //类似项目规模
+                                "avg":       avg,         //平均折扣率
+                                "main":      true,        //当前采购单位得采购单位类型
+                            }
+                        }
+                    }
+                }
+            }
+            if aggsArr["group_buyerclass"] != nil && buyer_buyerclass_map != nil {
+                group_buyerclass_buyers := aggsArr["group_buyerclass"].([]map[string]interface{})
+                buyers_len := len(group_buyerclass_buyers)
+                if buyers_len < 10 {
+                    group_buyerclass_buyers = append(group_buyerclass_buyers, buyer_buyerclass_map)
+                } else {
+                    group_buyerclass_buyers = append(group_buyerclass_buyers[:buyers_len-1], buyer_buyerclass_map)
+                }
+                aggsArr["group_buyerclass"] = group_buyerclass_buyers
+            }
+        }
+        //专家评审
+        if aggs_review_experts, ok := aggs.Children("group_review_experts"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := aggs_review_experts.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    if len(aggsMap) > 10 {
+                        aggsMap = aggsMap[:10]
+                    }
+                    var _aggsMap = []map[string]interface{}{}
+                    for k, v := range aggsMap {
+                        if !entity.RegExperts.MatchString(qutil.ObjToString(v["key"])) {
+                            continue
+                        }
+                        var recentProject TRecentProject
+                        rp, err := json.Marshal(v["recent_project"])
+                        if err == nil {
+                            err = json.Unmarshal(rp, &recentProject)
+                            if err == nil && len(recentProject.Hits.Hits) > 0 {
+                                data := recentProject.Hits.Hits[0]
+                                v["jgtime"] = data.Source.Jgtime //成交时间
+                            }
+                        }
+                        delete(aggsMap[k], "recent_project")
+                        _aggsMap = append(_aggsMap, aggsMap[k])
+                    }
+                    aggsArr["reviewExperts"] = _aggsMap
+                }
+            }
+        }
+        //项目数量
+        if all_counts, ok := aggs.Children("all_counts"); ok {
+            all_counts_val, _ := all_counts.Aggregations["value"].MarshalJSON()
+            aggsArr["all_counts"] = string(all_counts_val)
+        }
+        //项目金额
+        if all_money, ok := aggs.Children("all_money"); ok {
+            all_money_val, _ := all_money.Aggregations["value"].MarshalJSON()
+            all_money_float, _ := strconv.ParseFloat(string(all_money_val), 64)
+            aggsArr["all_money"] = all_money_float
+        }
+        //项目涉及中标企业
+        if all_winners, ok := aggs.Children("all_winners"); ok {
+            all_winners_val, _ := all_winners.Aggregations["value"].MarshalJSON()
+            aggsArr["all_winners"] = string(all_winners_val)
+        }
+        //项目专家
+        if all_review_experts, ok := aggs.Children("all_review_experts"); ok {
+            all_review_experts_val, _ := all_review_experts.Aggregations["value"].MarshalJSON()
+            aggsArr["all_review_experts"] = string(all_review_experts_val)
+        }
+        //中标企业
+        if aggs_winner, ok := aggs.Children("group_winner"); ok {
+            var aggsMap []map[string]interface{}
+            bs, _ := aggs_winner.Aggregations["buckets"].MarshalJSON()
+            if len(bs) > 0 {
+                var winners = []string{}
+                json.Unmarshal(bs, &aggsMap)
+                if len(aggsMap) > 0 {
+                    if len(aggsMap) > 10 {
+                        aggsMap = aggsMap[:10]
+                    }
+                    var buckets = []*DecWinnerInfo{}
+                    for _, v := range aggsMap {
+                        //if !entity.RegWinner.MatchString(qutil.ObjToString(v["key"])) {
+                        //	continue
+                        //}
+                        //类似项目金额
+                        var total_map = *qutil.ObjToMap(v["total"].(map[string]interface{}))
+                        var total_project = 0
+                        if total_map["value"] != nil {
+                            total_project = qutil.IntAll(total_map["value"])
+                        }
 
-						//中标企业最近合作项目
-						var recentProject TRecentProject
-						latestProject := make(map[string]interface{})
-						rp, err := json.Marshal(v["recent_project"])
-						if err == nil {
-							err = json.Unmarshal(rp, &recentProject)
-							if err == nil && len(recentProject.Hits.Hits) > 0 {
-								latestProject["_id"] = recentProject.Hits.Hits[0].Id
-								data := recentProject.Hits.Hits[0]
-								latestProject["_id"] = util.EncodeId(data.Id)
-								latestProject["bidamount"] = data.Source.Bidamount     //金额
-								latestProject["projectname"] = data.Source.Projectname //项目名称
-								latestProject["jgtime"] = data.Source.Jgtime           //成交时间
-							}
-						}
+                        //中标企业最近合作项目
+                        var recentProject TRecentProject
+                        latestProject := make(map[string]interface{})
+                        rp, err := json.Marshal(v["recent_project"])
+                        if err == nil {
+                            err = json.Unmarshal(rp, &recentProject)
+                            if err == nil && len(recentProject.Hits.Hits) > 0 {
+                                latestProject["_id"] = recentProject.Hits.Hits[0].Id
+                                data := recentProject.Hits.Hits[0]
+                                latestProject["_id"] = util.EncodeId(data.Id)
+                                latestProject["bidamount"] = data.Source.Bidamount     //金额
+                                latestProject["projectname"] = data.Source.Projectname //项目名称
+                                latestProject["jgtime"] = data.Source.Jgtime           //成交时间
+                            }
+                        }
 
-						var max_jytime_map = *qutil.ObjToMap(v["max_jytime"].(map[string]interface{}))
-						var max_jytime int64 = 0
-						if max_jytime_map["value"] != nil {
-							max_jytime = qutil.Int64All(max_jytime_map["value"])
-						}
-						//中标企业id
-						var group_entidlist = *qutil.ObjToMap(v["group_entidlist"].(map[string]interface{}))
-						var entId = ""
-						if group_entidlist != nil && group_entidlist["buckets"] != nil {
-							buckets := qutil.ObjArrToMapArr(group_entidlist["buckets"].([]interface{}))
-							if buckets == nil || len(buckets) == 0 || (buckets[0]["key"] != nil && len(qutil.ObjToString(buckets[0]["key"])) < 10) {
-								continue
-							}
-							ent_id := qutil.ObjToString(buckets[0]["key"])
-							winners = append(winners, fmt.Sprintf(`"%s"`, ent_id))
-							entId = util.EncodeId(ent_id)
-						}
-						//此中标企业与采购单位类似项目采购历史
-						var buyer_similar_list = BuyerSOOL{}
-						//此中标企业与采购单位其它项目采购历史
-						var buyer_other_list = BuyerSOOL{}
-						/*if dec.Buyer != "" {
-							var buyer_map = *qutil.ObjToMap(v["this_buyer"].(map[string]interface{}))
-							var buyer_map_count = buyer_map["doc_count"] //类似项目数量
-							var buyer_map_tatil_map = *qutil.ObjToMap(buyer_map["total"].(map[string]interface{}))
-							var buyer_map_tatil = qutil.RetainDecimal(qutil.Float64All(buyer_map_tatil_map["value"].(interface{})), 4)
-							var my_top_hits_map = *qutil.ObjToMap(buyer_map["my_top_hits"].(map[string]interface{}))
-							var buyer_hits_map = *qutil.ObjToMap(my_top_hits_map["hits"].(map[string]interface{}))
-							var hits_map = qutil.ObjArrToMapArr(buyer_hits_map["hits"].([]interface{}))
-							var bid_winner_time = ""
-							var buyer_winner_map = map[string]interface{}{} //类似项目 采购单位 和 中标企业
-							if hits_map != nil && len(hits_map) > 0 {
-								for _, v := range hits_map {
-									if v["_source"] != nil {
-										var hits_source_map = *qutil.ObjToMap(v["_source"].(map[string]interface{}))
-										jgtime := hits_source_map["jgtime"]
-										if jgtime != nil && bid_winner_time == "" {
-											bid_winner_time = FormatDateWithObj(&jgtime, "2006/01/02")
-										}
-										buyer_winner_map[qutil.InterfaceToStr(hits_source_map["id"])] = hits_source_map["jgtime"]
-									}
-								}
-							}
-							//查询此中标企业 和 此采购单位 所有合作的项目
-							buyer_winner_all_query := GetAllBWQuery(v["key"].(string), dec.Buyer)
-							buyer_winner_all_aggs, buyer_winner_all_res := GetAggs("projectset", "projectset", buyer_winner_all_query)
-							var bid_winner_other_time = ""
-							if buyer_winner_all_res != nil && len(buyer_winner_all_res) > 0 {
-								for _, v := range buyer_winner_all_res {
-									if buyer_winner_map[v["_id"].(string)] == nil && bid_winner_other_time == "" {
-										jgtime := v["jgtime"]
-										bid_winner_other_time = FormatDateWithObj(&jgtime, "2006/01/02")
-										break
-									}
-								}
-								//此中标企业 和 此采购单位 合作项目总金额
-								var sum_project_val_float float64 = 0
-								if buyer_winner_all_aggs != nil {
-									if sum_project, ok := buyer_winner_all_aggs.Children("sum_project"); ok {
-										sum_project_val, _ := sum_project.Aggregations["value"].MarshalJSON()
-										sum_project_val_float, _ = strconv.ParseFloat(string(sum_project_val), 64)
-									}
-								}
-								if sum_project_val_float > 0 {
-									buyer_other_list = BuyerSOOL{
-										dec.Buyer,
-										len(buyer_winner_all_res) - qutil.IntAll(buyer_map_count),
-										sum_project_val_float - buyer_map_tatil,
-										bid_winner_other_time,
-									}
-								}
-							}
-							if buyer_map_count != nil {
-								buyer_similar_list = BuyerSOOL{
-									dec.Buyer,
-									qutil.IntAll(buyer_map_count),
-									buyer_map_tatil,
-									bid_winner_time,
-								}
-							}
-						}*/
-						//中标企业名称
-						buckets = append(buckets, &DecWinnerInfo{
-							v["key"].(string),        //中标企业名称
-							v["doc_count"].(float64), //类似项目总数
-							total_project,            //项目金额
-							buyer_similar_list,       //中标企业与采购单位类似项目合作历史
-							buyer_other_list,         //中标企业和采购单位其它项目合作历史
-							0,                        //中标企业注册资本
-							entId,                    //中标企业加密id
-							max_jytime,               //类似项目中标时间
-							latestProject,            //中标企业最近合作项目
-						})
-					}
-					//获取中标企业注资金信息
-					/*capitals := entity.GetWinnerCapitals(winners)
-					  log.Println("查询获取中标企业注资金信息消耗时间", time.Since(t1))
-					  var isSortBool = false
-					  var bvdoc_count float64 = -1
-					  var bvtotal_project = -1
-					  for _, v := range buckets {
-					  	//类似项目或者其它项目
-					  	if k > 0 && (v.Buyer_other_list.Doc_count > 0 || v.Buyer_similar_list.Doc_count > 0) {
-					  	   isSortBool = true
-					  	}
-					  	//项目数相同 且 此中标企业金额大于前一个中标企业金额 允许再次排序
-					  	if bvdoc_count == v.Doc_count && bvtotal_project < v.Total_project {
-					  	   isSortBool = true
-					  	}
-					  	bvdoc_count = v.Doc_count
-					  	bvtotal_project = v.Total_project
-					  	v.Capital = capitals[v.EntId]
-					  }
-					  //根据金额二次排序
-					  fmt.Println("isSortBool:", isSortBool)
-					  if isSortBool {
-					     sort.Sort(DWIArray(buckets))
-					  }*/
-					aggsArr["winnerAmount"] = buckets
-				}
-			}
-		}
-	}
-	log.Println("运行时间:", time.Since(t1))
-	return aggsArr
-}
-
-// 决策分析 根据字段权重排序 中标企业和中标价格
-var (
-	bidtype_score        = 1 //采购方式
-	review_experts_score = 1 //评审专家
-	zbtime_score         = 1 //招标时间
-	bidamount_score      = 2 //中标价格
-	budget_score         = 2 //预算
-	project_rate_score   = 1 //折扣率
-	winnerorder_score    = 1 //中标候选人
-)
-
-func Sequence(seqData []map[string]interface{}) []map[string]interface{} {
-	var sequenceArr3 []map[string]interface{}
-	var sequenceArr4 []map[string]interface{}
-	var sequenceArr5 []map[string]interface{}
-	var sequenceArr6 []map[string]interface{}
-	var sequenceArr7 []map[string]interface{}
-	var sequenceArr8 []map[string]interface{}
-	var sequenceArr9 []map[string]interface{}
-	for k, v := range seqData {
-		var score = 0
-		if v["s_winner"] != nil && qutil.InterfaceToStr(v["s_winner"]) != "" {
-			var s_winner = qutil.ObjToString(v["s_winner"])
-			entidlist, _ := v["entidlist"].([]interface{})
-			//中标单位id
-			winnerList := strings.Split(s_winner, ",")
-			if len(entidlist) == len(winnerList) {
-				var entidlists []string
-				for _, v2 := range entidlist {
-					entidlists = append(entidlists, util.EncodeId(qutil.InterfaceToStr(v2)))
-				}
-				v["entidlist"] = entidlists
-			} else {
-				delete(v, "entidlist") //中标单位id有误 删除id处理
-			}
-			var s_length = 0
-			for _, v1 := range winnerList {
-				if entity.RegWinner.MatchString(v1) {
-					s_length += 1
-				}
-			}
-			if s_length == 0 {
-				continue
-			}
-		}
-		//评审专家
-		review_experts := []string{}
-		if v["review_experts"] != nil {
-			for _, v := range qutil.ObjArrToStringArr(v["review_experts"].([]interface{})) {
-				if entity.RegExperts.MatchString(v) {
-					review_experts = append(review_experts, v)
-				}
-			}
-			v["review_experts"] = review_experts
-		}
-		if len(review_experts) > 0 {
-			score += review_experts_score
-		}
-		//采购方式
-		if v["bidtype"] != nil && qutil.ObjToString(v["bidtype"].(string)) != "" {
-			score += bidtype_score
-		}
-		//招标时间
-		if v["firsttime"] != nil && qutil.Float64All(v["firsttime"].(float64)) > 0 {
-			score += zbtime_score
-		}
-		//预算
-		if v["budget"] != nil && qutil.Float64All(v["budget"].(float64)) > 0 {
-			score += budget_score
-		}
-		//中标价格
-		if v["bidamount"] != nil && qutil.Float64All(v["bidamount"].(float64)) > 0 {
-			score += bidamount_score
-		}
-		//折扣率
-		if v["project_rate"] != nil && qutil.Float64All(v["project_rate"].(float64)) > 0 {
-			score += project_rate_score
-		}
-		//中标候选人
-		if v["winnerorder"] != nil && len(qutil.ObjArrToStringArr(v["winnerorder"].([]interface{}))) > 0 {
-			score += winnerorder_score
-		}
-		//低于三分排除
-		//if score < 4 {
-		// continue
-		//}
-		if v["ids"] != nil {
-			ids := qutil.ObjArrToStringArr(v["ids"].([]interface{}))
-			if len(ids) > 0 {
-				v["infoid"] = util.EncodeId(ids[0])
-				delete(v, "ids")
-			}
-		}
-
-		v["_id"] = util.EncodeId(v["_id"].(string))
-
-		switch score {
-		case 4:
-			sequenceArr4 = append(sequenceArr4, seqData[k])
-		case 5:
-			sequenceArr5 = append(sequenceArr5, seqData[k])
-		case 6:
-			sequenceArr6 = append(sequenceArr6, seqData[k])
-		case 7:
-			sequenceArr7 = append(sequenceArr7, seqData[k])
-		case 8:
-			sequenceArr8 = append(sequenceArr8, seqData[k])
-		case 9:
-			sequenceArr9 = append(sequenceArr9, seqData[k])
-		default:
-			sequenceArr3 = append(sequenceArr3, seqData[k])
-		}
-	}
-	return append(append(append(append(append(append(sequenceArr9, sequenceArr8...), sequenceArr7...), sequenceArr6...), sequenceArr5...), sequenceArr4...), sequenceArr3...)
+                        var max_jytime_map = *qutil.ObjToMap(v["max_jytime"].(map[string]interface{}))
+                        var max_jytime int64 = 0
+                        if max_jytime_map["value"] != nil {
+                            max_jytime = qutil.Int64All(max_jytime_map["value"])
+                        }
+                        //中标企业id
+                        var group_entidlist = *qutil.ObjToMap(v["group_entidlist"].(map[string]interface{}))
+                        var entId = ""
+                        if group_entidlist != nil && group_entidlist["buckets"] != nil {
+                            buckets := qutil.ObjArrToMapArr(group_entidlist["buckets"].([]interface{}))
+                            if buckets == nil || len(buckets) == 0 || (buckets[0]["key"] != nil && len(qutil.ObjToString(buckets[0]["key"])) < 10) {
+                                continue
+                            }
+                            ent_id := qutil.ObjToString(buckets[0]["key"])
+                            winners = append(winners, fmt.Sprintf(`"%s"`, ent_id))
+                            entId = util.EncodeId(ent_id)
+                        }
+                        //此中标企业与采购单位类似项目采购历史
+                        var buyer_similar_list = BuyerSOOL{}
+                        //此中标企业与采购单位其它项目采购历史
+                        var buyer_other_list = BuyerSOOL{}
+                        /*if dec.Buyer != "" {
+                        	var buyer_map = *qutil.ObjToMap(v["this_buyer"].(map[string]interface{}))
+                        	var buyer_map_count = buyer_map["doc_count"] //类似项目数量
+                        	var buyer_map_tatil_map = *qutil.ObjToMap(buyer_map["total"].(map[string]interface{}))
+                        	var buyer_map_tatil = qutil.RetainDecimal(qutil.Float64All(buyer_map_tatil_map["value"].(interface{})), 4)
+                        	var my_top_hits_map = *qutil.ObjToMap(buyer_map["my_top_hits"].(map[string]interface{}))
+                        	var buyer_hits_map = *qutil.ObjToMap(my_top_hits_map["hits"].(map[string]interface{}))
+                        	var hits_map = qutil.ObjArrToMapArr(buyer_hits_map["hits"].([]interface{}))
+                        	var bid_winner_time = ""
+                        	var buyer_winner_map = map[string]interface{}{} //类似项目 采购单位 和 中标企业
+                        	if hits_map != nil && len(hits_map) > 0 {
+                        		for _, v := range hits_map {
+                        			if v["_source"] != nil {
+                        				var hits_source_map = *qutil.ObjToMap(v["_source"].(map[string]interface{}))
+                        				jgtime := hits_source_map["jgtime"]
+                        				if jgtime != nil && bid_winner_time == "" {
+                        					bid_winner_time = FormatDateWithObj(&jgtime, "2006/01/02")
+                        				}
+                        				buyer_winner_map[qutil.InterfaceToStr(hits_source_map["id"])] = hits_source_map["jgtime"]
+                        			}
+                        		}
+                        	}
+                        	//查询此中标企业 和 此采购单位 所有合作的项目
+                        	buyer_winner_all_query := GetAllBWQuery(v["key"].(string), dec.Buyer)
+                        	buyer_winner_all_aggs, buyer_winner_all_res := GetAggs("projectset", "projectset", buyer_winner_all_query)
+                        	var bid_winner_other_time = ""
+                        	if buyer_winner_all_res != nil && len(buyer_winner_all_res) > 0 {
+                        		for _, v := range buyer_winner_all_res {
+                        			if buyer_winner_map[v["_id"].(string)] == nil && bid_winner_other_time == "" {
+                        				jgtime := v["jgtime"]
+                        				bid_winner_other_time = FormatDateWithObj(&jgtime, "2006/01/02")
+                        				break
+                        			}
+                        		}
+                        		//此中标企业 和 此采购单位 合作项目总金额
+                        		var sum_project_val_float float64 = 0
+                        		if buyer_winner_all_aggs != nil {
+                        			if sum_project, ok := buyer_winner_all_aggs.Children("sum_project"); ok {
+                        				sum_project_val, _ := sum_project.Aggregations["value"].MarshalJSON()
+                        				sum_project_val_float, _ = strconv.ParseFloat(string(sum_project_val), 64)
+                        			}
+                        		}
+                        		if sum_project_val_float > 0 {
+                        			buyer_other_list = BuyerSOOL{
+                        				dec.Buyer,
+                        				len(buyer_winner_all_res) - qutil.IntAll(buyer_map_count),
+                        				sum_project_val_float - buyer_map_tatil,
+                        				bid_winner_other_time,
+                        			}
+                        		}
+                        	}
+                        	if buyer_map_count != nil {
+                        		buyer_similar_list = BuyerSOOL{
+                        			dec.Buyer,
+                        			qutil.IntAll(buyer_map_count),
+                        			buyer_map_tatil,
+                        			bid_winner_time,
+                        		}
+                        	}
+                        }*/
+                        //中标企业名称
+                        buckets = append(buckets, &DecWinnerInfo{
+                            v["key"].(string),        //中标企业名称
+                            v["doc_count"].(float64), //类似项目总数
+                            total_project,            //项目金额
+                            buyer_similar_list,       //中标企业与采购单位类似项目合作历史
+                            buyer_other_list,         //中标企业和采购单位其它项目合作历史
+                            0,                        //中标企业注册资本
+                            entId,                    //中标企业加密id
+                            max_jytime,               //类似项目中标时间
+                            latestProject,            //中标企业最近合作项目
+                        })
+                    }
+                    //获取中标企业注资金信息
+                    /*capitals := entity.GetWinnerCapitals(winners)
+                      log.Println("查询获取中标企业注资金信息消耗时间", time.Since(t1))
+                      var isSortBool = false
+                      var bvdoc_count float64 = -1
+                      var bvtotal_project = -1
+                      for _, v := range buckets {
+                      	//类似项目或者其它项目
+                      	if k > 0 && (v.Buyer_other_list.Doc_count > 0 || v.Buyer_similar_list.Doc_count > 0) {
+                      	   isSortBool = true
+                      	}
+                      	//项目数相同 且 此中标企业金额大于前一个中标企业金额 允许再次排序
+                      	if bvdoc_count == v.Doc_count && bvtotal_project < v.Total_project {
+                      	   isSortBool = true
+                      	}
+                      	bvdoc_count = v.Doc_count
+                      	bvtotal_project = v.Total_project
+                      	v.Capital = capitals[v.EntId]
+                      }
+                      //根据金额二次排序
+                      fmt.Println("isSortBool:", isSortBool)
+                      if isSortBool {
+                         sort.Sort(DWIArray(buckets))
+                      }*/
+                    aggsArr["winnerAmount"] = buckets
+                }
+            }
+        }
+    }
+    log.Println("运行时间:", time.Since(t1))
+    return aggsArr
 }