123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- // extpackage
- package extract
- import (
- "jy/clear"
- ju "jy/util"
- qu "qfw/util"
- )
- //处理分包信息
- func PackageDetail(j *ju.Job, e *ExtractTask) {
- if len(j.BlockPackage) > 0 {
- packageResult := map[string]map[string]interface{}{}
- packagenum := len(j.BlockPackage)
- for pkName, pkg := range j.BlockPackage {
- //是否清理标记
- clearmap := map[string]bool{}
- sonJobResult := map[string]interface{}{}
- sonJobResult["text"] = pkg.Text
- sonJobResult["origin"] = pkg.Origin
- sonJobResult["type"] = pkg.Type
- sonJobResult["winnerorder"] = pkg.WinnerOrder
- for k, tags := range e.Tag {
- L:
- for _, tag := range tags {
- if pkg.TableKV != nil {
- for key, val := range pkg.TableKV.Kv {
- if tag.Key == key {
- clearmap[k] = false
- var tmpval interface{}
- if len(e.ClearFn[k]) > 0 {
- data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
- tmpval = data[0]
- } else {
- tmpval = val
- }
- sonJobResult[k] = tmpval
- if packagenum == 1 {
- field := &ju.ExtField{
- Field: k,
- Code: "package",
- RuleText: "package",
- Type: "table",
- MatchType: "tag_string",
- ExtFrom: "package",
- Value: tmpval,
- Score: 0,
- }
- j.Result[k] = append(j.Result[k], field)
- }
- break L
- }
- }
- }
- if pkg.ColonKV != nil {
- for key, val := range pkg.ColonKV.Kv {
- if tag.Key == key {
- clearmap[k] = true
- var tmpval interface{}
- if len(e.ClearFn[k]) > 0 {
- data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
- tmpval = data[0]
- } else {
- tmpval = val
- }
- sonJobResult[k] = tmpval
- if packagenum == 1 {
- field := &ju.ExtField{
- Field: k,
- Code: "package",
- RuleText: "package",
- Type: "colon",
- MatchType: "tag_string",
- ExtFrom: "package",
- Value: tmpval,
- Score: 0,
- }
- j.Result[k] = append(j.Result[k], field)
- }
- break L
- }
- }
- }
- if pkg.SpaceKV != nil {
- for key, val := range pkg.SpaceKV.Kv {
- if tag.Key == key {
- clearmap[k] = true
- var tmpval interface{}
- if len(e.ClearFn[k]) > 0 {
- data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
- tmpval = data[0]
- } else {
- tmpval = val
- }
- sonJobResult[k] = tmpval
- if packagenum == 1 {
- field := &ju.ExtField{
- Field: k,
- Code: "package",
- RuleText: "package",
- Type: "space",
- MatchType: "tag_string",
- ExtFrom: "package",
- Value: tmpval,
- Score: 0,
- }
- j.Result[k] = append(j.Result[k], field)
- }
- break L
- }
- }
- }
- }
- }
- //如果有中标候选人排序,优先用第一中标候选人的中标单位和中标金额覆盖该包里面相应的字段的值
- if pkg.WinnerOrder != nil && len(pkg.WinnerOrder) > 0 {
- firstWinnerOrder := pkg.WinnerOrder[0]
- 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"]
- }
- }
- //log.Println(pkName, sonJobResult)
- sonJobResult["clear"] = clearmap
- packageResult[pkName] = sonJobResult
- }
- if len(packageResult) > 0 {
- j.PackageInfo = packageResult
- }
- }
- extRegBackPack(j, e)
- }
- //清理分包信息
- func extRegBackPack(j *ju.Job, e *ExtractTask) {
- //正则清理
- for _, rc := range e.RuleCores {
- for _, pack := range j.PackageInfo {
- clear, _ := pack["clear"].(map[string]interface{})
- for k, val := range pack {
- if b, ok := clear[k].(bool); ok && b {
- if rc.Field == k {
- text := qu.ObjToString(val)
- for _, in := range rc.RuleBacks {
- if text != "" && !in.IsLua {
- text = in.RegPreBac.Reg.ReplaceAllString(text, in.RegPreBac.Replace)
- }
- }
- pack[k] = text
- }
- }
- }
- }
- }
- //通用正则清理
- for _, in := range e.RuleBacks {
- for _, pack := range j.PackageInfo {
- for k, val := range pack {
- if in.Field == k {
- text := qu.ObjToString(val)
- if text != "" && !in.IsLua {
- text = in.RegPreBac.Reg.ReplaceAllString(text, in.RegPreBac.Replace)
- }
- pack[k] = text
- }
- }
- }
- }
- //函数清理
- for _, pack := range j.PackageInfo {
- for key, val := range pack {
- data := clear.DoClearFn(e.ClearFn[key], []interface{}{val, j.Content})
- pack[key] = data[0]
- }
- }
- }
|