浏览代码

fix:最新项目获取需改

duxin 2 年之前
父节点
当前提交
41b76ea39c
共有 1 个文件被更改,包括 492 次插入492 次删除
  1. 492 492
      src/jfw/modules/bigmember/src/entity/analysis.go

+ 492 - 492
src/jfw/modules/bigmember/src/entity/analysis.go

@@ -1,540 +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 成交时间
+// 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")
-        }
+	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[len(list)-1].(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
+		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[len(list)-1].(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
 }