package controllers import ( "basic.com/dbapi.git" "encoding/json" "github.com/gin-gonic/gin" "github.com/satori/go.uuid" "log" "webserver/extend/code" "webserver/extend/config" "webserver/extend/esutil" "webserver/extend/logger" "webserver/extend/util" "webserver/models" ) type DbTableController struct { } // @Summary 显示底库列表 // @Description 显示同步或本地库列表 // @Accept x-www-form-urlencoded // @Produce json // @Tags dbtable // @Param isSync path string true "是否同步库 1 同步库 2本地库 qita 全部库" // @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}" // @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}" // @Router /data/api-v/dbtable/queryDbTables/{isSync} [POST] func (dbt DbTableController) QueryDbTables(c *gin.Context) { url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/_search" isSync := c.Params.ByName("isSync") var setApi dbapi.SysSetApi _, sysconf := setApi.GetServerInfo() analyServerFilterStr := "" if isSync == "1" { analyServerFilterStr = "{\"term\":{\"analyServerId\":\"\"}}" // / 同步库 } else if isSync == "2" { analyServerFilterStr = "{\"term\":{\"analyServerId\":\"" + sysconf.ServerId + "\"}}" // 本地库 } if analyServerFilterStr !="" { analyServerFilterStr = ","+ analyServerFilterStr } params := "{\"query\":{\"bool\":{\"must\":[" + "{\"term\":{\"isDelete\":\"0\"}}" + analyServerFilterStr + "]}}," + "\"from\":0,\"size\":1000,\"sort\":{\"id\":{\"order\":\"asc\"}}}" logger.Debug("请求url:%s;\n 请求参数params:%s", url, params) data := esutil.GetEsDataReq(url, params, true) //c.JSON(200, data) util.ResponseFormat(c, code.Success, data) } // 依据底库id 查询数据 func QueryDbTableInfo(tableId string) map[string]interface{} { url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + tableId logger.Debug("请求url:%s;", url) data := esutil.GetEsDataInfo(url, true) return data } // @Summary 修改底库 // @Description 修改同步或本地库 // @Accept json // @Produce json // @Tags dbtable // @Param table body models.Dbtables true "底库数据" // @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}" // @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}" // @Router /data/api-v/dbtable/updateDbTables [POST] func (dbt DbTableController) UpdateDbTables(c *gin.Context) { dbtable := new(models.Dbtables) c.BindJSON(&dbtable) uuid := c.Params.ByName("id") if uuid == "" { uuid = dbtable.Id logger.Debug("body中获取底库id") } url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + uuid + "/_update?refresh=wait_for" dbtable.PriUpdate() dbTableByte, err := json.Marshal(dbtable) if err != nil { log.Fatalf("Json marshaling failed:%s", err) } logger.Debug("%s\n", dbTableByte) params := "{\"doc\":" + string(dbTableByte) + "}" logger.Debug("请求url:%s;\n 请求参数params:%s", url, params) data := esutil.GetEsDataReq(url, params, false) //c.JSON(200, changeEsRespData(data, "修改成功")) result := changeEsRespData(data, "修改成功") if result["success"].(bool) { //code.Success.Message = "修改底库成功" util.ResponseFormat(c, code.Success, result["data"]) } else { //code.ServiceInsideError.Message += result["msg"].(string) util.ResponseFormat(c, code.ServiceInsideError, result["data"]) } } // @Summary 添加底库 // @Description 添加同步或本地库 // @Accept json // @Produce json // @Tags dbtable // @Param obj body models.Dbtables true "底库数据" // @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}" // @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}" // @Router /data/api-v/dbtable/addDbTableInfo [PUT] func (dbt DbTableController) AddDbTableInfo(c *gin.Context) { dbtable := new(models.Dbtables) c.BindJSON(&dbtable) tableId := uuid.NewV4().String() dbtable.Id = tableId if dbtable.AnalyServerId == "sync" { dbtable.AnalyServerId = "" } if dbtable.AnalyServerId == "local" { var setApi dbapi.SysSetApi _, sysconf := setApi.GetServerInfo() dbtable.AnalyServerId = sysconf.ServerId } url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + tableId + "?refresh=wait_for" dbtable.PriInsert() // 添加时间和创建人 dbTableByte, err := json.Marshal(dbtable) if err != nil { log.Fatalf("Json marshaling failed:%s", err) } //logger.Debugf("%s\n", dbTableByte) params := string(dbTableByte) logger.Debug("请求url:%s;\n 请求参数params:%s", url, params) data, _ := esutil.PutEsDataReq(url, params) //c.JSON(200, changeEsRespData(data, "添加成功")) result := changeEsRespData(data, "添加成功") if result["success"].(bool) { //code.Success.Message = "添加底库成功" util.ResponseFormat(c, code.Success, result["data"]) } else { //code.ServiceInsideError.Message += result["msg"].(string) util.ResponseFormat(c, code.ServiceInsideError, result["data"]) } } // @Summary 删除底库 // @Description 删除同步或本地库 // @Accept x-www-form-urlencoded // @Produce json // @Tags dbtable // @Param uuid path string true "底库id " // @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}" // @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}" // @Router /data/api-v/dbtable/deleteDBtablesById/{id} [POST] func (dbt DbTableController) DeleteDbTables(c *gin.Context) { uuid := c.Params.ByName("id") url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + uuid + "/_update?refresh=wait_for" params := "{\"doc\":{\"isDelete\":\"1\"}}" logger.Debug("删除请求url:%s;\n 请求参数params:%s", url, params) data := esutil.GetEsDataReq(url, params, false) //c.JSON(200, changeEsRespData(data, "删除成功")) result := changeEsRespData(data, "删除成功") if result["success"].(bool) { //code.Success.Message = "删除底库成功" util.ResponseFormat(c, code.Success, result["data"]) } else { //code.ServiceInsideError.Message += result["msg"].(string) util.ResponseFormat(c, code.ServiceInsideError, result["data"]) } } func changeEsRespData(respData map[string]interface{}, successMsg string) (result map[string]interface{}) { id := respData["_id"] result = map[string]interface{}{} if id != "" { result["code"] = 200 data := make(map[string]interface{}) data["uuid"] = id result["data"] = data result["success"] = true result["msg"] = successMsg } else { result["data"] = nil result["success"] = false status := respData["status"] if status != nil { result["code"] = status result["msg"] = respData["error"].(map[string]interface{})["reason"] } else { result["msg"] = "服务器异常" result["code"] = 500 } } return result }