123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package util
- import (
- "app.yhyue.com/moapp/jybase/common"
- elastic "app.yhyue.com/moapp/jybase/es"
- "context"
- "fmt"
- es "github.com/olivere/elastic/v7"
- "github.com/shopspring/decimal"
- "go.mongodb.org/mongo-driver/bson/primitive"
- "log"
- "net/http"
- "reflect"
- "runtime"
- "strconv"
- )
- // 数据类型转换
- func GetPostForm(r *http.Request) map[string]interface{} {
- val := map[string]interface{}{}
- for k, _ := range r.Form {
- // if len(k) < 2 {
- // continue
- // }
- if k != "_id" {
- v := r.FormValue(k)
- switch k[:2] {
- case "s_": //string型
- val[k] = v
- case "l_": //int64位
- val[k], _ = strconv.ParseInt(v, 10, 64)
- case "i_": //int型
- val[k], _ = strconv.Atoi(v)
- default:
- if v == "true" || v == "false" {
- b, _ := strconv.ParseBool(v)
- val[k] = b
- } else {
- val[k] = v
- }
- }
- }
- }
- return val
- }
- // 从数组中删除元素
- func deleteSlice(arr []string, v string) []string {
- for k, v1 := range arr {
- if v1 == v {
- return append(arr[:k], arr[k+1:]...)
- }
- }
- return arr
- }
- /**
- * 前端科学计数法处理
- */
- func FormatNumber(tmp map[string]interface{}) {
- for k, v := range tmp {
- if reflect.TypeOf(v).Name() == reflect.Float64.String() {
- num, _ := decimal.NewFromString(strconv.FormatFloat(common.Float64All(v), 'e', -1, 64))
- tmp[k], _ = num.Float64()
- }
- }
- }
- // 获取最新年报
- func Sort_year_report(year_report primitive.A) map[string]interface{} {
- new_year_report := year_report[0]
- for i := 0; i < len(year_report); i++ {
- if common.IntAll(new_year_report.(map[string]interface{})["report_year"]) < common.IntAll(year_report[i].(map[string]interface{})["report_year"]) {
- new_year_report = year_report[i]
- }
- }
- return new_year_report.(map[string]interface{})
- }
- func BulkSave(index string, obj *[]map[string]interface{}, isDelBefore bool, e *elastic.EsV7) {
- client := e.GetEsConn()
- defer e.DestoryEsConn(client)
- if client != nil {
- defer func() {
- if r := recover(); r != nil {
- for skip := 1; ; skip++ {
- _, file, line, ok := runtime.Caller(skip)
- if !ok {
- break
- }
- go log.Printf("%v,%v\n", file, line)
- }
- }
- }()
- req := client.Bulk()
- for _, v := range *obj {
- if v == nil || len(v) == 0 {
- continue
- }
- id := fmt.Sprint(v["id"])
- if isDelBefore {
- req = req.Add(es.NewBulkDeleteRequest().Index(index).Id(id))
- }
- req = req.Add(es.NewBulkIndexRequest().Index(index).Id(id).Doc(v))
- }
- _, err := req.Do(context.TODO())
- if err != nil {
- log.Println("批量保存到ES出错", err.Error())
- }
- }
- }
- func Save(index string, obj map[string]interface{}, e *elastic.EsV7) bool {
- client := e.GetEsConn()
- defer e.DestoryEsConn(client)
- defer func() {
- if r := recover(); r != nil {
- log.Println("[E]", r)
- for skip := 1; ; skip++ {
- _, file, line, ok := runtime.Caller(skip)
- if !ok {
- break
- }
- go log.Printf("%v,%v\n", file, line)
- }
- }
- }()
- _id := fmt.Sprint(obj["id"])
- _, err := client.Index().Index(index).Id(_id).BodyJson(obj).Do(context.TODO())
- if err != nil {
- log.Println("保存到ES出错", err.Error(), obj)
- return false
- } else {
- return true
- }
- }
- func DelBy(index string, query interface{}, e *elastic.EsV7) bool {
- client := e.GetEsConn()
- defer e.DestoryEsConn(client)
- b := false
- if client != nil {
- defer func() {
- if r := recover(); r != nil {
- log.Println("[E]", r)
- for skip := 1; ; skip++ {
- _, file, line, ok := runtime.Caller(skip)
- if !ok {
- break
- }
- go log.Printf("%v,%v\n", file, line)
- }
- }
- }()
- var err error
- if qs, ok := query.(string); ok {
- //temp := es.NewQueryStringQuery(qs)
- _, err = client.DeleteByQuery().Index(index).QueryString(qs).Do(context.Background())
- } else if qi, ok2 := query.(es.Query); ok2 {
- _, err = client.DeleteByQuery().Index(index).Query(qi).Do(context.Background())
- }
- if err != nil {
- log.Println("删除索引出错:", err.Error())
- } else {
- b = true
- }
- }
- return b
- }
|