package service import ( "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/encrypt" elastic "app.yhyue.com/moapp/jybase/es" "app.yhyue.com/moapp/jybase/redis" MC "bp.jydev.jianyu360.cn/BaseService/biService/entity" "bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice" "encoding/json" "fmt" "github.com/gogf/gf/v2/util/gconv" ) type SqlService struct { } func (l SqlService) SqlManage(in *biservice.SqlManageReq) map[string]string { sqlData := MC.BiService.FindOne("sql_manage", map[string]interface{}{ "id": common.Int64All(in.Id), }, "", "") if sqlData == nil || len(*sqlData) == 0 { return map[string]string{} } dbType := (*sqlData)["db_type"] cache_time := common.IntAll((*sqlData)["cache_time"]) key := common.GetMd5String(gconv.String(in)) if cache_time != 0 { dataStr := redis.Get("newother", key) if dataStr != nil { data := gconv.MapStrStr(dataStr) return data } } rs := &[]map[string]interface{}{} count := int64(0) switch dbType { case "es": count, rs = elastic.GetWithCount(common.InterfaceToStr((*sqlData)["db_name"]), common.InterfaceToStr((*sqlData)["db_name"]), "", Sqlformat(common.InterfaceToStr((*sqlData)["content"]), *in)) } for k, v := range *rs { (*rs)[k]["id"] = encrypt.EncodeArticleId2ByCheck(common.InterfaceToStr(v["id"])) delete((*rs)[k], "_id") } dataByte, _ := json.Marshal(rs) result := map[string]string{ "data": string(dataByte), "count": common.InterfaceToStr(count), } if count > 0 && cache_time != 0 { redis.Put("newother", key, result, cache_time) } return result } func Sqlformat(sqlStr string, sqlData biservice.SqlManageReq) string { data := []interface{}{} for _, v := range sqlData.Params { switch v.Type { case "string": data = append(data, v.Value) case "int": data = append(data, common.Int64All(v.Value)) } } return fmt.Sprintf(sqlStr, data...) }