extpackage.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. // extpackage
  2. package extract
  3. import (
  4. "jy/clear"
  5. ju "jy/util"
  6. qu "qfw/util"
  7. )
  8. //处理分包信息
  9. func PackageDetail(j *ju.Job, e *ExtractTask) {
  10. if len(j.BlockPackage) > 0 {
  11. packageResult := map[string]map[string]interface{}{}
  12. packagenum := len(j.BlockPackage)
  13. for pkName, pkg := range j.BlockPackage {
  14. //是否清理标记
  15. clearmap := map[string]bool{}
  16. sonJobResult := map[string]interface{}{}
  17. sonJobResult["text"] = pkg.Text
  18. sonJobResult["origin"] = pkg.Origin
  19. sonJobResult["type"] = pkg.Type
  20. sonJobResult["winnerorder"] = pkg.WinnerOrder
  21. for k, tags := range e.Tag {
  22. L:
  23. for _, tag := range tags {
  24. if pkg.TableKV != nil {
  25. for key, val := range pkg.TableKV.Kv {
  26. if tag.Key == key {
  27. clearmap[k] = false
  28. var tmpval interface{}
  29. if len(e.ClearFn[k]) > 0 {
  30. data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
  31. tmpval = data[0]
  32. } else {
  33. tmpval = val
  34. }
  35. sonJobResult[k] = tmpval
  36. if packagenum == 1 {
  37. field := &ju.ExtField{
  38. Field: k,
  39. Code: "package",
  40. RuleText: "package",
  41. Type: "table",
  42. MatchType: "tag_string",
  43. ExtFrom: "package",
  44. Value: tmpval,
  45. Score: 0,
  46. }
  47. j.Result[k] = append(j.Result[k], field)
  48. }
  49. break L
  50. }
  51. }
  52. }
  53. if pkg.ColonKV != nil {
  54. for key, val := range pkg.ColonKV.Kv {
  55. if tag.Key == key {
  56. clearmap[k] = true
  57. var tmpval interface{}
  58. if len(e.ClearFn[k]) > 0 {
  59. data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
  60. tmpval = data[0]
  61. } else {
  62. tmpval = val
  63. }
  64. sonJobResult[k] = tmpval
  65. if packagenum == 1 {
  66. field := &ju.ExtField{
  67. Field: k,
  68. Code: "package",
  69. RuleText: "package",
  70. Type: "colon",
  71. MatchType: "tag_string",
  72. ExtFrom: "package",
  73. Value: tmpval,
  74. Score: 0,
  75. }
  76. j.Result[k] = append(j.Result[k], field)
  77. }
  78. break L
  79. }
  80. }
  81. }
  82. if pkg.SpaceKV != nil {
  83. for key, val := range pkg.SpaceKV.Kv {
  84. if tag.Key == key {
  85. clearmap[k] = true
  86. var tmpval interface{}
  87. if len(e.ClearFn[k]) > 0 {
  88. data := clear.DoClearFn(e.ClearFn[k], []interface{}{val, j.Content})
  89. tmpval = data[0]
  90. } else {
  91. tmpval = val
  92. }
  93. sonJobResult[k] = tmpval
  94. if packagenum == 1 {
  95. field := &ju.ExtField{
  96. Field: k,
  97. Code: "package",
  98. RuleText: "package",
  99. Type: "space",
  100. MatchType: "tag_string",
  101. ExtFrom: "package",
  102. Value: tmpval,
  103. Score: 0,
  104. }
  105. j.Result[k] = append(j.Result[k], field)
  106. }
  107. break L
  108. }
  109. }
  110. }
  111. }
  112. }
  113. //如果有中标候选人排序,优先用第一中标候选人的中标单位和中标金额覆盖该包里面相应的字段的值
  114. if pkg.WinnerOrder != nil && len(pkg.WinnerOrder) > 0 {
  115. firstWinnerOrder := pkg.WinnerOrder[0]
  116. if qu.ObjToString(sonJobResult["winner"]) == "" || (!pkg.Accuracy && qu.ObjToString(firstWinnerOrder["entname"]) != "" && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
  117. sonJobResult["winner"] = firstWinnerOrder["entname"]
  118. }
  119. if qu.Float64All(sonJobResult["bidamount"]) == 0 || (!pkg.Accuracy && qu.Float64All(firstWinnerOrder["price"]) > 0 && qu.Int64All(firstWinnerOrder["sort"]) == 1) {
  120. sonJobResult["bidamount"] = firstWinnerOrder["price"]
  121. }
  122. }
  123. //log.Println(pkName, sonJobResult)
  124. sonJobResult["clear"] = clearmap
  125. packageResult[pkName] = sonJobResult
  126. }
  127. if len(packageResult) > 0 {
  128. j.PackageInfo = packageResult
  129. }
  130. }
  131. extRegBackPack(j, e)
  132. }
  133. //清理分包信息
  134. func extRegBackPack(j *ju.Job, e *ExtractTask) {
  135. //正则清理
  136. for _, rc := range e.RuleCores {
  137. for _, pack := range j.PackageInfo {
  138. clear, _ := pack["clear"].(map[string]interface{})
  139. for k, val := range pack {
  140. if b, ok := clear[k].(bool); ok && b {
  141. if rc.Field == k {
  142. text := qu.ObjToString(val)
  143. for _, in := range rc.RuleBacks {
  144. if text != "" && !in.IsLua {
  145. text = in.RegPreBac.Reg.ReplaceAllString(text, in.RegPreBac.Replace)
  146. }
  147. }
  148. pack[k] = text
  149. }
  150. }
  151. }
  152. }
  153. }
  154. //通用正则清理
  155. for _, in := range e.RuleBacks {
  156. for _, pack := range j.PackageInfo {
  157. for k, val := range pack {
  158. if in.Field == k {
  159. text := qu.ObjToString(val)
  160. if text != "" && !in.IsLua {
  161. text = in.RegPreBac.Reg.ReplaceAllString(text, in.RegPreBac.Replace)
  162. }
  163. pack[k] = text
  164. }
  165. }
  166. }
  167. }
  168. //函数清理
  169. for _, pack := range j.PackageInfo {
  170. for key, val := range pack {
  171. data := clear.DoClearFn(e.ClearFn[key], []interface{}{val, j.Content})
  172. pack[key] = data[0]
  173. }
  174. }
  175. }