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 }