|
@@ -109,11 +109,13 @@ func (wo *WinnerOrderEntity) Find(text string, flag bool, from int) []map[string
|
|
|
}
|
|
|
|
|
|
//获取中标人排序文本
|
|
|
-func (wo *WinnerOrderEntity) getText(text string, blocks []string, reg_2 *regexp.Regexp, from int) string {
|
|
|
+func (wo *WinnerOrderEntity) getText(text string, blocks []string, reg_2 *regexp.Regexp, from int) []string {
|
|
|
isWinnerReg1 := reg_2 == winnerReg1
|
|
|
+ rdata := []string{}
|
|
|
//确定中标候选人排序在哪个块里面
|
|
|
rightIndex, prevMax := -1, -1
|
|
|
- var winnerFlag *WinnerFlag
|
|
|
+ rightIndexs := []int{}
|
|
|
+ var winnerFlag []*WinnerFlag
|
|
|
for b_k, b_v := range blocks {
|
|
|
indexs := []*WinnerFlag{}
|
|
|
array := reg_2.FindAllStringSubmatchIndex(b_v, -1)
|
|
@@ -138,130 +140,143 @@ func (wo *WinnerOrderEntity) getText(text string, blocks []string, reg_2 *regexp
|
|
|
if wf != nil && wf.max >= prevMax {
|
|
|
prevMax = wf.max
|
|
|
rightIndex = b_k
|
|
|
- winnerFlag = wf
|
|
|
+ rightIndexs = append(rightIndexs, b_k)
|
|
|
+ winnerFlag = append(winnerFlag, wf)
|
|
|
}
|
|
|
}
|
|
|
- //在这个块里面,截取
|
|
|
+ ////在这个块里面,截取
|
|
|
if rightIndex == -1 {
|
|
|
- return ""
|
|
|
+ return rdata
|
|
|
}
|
|
|
- text = blocks[rightIndex]
|
|
|
- warpCount := wo.interceptText(winnerFlag.indexs, text)
|
|
|
- if warpCount == 0 {
|
|
|
- warpCount = 1
|
|
|
- }
|
|
|
- textEnd := text[winnerFlag.textEnd:]
|
|
|
- text = text[winnerFlag.textStart:winnerFlag.textEnd]
|
|
|
- warpIndex := regSpliteSegment.FindAllStringIndex(textEnd, -1)
|
|
|
- if len(warpIndex) >= warpCount {
|
|
|
- textEnd = textEnd[:warpIndex[warpCount-1][1]]
|
|
|
- }
|
|
|
- text = text + textEnd
|
|
|
- if isWinnerReg1 {
|
|
|
- text = reg_2.ReplaceAllString(text, "$1\n$2$15")
|
|
|
- } else {
|
|
|
- text = reg_2.ReplaceAllString(text, "\n$1")
|
|
|
- }
|
|
|
- text = regReplWrapSpace.ReplaceAllString(text, "")
|
|
|
- lines := SspacekvEntity.getLines(text)
|
|
|
- text = ""
|
|
|
- for k, v := range lines {
|
|
|
- v = strings.TrimSpace(v)
|
|
|
- v = colonSpaceReg.ReplaceAllString(v, ":")
|
|
|
- if reg_2.MatchString(v) && !regDivision.MatchString(v) {
|
|
|
- if isWinnerReg1 {
|
|
|
- v = reg_2.ReplaceAllString(v, "$1$2:$15")
|
|
|
- } else {
|
|
|
- v = reg_2.ReplaceAllString(v, "$1:")
|
|
|
- }
|
|
|
+ for i, rightIndex := range rightIndexs {
|
|
|
+ text = blocks[rightIndex]
|
|
|
+ warpCount := wo.interceptText(winnerFlag[i].indexs, text)
|
|
|
+ if warpCount == 0 {
|
|
|
+ warpCount = 1
|
|
|
+ }
|
|
|
+ textEnd := text[winnerFlag[i].textEnd:]
|
|
|
+ text = text[winnerFlag[i].textStart:winnerFlag[i].textEnd]
|
|
|
+ warpIndex := regSpliteSegment.FindAllStringIndex(textEnd, -1)
|
|
|
+ if len(warpIndex) >= warpCount {
|
|
|
+ textEnd = textEnd[:warpIndex[warpCount-1][1]]
|
|
|
+ }
|
|
|
+ text = text + textEnd
|
|
|
+ if isWinnerReg1 {
|
|
|
+ text = reg_2.ReplaceAllString(text, "$1\n$2$15")
|
|
|
+ } else {
|
|
|
+ text = reg_2.ReplaceAllString(text, "\n$1")
|
|
|
}
|
|
|
- //逗号之类符号的分割,查找紧跟在中标候选人之后的中标金额
|
|
|
- //如果后面没有什么标识,只有金额的情况下,把中标金额加到金额前面
|
|
|
- if reg_2.MatchString(v) {
|
|
|
- //两个kv连到一起
|
|
|
- if len(regDivision.FindAllString(v, -1)) > 1 && !findamountReg.MatchString(v) {
|
|
|
- v = companyWarpReg.ReplaceAllString(v, "$1\n$2")
|
|
|
+ text = regReplWrapSpace.ReplaceAllString(text, "")
|
|
|
+ lines := SspacekvEntity.getLines(text)
|
|
|
+ text = ""
|
|
|
+ for k, v := range lines {
|
|
|
+ v = strings.TrimSpace(v)
|
|
|
+ v = colonSpaceReg.ReplaceAllString(v, ":")
|
|
|
+ if reg_2.MatchString(v) && !regDivision.MatchString(v) {
|
|
|
+ if isWinnerReg1 {
|
|
|
+ v = reg_2.ReplaceAllString(v, "$1$2:$15")
|
|
|
+ } else {
|
|
|
+ v = reg_2.ReplaceAllString(v, "$1:")
|
|
|
+ }
|
|
|
}
|
|
|
- vs := findamountReg.Split(v, -1)
|
|
|
- if len(vs) > 1 {
|
|
|
- vs_1 := strings.TrimSpace(vs[1])
|
|
|
- if amountReg.MatchString(vs_1) {
|
|
|
- v = strings.Replace(v, vs[1], "中标金额:"+vs_1, 1)
|
|
|
+ //逗号之类符号的分割,查找紧跟在中标候选人之后的中标金额
|
|
|
+ //如果后面没有什么标识,只有金额的情况下,把中标金额加到金额前面
|
|
|
+ if reg_2.MatchString(v) {
|
|
|
+ //两个kv连到一起
|
|
|
+ if len(regDivision.FindAllString(v, -1)) > 1 && !findamountReg.MatchString(v) {
|
|
|
+ v = companyWarpReg.ReplaceAllString(v, "$1\n$2")
|
|
|
+ }
|
|
|
+ vs := findamountReg.Split(v, -1)
|
|
|
+ if len(vs) > 1 {
|
|
|
+ vs_1 := strings.TrimSpace(vs[1])
|
|
|
+ if amountReg.MatchString(vs_1) {
|
|
|
+ v = strings.Replace(v, vs[1], "中标金额:"+vs_1, 1)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ v = toWarpReg.ReplaceAllString(v, "\n")
|
|
|
+ text += v
|
|
|
+ if (!reg_2.MatchString(v) || !colonEndReg.MatchString(v)) && k < len(lines)-1 {
|
|
|
+ text += "\n"
|
|
|
+ }
|
|
|
}
|
|
|
- v = toWarpReg.ReplaceAllString(v, "\n")
|
|
|
- text += v
|
|
|
- if (!reg_2.MatchString(v) || !colonEndReg.MatchString(v)) && k < len(lines)-1 {
|
|
|
- text += "\n"
|
|
|
- }
|
|
|
+ rdata = append(rdata, text)
|
|
|
}
|
|
|
- return text
|
|
|
+ return rdata
|
|
|
}
|
|
|
|
|
|
//抽取对应的排序结果
|
|
|
func (wo *WinnerOrderEntity) findByReg(content string, blocks []string, reg_2 *regexp.Regexp, from int) []map[string]interface{} {
|
|
|
text := wo.getText(content, blocks, reg_2, from)
|
|
|
winners := []map[string]interface{}{}
|
|
|
- object := map[string]interface{}{}
|
|
|
- count := 0
|
|
|
- kvs := colonkvEntity.getColonSpaceKV(text)
|
|
|
- for _, kv := range kvs {
|
|
|
- k, v := kv.Key, kv.Value
|
|
|
- if regDivision.MatchString(v) {
|
|
|
- v_k := regDivision.Split(v, -1)[0]
|
|
|
- if reg_2.MatchString(v_k) {
|
|
|
- k = v_k
|
|
|
- }
|
|
|
- }
|
|
|
- if reg_2.MatchString(k) { //中标人
|
|
|
- if len(object) > 0 {
|
|
|
- winners = append(winners, object)
|
|
|
- object = map[string]interface{}{}
|
|
|
- }
|
|
|
- val := wo.clear("中标单位", v)
|
|
|
- if val != nil {
|
|
|
- count++
|
|
|
- object["entname"] = val
|
|
|
- object["sort"] = wo.toNumber(k, count)
|
|
|
- object["sortstr"] = thisNumberReg.FindString(k)
|
|
|
- object["type"] = 1
|
|
|
- }
|
|
|
- } else { //中标金额
|
|
|
- findOfferFlag := false
|
|
|
- if offerReg.MatchString(k) {
|
|
|
- findOfferFlag = true
|
|
|
- } else {
|
|
|
- kvTags := GetKvTags([]*util.Kv{&util.Kv{Key: k, Value: v}}, "", []string{"中标金额"})
|
|
|
- if len(kvTags["中标金额"]) > 0 {
|
|
|
- findOfferFlag = true
|
|
|
+ if len(text) < 1 {
|
|
|
+ return winners
|
|
|
+ }
|
|
|
+ for i, v := range text {
|
|
|
+ object := map[string]interface{}{}
|
|
|
+ count := 0
|
|
|
+ kvs := colonkvEntity.getColonSpaceKV(v)
|
|
|
+ for _, kv := range kvs {
|
|
|
+ k, v := kv.Key, kv.Value
|
|
|
+ if regDivision.MatchString(v) {
|
|
|
+ v_k := regDivision.Split(v, -1)[0]
|
|
|
+ if reg_2.MatchString(v_k) {
|
|
|
+ k = v_k
|
|
|
}
|
|
|
}
|
|
|
- //找到了中标金额
|
|
|
- if findOfferFlag && object["entname"] != nil {
|
|
|
- val := wo.clear("中标金额", v)
|
|
|
+ if reg_2.MatchString(k) { //中标人
|
|
|
+ if len(object) > 0 {
|
|
|
+ winners = append(winners, object)
|
|
|
+ object = map[string]interface{}{}
|
|
|
+ }
|
|
|
+ val := wo.clear("中标单位", v)
|
|
|
if val != nil {
|
|
|
- object["price"] = val
|
|
|
+ count++
|
|
|
+ object["entname"] = val
|
|
|
+ object["sort"] = wo.toNumber(k, count)
|
|
|
+ object["sortstr"] = thisNumberReg.FindString(k)
|
|
|
+ object["type"] = i
|
|
|
+ }
|
|
|
+ } else { //中标金额
|
|
|
+ findOfferFlag := false
|
|
|
+ if offerReg.MatchString(k) {
|
|
|
+ findOfferFlag = true
|
|
|
+ } else {
|
|
|
+ kvTags := GetKvTags([]*util.Kv{&util.Kv{Key: k, Value: v}}, "", []string{"中标金额"})
|
|
|
+ if len(kvTags["中标金额"]) > 0 {
|
|
|
+ findOfferFlag = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //找到了中标金额
|
|
|
+ if findOfferFlag && object["entname"] != nil {
|
|
|
+ val := wo.clear("中标金额", v)
|
|
|
+ if val != nil {
|
|
|
+ object["price"] = val
|
|
|
+ }
|
|
|
+ winners = append(winners, object)
|
|
|
+ object = map[string]interface{}{}
|
|
|
}
|
|
|
- winners = append(winners, object)
|
|
|
- object = map[string]interface{}{}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- if len(object) > 0 {
|
|
|
- winners = append(winners, object)
|
|
|
- }
|
|
|
- indexs := []*WinnerFlag{}
|
|
|
- for _, winner := range winners {
|
|
|
- indexs = append(indexs, &WinnerFlag{
|
|
|
- index: winner["sort"].(int),
|
|
|
- })
|
|
|
- }
|
|
|
- winnerFlag := wo.getMax(indexs, from)
|
|
|
- if winnerFlag != nil {
|
|
|
- winners = winners[winnerFlag.start : winnerFlag.end+1]
|
|
|
- } else {
|
|
|
- winners = []map[string]interface{}{}
|
|
|
+ if len(object) > 0 {
|
|
|
+ winners = append(winners, object)
|
|
|
+ }
|
|
|
+ indexs := []*WinnerFlag{}
|
|
|
+ //tym := make(map[int]bool, 0)
|
|
|
+ for _, winner := range winners {
|
|
|
+ indexs = append(indexs, &WinnerFlag{
|
|
|
+ index: winner["sort"].(int),
|
|
|
+ //ttype: winner["type"].(int),
|
|
|
+ })
|
|
|
+ //tym[winner["type"].(int)] = true
|
|
|
+ }
|
|
|
+
|
|
|
+ //winnerFlag := wo.getMax(indexs, from)
|
|
|
+ //if winnerFlag != nil {
|
|
|
+ // winners = winners[winnerFlag.start : winnerFlag.end+1]
|
|
|
+ //} else {
|
|
|
+ // winners = []map[string]interface{}{}
|
|
|
+ //}
|
|
|
}
|
|
|
return winners
|
|
|
}
|