liuxiaolong
2020-06-05 7c811247ecf143e08c576986a884bedadc57dd66
controllers/dbtablesCon.go
@@ -2,14 +2,11 @@
import (
   "basic.com/dbapi.git"
   "encoding/json"
   "basic.com/valib/logger.git"
   "github.com/gin-gonic/gin"
   "github.com/satori/go.uuid"
   "log"
   "time"
   "webserver/extend/code"
   "webserver/extend/config"
   "webserver/extend/esutil"
   "webserver/extend/logger"
   "webserver/extend/util"
   "webserver/models"
)
@@ -17,49 +14,52 @@
type DbTableController struct {
}
// @Security ApiKeyAuth
// @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}"
// @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 + "\"}}" // 本地库
   var tApi dbapi.DbTableApi
   b, data := tApi.QueryDbTables(isSync)
   if b{
      util.ResponseFormat(c, code.Success, data)
   } else {
      util.ResponseFormat(c,code.ComError,[]interface{}{})
   }
   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
}
// @Security ApiKeyAuth
// @Summary 查询本机所有底库列表
// @Description 查询本机所有底库列表
// @Accept  x-www-form-urlencoded
// @Produce json
// @Tags dbtable
// @Param isDelete query string true "0:查未删除,1:查已删除,其他:查所有"
// @Success 200 {string} json "{"code":200, msg:"", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
// @Router /data/api-v/dbtable/findAllDbTablesByCurServer [GET]
func (dbt DbTableController) FindAllDbTablesByCurServer(c *gin.Context) {
   var api dbapi.DbTableApi
   isDeleteStr := c.Query("isDelete")
   if isDeleteStr == "" {
      isDeleteStr = "0"
   }
   arr,e := api.FindAllDbTablesByCurServer(isDeleteStr)
   if e == nil {
      util.ResponseFormat(c,code.Success, arr)
   } else {
      util.ResponseFormat(c,code.ComError,[]interface{}{})
   }
}
// @Security ApiKeyAuth
// @Summary 修改底库
// @Description 修改同步或本地库
// @Accept  json
@@ -71,34 +71,99 @@
// @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")
   err := c.BindJSON(&dbtable)
   if err !=nil || dbtable.Id == "" || dbtable.TableName == "" || (dbtable.Enable !=0 && dbtable.Enable !=1) {
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   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"])
   paramBody := util.Struct2Map(dbtable)
   var tApi dbapi.DbTableApi
   b, data := tApi.UpdateDbTables(paramBody)
   if b{
      util.ResponseFormat(c,code.UpdateSuccess,data)
   } else {
      //code.ServiceInsideError.Message += result["msg"].(string)
      util.ResponseFormat(c, code.ServiceInsideError, result["data"])
      util.ResponseFormat(c,code.ComError,"更新失败")
   }
   //if dbtable.EndTime == "" {
   //   flag := UpdateEndTime(dbtable.Id)
   //   if flag == false {
   //      util.ResponseFormat(c, code.ServiceInsideError, "修改失败")
   //   }
   //}
   //
   //if dbtable.Enable == 0 {
   //   res := UpdateDbPersonsOfDbTable(dbtable.Id)
   //}
   //if result["success"].(bool) {
   //   util.ResponseFormat(c, code.Success, result["data"])
   //} else {
   //   util.ResponseFormat(c, code.ServiceInsideError, result["data"])
   //}
}
type DbTStatusVo struct {
   Id string `json:"id"`
   Enable int `json:"enable"`
}
// @Security ApiKeyAuth
// @Summary 修改底库状态
// @Description 修改同步或本地库底库状态
// @Accept  json
// @Produce json
// @Tags dbtable
// @Param obj body controllers.DbTStatusVo true "底库状态修改参数"
// @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}"
// @Failure 500 {string} json "{"code":500,  msg:"返回错误信息", success:false}"
// @Router /data/api-v/dbtable/updateDbTableStatus [POST]
func (dbt DbTableController) UpdateDbTableStatus(c *gin.Context) {
   var ds DbTStatusVo
   err := c.BindJSON(&ds)
   if err !=nil || ds.Id == "" || (ds.Enable !=0 && ds.Enable !=1)  {
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   var dtApi dbapi.DbTableApi
   dts, err := dtApi.DbtablesById([]string{ds.Id})
   if err !=nil || dts == nil {
      util.ResponseFormat(c,code.RequestParamError,"底库不存在")
      return
   }
   if ds.Enable == 1 {
      str := dts[0].StartTime
      etr := dts[0].EndTime
      ct := time.Now()
      st, _ := time.ParseInLocation("2006-01-02 15:04:05", str, time.Local)
      b := false
      if etr != "" {
         et,_ := time.ParseInLocation("2006-01-02 15:04:05", etr, time.Local)
         if et.After(ct) && st.Before(ct) {
            b = true
         }
      } else {
         if st.Before(ct) {
            b = true
         }
      }
      //b 为true才允许开启
      if !b {
         util.ResponseFormat(c,code.UpdateFail,"当前不允许启用")
         return
      }
   }
   b,_ := dtApi.UpdateDbTableStatus(ds.Id, ds.Enable)
   if b {
      util.ResponseFormat(c,code.UpdateSuccess,"更新成功")
   } else {
      util.ResponseFormat(c,code.ComError,"更新失败")
   }
}
// @Security ApiKeyAuth
// @Summary 添加底库
// @Description 添加同步或本地库
// @Accept  json
@@ -110,63 +175,83 @@
// @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
   err := c.BindJSON(&dbtable)
   if err!=nil || dbtable.TableName==""{
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   dbtable.Id = uuid.NewV4().String()
   if dbtable.AnalyServerId == "sync" {
      dbtable.AnalyServerId = ""
   }
   if dbtable.AnalyServerId == "local" {
      var setApi dbapi.SysSetApi
      _, sysconf := setApi.GetServerInfo()
      flag, sysconf := setApi.GetServerInfo()
      if !flag {
         util.ResponseFormat(c,code.ComError,"服务器基本配置有误,请检查")
         return
      }
      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)
   currentTime := time.Now()
   startTime := dbtable.StartTime
   endTime := ""
   if dbtable.EndTime != "" {
      endTime = dbtable.EndTime
   }
   //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"])
   st, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
   if endTime != "" {
      et, _ := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
      if et.After(currentTime) && st.Before(currentTime) {
         dbtable.Enable = 1
      } else {
         dbtable.Enable = 0
      }
   } else {
      //code.ServiceInsideError.Message += result["msg"].(string)
      util.ResponseFormat(c, code.ServiceInsideError, result["data"])
      if st.Before(currentTime) {
         dbtable.Enable = 1
      } else {
         dbtable.Enable = 0
      }
   }
   logger.Debug("AddDbTableInfo dbtable.Enable:",dbtable.Enable,",startTime:",startTime,",endTime:",endTime,",st:",st,",curTime:",currentTime)
   paramBody := util.Struct2Map(dbtable)
   var tApi dbapi.DbTableApi
   b, data := tApi.AddDbTableInfo(paramBody)
   if b {
      util.ResponseFormat(c,code.AddSuccess, data)
   } else {
      util.ResponseFormat(c,code.ComError, data)
   }
}
// @Security ApiKeyAuth
// @Summary 删除底库
// @Description 删除同步或本地库
// @Accept  x-www-form-urlencoded
// @Produce json
// @Tags dbtable
// @Param uuid path string true "底库id "
// @Param id 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"])
   id := c.Params.ByName("id")
   if id == "" {
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   var tApi dbapi.DbTableApi
   b, data := tApi.DeleteById(id)
   if b {
      util.ResponseFormat(c,code.DelSuccess,data)
   } else {
      //code.ServiceInsideError.Message += result["msg"].(string)
      util.ResponseFormat(c, code.ServiceInsideError, result["data"])
      util.ResponseFormat(c,code.ComError,"删除失败")
   }
}