|
@@ -7,7 +7,7 @@ import (
|
|
|
"log"
|
|
|
qu "qfw/util"
|
|
|
"reflect"
|
|
|
- regexp "regexp"
|
|
|
+ "regexp"
|
|
|
"sort"
|
|
|
)
|
|
|
|
|
@@ -60,8 +60,8 @@ func kvparse(p *ju.JobKv, e *ExtractTask, sonJobResult *map[string]interface{},
|
|
|
cfn := e.ClearFn["budget"]
|
|
|
lock.Unlock()
|
|
|
data := clear.DoClearFn(cfn, []interface{}{pv[0].Value, ""})
|
|
|
- if data[0] ==0{
|
|
|
- if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
|
|
|
+ if data[0] == 0 {
|
|
|
+ if istrue, ok := data[len(data)-1].(bool); istrue && ok {
|
|
|
(*sonJobResult)["budget"] = data[0]
|
|
|
}
|
|
|
}
|
|
@@ -72,13 +72,13 @@ func kvparse(p *ju.JobKv, e *ExtractTask, sonJobResult *map[string]interface{},
|
|
|
cfn := e.ClearFn["bidamount"]
|
|
|
lock.Unlock()
|
|
|
data := clear.DoClearFn(cfn, []interface{}{pv[0].Value, ""})
|
|
|
- if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
|
|
|
+ if istrue, ok := data[len(data)-1].(bool); istrue && ok {
|
|
|
(*sonJobResult)["bidamount"] = data[0]
|
|
|
}
|
|
|
continue
|
|
|
}
|
|
|
if ((*sonJobResult)["winner"] == nil || (*sonJobResult)["winner"] == "") && tags[0].Key == "中标单位" {
|
|
|
- if winnerorderNotReg.MatchString(pv[0].Value){
|
|
|
+ if winnerorderNotReg.MatchString(pv[0].Value) {
|
|
|
continue
|
|
|
}
|
|
|
(*sonJobResult)["winner"] = pv[0].Value
|
|
@@ -91,7 +91,8 @@ func kvparse(p *ju.JobKv, e *ExtractTask, sonJobResult *map[string]interface{},
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-var winnerorderNotReg =regexp.MustCompile(`(附件|否决原因|候选|招标失败|注册表|交易中心|序号内容|不足|公告|变更|采购|招标|废标|废止|流标|中标|投标|评标|开标|供应商|金额|万元|元整|预算|报价|单价|第(\d|一|二|三|四|五)(名|包)|排名|候选|确定|标段|(标|一|二|三|四|五)包|中选|成交|包号|(A|B|C|D|E|F|G)包|地址|详情|要求|推荐|名称|评审|得分|合同|平方米|公示期|结果|备注|说明|单位|代表|委托|工作日|营业(执|期)|通过|代码|电话|联系|条件|合理|费率|以上|以下|拟定|为|注:|\d[\s]{0,10}(\.|元|包|米|平米|平方米|吨|辆|千克|克|毫克|毫升|公升|套|件|瓶|箱|只|台|年|月|日|天|号)|(:|:|;|;|?|¥|\*|%)|^[a-zA-Z0-9-]{5,100}|^[a-zA-Z0-9-]{1,100}$|[a-zA-Z0-9-]{10,100})`)
|
|
|
+
|
|
|
+var winnerorderNotReg = regexp.MustCompile(`(附件|否决原因|候选|招标失败|注册表|交易中心|序号内容|不足|公告|变更|采购|招标|废标|废止|流标|中标|投标|评标|开标|供应商|金额|万元|元整|预算|报价|单价|第(\d|一|二|三|四|五)(名|包)|排名|候选|确定|标段|(标|一|二|三|四|五)包|中选|成交|包号|(A|B|C|D|E|F|G)包|地址|详情|要求|推荐|名称|评审|得分|合同|平方米|公示期|结果|备注|说明|单位|代表|委托|工作日|营业(执|期)|通过|代码|电话|联系|条件|合理|费率|以上|以下|拟定|为|注:|\d[\s]{0,10}(\.|元|包|米|平米|平方米|吨|辆|千克|克|毫克|毫升|公升|套|件|瓶|箱|只|台|年|月|日|天|号)|(:|:|;|;|?|¥|\*|%)|^[a-zA-Z0-9-]{5,100}|^[a-zA-Z0-9-]{1,100}$|[a-zA-Z0-9-]{10,100})`)
|
|
|
//处理分包信息
|
|
|
func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
qu.Try(func() {
|
|
@@ -108,6 +109,21 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ ordertmp := map[int][]map[string]interface{}{}
|
|
|
+ ordertmpint := []int{}//中标排序人一共几组
|
|
|
+ //中标候选人
|
|
|
+ for _, v := range j.Winnerorder {
|
|
|
+ if vtype, ok := v["type"].(int); ok {
|
|
|
+ if ordertmp[vtype] == nil {
|
|
|
+ ordertmpint = append(ordertmpint, vtype)
|
|
|
+ tmp := make([]map[string]interface{}, 0)
|
|
|
+ tmp = append(tmp, v)
|
|
|
+ ordertmp[vtype] = tmp
|
|
|
+ } else {
|
|
|
+ ordertmp[vtype] = append(ordertmp[vtype], v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
tmpkeys := []string{}
|
|
|
for k, _ := range j.BlockPackage {
|
|
|
if k == "" {
|
|
@@ -118,7 +134,9 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
sort.Strings(tmpkeys)
|
|
|
packageResult := map[string]map[string]interface{}{}
|
|
|
//packagenum := len(j.BlockPackage)
|
|
|
+ tmpindex :=-1
|
|
|
for _, pkName := range tmpkeys {
|
|
|
+ tmpindex++
|
|
|
pkg, ok := j.BlockPackage[pkName]
|
|
|
if !ok {
|
|
|
continue
|
|
@@ -135,14 +153,15 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
if pkg.IsTrueBudget{
|
|
|
sonJobResult["budget"] = pkg.Budget
|
|
|
}
|
|
|
- if pkg.IsTrueBidamount{
|
|
|
+ if pkg.IsTrueBidamount {
|
|
|
sonJobResult["bidamount"] = pkg.Bidamount
|
|
|
}
|
|
|
if pkg.Winner == "" && len(j.Winnerorder) > 0 {
|
|
|
- if sonJobResult["winnerorder"] == nil {
|
|
|
- sonJobResult["winnerorder"] = j.Winnerorder
|
|
|
- if sonJobResult["bidamount"] == nil ||sonJobResult["bidamount"].(float64) <= 0 {
|
|
|
- if j.Winnerorder[0]["price"] != nil{
|
|
|
+ if sonJobResult["winnerorder"] == nil && len(tmpkeys) == len(ordertmpint) {//分包和中标候选人长度一样
|
|
|
+ //ordertmp[ordertmpint[tmpindex]] 取中标候选人组
|
|
|
+ sonJobResult["winnerorder"] = ordertmp[ordertmpint[tmpindex]]
|
|
|
+ if sonJobResult["bidamount"] == nil || sonJobResult["bidamount"].(float64) <= 0 {
|
|
|
+ if j.Winnerorder[0]["price"] != nil {
|
|
|
sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
|
|
|
}
|
|
|
}
|
|
@@ -152,7 +171,7 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
}
|
|
|
} else {
|
|
|
if len(j.Winnerorder) > 0 {
|
|
|
- if j.Winnerorder[0]["price"] !=nil{
|
|
|
+ if j.Winnerorder[0]["price"] != nil {
|
|
|
sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
|
|
|
}
|
|
|
sonJobResult["winner"] = j.Winnerorder[0]["entname"]
|
|
@@ -177,7 +196,7 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if sonJobResult["name"] == nil ||sonJobResult["name"] == ""{
|
|
|
+ if sonJobResult["name"] == nil || sonJobResult["name"] == "" {
|
|
|
sonJobResult["name"] = j.Title
|
|
|
}
|
|
|
}
|
|
@@ -282,8 +301,8 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
|
|
|
if qu.ObjToString(sonJobResult["winner"]) == "" || (!pkg.Accuracy && qu.ObjToString(firstWinnerOrder["entname"]) != "" && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
|
|
|
sonJobResult["winner"] = firstWinnerOrder["entname"]
|
|
|
}
|
|
|
- if (qu.Float64All(sonJobResult["bidamount"]) == 0 && pkg.IsTrueBidamount)|| (!pkg.Accuracy && qu.Float64All(firstWinnerOrder["price"]) > 0 && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
|
|
|
- if firstWinnerOrder["price"] != nil{
|
|
|
+ if (qu.Float64All(sonJobResult["bidamount"]) == 0 && pkg.IsTrueBidamount) || (!pkg.Accuracy && qu.Float64All(firstWinnerOrder["price"]) > 0 && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
|
|
|
+ if firstWinnerOrder["price"] != nil {
|
|
|
sonJobResult["bidamount"] = firstWinnerOrder["price"]
|
|
|
}
|
|
|
}
|