util.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. "log"
  10. "net/http"
  11. "reflect"
  12. "regexp"
  13. "runtime"
  14. "strconv"
  15. "strings"
  16. )
  17. // 数据类型转换
  18. func GetPostForm(r *http.Request) map[string]interface{} {
  19. val := map[string]interface{}{}
  20. for k, _ := range r.Form {
  21. // if len(k) < 2 {
  22. // continue
  23. // }
  24. if k != "_id" {
  25. v := r.FormValue(k)
  26. switch k[:2] {
  27. case "s_": //string型
  28. val[k] = v
  29. case "l_": //int64位
  30. val[k], _ = strconv.ParseInt(v, 10, 64)
  31. case "i_": //int型
  32. val[k], _ = strconv.Atoi(v)
  33. default:
  34. if v == "true" || v == "false" {
  35. b, _ := strconv.ParseBool(v)
  36. val[k] = b
  37. } else {
  38. val[k] = v
  39. }
  40. }
  41. }
  42. }
  43. return val
  44. }
  45. // 从数组中删除元素
  46. func deleteSlice(arr []string, v string) []string {
  47. for k, v1 := range arr {
  48. if v1 == v {
  49. return append(arr[:k], arr[k+1:]...)
  50. }
  51. }
  52. return arr
  53. }
  54. /**
  55. * 前端科学计数法处理
  56. */
  57. func FormatNumber(tmp map[string]interface{}) {
  58. for k, v := range tmp {
  59. if reflect.TypeOf(v).Name() == reflect.Float64.String() {
  60. num, _ := decimal.NewFromString(strconv.FormatFloat(common.Float64All(v), 'e', -1, 64))
  61. tmp[k], _ = num.Float64()
  62. }
  63. }
  64. }
  65. // 获取最新年报
  66. func Sort_year_report(year_report []interface{}) map[string]interface{} {
  67. new_year_report := year_report[0]
  68. for i := 0; i < len(year_report); i++ {
  69. if common.IntAll(new_year_report.(map[string]interface{})["report_year"]) < common.IntAll(year_report[i].(map[string]interface{})["report_year"]) {
  70. new_year_report = year_report[i]
  71. }
  72. }
  73. return new_year_report.(map[string]interface{})
  74. }
  75. func BulkSave(index string, obj *[]map[string]interface{}, isDelBefore bool, e *elastic.EsV7) {
  76. client := e.GetEsConn()
  77. defer e.DestoryEsConn(client)
  78. if client != nil {
  79. defer func() {
  80. if r := recover(); r != nil {
  81. for skip := 1; ; skip++ {
  82. _, file, line, ok := runtime.Caller(skip)
  83. if !ok {
  84. break
  85. }
  86. go log.Printf("%v,%v\n", file, line)
  87. }
  88. }
  89. }()
  90. req := client.Bulk()
  91. for _, v := range *obj {
  92. if v == nil || len(v) == 0 {
  93. continue
  94. }
  95. id := fmt.Sprint(v["id"])
  96. if isDelBefore {
  97. req = req.Add(es.NewBulkDeleteRequest().Index(index).Id(id))
  98. }
  99. req = req.Add(es.NewBulkIndexRequest().Index(index).Id(id).Doc(v))
  100. }
  101. _, err := req.Do(context.TODO())
  102. if err != nil {
  103. log.Println("批量保存到ES出错", err.Error())
  104. }
  105. }
  106. }
  107. func Save(index string, obj map[string]interface{}, e *elastic.EsV7) bool {
  108. client := e.GetEsConn()
  109. defer e.DestoryEsConn(client)
  110. defer func() {
  111. if r := recover(); r != nil {
  112. log.Println("[E]", r)
  113. for skip := 1; ; skip++ {
  114. _, file, line, ok := runtime.Caller(skip)
  115. if !ok {
  116. break
  117. }
  118. go log.Printf("%v,%v\n", file, line)
  119. }
  120. }
  121. }()
  122. _id := fmt.Sprint(obj["id"])
  123. _, err := client.Index().Index(index).Id(_id).BodyJson(obj).Do(context.TODO())
  124. if err != nil {
  125. log.Println("保存到ES出错", err.Error(), obj)
  126. return false
  127. } else {
  128. return true
  129. }
  130. }
  131. func DelBy(index string, query interface{}, e *elastic.EsV7) bool {
  132. client := e.GetEsConn()
  133. defer e.DestoryEsConn(client)
  134. b := false
  135. if client != nil {
  136. defer func() {
  137. if r := recover(); r != nil {
  138. log.Println("[E]", r)
  139. for skip := 1; ; skip++ {
  140. _, file, line, ok := runtime.Caller(skip)
  141. if !ok {
  142. break
  143. }
  144. go log.Printf("%v,%v\n", file, line)
  145. }
  146. }
  147. }()
  148. var err error
  149. if qs, ok := query.(string); ok {
  150. //temp := es.NewQueryStringQuery(qs)
  151. _, err = client.DeleteByQuery().Index(index).QueryString(qs).Do(context.Background())
  152. } else if qi, ok2 := query.(es.Query); ok2 {
  153. _, err = client.DeleteByQuery().Index(index).Query(qi).Do(context.Background())
  154. }
  155. if err != nil {
  156. log.Println("删除索引出错:", err.Error())
  157. } else {
  158. b = true
  159. }
  160. }
  161. return b
  162. }
  163. var FilteReg = regexp.MustCompile("[{}]*")
  164. func GetFieldData(tmp map[string]interface{}, field string) string {
  165. if strings.Contains(field, "procurementlist.") {
  166. text := ""
  167. field = strings.ReplaceAll(field, "procurementlist.", "")
  168. if tmp["procurementlist"] != nil {
  169. for _, pm := range tmp["procurementlist"].([]interface{}) {
  170. pm1 := pm.(map[string]interface{})
  171. text += common.ObjToString(pm1[field])
  172. }
  173. }
  174. return text
  175. } else {
  176. return common.ObjToString(tmp[field])
  177. }
  178. }
  179. // 处理文本
  180. func ProcessData(text string) string {
  181. defer common.Catch()
  182. text = strings.ToUpper(text) //文本中的英文全转为大写
  183. text = FilteReg.ReplaceAllString(text, "") //去除一些特殊符号
  184. return text
  185. }
  186. // 根据站点判断
  187. func UrlReplace(site string) bool {
  188. if strings.Contains(site, "中国招标与采购网,元博网,马克数据网,标800,优质采,山西省政府采购电子卖场,陕西省政府采购电子卖场,中国电子科技集团有限公司电子采购平台") {
  189. return true
  190. }
  191. return false
  192. }