package controllers
|
|
import (
|
"basic.com/dbapi.git"
|
"encoding/json"
|
"fmt"
|
"github.com/gin-gonic/gin"
|
"github.com/satori/go.uuid"
|
"strconv"
|
"time"
|
"webserver/cache"
|
"webserver/extend/code"
|
"webserver/extend/config"
|
"webserver/extend/esutil"
|
"basic.com/valib/logger.git"
|
"webserver/extend/util"
|
"webserver/models"
|
)
|
|
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}"
|
// @Router /data/api-v/dbtable/queryDbTables/{isSync} [POST]
|
func (dbt DbTableController) QueryDbTables(c *gin.Context) {
|
isSync := c.Params.ByName("isSync")
|
var tApi dbapi.DbTableApi
|
b, data := tApi.QueryDbTables(isSync)
|
if b{
|
util.ResponseFormat(c, code.Success, data)
|
} else {
|
util.ResponseFormat(c,code.ComError,[]interface{}{})
|
}
|
}
|
|
// @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{}{})
|
}
|
}
|
|
// 依据底库id 查询数据
|
func QueryDbTableInfo(tableId string) map[string]interface{} {
|
localConf, err2 := cache.GetServerInfo()
|
if err2 !=nil || localConf.AlarmIp == "" || localConf.ServerId == "" {
|
logger.Debug("localConfig is wrong!!!")
|
return nil
|
}
|
url := "http://" + localConf.AlarmIp + ":" + strconv.Itoa(int(localConf.AlarmPort)) +
|
"/" + 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 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)
|
err := c.BindJSON(&dbtable)
|
if err !=nil || dbtable.Id == "" || dbtable.TableName == "" {
|
util.ResponseFormat(c,code.RequestParamError,"参数有误")
|
return
|
}
|
currentTime := time.Now()
|
startTime := dbtable.StartTime
|
endTime := ""
|
if dbtable.EndTime != "" {
|
endTime = dbtable.EndTime
|
}
|
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 if st.Before(currentTime) && endTime == "" {
|
dbtable.Enable = 1
|
} else {
|
dbtable.Enable = 0
|
}
|
paramBody := util.Struct2Map(dbtable)
|
var tApi dbapi.DbTableApi
|
b, data := tApi.UpdateDbTables(paramBody)
|
if b{
|
util.ResponseFormat(c,code.UpdateSuccess,data)
|
} else {
|
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,"更新失败")
|
}
|
}
|
|
func UpdateEndTime(id string) (flag bool) {
|
flag = false
|
localConf, err2 := cache.GetServerInfo()
|
if err2 !=nil || localConf.AlarmIp == "" || localConf.ServerId == "" {
|
logger.Debug("localConfig is wrong!!!")
|
return false
|
}
|
url := "http://" + localConf.AlarmIp + ":" + strconv.Itoa(int(localConf.AlarmPort)) +
|
"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + id + "/_update?refresh=wait_for"
|
prama := "{\"script\":\"ctx._source.remove(\\\"endTime\\\")\"}"
|
buf, err := esutil.EsReq("POST", url, []byte(prama))
|
if err != nil {
|
fmt.Println("http request info is err!")
|
return
|
}
|
var info interface{}
|
json.Unmarshal(buf, &info)
|
out, ok := info.(map[string]interface{})
|
if !ok {
|
fmt.Println("http response interface can not change map[string]interface{}")
|
return
|
}
|
middle, ok := out["result"].(string)
|
if !ok {
|
fmt.Println("first result change error!")
|
return
|
}
|
if middle == "updated" {
|
flag = true
|
}
|
return flag
|
}
|
|
// @Security ApiKeyAuth
|
// @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)
|
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
|
flag, sysconf := setApi.GetServerInfo()
|
if !flag {
|
util.ResponseFormat(c,code.ComError,"服务器基本配置有误,请检查")
|
return
|
}
|
dbtable.AnalyServerId = sysconf.ServerId
|
}
|
|
dbtable.PriInsert() // 添加时间和创建人
|
|
currentTime := time.Now()
|
startTime := dbtable.StartTime
|
endTime := ""
|
if dbtable.EndTime != "" {
|
endTime = dbtable.EndTime
|
}
|
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 {
|
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 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) {
|
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 {
|
util.ResponseFormat(c,code.ComError,"删除失败")
|
}
|
}
|
|
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
|
}
|