Bläddra i källkod

分包有效0

fengweiqiang 5 år sedan
förälder
incheckning
51086d1c8a

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

@@ -129,13 +129,19 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
 				if pkg != nil {
 					sonJobResult["origin"] = pkg.Origin
 					sonJobResult["text"] = pkg.Text
-					sonJobResult["budget"] = pkg.Budget
-					sonJobResult["bidamount"] = pkg.Bidamount
+					if pkg.IsTrueBudget{
+						sonJobResult["budget"] = pkg.Budget
+					}
+					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"].(float64) <= 0 {
-								sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
+							if  sonJobResult["bidamount"] == nil ||sonJobResult["bidamount"].(float64) <= 0 {
+								if j.Winnerorder[0]["price"] != nil{
+									sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
+								}
 							}
 							if sonJobResult["winner"] == "" {
 								sonJobResult["winner"] = j.Winnerorder[0]["entname"]
@@ -143,7 +149,9 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
 						}
 					} else {
 						if len(j.Winnerorder) > 0 {
-							sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
+							if j.Winnerorder[0]["price"] !=nil{
+								sonJobResult["bidamount"] = qu.Float64All(j.Winnerorder[0]["price"])
+							}
 							sonJobResult["winner"] = j.Winnerorder[0]["entname"]
 						}
 						if len(pkg.WinnerOrder) > 0 {
@@ -158,7 +166,7 @@ func PackageDetail(j *ju.Job, e *ExtractTask, isSite bool, codeSite string) {
 
 					sonJobResult["type"] = pkg.Type
 					if len(tmpkeys) == 1 {
-						if qu.Float64All(sonJobResult["budget"]) == 0 {
+						if qu.Float64All(sonJobResult["budget"]) == 0 && pkg.IsTrueBudget {
 							for _, bv := range j.Block {
 								kvparse(bv.ColonKV, e, &sonJobResult, isSite, codeSite)
 								kvparse(bv.TableKV, e, &sonJobResult, isSite, codeSite)
@@ -271,8 +279,10 @@ 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.Accuracy && qu.Float64All(firstWinnerOrder["price"]) > 0 && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
-						sonJobResult["bidamount"] = firstWinnerOrder["price"]
+					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"]
+						}
 					}
 				}
 				//log.Println(pkName, sonJobResult)

+ 16 - 4
src/jy/extract/extract.go

@@ -968,14 +968,20 @@ func ExtRuleCoreByPkgReg(j *ju.Job, in *RegLuaInfo, e *ExtractTask) {
 								cfn := e.ClearFn[in.Field]
 								lock.Unlock()
 								data := clear.DoClearFn(cfn, []interface{}{strings.TrimSpace(rep[in.Field+"_"+fmt.Sprint(i)]), j.Content})
-								j.BlockPackage[k].Budget = qu.Float64All(data[0])
+								if data[len(data)-1].(bool){
+									j.BlockPackage[k].Budget = qu.Float64All(data[0])
+									j.BlockPackage[k].IsTrueBudget = true
+								}
 								break
 							} else if in.Field == "bidamount" && vbpkg.Bidamount <= 0 {
 								lock.Lock()
 								cfn := e.ClearFn[in.Field]
 								lock.Unlock()
 								data := clear.DoClearFn(cfn, []interface{}{strings.TrimSpace(rep[in.Field+"_"+fmt.Sprint(i)]), j.Content})
-								j.BlockPackage[k].Bidamount = qu.Float64All(data[0])
+								if data[len(data)-1].(bool){
+									j.BlockPackage[k].Bidamount = qu.Float64All(data[0])
+									j.BlockPackage[k].IsTrueBidamount = true
+								}
 								break
 							} else if in.Field == "winner" {
 								if j.BlockPackage[k].Winner == "" {
@@ -1014,7 +1020,10 @@ func ExtRuleCoreByPkgReg(j *ju.Job, in *RegLuaInfo, e *ExtractTask) {
 						cfn := e.ClearFn[in.Field]
 						lock.Unlock()
 						data := clear.DoClearFn(cfn, []interface{}{val, j.Content})
-						j.BlockPackage[k].Budget = qu.Float64All(data[0])
+						if data[len(data)-1].(bool){
+							j.BlockPackage[k].Budget = qu.Float64All(data[0])
+							j.BlockPackage[k].IsTrueBudget = true
+						}
 						break
 					}
 					if in.Field == "bidamount" && vbpkg.Bidamount <= 0 {
@@ -1022,7 +1031,10 @@ func ExtRuleCoreByPkgReg(j *ju.Job, in *RegLuaInfo, e *ExtractTask) {
 						cfn := e.ClearFn[in.Field]
 						lock.Unlock()
 						data := clear.DoClearFn(cfn, []interface{}{val, j.Content})
-						j.BlockPackage[k].Bidamount = qu.Float64All(data[0])
+						if data[len(data)-1].(bool){
+							j.BlockPackage[k].Bidamount = qu.Float64All(data[0])
+							j.BlockPackage[k].IsTrueBidamount = true
+						}
 						break
 					} else if in.Field == "bidstatus" {
 						if j.BlockPackage[k].BidStatus == "" {

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

@@ -351,6 +351,14 @@ func processTableResult(tabres *TableResult, block *util.Block, job *util.Job, i
 			if tv.WinnerOrder != nil && len(tv.WinnerOrder) > 0 {
 				bv.WinnerOrder = tv.WinnerOrder
 			}
+			if tv.Bidamount > 0 && bv.Bidamount == 0 {
+				bv.Bidamount = tv.Bidamount
+				bv.IsTrueBidamount = tv.IsTrueBidamount
+			}
+			if tv.Budget >0 && bv.Bidamount == 0{
+				bv.Budget = tv.Budget
+				bv.IsTrueBudget = tv.IsTrueBudget
+			}
 		}
 		for k, v := range pkgMap {
 			job.BlockPackage[k] = v

+ 27 - 0
src/jy/pretreated/analytable.go

@@ -2,7 +2,10 @@ package pretreated
 
 import (
 	"fmt"
+	"jy/clear"
 	u "jy/util"
+	"qmx/qfw/common/src/qfw/util"
+
 	//"log"
 	qutil "qfw/util"
 	"regexp"
@@ -2128,6 +2131,30 @@ func (tn *Table) manyPackageProcessByIndex(index []string, standIndex_pos []int,
 			//}
 			for _, vcgdw := range k1tags {
 				if vcgdw.Value == "采购单位" {
+				}else if vcgdw.Value=="预算"&&len(val) == len(index){
+					for bi,bv := range index{
+						if tn.BlockPackage.Map[bv].(*u.BlockPackage).Budget == 0{
+							moneys := clear.ObjToMoney([]interface{}{val[bi], ""})
+							tn.BlockPackage.Map[bv].(*u.BlockPackage).Budget = moneys[0].(float64)
+							tn.BlockPackage.Map[bv].(*u.BlockPackage).IsTrueBudget = moneys[len(moneys)-1].(bool)
+						}
+					}
+				}else if vcgdw.Value == "中标金额"{
+					for bi,bv := range index{
+						if tn.BlockPackage.Map[bv].(*u.BlockPackage).Bidamount == 0{
+							moneys := clear.ObjToMoney([]interface{}{val[bi], ""})
+							tn.BlockPackage.Map[bv].(*u.BlockPackage).Bidamount = moneys[0].(float64)
+							tn.BlockPackage.Map[bv].(*u.BlockPackage).IsTrueBidamount = moneys[len(moneys)-1].(bool)
+						}
+					}
+				}else if vcgdw.Value == "中标单位"{
+					for _,bv := range index{
+						if tn.BlockPackage.Map[bv].(*u.BlockPackage).WinnerOrder == nil ||len(tn.BlockPackage.Map[bv].(*u.BlockPackage).WinnerOrder) == 0{
+							continue
+						}else {
+							tn.BlockPackage.Map[bv].(*u.BlockPackage).Winner = util.ObjToString(tn.BlockPackage.Map[bv].(*u.BlockPackage).WinnerOrder[0]["entname"])
+						}
+					}
 				}
 			}
 		} else if val, bvs := v1.(string); bvs && len(index) == 1 {

+ 16 - 14
src/jy/util/article.go

@@ -128,20 +128,22 @@ type Segment struct {
 
 //包
 type BlockPackage struct {
-	Origin      string                   //包的原始值
-	Name        string                   //标段(包)名称
-	Text        string                   //包文 (包对应的正文)
-	Budget      float64                  //标段(包)预算
-	Winner      string                   //标段(包)中标单位
-	Bidamount   float64                  //标段(包)中标价
-	Index       string                   //序号 (转换后编号,只有数字或字母)
-	Type        string                   //类型 (匹配后面的标段、包之类的词)
-	ColonKV     *JobKv                   //冒号kv (分出的对应的KV值)
-	TableKV     *JobKv                   //table kv (分出的对应的KV值)
-	SpaceKV     *JobKv                   //空格 kv (分出的对应的KV值)
-	BidStatus   string                   //成交状态
-	WinnerOrder []map[string]interface{} //中标人排序
-	Accuracy    bool                     //包里面抽取字段的准确性,如果能打上块标签的话,就不用中标候选人中的值覆盖包里面的值
+	Origin          string                   //包的原始值
+	Name            string                   //标段(包)名称
+	Text            string                   //包文 (包对应的正文)
+	Budget          float64                  //标段(包)预算
+	IsTrueBudget    bool                     //标段(包)预算0是否有效
+	Winner          string                   //标段(包)中标单位
+	Bidamount       float64                  //标段(包)中标价
+	IsTrueBidamount bool                     //标段(包)中标价 0是否有效
+	Index           string                   //序号 (转换后编号,只有数字或字母)
+	Type            string                   //类型 (匹配后面的标段、包之类的词)
+	ColonKV         *JobKv                   //冒号kv (分出的对应的KV值)
+	TableKV         *JobKv                   //table kv (分出的对应的KV值)
+	SpaceKV         *JobKv                   //空格 kv (分出的对应的KV值)
+	BidStatus       string                   //成交状态
+	WinnerOrder     []map[string]interface{} //中标人排序
+	Accuracy        bool                     //包里面抽取字段的准确性,如果能打上块标签的话,就不用中标候选人中的值覆盖包里面的值
 }
 
 //联系人