service.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package service
  2. import (
  3. . "dataIdentify/db"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "log"
  8. "regexp"
  9. "strings"
  10. )
  11. var (
  12. SelectField = map[string]interface{}{
  13. "_id": 1,
  14. "winnerorder": 1,
  15. "detail": 1,
  16. "subtype": 1,
  17. "bidamount": 1,
  18. }
  19. service Service = &Rule{}
  20. )
  21. type DataIdentify struct {
  22. }
  23. func (d *DataIdentify) Execute(_id *string, reply *map[string]string) error {
  24. log.Println("rpc接收到要识别的_id", _id)
  25. _, a, b := Start(*_id)
  26. *reply = map[string]string{}
  27. if a == "费率模式" {
  28. a = "费率"
  29. } else if a == "单价模式" {
  30. a = "单价"
  31. } else if a == "上浮下浮模式" {
  32. a = "折扣率"
  33. } else if a == "整体报价模式" {
  34. a = "正常报价"
  35. } else {
  36. a = "其他"
  37. }
  38. (*reply)["报价模式"] = a
  39. if b == 1 {
  40. (*reply)["中标联合体"] = "是"
  41. } else {
  42. (*reply)["中标联合体"] = "否"
  43. }
  44. return nil
  45. }
  46. type Service interface {
  47. Execute(b *BidInfo) (bool, string, int)
  48. }
  49. type BidInfo struct {
  50. Id, Detail, Subtype string
  51. WinnerOrder []string
  52. KvText string
  53. Bidamount float64
  54. }
  55. func Start(_id string) (bool, string, int) {
  56. data, ok := Mgo_Main.FindById(g.Config().MustGet(gctx.New(), "mongodb.main.collection").String(), _id, SelectField)
  57. if !ok || data == nil || len(*data) == 0 {
  58. log.Println(_id, "没有找到标讯")
  59. return false, "", 0
  60. }
  61. return Pretreatment(_id, *data)
  62. }
  63. func Pretreatment(_id string, m map[string]interface{}) (bool, string, int) {
  64. if m == nil || len(m) == 0 {
  65. log.Println(_id, "没有找到标讯")
  66. return false, "", 0
  67. }
  68. detail, _ := m["detail"].(string)
  69. subtype, _ := m["subtype"].(string)
  70. detail = strings.TrimSpace(strings.Replace(detail, "<br/>", "\n", -1))
  71. for _, v := range clearPatterns {
  72. detail = regexp.MustCompile(v).ReplaceAllString(detail, "")
  73. }
  74. bi := &BidInfo{
  75. Id: _id,
  76. Detail: detail,
  77. Subtype: subtype,
  78. WinnerOrder: gconv.Strings(m["winnerorder"]),
  79. Bidamount: gconv.Float64(m["bidamount"]),
  80. }
  81. extract, _ := Mgo_Extract.FindById("result_20220219", _id, `{"kvtext":1}`)
  82. if extract == nil || len(*extract) == 0 {
  83. extract, _ = Mgo_Extract.FindById("result_20220218", _id, `{"kvtext":1}`)
  84. }
  85. if extract != nil && len(*extract) > 0 {
  86. bi.KvText, _ = (*extract)["kvtext"].(string)
  87. }
  88. return service.Execute(bi)
  89. }