|
@@ -57,10 +57,15 @@ var (
|
|
regMoreWrap = regexp.MustCompile("[\r\n]{2,}")
|
|
regMoreWrap = regexp.MustCompile("[\r\n]{2,}")
|
|
regStrWrap = regexp.MustCompile("分包名称[::]")
|
|
regStrWrap = regexp.MustCompile("分包名称[::]")
|
|
regBZJWarap = regexp.MustCompile("保证金.*")
|
|
regBZJWarap = regexp.MustCompile("保证金.*")
|
|
|
|
+ regPDFWarap = regexp.MustCompile("[a-zA-Z](包|标段).(pdf|PDF)")
|
|
|
|
+ regAZWarap = regexp.MustCompile("(标[a-zA-Z]取值|标段划分)")
|
|
replSerial = regexp.MustCompile("(\r\n|^)([\\d一二三四五六七八九十][、..::,])+\\d")
|
|
replSerial = regexp.MustCompile("(\r\n|^)([\\d一二三四五六七八九十][、..::,])+\\d")
|
|
moreColonReg = regexp.MustCompile("[::]+")
|
|
moreColonReg = regexp.MustCompile("[::]+")
|
|
regFilter = regexp.MustCompile("等$")
|
|
regFilter = regexp.MustCompile("等$")
|
|
pkgFilter = regexp.MustCompile("第[一二三四五六七八九十0-9A-Za-zⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ](子|合同|分|施工|监理)?(标段?|包|合同段|标包)|(子|合同|分|施工|监理)?(标|包)(段|号)?")
|
|
pkgFilter = regexp.MustCompile("第[一二三四五六七八九十0-9A-Za-zⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ](子|合同|分|施工|监理)?(标段?|包|合同段|标包)|(子|合同|分|施工|监理)?(标|包)(段|号)?")
|
|
|
|
+ indexTile = regexp.MustCompile("[0-9.]{2,3}[\\s\u4e00-\u9fa5]{2,8}[::]+") //小标题
|
|
|
|
+ indexTile2 = regexp.MustCompile("[\\s\u4e00-\u9fa5]{2,8}")
|
|
|
|
+ regReplAllSpace2 = regexp.MustCompile("[\u3000\u2003\u00a0\\s0-9.::、\\(\\)]+")
|
|
confusion = map[string]string{
|
|
confusion = map[string]string{
|
|
"参与": "canyu",
|
|
"参与": "canyu",
|
|
}
|
|
}
|
|
@@ -566,63 +571,71 @@ func FindPackageFromBlocks(blocks *[]*util.Block, isSite bool, codeSite string)
|
|
//orderwinner := winnerOrderEntity.Find(content, true, 2, isSite, codeSite)
|
|
//orderwinner := winnerOrderEntity.Find(content, true, 2, isSite, codeSite)
|
|
|
|
|
|
for k, v := range blockPackage {
|
|
for k, v := range blockPackage {
|
|
- if v.ColonKV != nil && v.ColonKV.KvTags != nil {
|
|
|
|
- for kc, cv := range v.ColonKV.KvTags {
|
|
|
|
- if kc == "预算" && v.Budget <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Budget = vf
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Budget = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
|
|
+ findWinnerBugetBidmountByKv(v, blockPackage, k)
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func findWinnerBugetBidmountByKv(v *util.BlockPackage, blockPackage map[string]*util.BlockPackage, k string) {
|
|
|
|
+ if v.ColonKV != nil && v.ColonKV.KvTags != nil {
|
|
|
|
+ for kc, cv := range v.ColonKV.KvTags {
|
|
|
|
+ if kc == "预算" && v.Budget <= 0 {
|
|
|
|
+ moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
+ if len(moneys) > 0 {
|
|
|
|
+ if vf, ok := moneys[0].(float64); ok {
|
|
|
|
+ blockPackage[k].Budget = vf
|
|
|
|
+ blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
+ } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
+ blockPackage[k].Budget = float64(vi)
|
|
|
|
+ blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
}
|
|
}
|
|
- } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Bidamount = vf
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Bidamount = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+ } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
+ moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
+ if len(moneys) > 0 {
|
|
|
|
+ if vf, ok := moneys[0].(float64); ok {
|
|
|
|
+ blockPackage[k].Bidamount = vf
|
|
|
|
+ blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
+ } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
+ blockPackage[k].Bidamount = float64(vi)
|
|
|
|
+ blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ } else if kc == "中标单位" && v.Winner == "" {
|
|
|
|
+ blockPackage[k].Winner = cv[0].Value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if v.SpaceKV != nil && v.SpaceKV.KvTags != nil {
|
|
|
|
- for kc, cv := range v.SpaceKV.KvTags {
|
|
|
|
- if kc == "预算" && v.Budget <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Budget = vf
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Budget = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+ if v.SpaceKV != nil && v.SpaceKV.KvTags != nil {
|
|
|
|
+ for kc, cv := range v.SpaceKV.KvTags {
|
|
|
|
+ if kc == "预算" && v.Budget <= 0 {
|
|
|
|
+ moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
+ if len(moneys) > 0 {
|
|
|
|
+ if vf, ok := moneys[0].(float64); ok {
|
|
|
|
+ blockPackage[k].Budget = vf
|
|
|
|
+ blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
+ } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
+ blockPackage[k].Budget = float64(vi)
|
|
|
|
+ blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Bidamount = vf
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Bidamount = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
|
|
+ } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
+ moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
+ if len(moneys) > 0 {
|
|
|
|
+ if vf, ok := moneys[0].(float64); ok {
|
|
|
|
+ blockPackage[k].Bidamount = vf
|
|
|
|
+ blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
+ } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
+ blockPackage[k].Bidamount = float64(vi)
|
|
|
|
+ blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ } else if kc == "中标单位" && v.Winner == "" {
|
|
|
|
+ blockPackage[k].Winner = cv[0].Value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//从正文里面找分包
|
|
//从正文里面找分包
|
|
@@ -631,61 +644,7 @@ func FindPackageFromText(title string, content string, isSite bool, codeSite str
|
|
//从正文里面找分包
|
|
//从正文里面找分包
|
|
divisionPackageChild(&blockPackage, content, title, true, false, isSite, codeSite)
|
|
divisionPackageChild(&blockPackage, content, title, true, false, isSite, codeSite)
|
|
for k, v := range blockPackage {
|
|
for k, v := range blockPackage {
|
|
- if v.ColonKV != nil && v.ColonKV.KvTags != nil {
|
|
|
|
- for kc, cv := range v.ColonKV.KvTags {
|
|
|
|
- if kc == "预算" && v.Budget <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Budget = vf
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Budget = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Bidamount = vf
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Bidamount = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if v.SpaceKV != nil && v.SpaceKV.KvTags != nil {
|
|
|
|
- for kc, cv := range v.SpaceKV.KvTags {
|
|
|
|
- if kc == "预算" && v.Budget <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Budget = vf
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Budget = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBudget = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else if kc == "中标金额" && v.Bidamount <= 0 {
|
|
|
|
- moneys := clear.ObjToMoney([]interface{}{cv[0].Value, ""})
|
|
|
|
- if len(moneys) > 0 {
|
|
|
|
- if vf, ok := moneys[0].(float64); ok {
|
|
|
|
- blockPackage[k].Bidamount = vf
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- } else if vi, ok := moneys[0].(int); ok {
|
|
|
|
- blockPackage[k].Bidamount = float64(vi)
|
|
|
|
- blockPackage[k].IsTrueBidamount = moneys[len(moneys)-1].(bool)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ findWinnerBugetBidmountByKv(v, blockPackage, k)
|
|
}
|
|
}
|
|
//winnerOrderEntity.Find(content, true, 2, isSite, codeSite)
|
|
//winnerOrderEntity.Find(content, true, 2, isSite, codeSite)
|
|
return
|
|
return
|
|
@@ -694,6 +653,8 @@ func FindPackageFromText(title string, content string, isSite bool, codeSite str
|
|
//分块之后分包
|
|
//分块之后分包
|
|
func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content, title string, isFindWinnerOrder, accuracy bool, isSite bool, codeSite string) (bool, string) {
|
|
func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content, title string, isFindWinnerOrder, accuracy bool, isSite bool, codeSite string) (bool, string) {
|
|
//查找知否有分包
|
|
//查找知否有分包
|
|
|
|
+ content = regPDFWarap.ReplaceAllString(content, "\n")
|
|
|
|
+ content = regAZWarap.ReplaceAllString(content, "\n")
|
|
content = regStrWrap.ReplaceAllString(content, "\n")
|
|
content = regStrWrap.ReplaceAllString(content, "\n")
|
|
content = regMoreWrap.ReplaceAllString(content, "\n")
|
|
content = regMoreWrap.ReplaceAllString(content, "\n")
|
|
content = regEndWrap.ReplaceAllString(content, "")
|
|
content = regEndWrap.ReplaceAllString(content, "")
|
|
@@ -731,7 +692,6 @@ func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content,
|
|
con = conTemp
|
|
con = conTemp
|
|
con = replSerial.ReplaceAllString(con, "\n")
|
|
con = replSerial.ReplaceAllString(con, "\n")
|
|
con = regMoreWrap.ReplaceAllString(con, "\n")
|
|
con = regMoreWrap.ReplaceAllString(con, "\n")
|
|
- //log.Println(con)
|
|
|
|
//根据分包,找索引位置
|
|
//根据分包,找索引位置
|
|
indexMap := map[int]int{}
|
|
indexMap := map[int]int{}
|
|
indexKeyStringMap := map[int]string{}
|
|
indexKeyStringMap := map[int]string{}
|
|
@@ -740,6 +700,11 @@ func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content,
|
|
startEndMap := map[int]int{}
|
|
startEndMap := map[int]int{}
|
|
pkgIndexMap := map[string][]int{}
|
|
pkgIndexMap := map[string][]int{}
|
|
indexPkgMap := map[int]string{}
|
|
indexPkgMap := map[int]string{}
|
|
|
|
+ //小标题
|
|
|
|
+ titleindexs := indexTile.FindAllStringIndex(con, -1)
|
|
|
|
+ if len(titleindexs) == 0 {
|
|
|
|
+ titleindexs = indexTile2.FindAllStringIndex(con, -1)
|
|
|
|
+ }
|
|
//遍历分包,把kv在包前面的移动到包后面
|
|
//遍历分包,把kv在包前面的移动到包后面
|
|
for _, v := range pkg {
|
|
for _, v := range pkg {
|
|
pgflag := v[0] + "[::]*"
|
|
pgflag := v[0] + "[::]*"
|
|
@@ -788,12 +753,12 @@ func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content,
|
|
indexKeyStringMap[iv] = indexKeyStringMap[indexs[ik-1]]
|
|
indexKeyStringMap[iv] = indexKeyStringMap[indexs[ik-1]]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- //
|
|
|
|
//获取截取标识
|
|
//获取截取标识
|
|
surplusText, maxWarpCount, indexTextMap, indexWarpMap := interceptText(indexs, indexPkgMap, pkgIndexMap, startEndMap, con)
|
|
surplusText, maxWarpCount, indexTextMap, indexWarpMap := interceptText(indexs, indexPkgMap, pkgIndexMap, startEndMap, con)
|
|
//查找分包内容,分kv
|
|
//查找分包内容,分kv
|
|
for _, iv := range indexs {
|
|
for _, iv := range indexs {
|
|
text := indexTextMap[iv]
|
|
text := indexTextMap[iv]
|
|
|
|
+ tmptext := text
|
|
//
|
|
//
|
|
warpIndex := regSpliteSegment.FindAllStringIndex(text, -1)
|
|
warpIndex := regSpliteSegment.FindAllStringIndex(text, -1)
|
|
if len(indexWarpMap) > 0 {
|
|
if len(indexWarpMap) > 0 {
|
|
@@ -812,6 +777,20 @@ func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content,
|
|
index := util.PackageNumberConvert(bk)
|
|
index := util.PackageNumberConvert(bk)
|
|
//去掉前缀,空格必须要加,分kv的时候要用
|
|
//去掉前缀,空格必须要加,分kv的时候要用
|
|
text = regexp.MustCompile(bv[0] + "[::]*").ReplaceAllString(text, "")
|
|
text = regexp.MustCompile(bv[0] + "[::]*").ReplaceAllString(text, "")
|
|
|
|
+ if strings.TrimLeft(tmptext, bv[0]) == text || strings.TrimLeft(tmptext, bv[0]+":") == text {
|
|
|
|
+ var tagtitle string
|
|
|
|
+ for i, v := range titleindexs {
|
|
|
|
+ if i == 0 {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if v[0] > iv {
|
|
|
|
+ tagtitle = con[titleindexs[i-1][0]:titleindexs[i-1][1]]
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tagtitle = regReplAllSpace2.ReplaceAllString(tagtitle, "")
|
|
|
|
+ text = tagtitle + ":" + text
|
|
|
|
+ }
|
|
headKey := ""
|
|
headKey := ""
|
|
if indexKeyStringMap[iv] != "" {
|
|
if indexKeyStringMap[iv] != "" {
|
|
//if !filterPkgTitleKey.MatchString(indexKeyStringMap[iv]) {
|
|
//if !filterPkgTitleKey.MatchString(indexKeyStringMap[iv]) {
|
|
@@ -835,7 +814,7 @@ func divisionPackageChild(blockPackage *map[string]*util.BlockPackage, content,
|
|
}
|
|
}
|
|
MergeKvTags((*blockPackage)[index].ColonKV.KvTags, colonJobKv.KvTags)
|
|
MergeKvTags((*blockPackage)[index].ColonKV.KvTags, colonJobKv.KvTags)
|
|
//合并空格kv
|
|
//合并空格kv
|
|
- spaceJobKv := SspacekvEntity.Entrance(text, "", nil, isSite, codeSite)
|
|
|
|
|
|
+ spaceJobKv := SspacekvEntity.Entrance(text, headKey, nil, isSite, codeSite)
|
|
MergeKvTags((*blockPackage)[index].SpaceKV.KvTags, spaceJobKv.KvTags)
|
|
MergeKvTags((*blockPackage)[index].SpaceKV.KvTags, spaceJobKv.KvTags)
|
|
} else {
|
|
} else {
|
|
newBpkg := &util.BlockPackage{
|
|
newBpkg := &util.BlockPackage{
|