300 lines
7.7 KiB
Go
300 lines
7.7 KiB
Go
package system
|
|
|
|
import (
|
|
"f5"
|
|
"fmt"
|
|
"main/constant"
|
|
"main/model/system"
|
|
"net"
|
|
"net/http"
|
|
"q5"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type WorkerToolApi struct {
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) ListGameApi(c *gin.Context) {
|
|
req := struct {
|
|
PageDto system.PageDto `json:"page_dto"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
sql := "SELECT * FROM t_internal_gameapi_host WHERE 1=1"
|
|
params := []string{}
|
|
result := []*system.GameApiHostItem{}
|
|
f5.GetGoStyleDb().PageQuery(
|
|
constant.CONF_DB,
|
|
q5.ToInt32(req.PageDto.PageSize),
|
|
q5.ToInt32(req.PageDto.Page),
|
|
sql,
|
|
params,
|
|
f5.GetDbFilter().Comp([]f5.DbQueryFilter{}...),
|
|
"",
|
|
func(err error, pg *f5.Pagination) {
|
|
if err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
for pg.Rows.Next() {
|
|
p := new(system.GameApiHostItem)
|
|
f5.UnmarshalModel(pg.Rows, p)
|
|
q5.AppendSlice(&result, p)
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "获取成功",
|
|
"data": result,
|
|
"total": pg.Total,
|
|
"total_page": pg.TotalPages,
|
|
"cur_page": pg.CurrentPage,
|
|
})
|
|
})
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) AddGameApi(c *gin.Context) {
|
|
req := struct {
|
|
Host string `binding:"required" json:"gameapi_host"`
|
|
Port int32 `binding:"required" json:"gameapi_port"`
|
|
Enable int32 `json:"enable"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
if !bpa.testHostport(c, req.Host, req.Port) {
|
|
return
|
|
}
|
|
|
|
info := new(system.GameApiHostItem)
|
|
nowDaySeconds := int32(f5.GetApp().GetRealSeconds())
|
|
|
|
var count int64 = 0
|
|
db := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(info.TableName()).Where("gameapi_host = ?", req.Host)
|
|
if err := db.Count(&count).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else if count > 0 {
|
|
f5.RspErr2(c, 2, "host(ip)已存在")
|
|
return
|
|
}
|
|
|
|
info.Host = req.Host
|
|
info.Port = req.Port
|
|
info.Enable = req.Enable
|
|
info.CreateTime = nowDaySeconds
|
|
info.ModifyTime = nowDaySeconds
|
|
if err := f5.GetApp().GetOrmDb(constant.CONF_DB).Create(info).Error; err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
f5.RspErr2(c, 0, "添加成功")
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) EditGameApi(c *gin.Context) {
|
|
req := struct {
|
|
Idx int64 `binding:"required" json:"idx"`
|
|
Host string `binding:"required" json:"gameapi_host"`
|
|
Port int32 `binding:"required" json:"gameapi_port"`
|
|
Enable int32 `json:"enable"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
if !bpa.testHostport(c, req.Host, req.Port) {
|
|
return
|
|
}
|
|
|
|
item := new(system.GameApiHostItem)
|
|
db := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName())
|
|
if err := db.Take(item, "idx = ?", req.Idx).Error; err != nil {
|
|
if !f5.IsOrmErrRecordNotFound(err) {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else {
|
|
f5.RspErr2(c, 2, "无法查到记录")
|
|
return
|
|
}
|
|
}
|
|
|
|
var count int64 = 0
|
|
db = f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName()).Where("gameapi_host = ?", req.Host).Where("idx != ?", req.Idx)
|
|
if err := db.Count(&count).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else if count > 0 {
|
|
f5.RspErr2(c, 2, "host(ip)已存在")
|
|
return
|
|
}
|
|
|
|
if item.Host != req.Host ||
|
|
item.Port != req.Port ||
|
|
item.Enable != req.Enable {
|
|
nowDaySeconds := int32(f5.GetApp().GetRealSeconds())
|
|
item.Host = req.Host
|
|
item.Port = req.Port
|
|
item.Enable = req.Enable
|
|
item.ModifyTime = nowDaySeconds
|
|
if err := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName()).Where("idx = ?", req.Idx).Omit("idx", "createtime").Save(item).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
}
|
|
}
|
|
f5.RspErr2(c, 0, "")
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) ListApiGate(c *gin.Context) {
|
|
req := struct {
|
|
PageDto system.PageDto `json:"page_dto"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
sql := "SELECT * FROM t_apigate_host WHERE 1=1"
|
|
params := []string{}
|
|
result := []*system.ApiGateHostItem{}
|
|
f5.GetGoStyleDb().PageQuery(
|
|
constant.CONF_DB,
|
|
q5.ToInt32(req.PageDto.PageSize),
|
|
q5.ToInt32(req.PageDto.Page),
|
|
sql,
|
|
params,
|
|
f5.GetDbFilter().Comp([]f5.DbQueryFilter{}...),
|
|
"",
|
|
func(err error, pg *f5.Pagination) {
|
|
if err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
for pg.Rows.Next() {
|
|
p := new(system.ApiGateHostItem)
|
|
f5.UnmarshalModel(pg.Rows, p)
|
|
q5.AppendSlice(&result, p)
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "获取成功",
|
|
"data": result,
|
|
"total": pg.Total,
|
|
"total_page": pg.TotalPages,
|
|
"cur_page": pg.CurrentPage,
|
|
})
|
|
})
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) AddApiGate(c *gin.Context) {
|
|
req := struct {
|
|
Host string `binding:"required" json:"apigate_host"`
|
|
Port int32 `binding:"required" json:"apigate_port"`
|
|
Enable int32 `json:"enable"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
if !bpa.testHostport(c, req.Host, req.Port) {
|
|
return
|
|
}
|
|
|
|
info := new(system.ApiGateHostItem)
|
|
nowDaySeconds := int32(f5.GetApp().GetRealSeconds())
|
|
|
|
var count int64 = 0
|
|
db := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(info.TableName()).Where("apigate_host = ?", req.Host)
|
|
if err := db.Count(&count).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else if count > 0 {
|
|
f5.RspErr2(c, 2, "host(ip)已存在")
|
|
return
|
|
}
|
|
|
|
info.Host = req.Host
|
|
info.Port = req.Port
|
|
info.Enable = req.Enable
|
|
info.CreateTime = nowDaySeconds
|
|
info.ModifyTime = nowDaySeconds
|
|
if err := f5.GetApp().GetOrmDb(constant.CONF_DB).Create(info).Error; err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
f5.RspErr2(c, 0, "添加成功")
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) EditApiGate(c *gin.Context) {
|
|
req := struct {
|
|
Idx int64 `binding:"required" json:"idx"`
|
|
Host string `binding:"required" json:"apigate_host"`
|
|
Port int32 `binding:"required" json:"apigate_port"`
|
|
Enable int32 `json:"enable"`
|
|
}{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
f5.RspErr2(c, 1, err.Error())
|
|
return
|
|
}
|
|
|
|
if !bpa.testHostport(c, req.Host, req.Port) {
|
|
return
|
|
}
|
|
|
|
item := new(system.ApiGateHostItem)
|
|
db := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName())
|
|
if err := db.Take(item, "idx = ?", req.Idx).Error; err != nil {
|
|
if !f5.IsOrmErrRecordNotFound(err) {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else {
|
|
f5.RspErr2(c, 2, "无法查到记录")
|
|
return
|
|
}
|
|
}
|
|
|
|
var count int64 = 0
|
|
db = f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName()).Where("apigate_host = ?", req.Host).Where("idx != ?", req.Idx)
|
|
if err := db.Count(&count).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
} else if count > 0 {
|
|
f5.RspErr2(c, 2, "host(ip)已存在")
|
|
return
|
|
}
|
|
|
|
if item.Host != req.Host ||
|
|
item.Port != req.Port ||
|
|
item.Enable != req.Enable {
|
|
nowDaySeconds := int32(f5.GetApp().GetRealSeconds())
|
|
item.Host = req.Host
|
|
item.Port = req.Port
|
|
item.Enable = req.Enable
|
|
item.ModifyTime = nowDaySeconds
|
|
if err := f5.GetApp().GetOrmDb(constant.CONF_DB).Table(item.TableName()).Where("idx = ?", req.Idx).Omit("idx", "createtime").Save(item).Error; err != nil {
|
|
f5.RspErr2(c, 500, "sever internal error:"+err.Error())
|
|
return
|
|
}
|
|
}
|
|
f5.RspErr2(c, 0, "")
|
|
}
|
|
|
|
func (bpa *WorkerToolApi) testHostport(c *gin.Context, host string, port int32) bool {
|
|
addrAndPort := fmt.Sprintf("%s:%d", host, port)
|
|
conn, err := net.DialTimeout("tcp", addrAndPort, time.Second)
|
|
if err != nil {
|
|
f5.RspErr2(c, 2, "host(ip) port 连不上")
|
|
return false
|
|
} else {
|
|
conn.Close()
|
|
return true
|
|
}
|
|
}
|