|
@@ -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
|
|
|
}
|