Browse Source

Merge branch 'dev3.4' of http://192.168.3.207:10080/qmx/jy-data-extract into dev3.4

maxiaoshan 5 năm trước cách đây
mục cha
commit
e8417a26e1

+ 5 - 5
src/jy/clear/tonumber.go

@@ -89,9 +89,9 @@ func ObjToMoney(data []interface{}) []interface{} {
 		}
 	}
 	f, _ := strconv.ParseFloat(strconv.FormatFloat(ret.(float64), 'f', 4, 64), 64)
-	if f < 1 {
-		f = 0
-	}
+	//if f < 1 {
+	//	f = 0
+	//}
 	//若果金额小于50,全文检索单位:万
 	if f < 50 && f > 0 && isfindUnit {
 		rep := contentUnit.FindAllStringIndex(fmt.Sprint(data[1]), -1)
@@ -99,17 +99,17 @@ func ObjToMoney(data []interface{}) []interface{} {
 			f = f * 10000
 		}
 	}
+	data[0] = f
 	if f == 0 && !moneyUnitRegBool.MatchString(fmt.Sprint(tmpstr)) {
 		data = append(data, false)
 		return data
 	}
 	data = append(data, true)
-	data[0] = f
 	return data
 }
 //["中标金额","成交金额","合同金额","中标价","成交价","成交价格","中标(成交)金额","投标报价","中标标价","成交结果"]
 //["0元","零元","0.0万元","¥0元"]
-var moneyUnitRegBool = regexp.MustCompile(`(中标金额|成交金额|合同金额|中标价|成交价|成交价格|中标\(成交\)金额|投标报价|中标标价|成交结果)?[::\s]?(0元|零元|0.0万元|¥0元|0)+`)
+var moneyUnitRegBool = regexp.MustCompile(`(中标金额|成交金额|合同金额|中标价|成交价|成交价格|中标\(成交\)金额|投标报价|中标标价|成交结果)?[::\s]?(0元|零元|0.0万元|¥0元|0)+[\s]?$`)
 //数字金额转换
 func numMoney(data []interface{}) ([]interface{}, bool) {
 	tmp := fmt.Sprintf("%f",data[0])

+ 2 - 8
src/jy/extract/extpackage.go

@@ -63,24 +63,18 @@ func kvparse(p *ju.JobKv, e *ExtractTask, sonJobResult *map[string]interface{},
 					if data[0] ==0{
 						if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
 							(*sonJobResult)["budget"] = data[0]
-						}else {
-							continue
 						}
 					}
-					(*sonJobResult)["budget"] = data[0]
 					continue
 				}
 				if qu.Float64All((*sonJobResult)["bidamount"]) == 0 && tags[0].Key == "中标金额" {
 					lock.Lock()
-					cfn := e.ClearFn["budget"]
+					cfn := e.ClearFn["bidamount"]
 					lock.Unlock()
 					data := clear.DoClearFn(cfn, []interface{}{pv[0].Value, ""})
 					if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
-						(*sonJobResult)["budget"] = data[0]
-					}else {
-						continue
+						(*sonJobResult)["bidamount"] = data[0]
 					}
-					(*sonJobResult)["bidamount"] = data[0]
 					continue
 				}
 				if ((*sonJobResult)["winner"] == nil || (*sonJobResult)["winner"] == "") && tags[0].Key == "中标单位" {

+ 74 - 31
src/jy/extract/extract.go

@@ -11,6 +11,7 @@ import (
 	qu "qfw/util"
 	"qfw/util/redis"
 	"regexp"
+	"sort"
 	"strconv"
 	"strings"
 	"sync"
@@ -336,21 +337,27 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
 			IsFile:     isextFile,
 		}
 	}
-	//是否配置站点
 	codeSite := j.SpiderCode
-	exp, isSite := e.Luacodes.Load(codeSite)
+	//是否启用站点
+	if value, ok := e.SiteMerge.Load(codeSite); ok {
+		isSite = value.(bool)
+	}
 	if isSite {
-		if exp.(map[string]interface{})["e.SiteClearFn"] != nil {
-			e.SiteClearFn = exp.(map[string]interface{})["e.SiteClearFn"].(map[string][]string)
-		}
-		if exp.(map[string]interface{})["e.SiteTag"] != nil {
-			e.SiteTag = exp.(map[string]interface{})["e.SiteTag"].(map[string][]*Tag)
-		}
-		if exp.(map[string]interface{})["e.SiteRuleCores"] != nil {
-			e.SiteRuleCores = exp.(map[string]interface{})["e.SiteRuleCores"].(map[string]map[string][]*RuleCore)
-		}
-		if exp.(map[string]interface{})["e.SiteRuleBacks"] != nil {
-			e.SiteRuleBacks = exp.(map[string]interface{})["e.SiteRuleBacks"].([]*RegLuaInfo)
+		//是否配置站点
+		exp, isSite := e.Luacodes.Load(codeSite)
+		if isSite {
+			if exp.(map[string]interface{})["e.SiteClearFn"] != nil {
+				e.SiteClearFn = exp.(map[string]interface{})["e.SiteClearFn"].(map[string][]string)
+			}
+			if exp.(map[string]interface{})["e.SiteTag"] != nil {
+				e.SiteTag = exp.(map[string]interface{})["e.SiteTag"].(map[string][]*Tag)
+			}
+			if exp.(map[string]interface{})["e.SiteRuleCores"] != nil {
+				e.SiteRuleCores = exp.(map[string]interface{})["e.SiteRuleCores"].(map[string]map[string][]*RuleCore)
+			}
+			if exp.(map[string]interface{})["e.SiteRuleBacks"] != nil {
+				e.SiteRuleBacks = exp.(map[string]interface{})["e.SiteRuleBacks"].([]*RegLuaInfo)
+			}
 		}
 	}
 	qu.Try(func() {
@@ -587,6 +594,7 @@ func (e *ExtractTask) ExtractDetail(j *ju.Job, isSite bool, codeSite string) {
 					if istrue, ok := data[len(data)-1].(bool); istrue && ok {
 						j.Result[key][i].IsTrue = true
 					} else {
+						j.Result[key][i].Value = data[0]
 						continue
 					}
 				}
@@ -795,8 +803,8 @@ func ExtRuleCore(doc map[string]interface{}, e *ExtractTask, vc *RuleCore, j *ju
 				j.Result[k] = [](*ju.ExtField){}
 			}
 			for _, tmp := range v {
-				field := &ju.ExtField{Weight: qu.IntAll(tmp["weight"]),ExtFrom:qu.ObjToString(tmp["extfrom"]), Field: k, Code: qu.ObjToString(tmp["code"]), Type: qu.ObjToString(tmp["type"]), MatchType: qu.ObjToString(tmp["matchtype"]), RuleText: qu.ObjToString(tmp["ruletext"]), SourceValue: tmp["sourcevalue"], Value: tmp["value"]}
-				if k == "bidamount" && field.ExtFrom=="第一候选人"{
+				field := &ju.ExtField{Weight: qu.IntAll(tmp["weight"]), ExtFrom: qu.ObjToString(tmp["extfrom"]), Field: k, Code: qu.ObjToString(tmp["code"]), Type: qu.ObjToString(tmp["type"]), MatchType: qu.ObjToString(tmp["matchtype"]), RuleText: qu.ObjToString(tmp["ruletext"]), SourceValue: tmp["sourcevalue"], Value: tmp["value"]}
+				if k == "bidamount" && field.ExtFrom == "第一候选人" {
 					field.Score = 1
 				}
 				if isSite {
@@ -1039,7 +1047,7 @@ func getKvByLuaFields(vc *RuleCore, j *ju.Job, et *ExtractTask) (map[string][]ma
 	if len(j.Winnerorder) > 1 {
 		if vc.Field == "bidamount" {
 			for _, v := range j.Winnerorder {
-				if v["price"] == nil{
+				if v["price"] == nil {
 					continue
 				}
 				kvmap[vc.Field] = append(kvmap[vc.Field], map[string]interface{}{
@@ -1059,7 +1067,7 @@ func getKvByLuaFields(vc *RuleCore, j *ju.Job, et *ExtractTask) (map[string][]ma
 					"code":        "CL_中标候选人",
 					"field":       vc.Field,
 					"ruletext":    "中标候选人",
-					"extfrom":      j.Winnerorder[0]["sortstr"],
+					"extfrom":     j.Winnerorder[0]["sortstr"],
 					"sourcevalue": price,
 					"value":       price,
 					"type":        "winnerorder",
@@ -1588,22 +1596,54 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
 		tmp["fieldall"] = auxinfo
 		for _, val := range result {
 			for _, v := range val { //取第一个非负数,项目名称除外
+				//存0是否有效
+				if (v.Field == "bidamount" || v.Field == "budget") && v.IsTrue {
+					tmp[v.Field] = v.Value
+					break
+				}
 				if v.Score > -1 {
 					tmp[v.Field] = v.Value
 					break
 				} else if v.Field == "projectname" {
 					tmp[v.Field] = v.Value
 					break
-				} else if v.Field == "bidamount" || v.Field == "budget" {
-					if v.IsTrue {
-						tmp[v.Field] = v.Value
-						break
-					}
 				}
 			}
 		}
 		if len(j.PackageInfo) > 0 { //分包信息
 			tmp["package"] = j.PackageInfo
+			//包预算,中标金额合并大于抽取就覆盖
+			var tmpBidamount, tmpBudget float64
+			//s_winner逗号分隔拼接,分包中标人
+			var tmpstr,savewinner []string
+			//包预算,中标金额合并大于抽取就覆盖
+			for b, v := range j.PackageInfo {
+				if v["winner"]!= nil && v["winner"]!=""{
+					tmpstr = append(tmpstr,b)
+				}
+				if v["budget"] != nil {
+					tmpBudget += qu.Float64All(v["budget"])
+				}
+				if v["bidamount"] != nil {
+					tmpBidamount += qu.Float64All(v["bidamount"])
+				}
+			}
+			if qu.Float64All(tmp["budget"]) < tmpBudget {
+				tmp["budget"] = tmpBudget
+			}
+			if qu.Float64All(tmp["bidamount"]) < tmpBidamount {
+				tmp["bidamount"] = tmpBidamount
+			}
+			//s_winner逗号分隔拼接,分包中标人
+			sort.Strings(tmpstr)
+			for _,v := range tmpstr{
+				savewinner = append(savewinner,qu.ObjToString(j.PackageInfo[v]["winner"]))
+			}
+			tmp["s_winner"] = strings.Join(savewinner,",")
+
+		}else if tmp["winner"]!= nil && tmp["winner"]!=""{
+			//没有分包取winner
+			tmp["s_winner"] = tmp["winner"]
 		}
 		if len(j.Winnerorder) > 0 { //候选人信息
 			tmp["winnerorder"] = j.Winnerorder
@@ -2044,20 +2084,23 @@ func resetWinnerorder(j *ju.Job) {
 	//	}
 	//}
 	if maxlen > 0 {
-		winners = append(winners,&ju.ExtField{Code:"winnerorder",Field:"winner",ExtFrom:"j.Winnerorder",Value:j.Winnerorder[0]["entname"],Score:0.5} )
-		if j.Winnerorder[0]["price"]!= nil{
-			bidamounts = append(bidamounts,&ju.ExtField{Code:"winnerorder",Field:"bidamount",ExtFrom:"j.Winnerorder",Value:j.Winnerorder[0]["price"],Score:0.5} )
+		winners = append(winners, &ju.ExtField{Code: "winnerorder", Field: "winner", ExtFrom: "j.Winnerorder", Value: j.Winnerorder[0]["entname"], Score: 0.5})
+		if j.Winnerorder[0]["price"] != nil {
+			tmpPrice := clear.ObjToMoney([]interface{}{j.Winnerorder[0]["price"],""})
+			if tmpPrice[len(tmpPrice)-1].(bool){
+				bidamounts = append(bidamounts, &ju.ExtField{Code: "winnerorder", Field: "bidamount", ExtFrom: "j.Winnerorder",SourceValue:j.Winnerorder[0]["price"], Value: tmpPrice[0], Score: 0.5})
+			}
 		}
 	}
-	if j.Result["winner"] == nil{
+	if j.Result["winner"] == nil && len(winners) > 0 {
 		j.Result["winner"] = winners
-	}else {
-		j.Result["winner"] = append(j.Result["winner"],winners... )
+	} else {
+		j.Result["winner"] = append(j.Result["winner"], winners...)
 	}
-	if j.Result["bidamount"]==nil{
+	if j.Result["bidamount"] == nil && len(bidamounts) > 0 {
 		j.Result["bidamount"] = bidamounts
-	}else {
-		j.Result["bidamount"] =  append(j.Result["bidamount"],bidamounts... )
+	} else {
+		j.Result["bidamount"] = append(j.Result["bidamount"], bidamounts...)
 	}
 	//j.Result["winner"] = winners
 	//中标金额

+ 4 - 3
src/jy/extract/score.go

@@ -115,9 +115,10 @@ func ScoreFields(j *ju.Job, ftag map[string][]*Tag) map[string][]*ju.ExtField {
 		}
 		if field == "budget" || field == "bidamount" {
 			for tmpsindex, tmpsvalue := range tmps {
-				tmps[tmpsindex].Score = -10
-				tmps[tmpsindex].ScoreItem = append(tmps[tmpsindex].ScoreItem, &ju.ScoreItem{Des: field+`value结果含中文直接-10分`, Code: field, Value: tmpsvalue.Value, Score: -10})
-				continue
+				if strings.Contains(tmpsvalue.RuleText,"总") && tmpsvalue.Type =="colon"{
+					tmps[tmpsindex].Score += 1
+					tmps[tmpsindex].ScoreItem = append(tmps[tmpsindex].ScoreItem, &ju.ScoreItem{Des: field+`value结果含总字+1`, Code: field, Value: tmpsvalue.Value, Score:1})
+				}
 			}
 		}
 		locktag.Lock()

+ 16 - 6
src/jy/extract/score_jsondata.go

@@ -29,10 +29,10 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 				lockclear.Lock()
 				cfn := e.ClearFn[v]
 				lockclear.Unlock()
-				newNum := clear.DoClearFn(cfn, []interface{}{util2.Float64All((*j.Jsondata)[v]), ""})
+				newNum := clear.DoClearFn(cfn, []interface{}{(*j.Jsondata)[v], ""})
 				if util2.IntAll(newNum[0]) != 0 {
 					extFields := make([]*util.ExtField, 0)
-					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1})
+					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1,IsTrue:newNum[len(newNum)-1].(bool)})
 					j.Result[v] = extFields
 					//AddExtLog("extract", j.SourceMid, nil, newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 					//AddExtLog("clear", j.SourceMid, (*j.Jsondata)[v], newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
@@ -120,15 +120,26 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 			if jdextweight == 0 {
 				continue
 			}
+			oneScore := j.Result[v][0].Score
 			if v == "budget" || v == "bidamount" {
 				lockclear.Lock()
 				cfn := e.ClearFn[v]
 				lockclear.Unlock()
-				newNum := clear.DoClearFn(cfn, []interface{}{util2.Float64All((*j.Jsondata)[v]), ""})
+				newNum := clear.DoClearFn(cfn, []interface{}{(*j.Jsondata)[v], ""})
 				if util2.IntAll(newNum[0]) != 0 {
 					extFields := make([]*util.ExtField, 0)
-					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1})
-					j.Result[v] = extFields
+					if jdextweight >1{
+						if oneScore < 0{
+							oneScore =0.1
+						}
+						extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: oneScore+1,IsTrue:newNum[len(newNum)-1].(bool)})
+					}else {
+						if oneScore < 0{
+							oneScore =0.1
+						}
+						extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: oneScore,IsTrue:newNum[len(newNum)-1].(bool)})
+					}
+					j.Result[v] = append(j.Result[v], extFields...)
 					//AddExtLog("extract", j.SourceMid, nil, newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 					//AddExtLog("clear", j.SourceMid, (*j.Jsondata)[v], newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 				}
@@ -137,7 +148,6 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 
 			if strings.Trim(util2.ObjToString(j.Result[v][0].Value), " ") != strings.Trim(util2.ObjToString((*j.Jsondata)[v]), " ") {
 				tmp = append(tmp, j.Result[v][0])
-				oneScore := j.Result[v][0].Score
 				if jdextweight == 2 {
 					oneScore += 2
 				}

+ 17 - 8
src/jy/pretreated/analystep.go

@@ -37,7 +37,7 @@ func AnalyStart(job *util.Job, isSite bool, codeSite string) {
 			if len([]rune(bl.Text)) > 80 {
 				bl.Block, _ = DivideBlock(job.CategorySecond, bl.Text, 1, job.RuleBlock, isSite, codeSite)
 				for _, bl_bl := range bl.Block {
-					processTableInBlock(bl_bl, job,  isSite, codeSite)
+					processTableInBlock(bl_bl, job, isSite, codeSite)
 				}
 			}
 			FindProjectCode(bl.Text, job) //匹配项目编号
@@ -96,7 +96,7 @@ func AnalyStart(job *util.Job, isSite bool, codeSite string) {
 						tmpw := 0
 						if bl.TableKV != nil {
 							for kk, v := range bl.TableKV.KvTags {
-								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk){
+								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk) {
 									for _, vv := range v {
 										if winbs[vv.Value] {
 											continue
@@ -115,7 +115,7 @@ func AnalyStart(job *util.Job, isSite bool, codeSite string) {
 						}
 						if bl.SpaceKV != nil {
 							for kk, v := range bl.SpaceKV.KvTags {
-								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk){
+								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk) {
 									for _, vv := range v {
 										if winbs[vv.Value] {
 											continue
@@ -134,7 +134,7 @@ func AnalyStart(job *util.Job, isSite bool, codeSite string) {
 						}
 						if bl.ColonKV != nil {
 							for kk, v := range bl.ColonKV.KvTags {
-								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk){
+								if strings.Contains(kk, "中标候选人") && WinnerOrderStr.MatchString(kk) {
 									for _, vv := range v {
 										if winbs[vv.Value] {
 											continue
@@ -159,7 +159,7 @@ func AnalyStart(job *util.Job, isSite bool, codeSite string) {
 	}
 }
 
-func processTableInBlock(bl *util.Block, job *util.Job,  isSite bool, codeSite string) {
+func processTableInBlock(bl *util.Block, job *util.Job, isSite bool, codeSite string) {
 	//块中再查找表格(块,处理完把值赋到块)
 	tabs, _ := ComputeConRatio(bl.Text, 2)
 	for _, tab := range tabs {
@@ -283,19 +283,28 @@ func processTableResult(tabres *TableResult, block *util.Block, job *util.Job, i
 			tablePackage[v] = blockPackage
 		}
 	}
+	tmpWins := make(map[string]int)
+	for _, v := range job.Winnerorder {
+		if v["entname"] != nil && v["entname"] != "" {
+			tmpWins[v["entname"].(string)] = v["sort"].(int)
+		}
+	}
 	//处理中标人排序
 	wror := []map[string]interface{}{}
-	for i, v := range tabres.WinnerOrder {
+	for _, v := range tabres.WinnerOrder {
 		entName, _ := v["entname"].(string)
 		v["entname"] = winnerOrderEntity.clear("中标单位", entName)
 		if price, ok := v["price"].(string); ok {
 			v["price"] = winnerOrderEntity.clear("中标金额", price)
 		}
-		v["type"] = i
+		v["type"] = len(job.Winnerorder)
+		if tmpWins[v["entname"].(string)] == v["sort"].(int) && v["price"] == nil {
+			continue
+		}
 		wror = append(wror, v)
 	}
 	if len(wror) > 0 {
-		job.Winnerorder = wror
+		job.Winnerorder = append(job.Winnerorder, wror...)
 	}
 	//分包
 	if len(tablePackage) > 0 {

+ 1 - 1
src/jy/pretreated/analytable.go

@@ -96,7 +96,7 @@ var (
 	projectnameReg = regexp.MustCompile("((公开)?招标)*[((第]*[一二三四五六七八九十a-zA-Z0-9]+(标段|包|标|段)[))]*$")
 	MhSpilt        = regexp.MustCompile("[::]")
 	//识别采购单位联系人、联系电话、代理机构联系人、联系电话
-	ContactInfoVagueReg = regexp.MustCompile("邮政编码|邮编|名称|(征求意见|报名审核购买)?((联系人?(及|和)?|办公|单位)?(((联系)?(电话|方式)([//]传真|及手机)?|手机)(号码)?|邮箱(地址)?|(详细)?(地(址|点)))|(联系|收料)(人(姓名)?|方式)|传真|电子邮件|(主要负责|项目(负责|联系)|经办)人)|采购方代表")
+	ContactInfoVagueReg = regexp.MustCompile("邮政编码|邮编|名称|(征求意见|报名审核购买)?((联系人?(及|和)?|办公|单位)?(((联系)?(电话|方式|号码)([//]传真|及手机)?|手机)(号码)?|邮箱(地址)?|(详细)?(地(址|点)))|(联系|收料)(人(姓名)?|方式)|传真|电子邮件|(主要负责|项目(负责|联系)|经办)人)|采购方代表")
 	ContactInfoMustReg  = regexp.MustCompile("^(" + ContactInfoVagueReg.String() + ")$")
 	ContactType         = map[string]*regexp.Regexp{
 		"采购单位": regexp.MustCompile("(采购(项目.{2}|服务)?|比选|询价|招标(服务)?|甲|建设|委托|发包|业主|使用|谈判|本招标项目经办|征求意见联系|项目实施)(人|单位|部门|机构|机关|(执行)?方$)|(项目|建(库|设))单位|招标人信息|采购中心(地址)?|业主|收料人|采购部"),

+ 3 - 0
src/jy/pretreated/tablev2.go

@@ -863,6 +863,9 @@ func ComputeConRatio(con string, strtype int) (tabs []*goquery.Selection, ratio
 				}
 			}
 			if !b {
+				if strings.Contains(tmpt.First().Text(),"类似业绩")||strings.Contains(tmpt.First().Text(),"历史业绩"){
+					continue
+				}
 				tabs = append(tabs, tmpt)
 			}
 		}

+ 1 - 1
src/res/fieldscore.json

@@ -43,7 +43,7 @@
             },
             "bidamount": {
                 "table": 3,
-                "colon": 3,
+                "colon": 2,
                 "space": 2,
                 "regexp": 2,
                 "kvweight": 1

+ 14 - 12
udpfilterdup/src/main.go

@@ -106,9 +106,11 @@ func mainT() {
 	/*
 	ObjectId("5da3f31aa5cb26b9b798d3aa")
 	ObjectId("5da418c4a5cb26b9b7e3e9a6")
+	ObjectId("5df5071ce9d1f601e495fa54")
+	ObjectId("5e09c05f0cf41612e0626abc")
 	*/
-	//sid = "5da3f31aa5cb26b9b798d3aa"
-	//eid = "5da418c4a5cb26b9b7e3e9a6"
+	//sid = "5df5071ce9d1f601e495fa50"
+	//eid = "5e09c05f0cf41612e0626abc"
 
 	mapinfo := map[string]interface{}{}
 	if sid == "" || eid == "" {
@@ -648,8 +650,8 @@ func mergeDataFields(source *Info, info *Info) (*Info, []int64,bool) {
 	is_replace :=false
 	//1、城市
 	if (source.area == "" || source.area == "全国") && info.area != "全国" && info.area != "" {
-		merge_recordMap["area"] = info.area
-		merge_recordMap["city"] = info.city
+		merge_recordMap["area"] = source.area
+		merge_recordMap["city"] = source.city
 		source.area = info.area
 		source.city = info.city
 		mergeArr = append(mergeArr, 1)
@@ -657,49 +659,49 @@ func mergeDataFields(source *Info, info *Info) (*Info, []int64,bool) {
 	}
 	//2、项目名称
 	if source.projectname == "" && info.projectname != "" {
-		merge_recordMap["projectname"] = info.projectname
+		merge_recordMap["projectname"] = source.projectname
 		source.projectname = info.projectname
 		mergeArr = append(mergeArr, 2)
 		is_replace = true
 	}
 	//3、项目编号
 	if source.projectcode == "" && info.projectcode != "" {
-		merge_recordMap["projectcode"] = info.projectcode
+		merge_recordMap["projectcode"] = source.projectcode
 		source.projectcode = info.projectcode
 		mergeArr = append(mergeArr, 3)
 		is_replace = true
 	}
 	//4、采购单位
 	if source.buyer == "" && info.buyer != "" {
-		merge_recordMap["buyer"] = info.buyer
+		merge_recordMap["buyer"] = source.buyer
 		source.buyer = info.buyer
 		mergeArr = append(mergeArr, 4)
 		is_replace = true
 	}
 	//5、预算
 	if source.budget == 0 && info.budget != 0 {
-		merge_recordMap["budget"] = info.budget
+		merge_recordMap["budget"] = source.budget
 		source.budget = info.budget
 		mergeArr = append(mergeArr, 5)
 		is_replace = true
 	}
 	//6、中标单位
 	if source.winner == "" && info.winner != "" {
-		merge_recordMap["winner"] = info.winner
+		merge_recordMap["winner"] = source.winner
 		source.winner = info.winner
 		mergeArr = append(mergeArr, 6)
 		is_replace = true
 	}
 	//7、中标金额
 	if source.bidamount == 0 && info.bidamount != 0 {
-		merge_recordMap["bidamount"] = info.bidamount
+		merge_recordMap["bidamount"] = source.bidamount
 		source.bidamount = info.bidamount
 		mergeArr = append(mergeArr, 7)
 		is_replace = true
 	}
 	//8、开标时间-地点
 	if source.bidopentime == 0 && info.bidopentime != 0 {
-		merge_recordMap["bidopentime"] = info.bidopentime
+		merge_recordMap["bidopentime"] = source.bidopentime
 		source.bidopentime = info.bidopentime
 		mergeArr = append(mergeArr, 8)
 		is_replace = true
@@ -707,7 +709,7 @@ func mergeDataFields(source *Info, info *Info) (*Info, []int64,bool) {
 
 	//9、合同编号
 	if source.contractnumber == "" && info.contractnumber != "" {
-		merge_recordMap["contractnumber"] = info.contractnumber
+		merge_recordMap["contractnumber"] = source.contractnumber
 		source.contractnumber = info.contractnumber
 		mergeArr = append(mergeArr, 9)
 		is_replace = true