util.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package util
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. elastic "app.yhyue.com/moapp/jybase/es"
  5. "context"
  6. "fmt"
  7. es "github.com/olivere/elastic/v7"
  8. "github.com/shopspring/decimal"
  9. "go.mongodb.org/mongo-driver/bson/primitive"
  10. "log"
  11. "net/http"
  12. "reflect"
  13. "runtime"
  14. "strconv"
  15. )
  16. // 数据类型转换
  17. func GetPostForm(r *http.Request) map[string]interface{} {
  18. val := map[string]interface{}{}
  19. for k, _ := range r.Form {
  20. // if len(k) < 2 {
  21. // continue
  22. // }
  23. if k != "_id" {
  24. v := r.FormValue(k)
  25. switch k[:2] {
  26. case "s_": //string型
  27. val[k] = v
  28. case "l_": //int64位
  29. val[k], _ = strconv.ParseInt(v, 10, 64)
  30. case "i_": //int型
  31. val[k], _ = strconv.Atoi(v)
  32. default:
  33. if v == "true" || v == "false" {
  34. b, _ := strconv.ParseBool(v)
  35. val[k] = b
  36. } else {
  37. val[k] = v
  38. }
  39. }
  40. }
  41. }
  42. return val
  43. }
  44. // 从数组中删除元素
  45. func deleteSlice(arr []string, v string) []string {
  46. for k, v1 := range arr {
  47. if v1 == v {
  48. return append(arr[:k], arr[k+1:]...)
  49. }
  50. }
  51. return arr
  52. }
  53. /**
  54. * 前端科学计数法处理
  55. */
  56. func FormatNumber(tmp map[string]interface{}) {
  57. for k, v := range tmp {
  58. if reflect.TypeOf(v).Name() == reflect.Float64.String() {
  59. num, _ := decimal.NewFromString(strconv.FormatFloat(common.Float64All(v), 'e', -1, 64))
  60. tmp[k], _ = num.Float64()
  61. }
  62. }
  63. }
  64. // 获取最新年报
  65. func Sort_year_report(year_report primitive.A) map[string]interface{} {
  66. new_year_report := year_report[0]
  67. for i := 0; i < len(year_report); i++ {
  68. if common.IntAll(new_year_report.(map[string]interface{})["report_year"]) < common.IntAll(year_report[i].(map[string]interface{})["report_year"]) {
  69. new_year_report = year_report[i]
  70. }
  71. }
  72. return new_year_report.(map[string]interface{})
  73. }
  74. func BulkSave(index string, obj *[]map[string]interface{}, isDelBefore bool, e *elastic.EsV7) {
  75. client := e.GetEsConn()
  76. defer e.DestoryEsConn(client)
  77. if client != nil {
  78. defer func() {
  79. if r := recover(); r != nil {
  80. for skip := 1; ; skip++ {
  81. _, file, line, ok := runtime.Caller(skip)
  82. if !ok {
  83. break
  84. }
  85. go log.Printf("%v,%v\n", file, line)
  86. }
  87. }
  88. }()
  89. req := client.Bulk()
  90. for _, v := range *obj {
  91. if v == nil || len(v) == 0 {
  92. continue
  93. }
  94. id := fmt.Sprint(v["id"])
  95. if isDelBefore {
  96. req = req.Add(es.NewBulkDeleteRequest().Index(index).Id(id))
  97. }
  98. req = req.Add(es.NewBulkIndexRequest().Index(index).Id(id).Doc(v))
  99. }
  100. _, err := req.Do(context.TODO())
  101. if err != nil {
  102. log.Println("批量保存到ES出错", err.Error())
  103. }
  104. }
  105. }
  106. func Save(index string, obj map[string]interface{}, e *elastic.EsV7) bool {
  107. client := e.GetEsConn()
  108. defer e.DestoryEsConn(client)
  109. defer func() {
  110. if r := recover(); r != nil {
  111. log.Println("[E]", r)
  112. for skip := 1; ; skip++ {
  113. _, file, line, ok := runtime.Caller(skip)
  114. if !ok {
  115. break
  116. }
  117. go log.Printf("%v,%v\n", file, line)
  118. }
  119. }
  120. }()
  121. _id := fmt.Sprint(obj["id"])
  122. _, err := client.Index().Index(index).Id(_id).BodyJson(obj).Do(context.TODO())
  123. if err != nil {
  124. log.Println("保存到ES出错", err.Error(), obj)
  125. return false
  126. } else {
  127. return true
  128. }
  129. }
  130. func DelBy(index string, query interface{}, e *elastic.EsV7) bool {
  131. client := e.GetEsConn()
  132. defer e.DestoryEsConn(client)
  133. b := false
  134. if client != nil {
  135. defer func() {
  136. if r := recover(); r != nil {
  137. log.Println("[E]", r)
  138. for skip := 1; ; skip++ {
  139. _, file, line, ok := runtime.Caller(skip)
  140. if !ok {
  141. break
  142. }
  143. go log.Printf("%v,%v\n", file, line)
  144. }
  145. }
  146. }()
  147. var err error
  148. if qs, ok := query.(string); ok {
  149. //temp := es.NewQueryStringQuery(qs)
  150. _, err = client.DeleteByQuery().Index(index).QueryString(qs).Do(context.Background())
  151. } else if qi, ok2 := query.(es.Query); ok2 {
  152. _, err = client.DeleteByQuery().Index(index).Query(qi).Do(context.Background())
  153. }
  154. if err != nil {
  155. log.Println("删除索引出错:", err.Error())
  156. } else {
  157. b = true
  158. }
  159. }
  160. return b
  161. }