1、新增 记录 进程搜索
2、增加未绑定分组搜索 3、缺失机器号提示
This commit is contained in:
212
app/admin/apis/mm_group.go
Normal file
212
app/admin/apis/mm_group.go
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
package apis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||||
|
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmGroup struct {
|
||||||
|
api.Api
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取设备分组管理列表
|
||||||
|
// @Summary 获取设备分组管理列表
|
||||||
|
// @Description 获取设备分组管理列表
|
||||||
|
// @Tags 设备分组管理
|
||||||
|
// @Param groupName query string false "分组名称"
|
||||||
|
// @Param pageSize query int false "页条数"
|
||||||
|
// @Param pageIndex query int false "页码"
|
||||||
|
// @Success 200 {object} response.Response{data=response.Page{list=[]models.MmGroup}} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-group [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmGroup) GetPage(c *gin.Context) {
|
||||||
|
req := dto.MmGroupGetPageReq{}
|
||||||
|
s := service.MmGroup{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
list := make([]models.MmGroup, 0)
|
||||||
|
var count int64
|
||||||
|
|
||||||
|
err = s.GetPage(&req, p, &list, &count)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取设备分组管理
|
||||||
|
// @Summary 获取设备分组管理
|
||||||
|
// @Description 获取设备分组管理
|
||||||
|
// @Tags 设备分组管理
|
||||||
|
// @Param id path int false "id"
|
||||||
|
// @Success 200 {object} response.Response{data=models.MmGroup} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-group/{id} [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmGroup) Get(c *gin.Context) {
|
||||||
|
req := dto.MmGroupGetReq{}
|
||||||
|
s := service.MmGroup{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var object models.MmGroup
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
err = s.Get(&req, p, &object)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(object, "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建设备分组管理
|
||||||
|
// @Summary 创建设备分组管理
|
||||||
|
// @Description 创建设备分组管理
|
||||||
|
// @Tags 设备分组管理
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param data body dto.MmGroupInsertReq true "data"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||||
|
// @Router /api/v1/mm-group [post]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmGroup) Insert(c *gin.Context) {
|
||||||
|
req := dto.MmGroupInsertReq{}
|
||||||
|
s := service.MmGroup{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 设置创建人
|
||||||
|
req.SetCreateBy(user.GetUserId(c))
|
||||||
|
|
||||||
|
err = s.Insert(&req)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("创建设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(req.GetId(), "创建成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改设备分组管理
|
||||||
|
// @Summary 修改设备分组管理
|
||||||
|
// @Description 修改设备分组管理
|
||||||
|
// @Tags 设备分组管理
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param id path int true "id"
|
||||||
|
// @Param data body dto.MmGroupUpdateReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||||
|
// @Router /api/v1/mm-group/{id} [put]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmGroup) Update(c *gin.Context) {
|
||||||
|
req := dto.MmGroupUpdateReq{}
|
||||||
|
s := service.MmGroup{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Update(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("修改设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除设备分组管理
|
||||||
|
// @Summary 删除设备分组管理
|
||||||
|
// @Description 删除设备分组管理
|
||||||
|
// @Tags 设备分组管理
|
||||||
|
// @Param data body dto.MmGroupDeleteReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||||
|
// @Router /api/v1/mm-group [delete]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmGroup) Delete(c *gin.Context) {
|
||||||
|
s := service.MmGroup{}
|
||||||
|
req := dto.MmGroupDeleteReq{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Remove(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("删除设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "删除成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e MmGroup) GetOptions(c *gin.Context) {
|
||||||
|
s := service.MmGroup{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list := make([]dto.MmGroupOption, 0)
|
||||||
|
err = s.GetOptions(&list)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取设备分组管理失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(list, "查询成功")
|
||||||
|
}
|
||||||
247
app/admin/apis/mm_keyword.go
Normal file
247
app/admin/apis/mm_keyword.go
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
package apis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/gin-gonic/gin/binding"
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||||
|
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmKeyword struct {
|
||||||
|
api.Api
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取关键字列表
|
||||||
|
// @Summary 获取关键字列表
|
||||||
|
// @Description 获取关键字列表
|
||||||
|
// @Tags 关键字
|
||||||
|
// @Param pageSize query int false "页条数"
|
||||||
|
// @Param pageIndex query int false "页码"
|
||||||
|
// @Success 200 {object} response.Response{data=response.Page{list=[]models.MmKeyword}} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-keyword [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmKeyword) GetPage(c *gin.Context) {
|
||||||
|
req := dto.MmKeywordGetPageReq{}
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
list := make([]models.MmKeyword, 0)
|
||||||
|
var count int64
|
||||||
|
|
||||||
|
err = s.GetPage(&req, p, &list, &count)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取关键字
|
||||||
|
// @Summary 获取关键字
|
||||||
|
// @Description 获取关键字
|
||||||
|
// @Tags 关键字
|
||||||
|
// @Param id path int false "id"
|
||||||
|
// @Success 200 {object} response.Response{data=models.MmKeyword} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-keyword/{id} [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmKeyword) Get(c *gin.Context) {
|
||||||
|
req := dto.MmKeywordGetReq{}
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var object models.MmKeyword
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
err = s.Get(&req, p, &object)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(object, "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建关键字
|
||||||
|
// @Summary 创建关键字
|
||||||
|
// @Description 创建关键字
|
||||||
|
// @Tags 关键字
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param data body dto.MmKeywordInsertReq true "data"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||||
|
// @Router /api/v1/mm-keyword [post]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmKeyword) Insert(c *gin.Context) {
|
||||||
|
req := dto.MmKeywordInsertReq{}
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 设置创建人
|
||||||
|
req.SetCreateBy(user.GetUserId(c))
|
||||||
|
|
||||||
|
err = s.Insert(&req)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("创建关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(req.GetId(), "创建成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量添加添加长度关键字
|
||||||
|
func (e MmKeyword) InsertBatch(c *gin.Context) {
|
||||||
|
req := dto.MmKeywordInsertBatchReq{}
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.Valid(); err != nil {
|
||||||
|
e.Error(500, err, "")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.InsertBatch(&req)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("创建关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "创建成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改关键字
|
||||||
|
// @Summary 修改关键字
|
||||||
|
// @Description 修改关键字
|
||||||
|
// @Tags 关键字
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param id path int true "id"
|
||||||
|
// @Param data body dto.MmKeywordUpdateReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||||
|
// @Router /api/v1/mm-keyword/{id} [put]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmKeyword) Update(c *gin.Context) {
|
||||||
|
req := dto.MmKeywordUpdateReq{}
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Update(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("修改关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除关键字
|
||||||
|
// @Summary 删除关键字
|
||||||
|
// @Description 删除关键字
|
||||||
|
// @Tags 关键字
|
||||||
|
// @Param data body dto.MmKeywordDeleteReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||||
|
// @Router /api/v1/mm-keyword [delete]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmKeyword) Delete(c *gin.Context) {
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
req := dto.MmKeywordDeleteReq{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Remove(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("删除关键字失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "删除成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取关键字
|
||||||
|
func (e MmKeyword) GetKeywords(c *gin.Context) {
|
||||||
|
s := service.MmKeyword{}
|
||||||
|
req := dto.MmKeywordReq{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req, binding.Form, binding.Query).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Debugf("获取关键字:%s", req.MachineId)
|
||||||
|
resp, err := s.GetKeywords(req.MachineId)
|
||||||
|
if err != nil {
|
||||||
|
c.String(500, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.String(http.StatusOK, resp)
|
||||||
|
}
|
||||||
@ -1,12 +1,13 @@
|
|||||||
package apis
|
package apis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gin-gonic/gin/binding"
|
"github.com/gin-gonic/gin/binding"
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||||
@ -161,6 +162,37 @@ func (e MmMachine) Update(c *gin.Context) {
|
|||||||
e.OK(req.GetId(), "修改成功")
|
e.OK(req.GetId(), "修改成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateLimitBatch 批量修改设备白名单配置
|
||||||
|
func (e MmMachine) UpdateLimitBatch(c *gin.Context) {
|
||||||
|
req := dto.MmMachineUpdateLimitBatchReq{}
|
||||||
|
s := service.MmMachine{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req, binding.JSON).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.Validate(); err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.UpdateLimitBatch(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "批量修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
// 批量修改
|
// 批量修改
|
||||||
func (e MmMachine) UpdateBatch(c *gin.Context) {
|
func (e MmMachine) UpdateBatch(c *gin.Context) {
|
||||||
req := dto.MmMachineUpdateBatchReq{}
|
req := dto.MmMachineUpdateBatchReq{}
|
||||||
@ -249,6 +281,7 @@ func (e MmMachine) GetPassword(c *gin.Context) {
|
|||||||
|
|
||||||
// 获取设备白名单数据
|
// 获取设备白名单数据
|
||||||
func (e MmMachine) GetWhiteProcess(c *gin.Context) {
|
func (e MmMachine) GetWhiteProcess(c *gin.Context) {
|
||||||
|
logger.Info("获取设备白名单数据")
|
||||||
s := service.MmMachine{}
|
s := service.MmMachine{}
|
||||||
req := dto.MmMachineQueryWhiteListReq{}
|
req := dto.MmMachineQueryWhiteListReq{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
@ -261,14 +294,16 @@ func (e MmMachine) GetWhiteProcess(c *gin.Context) {
|
|||||||
e.Logger.Error(err)
|
e.Logger.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
whiteProcess, err := s.GetWhiteProcess(&req)
|
whiteProcess, err := s.GetWhiteProcess(&req, false)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.String(500, err.Error())
|
c.String(500, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.String(http.StatusOK, whiteProcess)
|
resp, _ := json.Marshal(whiteProcess)
|
||||||
|
|
||||||
|
c.String(http.StatusOK, string(resp))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改设备白名单数据
|
// 修改设备白名单数据
|
||||||
@ -310,21 +345,24 @@ func (e MmMachine) CheckMachine(c *gin.Context) {
|
|||||||
c.Set("status", 500)
|
c.Set("status", 500)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.CheckMachine(&req)
|
resp := s.CheckMachine(&req)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
e.Logger.Errorf("CheckMachine error:%s", err.Error())
|
// e.Logger.Errorf("CheckMachine error:%s", err.Error())
|
||||||
if strings.Contains(err.Error(), "设备编号已被占用") {
|
// if strings.Contains(err.Error(), "设备编号已被占用") {
|
||||||
c.String(http.StatusOK, err.Error())
|
// c.String(http.StatusOK, err.Error())
|
||||||
} else {
|
// } else {
|
||||||
c.String(500, "0")
|
// c.String(500, "0")
|
||||||
}
|
// }
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
|
||||||
c.String(http.StatusOK, "1")
|
byts, _ := json.Marshal(resp)
|
||||||
|
|
||||||
|
c.String(http.StatusOK, string(byts))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e MmMachine) GetMachineList(c *gin.Context) {
|
func (e MmMachine) GetMachineList(c *gin.Context) {
|
||||||
|
logger.Info("获取设备列表")
|
||||||
s := service.MmMachine{}
|
s := service.MmMachine{}
|
||||||
// req := dto.MmMachineQueryWhiteListReq{}
|
// req := dto.MmMachineQueryWhiteListReq{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
@ -344,3 +382,137 @@ func (e MmMachine) GetMachineList(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
e.OK(machineList, "查询成功")
|
e.OK(machineList, "查询成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 批量修改设备分组
|
||||||
|
func (e MmMachine) UpdateGroupBatch(c *gin.Context) {
|
||||||
|
req := dto.MmMachineUpdateGroupBatchReq{}
|
||||||
|
s := service.MmMachine{}
|
||||||
|
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req, binding.JSON).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.Validate(); err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.UpdateGroupBatch(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "批量修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除所有设备
|
||||||
|
func (e MmMachine) ClearAll(c *gin.Context) {
|
||||||
|
s := service.MmMachine{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.ClearAll()
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("清除所有设备失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "清除成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解绑所有设备
|
||||||
|
func (e MmMachine) Uninstall(c *gin.Context) {
|
||||||
|
s := service.MmMachine{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.Uninstall()
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("解绑所有设备失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "解绑成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量修改设备描述
|
||||||
|
func (e MmMachine) UpdateDescriptionBatch(c *gin.Context) {
|
||||||
|
req := dto.MmMachineUpdateDescriptionBatchReq{}
|
||||||
|
s := service.MmMachine{}
|
||||||
|
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req, binding.JSON).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.Validate(); err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.UpdateDescriptionBatch(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量修改设备白名单配置失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "批量修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询设备间隔账号
|
||||||
|
func (e MmMachine) QueryIntervalAccount(c *gin.Context) {
|
||||||
|
s := service.MmMachine{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
intervalAccount, err := s.QueryIntervalAccount()
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("查询设备间隔账号失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(intervalAccount, "查询成功")
|
||||||
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
package apis
|
package apis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gin-gonic/gin/binding"
|
"github.com/gin-gonic/gin/binding"
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||||
@ -197,6 +199,7 @@ func (e MmMachineLog) Delete(c *gin.Context) {
|
|||||||
|
|
||||||
// CreateLog 创建设备管理-操作记录
|
// CreateLog 创建设备管理-操作记录
|
||||||
func (e MmMachineLog) CreateLog(c *gin.Context) {
|
func (e MmMachineLog) CreateLog(c *gin.Context) {
|
||||||
|
logger.Debug("创建设备管理-操作记录")
|
||||||
req := dto.MmMachineLogInsertReq{}
|
req := dto.MmMachineLogInsertReq{}
|
||||||
s := service.MmMachineLog{}
|
s := service.MmMachineLog{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
@ -210,14 +213,16 @@ func (e MmMachineLog) CreateLog(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
content, err := s.InsertLog(&req)
|
respData, err := s.InsertLog(&req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Logger.Errorf(fmt.Sprintf("创建设备管理-操作记录失败,\r\n失败信息 %s", err.Error()))
|
e.Logger.Errorf(fmt.Sprintf("创建设备管理-操作记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
c.String(500, "")
|
c.String(500, "")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.String(http.StatusOK, content)
|
content, _ := json.Marshal(respData)
|
||||||
|
|
||||||
|
c.String(http.StatusOK, string(content))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearAll 清空设备管理-操作记录
|
// ClearAll 清空设备管理-操作记录
|
||||||
|
|||||||
239
app/admin/apis/mm_risk_log.go
Normal file
239
app/admin/apis/mm_risk_log.go
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
package apis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||||
|
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmRiskLog struct {
|
||||||
|
api.Api
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取设备风险记录列表
|
||||||
|
// @Summary 获取设备风险记录列表
|
||||||
|
// @Description 获取设备风险记录列表
|
||||||
|
// @Tags 设备风险记录
|
||||||
|
// @Param pageSize query int false "页条数"
|
||||||
|
// @Param pageIndex query int false "页码"
|
||||||
|
// @Success 200 {object} response.Response{data=response.Page{list=[]models.MmRiskLog}} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-risk-log [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmRiskLog) GetPage(c *gin.Context) {
|
||||||
|
req := dto.MmRiskLogGetPageReq{}
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
list := make([]models.MmRiskLog, 0)
|
||||||
|
var count int64
|
||||||
|
|
||||||
|
err = s.GetPage(&req, p, &list, &count)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取设备风险记录
|
||||||
|
// @Summary 获取设备风险记录
|
||||||
|
// @Description 获取设备风险记录
|
||||||
|
// @Tags 设备风险记录
|
||||||
|
// @Param id path int false "id"
|
||||||
|
// @Success 200 {object} response.Response{data=models.MmRiskLog} "{"code": 200, "data": [...]}"
|
||||||
|
// @Router /api/v1/mm-risk-log/{id} [get]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmRiskLog) Get(c *gin.Context) {
|
||||||
|
req := dto.MmRiskLogGetReq{}
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var object models.MmRiskLog
|
||||||
|
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
err = s.Get(&req, p, &object)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("获取设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(object, "查询成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建设备风险记录
|
||||||
|
// @Summary 创建设备风险记录
|
||||||
|
// @Description 创建设备风险记录
|
||||||
|
// @Tags 设备风险记录
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param data body dto.MmRiskLogInsertReq true "data"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||||
|
// @Router /api/v1/mm-risk-log [post]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmRiskLog) Insert(c *gin.Context) {
|
||||||
|
req := dto.MmRiskLogInsertReq{}
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 设置创建人
|
||||||
|
req.SetCreateBy(user.GetUserId(c))
|
||||||
|
|
||||||
|
err = s.Insert(&req)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("创建设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(req.GetId(), "创建成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改设备风险记录
|
||||||
|
// @Summary 修改设备风险记录
|
||||||
|
// @Description 修改设备风险记录
|
||||||
|
// @Tags 设备风险记录
|
||||||
|
// @Accept application/json
|
||||||
|
// @Product application/json
|
||||||
|
// @Param id path int true "id"
|
||||||
|
// @Param data body dto.MmRiskLogUpdateReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||||
|
// @Router /api/v1/mm-risk-log/{id} [put]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmRiskLog) Update(c *gin.Context) {
|
||||||
|
req := dto.MmRiskLogUpdateReq{}
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Update(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("修改设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "修改成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除设备风险记录
|
||||||
|
// @Summary 删除设备风险记录
|
||||||
|
// @Description 删除设备风险记录
|
||||||
|
// @Tags 设备风险记录
|
||||||
|
// @Param data body dto.MmRiskLogDeleteReq true "body"
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||||
|
// @Router /api/v1/mm-risk-log [delete]
|
||||||
|
// @Security Bearer
|
||||||
|
func (e MmRiskLog) Delete(c *gin.Context) {
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
req := dto.MmRiskLogDeleteReq{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// req.SetUpdateBy(user.GetUserId(c))
|
||||||
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
|
err = s.Remove(&req, p)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("删除设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(req.GetId(), "删除成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 创建或修改设备风险记录
|
||||||
|
func (e MmRiskLog) Save(c *gin.Context) {
|
||||||
|
logger.Info("Save")
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
req := dto.MmRiskLogBatchReq{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.Save(&req)
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("创建设备风险记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.OK(nil, "创建成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearAll 清空设备管理-操作记录
|
||||||
|
func (e MmRiskLog) ClearAll(c *gin.Context) {
|
||||||
|
s := service.MmRiskLog{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.ClearAll()
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Errorf(fmt.Sprintf("清空-操作记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "修改成功")
|
||||||
|
}
|
||||||
28
app/admin/models/mm_group.go
Normal file
28
app/admin/models/mm_group.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
|
||||||
|
"go-admin/common/models"
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmGroup struct {
|
||||||
|
models.Model
|
||||||
|
|
||||||
|
GroupName string `json:"groupName" gorm:"type:varchar(30);comment:分组名称"`
|
||||||
|
models.ModelTime
|
||||||
|
models.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (MmGroup) TableName() string {
|
||||||
|
return "mm_group"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmGroup) Generate() models.ActiveRecord {
|
||||||
|
o := *e
|
||||||
|
return &o
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmGroup) GetId() interface{} {
|
||||||
|
return e.Id
|
||||||
|
}
|
||||||
27
app/admin/models/mm_keyword.go
Normal file
27
app/admin/models/mm_keyword.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go-admin/common/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmKeyword struct {
|
||||||
|
models.Model
|
||||||
|
|
||||||
|
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-关键字限制 1-长度限制"`
|
||||||
|
Keyword string `json:"keyword" gorm:"type:varchar(255);comment:关键字"`
|
||||||
|
models.ModelTime
|
||||||
|
models.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (MmKeyword) TableName() string {
|
||||||
|
return "mm_keyword"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmKeyword) Generate() models.ActiveRecord {
|
||||||
|
o := *e
|
||||||
|
return &o
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmKeyword) GetId() interface{} {
|
||||||
|
return e.Id
|
||||||
|
}
|
||||||
@ -9,11 +9,16 @@ import (
|
|||||||
type MmMachine struct {
|
type MmMachine struct {
|
||||||
models.Model
|
models.Model
|
||||||
|
|
||||||
MachineId string `json:"machineId" gorm:"type:varchar(30);comment:设备id"`
|
MachineId string `json:"machineId" gorm:"type:varchar(30);comment:设备id"`
|
||||||
BiosId string `json:"biosId" gorm:"type:varchar(30);comment:设备biosid(绑定之后的id)"`
|
BiosId string `json:"biosId" gorm:"type:varchar(30);comment:设备biosid(绑定之后的id)"`
|
||||||
LastTime *time.Time `json:"lastTime" gorm:"type:datetime;comment:最后通讯时间"`
|
GroupId int `json:"groupId" gorm:"type:bigint;comment:分组id"`
|
||||||
Content string `json:"content" gorm:"type:text;comment:白名单内容"`
|
Description string `json:"description" gorm:"type:varchar(255);comment:描述"`
|
||||||
Status int `json:"status" gorm:"type:tinyint;comment:状态 0-掉线 1-在线"`
|
LastTime *time.Time `json:"lastTime" gorm:"type:datetime;comment:最后通讯时间"`
|
||||||
|
Content string `json:"content" gorm:"type:text;comment:白名单内容"`
|
||||||
|
GroupItems string `json:"groupItems" gorm:"type:text;comment:分组信息"`
|
||||||
|
Status int `json:"status" gorm:"type:tinyint;comment:状态 0-掉线 1-在线"`
|
||||||
|
TaskLimit int `json:"taskLimit" gorm:"type:int;comment:任务限制 1-限制 2-不限制"`
|
||||||
|
AppLimit int `json:"appLimit" gorm:"type:int;comment:应用限制 1-限制 2-不限制"`
|
||||||
models.ModelTime
|
models.ModelTime
|
||||||
models.ControlBy
|
models.ControlBy
|
||||||
}
|
}
|
||||||
|
|||||||
29
app/admin/models/mm_risk_log.go
Normal file
29
app/admin/models/mm_risk_log.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go-admin/common/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmRiskLog struct {
|
||||||
|
models.Model
|
||||||
|
|
||||||
|
MachineId string `json:"machine_id" gorm:"type:varchar(30);comment:机器ID"`
|
||||||
|
BiosId string `json:"bios_id" gorm:"type:varchar(50);comment:BIOS ID"`
|
||||||
|
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-关键字 1-长度限制"`
|
||||||
|
Content string `json:"content" gorm:"type:text;comment:内容"`
|
||||||
|
models.ModelTime
|
||||||
|
models.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (MmRiskLog) TableName() string {
|
||||||
|
return "mm_risk_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmRiskLog) Generate() models.ActiveRecord {
|
||||||
|
o := *e
|
||||||
|
return &o
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmRiskLog) GetId() interface{} {
|
||||||
|
return e.Id
|
||||||
|
}
|
||||||
@ -1,21 +1,20 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
||||||
"go-admin/common/models"
|
"go-admin/common/models"
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MmWhiteTemplate struct {
|
type MmWhiteTemplate struct {
|
||||||
models.Model
|
models.Model
|
||||||
|
|
||||||
Content string `json:"content" gorm:"type:text;comment:进程白名单内容"`
|
Type int `json:"type" gorm:"type:int;comment:白名单类型"`
|
||||||
models.ModelTime
|
Content string `json:"content" gorm:"type:text;comment:进程白名单内容"`
|
||||||
models.ControlBy
|
models.ModelTime
|
||||||
|
models.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (MmWhiteTemplate) TableName() string {
|
func (MmWhiteTemplate) TableName() string {
|
||||||
return "mm_white_template"
|
return "mm_white_template"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *MmWhiteTemplate) Generate() models.ActiveRecord {
|
func (e *MmWhiteTemplate) Generate() models.ActiveRecord {
|
||||||
|
|||||||
29
app/admin/router/mm_group.go
Normal file
29
app/admin/router/mm_group.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||||
|
|
||||||
|
"go-admin/app/admin/apis"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
"go-admin/common/middleware"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
routerCheckRole = append(routerCheckRole, registerMmGroupRouter)
|
||||||
|
}
|
||||||
|
|
||||||
|
// registerMmGroupRouter
|
||||||
|
func registerMmGroupRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
api := apis.MmGroup{}
|
||||||
|
r := v1.Group("/mm-group").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
{
|
||||||
|
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||||
|
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||||
|
r.POST("", api.Insert)
|
||||||
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
|
r.DELETE("", api.Delete)
|
||||||
|
}
|
||||||
|
|
||||||
|
v1.Group("/mm-group").GET("options", api.GetOptions)
|
||||||
|
}
|
||||||
28
app/admin/router/mm_keyword.go
Normal file
28
app/admin/router/mm_keyword.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||||
|
|
||||||
|
"go-admin/app/admin/apis"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
"go-admin/common/middleware"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
routerCheckRole = append(routerCheckRole, registerMmKeywordRouter)
|
||||||
|
}
|
||||||
|
|
||||||
|
// registerMmKeywordRouter
|
||||||
|
func registerMmKeywordRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
api := apis.MmKeyword{}
|
||||||
|
r := v1.Group("/mm-keyword").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
{
|
||||||
|
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||||
|
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||||
|
r.POST("", api.Insert)
|
||||||
|
r.POST("intervalBatch", api.InsertBatch)
|
||||||
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
|
r.DELETE("", api.Delete)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -24,7 +24,13 @@ func registerMmMachineRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMidd
|
|||||||
r.POST("", api.Insert)
|
r.POST("", api.Insert)
|
||||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
r.DELETE("", api.Delete)
|
r.DELETE("", api.Delete)
|
||||||
|
r.DELETE("clearAll", api.ClearAll)
|
||||||
r.PUT("batch", actions.PermissionAction(), api.UpdateBatch)
|
r.PUT("batch", actions.PermissionAction(), api.UpdateBatch)
|
||||||
|
r.PUT("limitBatch", actions.PermissionAction(), api.UpdateLimitBatch)
|
||||||
|
r.PUT("groupBatch", actions.PermissionAction(), api.UpdateGroupBatch)
|
||||||
|
r.PUT("descriptionBatch", actions.PermissionAction(), api.UpdateDescriptionBatch)
|
||||||
|
r.DELETE("uninstall", actions.PermissionAction(), api.Uninstall)
|
||||||
|
r.GET("intervalAccount", actions.PermissionAction(), api.QueryIntervalAccount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,6 +38,7 @@ func registerMmMachineRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMidd
|
|||||||
func registerMmMachineRouterNoRole(v1 *gin.RouterGroup) {
|
func registerMmMachineRouterNoRole(v1 *gin.RouterGroup) {
|
||||||
api := apis.MmMachine{}
|
api := apis.MmMachine{}
|
||||||
api2 := apis.MmMachineLog{}
|
api2 := apis.MmMachineLog{}
|
||||||
|
api3 := apis.MmKeyword{}
|
||||||
|
|
||||||
r := v1.Group("/mm-machine")
|
r := v1.Group("/mm-machine")
|
||||||
{
|
{
|
||||||
@ -41,5 +48,6 @@ func registerMmMachineRouterNoRole(v1 *gin.RouterGroup) {
|
|||||||
r.POST("machineWhite", api.UpdateMachineWhite) //修改机器白名单
|
r.POST("machineWhite", api.UpdateMachineWhite) //修改机器白名单
|
||||||
r.POST("machineLog", api2.CreateLog) //新增机器日志
|
r.POST("machineLog", api2.CreateLog) //新增机器日志
|
||||||
r.GET("checkMachine", api.CheckMachine) //占用设备编号
|
r.GET("checkMachine", api.CheckMachine) //占用设备编号
|
||||||
|
r.GET("keywords", api3.GetKeywords) //获取关键字列表
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
app/admin/router/mm_risk_log.go
Normal file
37
app/admin/router/mm_risk_log.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||||
|
|
||||||
|
"go-admin/app/admin/apis"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
"go-admin/common/middleware"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
routerCheckRole = append(routerCheckRole, registerMmRiskLogRouter)
|
||||||
|
routerNoCheckRole = append(routerNoCheckRole, registerMmRiskLogRouterNoCheck)
|
||||||
|
}
|
||||||
|
|
||||||
|
// registerMmRiskLogRouter
|
||||||
|
func registerMmRiskLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
api := apis.MmRiskLog{}
|
||||||
|
r := v1.Group("/mm-risk-log").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
{
|
||||||
|
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||||
|
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||||
|
r.POST("", api.Insert)
|
||||||
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
|
r.DELETE("", api.Delete)
|
||||||
|
r.DELETE("clear", api.ClearAll)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func registerMmRiskLogRouterNoCheck(v1 *gin.RouterGroup) {
|
||||||
|
api := apis.MmRiskLog{}
|
||||||
|
r := v1.Group("/mm-risk-log")
|
||||||
|
{
|
||||||
|
r.POST("/save", api.Save)
|
||||||
|
}
|
||||||
|
}
|
||||||
86
app/admin/service/dto/mm_group.go
Normal file
86
app/admin/service/dto/mm_group.go
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/common/dto"
|
||||||
|
common "go-admin/common/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmGroupGetPageReq struct {
|
||||||
|
dto.Pagination `search:"-"`
|
||||||
|
GroupName string `form:"groupName" search:"type:contains;column:group_name;table:mm_group" comment:"分组名称"`
|
||||||
|
MmGroupOrder
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmGroupOrder struct {
|
||||||
|
Id string `form:"idOrder" search:"type:order;column:id;table:mm_group"`
|
||||||
|
GroupName string `form:"groupNameOrder" search:"type:order;column:group_name;table:mm_group"`
|
||||||
|
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:mm_group"`
|
||||||
|
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:mm_group"`
|
||||||
|
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:mm_group"`
|
||||||
|
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:mm_group"`
|
||||||
|
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:mm_group"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MmGroupGetPageReq) GetNeedSearch() interface{} {
|
||||||
|
return *m
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmGroupOption struct {
|
||||||
|
Value int `json:"value"`
|
||||||
|
Label string `json:"label"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmGroupInsertReq struct {
|
||||||
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
|
GroupName string `json:"groupName" comment:"分组名称"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupInsertReq) Generate(model *models.MmGroup) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.GroupName = s.GroupName
|
||||||
|
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupInsertReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmGroupUpdateReq struct {
|
||||||
|
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||||
|
GroupName string `json:"groupName" comment:"分组名称"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupUpdateReq) Generate(model *models.MmGroup) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.GroupName = s.GroupName
|
||||||
|
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupUpdateReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmGroupGetReq 功能获取请求参数
|
||||||
|
type MmGroupGetReq struct {
|
||||||
|
Id int `uri:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupGetReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmGroupDeleteReq 功能删除请求参数
|
||||||
|
type MmGroupDeleteReq struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmGroupDeleteReq) GetId() interface{} {
|
||||||
|
return s.Ids
|
||||||
|
}
|
||||||
115
app/admin/service/dto/mm_keyword.go
Normal file
115
app/admin/service/dto/mm_keyword.go
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/common/dto"
|
||||||
|
common "go-admin/common/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmKeywordGetPageReq struct {
|
||||||
|
dto.Pagination `search:"-"`
|
||||||
|
Content string `form:"content" search:"type:contains;column:keyword;table:mm_keyword" comment:"关键字"`
|
||||||
|
MmKeywordOrder
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordOrder struct {
|
||||||
|
Id string `form:"idOrder" search:"type:order;column:id;table:mm_keyword"`
|
||||||
|
Type string `form:"typeOrder" search:"type:order;column:type;table:mm_keyword"`
|
||||||
|
Keyword string `form:"keywordOrder" search:"type:order;column:keyword;table:mm_keyword"`
|
||||||
|
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:mm_keyword"`
|
||||||
|
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:mm_keyword"`
|
||||||
|
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:mm_keyword"`
|
||||||
|
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:mm_keyword"`
|
||||||
|
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:mm_keyword"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MmKeywordGetPageReq) GetNeedSearch() interface{} {
|
||||||
|
return *m
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordInsertBatchReq struct {
|
||||||
|
Type int `json:"type" comment:"类型 1-长度限制 2-长度限制(忽略符号)"`
|
||||||
|
Start int `json:"start" comment:"开始位置"`
|
||||||
|
End int `json:"end" comment:"结束位置"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验请求参数
|
||||||
|
func (m *MmKeywordInsertBatchReq) Valid() error {
|
||||||
|
if m.Start <= 0 || m.End <= 0 {
|
||||||
|
return errors.New("不能小于0")
|
||||||
|
}
|
||||||
|
if m.Start > m.End {
|
||||||
|
return errors.New("起始数据不能大于结束数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordInsertReq struct {
|
||||||
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
|
Type int `json:"type" comment:"类型 0-关键字限制 1-长度限制"`
|
||||||
|
Keyword string `json:"keyword" comment:"关键字"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordInsertReq) Generate(model *models.MmKeyword) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.Type = s.Type
|
||||||
|
model.Keyword = s.Keyword
|
||||||
|
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordInsertReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordCacheResp struct {
|
||||||
|
Keywords []string `json:"k"`
|
||||||
|
Length []string `json:"l"`
|
||||||
|
LengthIgnore []string `json:"li"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordUpdateReq struct {
|
||||||
|
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||||
|
Type int `json:"type" comment:"类型 0-关键字限制 1-长度限制"`
|
||||||
|
Keyword string `json:"keyword" comment:"关键字"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordUpdateReq) Generate(model *models.MmKeyword) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.Type = s.Type
|
||||||
|
model.Keyword = s.Keyword
|
||||||
|
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordUpdateReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmKeywordGetReq 功能获取请求参数
|
||||||
|
type MmKeywordGetReq struct {
|
||||||
|
Id int `uri:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordGetReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmKeywordDeleteReq 功能删除请求参数
|
||||||
|
type MmKeywordDeleteReq struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmKeywordDeleteReq) GetId() interface{} {
|
||||||
|
return s.Ids
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmKeywordReq struct {
|
||||||
|
MachineId string `json:"machineId" form:"machineId" query:"machineId" comment:"机器id"`
|
||||||
|
}
|
||||||
@ -12,7 +12,8 @@ import (
|
|||||||
type MmMachineGetPageReq struct {
|
type MmMachineGetPageReq struct {
|
||||||
dto.Pagination `search:"-"`
|
dto.Pagination `search:"-"`
|
||||||
Status string `form:"status" search:"type:exact;column:status;table:mm_machine" comment:"状态 0-掉线 1-在线"`
|
Status string `form:"status" search:"type:exact;column:status;table:mm_machine" comment:"状态 0-掉线 1-在线"`
|
||||||
MmMachineOrder
|
GroupId int `form:"groupId" search:"-" comment:"分组id"`
|
||||||
|
ShowBind int `form:"showBind" search:"-" comment:"是否显示绑定 1-已绑定 2-未绑定"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MmMachineOrder struct {
|
type MmMachineOrder struct {
|
||||||
@ -34,12 +35,17 @@ func (m *MmMachineGetPageReq) GetNeedSearch() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MmMachineInsertReq struct {
|
type MmMachineInsertReq struct {
|
||||||
Id int `json:"-" comment:"主键id"` // 主键id
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
MachineId string `json:"machineId" comment:"设备id"`
|
MachineId string `json:"machineId" comment:"设备id"`
|
||||||
BiosId string `json:"biosId" comment:"设备biosid(绑定之后的id)"`
|
BiosId string `json:"biosId" comment:"设备biosid(绑定之后的id)"`
|
||||||
LastTime *time.Time `json:"lastTime" comment:"最后通讯时间"`
|
GroupId int `json:"groupId" comment:"组id"`
|
||||||
Content string `json:"content" comment:"白名单内容"`
|
Description string `json:"description" comment:"描述"`
|
||||||
Status int `json:"status" comment:"状态 0-掉线 1-在线"`
|
LastTime *time.Time `json:"lastTime" comment:"最后通讯时间"`
|
||||||
|
Content string `json:"content" comment:"白名单内容"`
|
||||||
|
GroupItems string `json:"groupItems" comment:"组策略内容"`
|
||||||
|
Status int `json:"status" comment:"状态 0-掉线 1-在线"`
|
||||||
|
TaskLimit int `json:"taskLimit" comment:"任务限制 1-限制 2-不限制"`
|
||||||
|
AppLimit int `json:"appLimit" comment:"应用限制 1-限制 2-不限制"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,10 +55,14 @@ func (s *MmMachineInsertReq) Generate(model *models.MmMachine) {
|
|||||||
}
|
}
|
||||||
model.MachineId = s.MachineId
|
model.MachineId = s.MachineId
|
||||||
model.BiosId = s.BiosId
|
model.BiosId = s.BiosId
|
||||||
|
model.GroupId = s.GroupId
|
||||||
|
model.Description = s.Description
|
||||||
model.Content = s.Content
|
model.Content = s.Content
|
||||||
model.Status = 0
|
model.Status = 0
|
||||||
|
model.GroupItems = s.GroupItems
|
||||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||||
|
model.TaskLimit = s.TaskLimit
|
||||||
|
model.AppLimit = s.AppLimit
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmMachineInsertReq) GetId() interface{} {
|
func (s *MmMachineInsertReq) GetId() interface{} {
|
||||||
@ -60,28 +70,74 @@ func (s *MmMachineInsertReq) GetId() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MmMachineUpdateReq struct {
|
type MmMachineUpdateReq struct {
|
||||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||||
MachineId string `json:"machineId" comment:"设备id"`
|
MachineId string `json:"machineId" comment:"设备id"`
|
||||||
BiosId string `json:"biosId" comment:"设备biosid(绑定之后的id)"`
|
BiosId string `json:"biosId" comment:"设备biosid(绑定之后的id)"`
|
||||||
LastTime *time.Time `json:"lastTime" comment:"最后通讯时间"`
|
GroupId int `json:"groupId" comment:"组id"`
|
||||||
Content string `json:"content" comment:"白名单内容"`
|
Description string `json:"description" comment:"描述"`
|
||||||
Status int `json:"status" comment:"状态 0-掉线 1-在线"`
|
LastTime *time.Time `json:"lastTime" comment:"最后通讯时间"`
|
||||||
|
Content string `json:"content" comment:"白名单内容"`
|
||||||
|
GroupItems string `json:"groupItems" comment:"组策略内容"`
|
||||||
|
Status int `json:"status" comment:"状态 0-掉线 1-在线"`
|
||||||
|
TaskLimit int `json:"taskLimit" comment:"任务限制 1-限制 2-不限制"`
|
||||||
|
AppLimit int `json:"appLimit" comment:"应用限制 1-限制 2-不限制"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
type MmMachineUpdateBatchReq struct {
|
type MmMachineUpdateBatchReq struct {
|
||||||
|
Type int `json:"type" comment:"操作类型 0-进程白名单 1-应用白名单"`
|
||||||
Ids []int `json:"ids"`
|
Ids []int `json:"ids"`
|
||||||
Content string `json:"content" comment:"白名单内容"`
|
Content string `json:"content" comment:"白名单内容"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MmMachineUpdateGroupBatchReq struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
GroupId int `json:"groupId" comment:"组id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmMachineUpdateDescriptionBatchReq struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
Description string `json:"description" comment:"描述"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmMachineUpdateDescriptionBatchReq) Validate() error {
|
||||||
|
if len(s.Ids) == 0 {
|
||||||
|
return errors.New("请选择需要修改的数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmMachineUpdateGroupBatchReq) Validate() error {
|
||||||
|
if len(s.Ids) == 0 {
|
||||||
|
return errors.New("请选择要修改的数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *MmMachineUpdateBatchReq) Validate() error {
|
func (s *MmMachineUpdateBatchReq) Validate() error {
|
||||||
if len(s.Ids) == 0 {
|
if len(s.Ids) == 0 {
|
||||||
return errors.New("请选择要修改的数据")
|
return errors.New("请选择要修改的数据")
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.Content == "" {
|
if s.Type > 1 || s.Type < 0 {
|
||||||
return errors.New("请输入白名单内容")
|
return errors.New("操作类型错误")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmMachineUpdateLimitBatchReq struct {
|
||||||
|
Type int `json:"type" comment:"操作类型 0-进程白名单 1-应用白名单"`
|
||||||
|
// All int `json:"all" comment:"是否全量更新 0-否 1-是"`
|
||||||
|
Ids []int `json:"ids" comment:"主键id"`
|
||||||
|
Limit int `json:"limit" comment:"任务限制 1-限制 2-不限制 3-只记录(只有进程限制有)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmMachineUpdateLimitBatchReq) Validate() error {
|
||||||
|
if len(s.Ids) == 0 {
|
||||||
|
return errors.New("请选择要修改的数据")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -98,7 +154,7 @@ type MmMachineCheckMachineReq struct {
|
|||||||
|
|
||||||
type Option struct {
|
type Option struct {
|
||||||
Label string `json:"label"`
|
Label string `json:"label"`
|
||||||
Value int `json:"value"`
|
Value string `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MmMachineUpdateWhiteReq struct {
|
type MmMachineUpdateWhiteReq struct {
|
||||||
@ -113,7 +169,12 @@ func (s *MmMachineUpdateReq) Generate(model *models.MmMachine) {
|
|||||||
}
|
}
|
||||||
model.MachineId = s.MachineId
|
model.MachineId = s.MachineId
|
||||||
model.BiosId = s.BiosId
|
model.BiosId = s.BiosId
|
||||||
|
model.GroupId = s.GroupId
|
||||||
|
model.Description = s.Description
|
||||||
model.Content = s.Content
|
model.Content = s.Content
|
||||||
|
model.GroupItems = s.GroupItems
|
||||||
|
model.TaskLimit = s.TaskLimit
|
||||||
|
model.AppLimit = s.AppLimit
|
||||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@ type MmMachineLogGetPageReq struct {
|
|||||||
MachineId string `form:"machineId" search:"type:exact;column:machine_id;table:mm_machine_log" comment:"机器编号"`
|
MachineId string `form:"machineId" search:"type:exact;column:machine_id;table:mm_machine_log" comment:"机器编号"`
|
||||||
BiosId string `form:"biosId" search:"type:exact;column:bios_id;table:mm_machine_log" comment:"客户端唯一码"`
|
BiosId string `form:"biosId" search:"type:exact;column:bios_id;table:mm_machine_log" comment:"客户端唯一码"`
|
||||||
Type string `form:"type" search:"type:exact;column:type;table:mm_machine_log" comment:"日志类型(1-软件运行,2-软件安装,3-软件卸载,4-退出软件,5-修改机器号,6-进程拦截,7-心跳请求"`
|
Type string `form:"type" search:"type:exact;column:type;table:mm_machine_log" comment:"日志类型(1-软件运行,2-软件安装,3-软件卸载,4-退出软件,5-修改机器号,6-进程拦截,7-心跳请求"`
|
||||||
|
Remark string `form:"remark" search:"type:contains;column:remark;table:mm_machine_log" comment:"备注"`
|
||||||
MmMachineLogOrder
|
MmMachineLogOrder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +32,19 @@ func (m *MmMachineLogGetPageReq) GetNeedSearch() interface{} {
|
|||||||
return *m
|
return *m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MmMachineHeartResp struct {
|
||||||
|
Code int `json:"code" comment:"状态码 0-成功 1-失败"`
|
||||||
|
Msg string `json:"msg" comment:"消息"`
|
||||||
|
Content string `json:"c" comment:"内容"`
|
||||||
|
GroupItems string `json:"g" comment:"状态"`
|
||||||
|
TaskLimit int `json:"tl" comment:"进程限制 1-限制 2-不限制"`
|
||||||
|
AppLimit int `json:"al" comment:"应用限制 1-限制 2-不限制"`
|
||||||
|
KeywordLimit int `json:"kl" comment:"关键字限制 1-限制 2-不限制"`
|
||||||
|
HeartInterval int `json:"hi" comment:"心跳间隔(秒)"`
|
||||||
|
KeywordsInterval int `json:"ki" comment:"关键字间隔(秒)"`
|
||||||
|
InterceptInterval float64 `json:"ii" comment:"拦截间隔(小时)"`
|
||||||
|
}
|
||||||
|
|
||||||
type MmMachineLogInsertReq struct {
|
type MmMachineLogInsertReq struct {
|
||||||
Id int `json:"-" comment:"主键id"` // 主键id
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
MachineId string `json:"machineId" form:"machineId" comment:"机器编号"`
|
MachineId string `json:"machineId" form:"machineId" comment:"机器编号"`
|
||||||
|
|||||||
121
app/admin/service/dto/mm_risk_log.go
Normal file
121
app/admin/service/dto/mm_risk_log.go
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/common/dto"
|
||||||
|
common "go-admin/common/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmRiskLogGetPageReq struct {
|
||||||
|
dto.Pagination `search:"-"`
|
||||||
|
Content string `form:"content" search:"type:contains;column:content;table:mm_risk_log" comment:"关键字"`
|
||||||
|
MmRiskLogOrder
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmRiskLogOrder struct {
|
||||||
|
Id string `form:"idOrder" search:"type:order;column:id;table:mm_risk_log"`
|
||||||
|
Type string `form:"typeOrder" search:"type:order;column:type;table:mm_risk_log"`
|
||||||
|
Content string `form:"contentOrder" search:"type:order;column:content;table:mm_risk_log"`
|
||||||
|
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:mm_risk_log"`
|
||||||
|
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:mm_risk_log"`
|
||||||
|
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:mm_risk_log"`
|
||||||
|
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:mm_risk_log"`
|
||||||
|
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:mm_risk_log"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MmRiskLogGetPageReq) GetNeedSearch() interface{} {
|
||||||
|
return *m
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmRiskLogBatchReq struct {
|
||||||
|
MachineId string `json:"machineId" comment:"机器id"`
|
||||||
|
BiosId string `json:"biosId" comment:"bios id"`
|
||||||
|
Contents []MmRiskLogContentReq `json:"content" comment:"内容"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmRiskLogContentReq struct {
|
||||||
|
Type int `json:"type" comment:"类型 0-关键字 1-长度限制"`
|
||||||
|
Content string `json:"content" comment:"内容"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmRiskLogInsertReq struct {
|
||||||
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
|
MachineId string `json:"machineId" comment:"机器id"`
|
||||||
|
BiosId string `json:"biosId" comment:"bios id"`
|
||||||
|
Type int `json:"type" comment:"类型 0-关键字 1-长度限制"`
|
||||||
|
Content string `json:"content" comment:"内容"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogInsertReq) Valid() error {
|
||||||
|
if s.MachineId == "" {
|
||||||
|
return errors.New("机器id不能为空")
|
||||||
|
}
|
||||||
|
if s.BiosId == "" {
|
||||||
|
return errors.New("唯一码不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.Type < 0 || s.Type > 1 {
|
||||||
|
return errors.New("类型错误")
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.Content == "" {
|
||||||
|
return errors.New("内容不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogInsertReq) Generate(model *models.MmRiskLog) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.Type = s.Type
|
||||||
|
model.Content = s.Content
|
||||||
|
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogInsertReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
type MmRiskLogUpdateReq struct {
|
||||||
|
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||||
|
MachineId string `json:"machineId" comment:"机器id"`
|
||||||
|
BiosId string `json:"biosId" comment:"bios id"`
|
||||||
|
Type int `json:"type" comment:"类型 0-关键字 1-长度限制"`
|
||||||
|
Content string `json:"content" comment:"内容"`
|
||||||
|
common.ControlBy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogUpdateReq) Generate(model *models.MmRiskLog) {
|
||||||
|
if s.Id == 0 {
|
||||||
|
model.Model = common.Model{Id: s.Id}
|
||||||
|
}
|
||||||
|
model.Type = s.Type
|
||||||
|
model.Content = s.Content
|
||||||
|
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogUpdateReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmRiskLogGetReq 功能获取请求参数
|
||||||
|
type MmRiskLogGetReq struct {
|
||||||
|
Id int `uri:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogGetReq) GetId() interface{} {
|
||||||
|
return s.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// MmRiskLogDeleteReq 功能删除请求参数
|
||||||
|
type MmRiskLogDeleteReq struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *MmRiskLogDeleteReq) GetId() interface{} {
|
||||||
|
return s.Ids
|
||||||
|
}
|
||||||
@ -1,27 +1,25 @@
|
|||||||
package dto
|
package dto
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
"go-admin/common/dto"
|
"go-admin/common/dto"
|
||||||
common "go-admin/common/models"
|
common "go-admin/common/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MmWhiteTemplateGetPageReq struct {
|
type MmWhiteTemplateGetPageReq struct {
|
||||||
dto.Pagination `search:"-"`
|
dto.Pagination `search:"-"`
|
||||||
Content string `form:"content" search:"type:contains;column:content;table:mm_white_template" comment:"进程白名单内容"`
|
Content string `form:"content" search:"type:contains;column:content;table:mm_white_template" comment:"进程白名单内容"`
|
||||||
MmWhiteTemplateOrder
|
MmWhiteTemplateOrder
|
||||||
}
|
}
|
||||||
|
|
||||||
type MmWhiteTemplateOrder struct {
|
type MmWhiteTemplateOrder struct {
|
||||||
Id string `form:"idOrder" search:"type:order;column:id;table:mm_white_template"`
|
Id string `form:"idOrder" search:"type:order;column:id;table:mm_white_template"`
|
||||||
Content string `form:"contentOrder" search:"type:order;column:content;table:mm_white_template"`
|
Content string `form:"contentOrder" search:"type:order;column:content;table:mm_white_template"`
|
||||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:mm_white_template"`
|
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:mm_white_template"`
|
||||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:mm_white_template"`
|
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:mm_white_template"`
|
||||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:mm_white_template"`
|
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:mm_white_template"`
|
||||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:mm_white_template"`
|
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:mm_white_template"`
|
||||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:mm_white_template"`
|
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:mm_white_template"`
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MmWhiteTemplateGetPageReq) GetNeedSearch() interface{} {
|
func (m *MmWhiteTemplateGetPageReq) GetNeedSearch() interface{} {
|
||||||
@ -29,17 +27,17 @@ func (m *MmWhiteTemplateGetPageReq) GetNeedSearch() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MmWhiteTemplateInsertReq struct {
|
type MmWhiteTemplateInsertReq struct {
|
||||||
Id int `json:"-" comment:"主键id"` // 主键id
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
Content string `json:"content" comment:"进程白名单内容"`
|
Content string `json:"content" comment:"进程白名单内容"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmWhiteTemplateInsertReq) Generate(model *models.MmWhiteTemplate) {
|
func (s *MmWhiteTemplateInsertReq) Generate(model *models.MmWhiteTemplate) {
|
||||||
if s.Id == 0 {
|
if s.Id == 0 {
|
||||||
model.Model = common.Model{ Id: s.Id }
|
model.Model = common.Model{Id: s.Id}
|
||||||
}
|
}
|
||||||
model.Content = s.Content
|
model.Content = s.Content
|
||||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmWhiteTemplateInsertReq) GetId() interface{} {
|
func (s *MmWhiteTemplateInsertReq) GetId() interface{} {
|
||||||
@ -47,17 +45,18 @@ func (s *MmWhiteTemplateInsertReq) GetId() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MmWhiteTemplateUpdateReq struct {
|
type MmWhiteTemplateUpdateReq struct {
|
||||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||||
Content string `json:"content" comment:"进程白名单内容"`
|
Type int `json:"type" comment:"类型 0-进程白名单 1-应用白名单"`
|
||||||
common.ControlBy
|
Content string `json:"content" comment:"进程白名单内容"`
|
||||||
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmWhiteTemplateUpdateReq) Generate(model *models.MmWhiteTemplate) {
|
func (s *MmWhiteTemplateUpdateReq) Generate(model *models.MmWhiteTemplate) {
|
||||||
if s.Id == 0 {
|
if s.Id == 0 {
|
||||||
model.Model = common.Model{ Id: s.Id }
|
model.Model = common.Model{Id: s.Id}
|
||||||
}
|
}
|
||||||
model.Content = s.Content
|
model.Content = s.Content
|
||||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmWhiteTemplateUpdateReq) GetId() interface{} {
|
func (s *MmWhiteTemplateUpdateReq) GetId() interface{} {
|
||||||
@ -66,8 +65,9 @@ func (s *MmWhiteTemplateUpdateReq) GetId() interface{} {
|
|||||||
|
|
||||||
// MmWhiteTemplateGetReq 功能获取请求参数
|
// MmWhiteTemplateGetReq 功能获取请求参数
|
||||||
type MmWhiteTemplateGetReq struct {
|
type MmWhiteTemplateGetReq struct {
|
||||||
Id int `uri:"id"`
|
Id int `uri:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MmWhiteTemplateGetReq) GetId() interface{} {
|
func (s *MmWhiteTemplateGetReq) GetId() interface{} {
|
||||||
return s.Id
|
return s.Id
|
||||||
}
|
}
|
||||||
|
|||||||
144
app/admin/service/mm_group.go
Normal file
144
app/admin/service/mm_group.go
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
cDto "go-admin/common/dto"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmGroup struct {
|
||||||
|
service.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取MmGroup列表
|
||||||
|
func (e *MmGroup) GetPage(c *dto.MmGroupGetPageReq, p *actions.DataPermission, list *[]models.MmGroup, count *int64) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmGroup
|
||||||
|
|
||||||
|
err = e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
cDto.MakeCondition(c.GetNeedSearch()),
|
||||||
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
Find(list).Limit(-1).Offset(-1).
|
||||||
|
Count(count).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmGroupService GetPage error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取MmGroup对象
|
||||||
|
func (e *MmGroup) Get(d *dto.MmGroupGetReq, p *actions.DataPermission, model *models.MmGroup) error {
|
||||||
|
var data models.MmGroup
|
||||||
|
|
||||||
|
err := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
First(model, d.GetId()).Error
|
||||||
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
err = errors.New("查看对象不存在或无权查看")
|
||||||
|
e.Log.Errorf("Service GetMmGroup error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("db error:%s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建MmGroup对象
|
||||||
|
func (e *MmGroup) Insert(c *dto.MmGroupInsertReq) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmGroup
|
||||||
|
var count int64
|
||||||
|
c.Generate(&data)
|
||||||
|
|
||||||
|
e.Orm.Model(data).Where("group_name = ?", data.GroupName).Count(&count)
|
||||||
|
|
||||||
|
if count > 0 {
|
||||||
|
return errors.New("分组名称已存在")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = e.Orm.Create(&data).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmGroupService Insert error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改MmGroup对象
|
||||||
|
func (e *MmGroup) Update(c *dto.MmGroupUpdateReq, p *actions.DataPermission) error {
|
||||||
|
var err error
|
||||||
|
var data = models.MmGroup{}
|
||||||
|
var count int64
|
||||||
|
e.Orm.Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).First(&data, c.GetId())
|
||||||
|
c.Generate(&data)
|
||||||
|
|
||||||
|
e.Orm.Model(data).Where("group_name = ? and id <> ?", data.GroupName, c.Id).Count(&count)
|
||||||
|
|
||||||
|
if count > 0 {
|
||||||
|
return errors.New("分组名称已存在")
|
||||||
|
}
|
||||||
|
|
||||||
|
db := e.Orm.Save(&data)
|
||||||
|
if err = db.Error; err != nil {
|
||||||
|
e.Log.Errorf("MmGroupService Save error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权更新该数据")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除MmGroup
|
||||||
|
func (e *MmGroup) Remove(d *dto.MmGroupDeleteReq, p *actions.DataPermission) error {
|
||||||
|
var data models.MmGroup
|
||||||
|
|
||||||
|
db := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).Delete(&data, d.GetId())
|
||||||
|
if err := db.Error; err != nil {
|
||||||
|
e.Log.Errorf("Service RemoveMmGroup error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权删除该数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
e.Orm.Model(models.MmMachine{}).Where("group_id in ?", d.Ids).Update("group_id", 0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOptions 获取MmGroup选项
|
||||||
|
func (e *MmGroup) GetOptions(list *[]dto.MmGroupOption) error {
|
||||||
|
var datas []models.MmGroup
|
||||||
|
if err := e.Orm.Model(models.MmGroup{}).Find(&datas).Error; err != nil {
|
||||||
|
e.Log.Errorf("Service GetMmGroupOptions error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, data := range datas {
|
||||||
|
var option dto.MmGroupOption
|
||||||
|
option.Value = data.Id
|
||||||
|
option.Label = data.GroupName
|
||||||
|
*list = append(*list, option)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
196
app/admin/service/mm_keyword.go
Normal file
196
app/admin/service/mm_keyword.go
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
cDto "go-admin/common/dto"
|
||||||
|
"go-admin/common/enums"
|
||||||
|
"go-admin/common/helper"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmKeyword struct {
|
||||||
|
service.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取MmKeyword列表
|
||||||
|
func (e *MmKeyword) GetPage(c *dto.MmKeywordGetPageReq, p *actions.DataPermission, list *[]models.MmKeyword, count *int64) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmKeyword
|
||||||
|
|
||||||
|
err = e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
cDto.MakeCondition(c.GetNeedSearch()),
|
||||||
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
Find(list).Limit(-1).Offset(-1).
|
||||||
|
Count(count).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmKeywordService GetPage error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取MmKeyword对象
|
||||||
|
func (e *MmKeyword) Get(d *dto.MmKeywordGetReq, p *actions.DataPermission, model *models.MmKeyword) error {
|
||||||
|
var data models.MmKeyword
|
||||||
|
|
||||||
|
err := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
First(model, d.GetId()).Error
|
||||||
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
err = errors.New("查看对象不存在或无权查看")
|
||||||
|
e.Log.Errorf("Service GetMmKeyword error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("db error:%s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建MmKeyword对象
|
||||||
|
func (e *MmKeyword) Insert(c *dto.MmKeywordInsertReq) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmKeyword
|
||||||
|
c.Generate(&data)
|
||||||
|
err = e.Orm.Create(&data).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmKeywordService Insert error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
e.ReloadMachineCache(true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据区间生成
|
||||||
|
func (e *MmKeyword) InsertBatch(req *dto.MmKeywordInsertBatchReq) error {
|
||||||
|
datas := make([]models.MmKeyword, 0)
|
||||||
|
|
||||||
|
for i := req.Start; i <= req.End; i++ {
|
||||||
|
data := models.MmKeyword{
|
||||||
|
Type: req.Type,
|
||||||
|
Keyword: strconv.Itoa(i),
|
||||||
|
}
|
||||||
|
|
||||||
|
datas = append(datas, data)
|
||||||
|
}
|
||||||
|
err := e.Orm.Create(&datas).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmKeywordService InsertBatch error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
e.ReloadMachineCache(true)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新加载变更缓存
|
||||||
|
// isAll 是否全部重新加载
|
||||||
|
func (e *MmKeyword) ReloadMachineCache(isAll bool) {
|
||||||
|
var datas []models.MmKeyword
|
||||||
|
cache := dto.MmKeywordCacheResp{}
|
||||||
|
e.Orm.Model(models.MmKeyword{}).Select("type", "keyword").Find(&datas)
|
||||||
|
machineIds := make([]string, 0)
|
||||||
|
e.Orm.Model(models.MmMachine{}).Select("machine_id").Find(&machineIds)
|
||||||
|
for _, item := range datas {
|
||||||
|
switch item.Type {
|
||||||
|
case 0:
|
||||||
|
cache.Keywords = append(cache.Keywords, item.Keyword)
|
||||||
|
case 1:
|
||||||
|
cache.Length = append(cache.Length, item.Keyword)
|
||||||
|
case 2:
|
||||||
|
cache.LengthIgnore = append(cache.LengthIgnore, item.Keyword)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bytes, _ := json.Marshal(cache)
|
||||||
|
helper.DefaultRedis.SetString(enums.Keywords, string(bytes))
|
||||||
|
|
||||||
|
if isAll && (len(cache.Keywords) > 0 || len(cache.Length) > 0 || len(cache.LengthIgnore) > 0) {
|
||||||
|
|
||||||
|
for _, machineId := range machineIds {
|
||||||
|
key := fmt.Sprintf(enums.MachineKeywords, machineId)
|
||||||
|
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, string(bytes), time.Hour*3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改MmKeyword对象
|
||||||
|
func (e *MmKeyword) Update(c *dto.MmKeywordUpdateReq, p *actions.DataPermission) error {
|
||||||
|
var err error
|
||||||
|
var data = models.MmKeyword{}
|
||||||
|
e.Orm.Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).First(&data, c.GetId())
|
||||||
|
c.Generate(&data)
|
||||||
|
|
||||||
|
db := e.Orm.Save(&data)
|
||||||
|
if err = db.Error; err != nil {
|
||||||
|
e.Log.Errorf("MmKeywordService Save error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权更新该数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
e.ReloadMachineCache(true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除MmKeyword
|
||||||
|
func (e *MmKeyword) Remove(d *dto.MmKeywordDeleteReq, p *actions.DataPermission) error {
|
||||||
|
var data models.MmKeyword
|
||||||
|
|
||||||
|
db := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).Delete(&data, d.GetId())
|
||||||
|
if err := db.Error; err != nil {
|
||||||
|
e.Log.Errorf("Service RemoveMmKeyword error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权删除该数据")
|
||||||
|
}
|
||||||
|
|
||||||
|
e.ReloadMachineCache(true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmKeyword) GetKeywords(machineId string) (string, error) {
|
||||||
|
result := ""
|
||||||
|
|
||||||
|
if machineId == "" {
|
||||||
|
key := fmt.Sprintf(enums.Keywords)
|
||||||
|
result, _ = helper.DefaultRedis.GetString(key)
|
||||||
|
|
||||||
|
logger.Infof("没有获取keywords缓存%s", key)
|
||||||
|
} else {
|
||||||
|
key := fmt.Sprintf(enums.MachineKeywords, machineId)
|
||||||
|
result, _ = helper.DefaultRedis.GetString(key)
|
||||||
|
|
||||||
|
if err := helper.DefaultRedis.DeleteString(key); err != nil {
|
||||||
|
logger.Infof("删除keywords缓存失败%v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
@ -13,6 +14,8 @@ import (
|
|||||||
"go-admin/app/admin/service/dto"
|
"go-admin/app/admin/service/dto"
|
||||||
"go-admin/common/actions"
|
"go-admin/common/actions"
|
||||||
cDto "go-admin/common/dto"
|
cDto "go-admin/common/dto"
|
||||||
|
"go-admin/common/enums"
|
||||||
|
"go-admin/common/helper"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MmMachine struct {
|
type MmMachine struct {
|
||||||
@ -24,12 +27,28 @@ func (e *MmMachine) GetPage(c *dto.MmMachineGetPageReq, p *actions.DataPermissio
|
|||||||
var err error
|
var err error
|
||||||
var data models.MmMachine
|
var data models.MmMachine
|
||||||
|
|
||||||
err = e.Orm.Model(&data).
|
query := e.Orm.Model(&data).
|
||||||
|
Order(" LENGTH(machine_id) asc, machine_id asc").
|
||||||
Scopes(
|
Scopes(
|
||||||
cDto.MakeCondition(c.GetNeedSearch()),
|
cDto.MakeCondition(c.GetNeedSearch()),
|
||||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).
|
)
|
||||||
|
|
||||||
|
if c.GroupId > 0 {
|
||||||
|
query = query.Where("group_id =?", c.GroupId)
|
||||||
|
} else if c.GroupId == -1 {
|
||||||
|
query = query.Where("group_id = 0")
|
||||||
|
}
|
||||||
|
|
||||||
|
switch c.ShowBind {
|
||||||
|
case 1:
|
||||||
|
query = query.Where("bios_id <> ''")
|
||||||
|
case 2:
|
||||||
|
query = query.Where("bios_id = '' or bios_id is null")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = query.
|
||||||
Find(list).Limit(-1).Offset(-1).
|
Find(list).Limit(-1).Offset(-1).
|
||||||
Count(count).Error
|
Count(count).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -64,6 +83,11 @@ func (e *MmMachine) Get(d *dto.MmMachineGetReq, p *actions.DataPermission, model
|
|||||||
func (e *MmMachine) Insert(c *dto.MmMachineInsertReq) error {
|
func (e *MmMachine) Insert(c *dto.MmMachineInsertReq) error {
|
||||||
var err error
|
var err error
|
||||||
var data models.MmMachine
|
var data models.MmMachine
|
||||||
|
result := getDistictApp(c.Content)
|
||||||
|
c.Content = strings.Join(result, "\n")
|
||||||
|
groupItems := getDistictApp(c.GroupItems)
|
||||||
|
c.GroupItems = strings.Join(groupItems, "\n")
|
||||||
|
|
||||||
c.Generate(&data)
|
c.Generate(&data)
|
||||||
|
|
||||||
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||||
@ -87,6 +111,28 @@ func (e *MmMachine) Insert(c *dto.MmMachineInsertReq) error {
|
|||||||
e.Log.Errorf("MmMachineService Insert error:%s \r\n", err)
|
e.Log.Errorf("MmMachineService Insert error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//保存更新缓存
|
||||||
|
if data.MachineId != "" {
|
||||||
|
content := c.Content
|
||||||
|
groupItems := c.GroupItems
|
||||||
|
key := fmt.Sprintf(enums.MachineContentKey, data.MachineId)
|
||||||
|
key2 := fmt.Sprintf(enums.MachineGroupKey, data.MachineId)
|
||||||
|
var templates []models.MmWhiteTemplate
|
||||||
|
|
||||||
|
e.Orm.Model(models.MmWhiteTemplate{}).Find(&templates)
|
||||||
|
|
||||||
|
for _, item := range templates {
|
||||||
|
if item.Type == 0 {
|
||||||
|
content = item.Content
|
||||||
|
} else if item.Type == 1 {
|
||||||
|
groupItems = item.Content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, content, time.Hour*3)
|
||||||
|
helper.DefaultRedis.SetStringExpire(key2, groupItems, time.Hour*3)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +140,12 @@ func (e *MmMachine) Insert(c *dto.MmMachineInsertReq) error {
|
|||||||
func (e *MmMachine) Update(c *dto.MmMachineUpdateReq, p *actions.DataPermission) error {
|
func (e *MmMachine) Update(c *dto.MmMachineUpdateReq, p *actions.DataPermission) error {
|
||||||
var err error
|
var err error
|
||||||
var data = models.MmMachine{}
|
var data = models.MmMachine{}
|
||||||
|
|
||||||
|
result := getDistictApp(c.Content)
|
||||||
|
c.Content = strings.Join(result, "\n")
|
||||||
|
groupItems := getDistictApp(c.GroupItems)
|
||||||
|
c.GroupItems = strings.Join(groupItems, "\n")
|
||||||
|
|
||||||
e.Orm.Scopes(
|
e.Orm.Scopes(
|
||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).First(&data, c.GetId())
|
).First(&data, c.GetId())
|
||||||
@ -122,16 +174,120 @@ func (e *MmMachine) Update(c *dto.MmMachineUpdateReq, p *actions.DataPermission)
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//保存更新缓存
|
||||||
|
if data.MachineId != "" {
|
||||||
|
content := c.Content
|
||||||
|
groupItems := c.GroupItems
|
||||||
|
key := fmt.Sprintf(enums.MachineContentKey, data.MachineId)
|
||||||
|
key2 := fmt.Sprintf(enums.MachineGroupKey, data.MachineId)
|
||||||
|
|
||||||
|
if data.Content == "" || data.GroupItems == "" {
|
||||||
|
var templates []models.MmWhiteTemplate
|
||||||
|
|
||||||
|
e.Orm.Model(models.MmWhiteTemplate{}).Find(&templates)
|
||||||
|
|
||||||
|
for _, item := range templates {
|
||||||
|
if item.Type == 0 && content == "" {
|
||||||
|
content = item.Content
|
||||||
|
} else if item.Type == 1 && groupItems == "" {
|
||||||
|
groupItems = item.Content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, content, time.Hour*3)
|
||||||
|
helper.DefaultRedis.SetStringExpire(key2, groupItems, time.Hour*3)
|
||||||
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *MmMachine) UpdateLimitBatch(req *dto.MmMachineUpdateLimitBatchReq, p *actions.DataPermission) error {
|
||||||
|
mapData := map[string]interface{}{}
|
||||||
|
|
||||||
|
if req.Type == 0 && req.Limit > 0 {
|
||||||
|
mapData["task_limit"] = req.Limit
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Type == 1 && req.Limit > 0 {
|
||||||
|
mapData["app_limit"] = req.Limit
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(mapData) == 0 {
|
||||||
|
return errors.New("无更新内容")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(req.Ids) > 0 {
|
||||||
|
if err := e.Orm.Model(&models.MmMachine{}).Where("id in (?)", req.Ids).Updates(mapData).Error; err != nil {
|
||||||
|
e.Log.Errorf("Service UpdateLimitBatch error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 批量修改白名单
|
// 批量修改白名单
|
||||||
func (e *MmMachine) UpdateBatch(req *dto.MmMachineUpdateBatchReq, p *actions.DataPermission) error {
|
func (e *MmMachine) UpdateBatch(req *dto.MmMachineUpdateBatchReq, p *actions.DataPermission) error {
|
||||||
if err := e.Orm.Model(&models.MmMachine{}).Where("id in (?)", req.Ids).Updates(map[string]interface{}{"content": req.Content, "update_by": req.UpdateBy, "updated_at": time.Now()}).Error; err != nil {
|
machineIds := make([]string, 0)
|
||||||
|
result := getDistictApp(req.Content)
|
||||||
|
req.Content = strings.Join(result, "\n")
|
||||||
|
mapData := map[string]interface{}{
|
||||||
|
"update_by": req.UpdateBy,
|
||||||
|
"updated_at": time.Now(),
|
||||||
|
}
|
||||||
|
|
||||||
|
switch req.Type {
|
||||||
|
case 0:
|
||||||
|
mapData["content"] = req.Content
|
||||||
|
case 1:
|
||||||
|
mapData["group_items"] = req.Content
|
||||||
|
default:
|
||||||
|
return errors.New("类型不存在")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.Orm.Model(&models.MmMachine{}).Where("id in (?)", req.Ids).Updates(mapData).Error; err != nil {
|
||||||
e.Log.Errorf("Service UpdateBatch error:%s \r\n", err)
|
e.Log.Errorf("Service UpdateBatch error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e.Orm.Model(&models.MmWhiteTemplate{}).Where("id in ?", req.Ids).Select("machine_id").Find(&machineIds)
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case req.Type == 0:
|
||||||
|
var content string
|
||||||
|
if req.Content == "" {
|
||||||
|
var template models.MmWhiteTemplate
|
||||||
|
e.Orm.Model(template).Where("type = 0").First(&template)
|
||||||
|
content = template.Content
|
||||||
|
}
|
||||||
|
for _, item := range machineIds {
|
||||||
|
key := fmt.Sprintf(enums.MachineContentKey, item)
|
||||||
|
if content != "" {
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, content, time.Hour*3)
|
||||||
|
} else {
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, req.Content, time.Hour*3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case req.Type == 1:
|
||||||
|
var content string
|
||||||
|
if req.Content == "" {
|
||||||
|
var template models.MmWhiteTemplate
|
||||||
|
e.Orm.Model(template).Where("type = 1").First(&template)
|
||||||
|
content = template.Content
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, item := range machineIds {
|
||||||
|
key := fmt.Sprintf(enums.MachineContentKey, item)
|
||||||
|
|
||||||
|
if content != "" {
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, content, time.Hour*3)
|
||||||
|
} else {
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, req.Content, time.Hour*3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,26 +322,116 @@ func (e *MmMachine) GetPassword() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetWhiteProcess 获取白名单进程列表
|
// GetWhiteProcess 获取白名单进程列表
|
||||||
func (e *MmMachine) GetWhiteProcess(req *dto.MmMachineQueryWhiteListReq) (string, error) {
|
func (e *MmMachine) GetWhiteProcess(req *dto.MmMachineQueryWhiteListReq, useCache bool) (dto.MmMachineHeartResp, error) {
|
||||||
|
result := e.GetHeartResp(req.MachineId, useCache)
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetWhiteApp 获取白名单应用列表
|
||||||
|
// machineId 机器id
|
||||||
|
// cache 是否获取变更缓存
|
||||||
|
func (e *MmMachine) GetHeartResp(machineId string, cache bool) dto.MmMachineHeartResp {
|
||||||
var machine models.MmMachine
|
var machine models.MmMachine
|
||||||
|
var config models.SysConfig
|
||||||
|
var keywordIntevalConfig models.SysConfig
|
||||||
|
var keywordLimitConfig models.SysConfig
|
||||||
|
var taskLimitConfig models.SysConfig
|
||||||
|
var appLimitConfig models.SysConfig
|
||||||
|
var interceptConfig models.SysConfig
|
||||||
|
configService := SysConfig{Service: e.Service}
|
||||||
|
result := dto.MmMachineHeartResp{}
|
||||||
|
heartInterval := 0
|
||||||
|
keywordHeartInterval := 0
|
||||||
|
|
||||||
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).First(&machine)
|
e.Orm.Model(machine).Where("machine_id = ?", machineId).First(&machine)
|
||||||
|
config, _ = configService.GetByKey("machine_heart_interval")
|
||||||
|
keywordIntevalConfig, _ = configService.GetByKey("mm_keyword_interval")
|
||||||
|
keywordLimitConfig, _ = configService.GetByKey("mm_keyword_enable")
|
||||||
|
taskLimitConfig, _ = configService.GetByKey("mm_task_limit")
|
||||||
|
appLimitConfig, _ = configService.GetByKey("mm_app_limit")
|
||||||
|
interceptConfig, _ = configService.GetByKey("mm_intecept_inteval")
|
||||||
|
|
||||||
//没有就返回模板配置
|
if config.ConfigValue != "" {
|
||||||
if machine.Content == "" {
|
heartInterval, _ = strconv.Atoi(config.ConfigValue)
|
||||||
var whiteTemplate models.MmWhiteTemplate
|
|
||||||
e.Orm.Model(whiteTemplate).First(&whiteTemplate)
|
|
||||||
|
|
||||||
return whiteTemplate.Content, nil
|
|
||||||
} else {
|
|
||||||
return machine.Content, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if keywordIntevalConfig.ConfigValue != "" {
|
||||||
|
keywordHeartInterval, _ = strconv.Atoi(keywordIntevalConfig.ConfigValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
intercept, _ := strconv.ParseFloat(interceptConfig.ConfigValue, 64)
|
||||||
|
//默认一小时
|
||||||
|
if intercept > 0 {
|
||||||
|
result.InterceptInterval = intercept
|
||||||
|
} else {
|
||||||
|
result.InterceptInterval = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
//从缓存获取变更
|
||||||
|
if cache {
|
||||||
|
contentKey := fmt.Sprintf(enums.MachineContentKey, machineId)
|
||||||
|
contentVal, _ := helper.DefaultRedis.GetString(contentKey)
|
||||||
|
groupKey := fmt.Sprintf(enums.MachineGroupKey, machineId)
|
||||||
|
groupItemVal, _ := helper.DefaultRedis.GetString(groupKey)
|
||||||
|
|
||||||
|
result.Content = contentVal
|
||||||
|
result.GroupItems = groupItemVal
|
||||||
|
if contentVal != "" {
|
||||||
|
helper.DefaultRedis.DeleteString(contentKey)
|
||||||
|
}
|
||||||
|
if groupItemVal != "" {
|
||||||
|
helper.DefaultRedis.DeleteString(groupKey)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//没有就返回模板配置
|
||||||
|
if machine.Content == "" {
|
||||||
|
var whiteTemplate models.MmWhiteTemplate
|
||||||
|
e.Orm.Model(whiteTemplate).Where("type = 0").First(&whiteTemplate)
|
||||||
|
|
||||||
|
result.Content = whiteTemplate.Content
|
||||||
|
} else {
|
||||||
|
result.Content = machine.Content
|
||||||
|
}
|
||||||
|
|
||||||
|
if machine.GroupItems == "" {
|
||||||
|
var temp models.MmWhiteTemplate
|
||||||
|
e.Orm.Model(temp).Where("type = 1").First(&temp)
|
||||||
|
result.GroupItems = temp.Content
|
||||||
|
} else {
|
||||||
|
result.GroupItems = machine.GroupItems
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.TaskLimit, _ = strconv.Atoi(taskLimitConfig.ConfigValue)
|
||||||
|
|
||||||
|
if result.TaskLimit < 1 || result.TaskLimit > 3 {
|
||||||
|
result.TaskLimit = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if appLimitConfig.ConfigValue != "2" {
|
||||||
|
result.AppLimit = 1
|
||||||
|
} else {
|
||||||
|
result.AppLimit = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
result.HeartInterval = heartInterval
|
||||||
|
result.KeywordsInterval = keywordHeartInterval
|
||||||
|
|
||||||
|
if keywordLimitConfig.ConfigValue != "" {
|
||||||
|
result.KeywordLimit, _ = strconv.Atoi(keywordLimitConfig.ConfigValue)
|
||||||
|
} else {
|
||||||
|
result.KeywordLimit = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateMachineWhite 更新机器白名单
|
// UpdateMachineWhite 更新机器白名单
|
||||||
func (e *MmMachine) UpdateMachineWhite(req *dto.MmMachineUpdateWhiteReq) error {
|
func (e *MmMachine) UpdateMachineWhite(req *dto.MmMachineUpdateWhiteReq) error {
|
||||||
var machine models.MmMachine
|
var machine models.MmMachine
|
||||||
|
result := getDistictApp(req.Content)
|
||||||
|
req.Content = strings.Join(result, "\n")
|
||||||
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).Find(&machine)
|
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).Find(&machine)
|
||||||
|
|
||||||
if machine.Id > 0 && machine.BiosId == req.BiosId {
|
if machine.Id > 0 && machine.BiosId == req.BiosId {
|
||||||
@ -214,14 +460,36 @@ func (e *MmMachine) UpdateMachineWhite(req *dto.MmMachineUpdateWhiteReq) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *MmMachine) CheckMachine(req *dto.MmMachineCheckMachineReq) error {
|
func getDistictApp(content string) []string {
|
||||||
|
apps := strings.Split(content, "\n")
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
result := []string{}
|
||||||
|
|
||||||
|
for _, app := range apps {
|
||||||
|
app = strings.TrimSpace(app) // 去除首尾空格
|
||||||
|
if app == "" {
|
||||||
|
continue // 跳过空行
|
||||||
|
}
|
||||||
|
if !seen[app] {
|
||||||
|
seen[app] = true
|
||||||
|
result = append(result, app)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *MmMachine) CheckMachine(req *dto.MmMachineCheckMachineReq) dto.MmMachineHeartResp {
|
||||||
var machine models.MmMachine
|
var machine models.MmMachine
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
resp := dto.MmMachineHeartResp{}
|
||||||
|
resp.Code = 1
|
||||||
|
|
||||||
if req.MachineId == "" {
|
if req.MachineId == "" {
|
||||||
err := errors.New("设备编号不能为空")
|
err := errors.New("设备编号不能为空")
|
||||||
|
resp.Msg = "设备编号不能为空"
|
||||||
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
||||||
return err
|
|
||||||
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).First(&machine)
|
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).First(&machine)
|
||||||
@ -233,26 +501,37 @@ func (e *MmMachine) CheckMachine(req *dto.MmMachineCheckMachineReq) error {
|
|||||||
|
|
||||||
if err := e.Orm.Save(&machine).Error; err != nil {
|
if err := e.Orm.Save(&machine).Error; err != nil {
|
||||||
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
||||||
return err
|
resp.Msg = "保存失败"
|
||||||
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if machine.Id > 0 && machine.BiosId != req.BiosId {
|
} else if machine.Id > 0 && machine.BiosId != req.BiosId {
|
||||||
return errors.New("设备编号已被占用")
|
resp.Msg = "设备编号已被占用"
|
||||||
|
return resp
|
||||||
} else if machine.Id == 0 && req.MachineId != "" {
|
} else if machine.Id == 0 && req.MachineId != "" {
|
||||||
machine.MachineId = req.MachineId
|
machine.MachineId = req.MachineId
|
||||||
machine.BiosId = req.BiosId
|
machine.BiosId = req.BiosId
|
||||||
machine.Content = ""
|
machine.Content = ""
|
||||||
machine.Status = 0
|
machine.Status = 0
|
||||||
|
machine.TaskLimit = 1
|
||||||
|
machine.AppLimit = 1
|
||||||
|
|
||||||
if err := e.Orm.Create(&machine).Error; err != nil {
|
if err := e.Orm.Create(&machine).Error; err != nil {
|
||||||
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
e.Log.Errorf("Service CheckMachine error:%s \r\n", err)
|
||||||
return err
|
resp.Msg = "保存失败"
|
||||||
|
return resp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// e.Orm.Model(&models.MmMachine{}).Where("machine_id != ? and bios_id = ?", req.MachineId, req.BiosId).Updates(map[string]interface{}{"status": 0, "bios_id": ""})
|
// e.Orm.Model(&models.MmMachine{}).Where("machine_id != ? and bios_id = ?", req.MachineId, req.BiosId).Updates(map[string]interface{}{"status": 0, "bios_id": ""})
|
||||||
e.Orm.Exec("update mm_machine set status = 0, bios_id = '' where machine_id != ? and bios_id = ?", req.MachineId, req.BiosId)
|
e.Orm.Exec("update mm_machine set status = 0, bios_id = '' where machine_id != ? and bios_id = ?", req.MachineId, req.BiosId)
|
||||||
|
|
||||||
return nil
|
resp = e.GetHeartResp(req.MachineId, false)
|
||||||
|
|
||||||
|
if resp.Content != "" {
|
||||||
|
resp.Code = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChangeStatus 改变机器状态
|
// ChangeStatus 改变机器状态
|
||||||
@ -261,8 +540,10 @@ func (e *MmMachine) ChangeStatus() error {
|
|||||||
var data models.MmMachine
|
var data models.MmMachine
|
||||||
var config models.SysConfig
|
var config models.SysConfig
|
||||||
timeInterval := 5 * time.Minute
|
timeInterval := 5 * time.Minute
|
||||||
|
configService := SysConfig{Service: e.Service}
|
||||||
|
config, _ = configService.GetByKey("machine_status_change_time")
|
||||||
|
|
||||||
e.Orm.Model(config).Where("config_key = ?", "machine_status_change_time").First(&config)
|
// e.Orm.Model(config).Where("config_key = ?", "machine_status_change_time").First(&config)
|
||||||
|
|
||||||
if config.ConfigValue != "" {
|
if config.ConfigValue != "" {
|
||||||
interval, _ := strconv.Atoi(config.ConfigValue)
|
interval, _ := strconv.Atoi(config.ConfigValue)
|
||||||
@ -301,7 +582,7 @@ func (e *MmMachine) GetMachineList() ([]dto.Option, error) {
|
|||||||
var machines []models.MmMachine
|
var machines []models.MmMachine
|
||||||
result := make([]dto.Option, 0)
|
result := make([]dto.Option, 0)
|
||||||
|
|
||||||
if err := e.Orm.Model(models.MmMachine{}).Find(&machines).Error; err != nil {
|
if err := e.Orm.Model(models.MmMachine{}).Order("LENGTH(machine_id) asc, machine_id asc").Find(&machines).Error; err != nil {
|
||||||
e.Log.Errorf("Service GetMachineList error:%s \r\n", err)
|
e.Log.Errorf("Service GetMachineList error:%s \r\n", err)
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
@ -312,7 +593,87 @@ func (e *MmMachine) GetMachineList() ([]dto.Option, error) {
|
|||||||
statusName = "在线"
|
statusName = "在线"
|
||||||
}
|
}
|
||||||
label := fmt.Sprintf("%s(%s)", machine.MachineId, statusName)
|
label := fmt.Sprintf("%s(%s)", machine.MachineId, statusName)
|
||||||
result = append(result, dto.Option{Label: label, Value: machine.Id})
|
result = append(result, dto.Option{Label: label, Value: machine.MachineId})
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新机器分组
|
||||||
|
func (e *MmMachine) UpdateGroupBatch(req *dto.MmMachineUpdateGroupBatchReq, p *actions.DataPermission) error {
|
||||||
|
if err := e.Orm.Model(&models.MmMachine{}).Where("id in (?)", req.Ids).Update("group_id", req.GroupId).Error; err != nil {
|
||||||
|
e.Log.Errorf("Service UpdateGroupBatch error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空所有机器数据
|
||||||
|
func (e *MmMachine) ClearAll() error {
|
||||||
|
if err := e.Orm.Exec("truncate table mm_machine").Error; err != nil {
|
||||||
|
e.Log.Errorf("Service ClearAll error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空所有绑定
|
||||||
|
func (e *MmMachine) Uninstall() error {
|
||||||
|
if err := e.Orm.Exec("update mm_machine set bios_id = '' where bios_id != ''").Error; err != nil {
|
||||||
|
e.Log.Errorf("Service Uninstall error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量修改备注
|
||||||
|
func (e *MmMachine) UpdateDescriptionBatch(req *dto.MmMachineUpdateDescriptionBatchReq, p *actions.DataPermission) error {
|
||||||
|
if err := e.Orm.Model(&models.MmMachine{}).Where("id in (?)", req.Ids).Update("description", req.Description).Error; err != nil {
|
||||||
|
e.Log.Errorf("Service UpdateDescriptionBatch error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询设备间隔账号
|
||||||
|
func (e *MmMachine) QueryIntervalAccount() (string, error) {
|
||||||
|
machineIds := make([]string, 0)
|
||||||
|
result := ""
|
||||||
|
lastMachineId := 0
|
||||||
|
errMachineIds := make([]string, 0)
|
||||||
|
|
||||||
|
if err := e.Orm.Model(models.MmMachine{}).
|
||||||
|
Order(" LENGTH(machine_id) asc, machine_id asc").
|
||||||
|
Pluck("machine_id", &machineIds).Error; err != nil {
|
||||||
|
e.Log.Errorf("Service QueryIntervalAccount error:%s \r\n", err)
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, machineId := range machineIds {
|
||||||
|
newId, _ := strconv.Atoi(machineId)
|
||||||
|
|
||||||
|
if newId == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if lastMachineId == 0 {
|
||||||
|
lastMachineId = newId
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
//间隔超过1就不正常
|
||||||
|
if newId-lastMachineId > 1 {
|
||||||
|
errMachineIds = append(errMachineIds, fmt.Sprintf("%v-%v", lastMachineId, newId))
|
||||||
|
}
|
||||||
|
lastMachineId = newId
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(errMachineIds) > 0 {
|
||||||
|
result = fmt.Sprintf("设备编号%s中有设备编号未记录,请检查", strings.Join(errMachineIds, ","))
|
||||||
|
} else {
|
||||||
|
result = "设备编号正常"
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
|
|||||||
@ -110,10 +110,10 @@ func (e *MmMachineLog) Remove(d *dto.MmMachineLogDeleteReq, p *actions.DataPermi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InsertLog 记录日志
|
// InsertLog 记录日志
|
||||||
func (e *MmMachineLog) InsertLog(req *dto.MmMachineLogInsertReq) (string, error) {
|
func (e *MmMachineLog) InsertLog(req *dto.MmMachineLogInsertReq) (dto.MmMachineHeartResp, error) {
|
||||||
var machine models.MmMachine
|
var machine models.MmMachine
|
||||||
var data models.MmMachineLog
|
var data models.MmMachineLog
|
||||||
result := ""
|
result := dto.MmMachineHeartResp{}
|
||||||
|
|
||||||
req.Generate(&data)
|
req.Generate(&data)
|
||||||
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).First(&machine)
|
e.Orm.Model(machine).Where("machine_id = ?", req.MachineId).First(&machine)
|
||||||
@ -122,18 +122,34 @@ func (e *MmMachineLog) InsertLog(req *dto.MmMachineLogInsertReq) (string, error)
|
|||||||
if err := e.Orm.Model(&machine).Updates(map[string]interface{}{"status": 1, "last_time": time.Now()}).Error; err != nil {
|
if err := e.Orm.Model(&machine).Updates(map[string]interface{}{"status": 1, "last_time": time.Now()}).Error; err != nil {
|
||||||
e.Log.Errorf("更新机器状态失败:%s", err)
|
e.Log.Errorf("更新机器状态失败:%s", err)
|
||||||
}
|
}
|
||||||
|
} else if machine.Id == 0 && req.Type == "7" {
|
||||||
|
now := time.Now()
|
||||||
|
machine.MachineId = req.MachineId
|
||||||
|
machine.BiosId = req.BiosId
|
||||||
|
machine.GroupId = 0
|
||||||
|
machine.Description = ""
|
||||||
|
machine.LastTime = &now
|
||||||
|
machine.Content = ""
|
||||||
|
machine.GroupItems = ""
|
||||||
|
machine.Status = 1
|
||||||
|
|
||||||
|
if err := e.Orm.Create(&machine).Error; err != nil {
|
||||||
|
e.Log.Errorf("创建机器失败:%s", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := e.Orm.Create(&data).Error; err != nil {
|
if req.Type != "7" {
|
||||||
e.Log.Errorf("记录日志失败:%s", err)
|
if err := e.Orm.Create(&data).Error; err != nil {
|
||||||
return result, err
|
e.Log.Errorf("记录日志失败:%s", err)
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//心跳 返回白名单信息
|
//心跳 返回白名单信息
|
||||||
if req.Type == "7" {
|
if req.Type == "7" {
|
||||||
machineService := MmMachine{Service: e.Service}
|
machineService := MmMachine{Service: e.Service}
|
||||||
whiteReq := dto.MmMachineQueryWhiteListReq{MachineId: req.MachineId}
|
whiteReq := dto.MmMachineQueryWhiteListReq{MachineId: req.MachineId}
|
||||||
result, _ = machineService.GetWhiteProcess(&whiteReq)
|
result, _ = machineService.GetWhiteProcess(&whiteReq, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
|
|||||||
141
app/admin/service/mm_risk_log.go
Normal file
141
app/admin/service/mm_risk_log.go
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/actions"
|
||||||
|
cDto "go-admin/common/dto"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MmRiskLog struct {
|
||||||
|
service.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPage 获取MmRiskLog列表
|
||||||
|
func (e *MmRiskLog) GetPage(c *dto.MmRiskLogGetPageReq, p *actions.DataPermission, list *[]models.MmRiskLog, count *int64) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmRiskLog
|
||||||
|
|
||||||
|
err = e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
cDto.MakeCondition(c.GetNeedSearch()),
|
||||||
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
Find(list).Limit(-1).Offset(-1).
|
||||||
|
Count(count).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmRiskLogService GetPage error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get 获取MmRiskLog对象
|
||||||
|
func (e *MmRiskLog) Get(d *dto.MmRiskLogGetReq, p *actions.DataPermission, model *models.MmRiskLog) error {
|
||||||
|
var data models.MmRiskLog
|
||||||
|
|
||||||
|
err := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).
|
||||||
|
First(model, d.GetId()).Error
|
||||||
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
err = errors.New("查看对象不存在或无权查看")
|
||||||
|
e.Log.Errorf("Service GetMmRiskLog error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("db error:%s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 创建MmRiskLog对象
|
||||||
|
func (e *MmRiskLog) Insert(c *dto.MmRiskLogInsertReq) error {
|
||||||
|
var err error
|
||||||
|
var data models.MmRiskLog
|
||||||
|
c.Generate(&data)
|
||||||
|
err = e.Orm.Create(&data).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("MmRiskLogService Insert error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改MmRiskLog对象
|
||||||
|
func (e *MmRiskLog) Update(c *dto.MmRiskLogUpdateReq, p *actions.DataPermission) error {
|
||||||
|
var err error
|
||||||
|
var data = models.MmRiskLog{}
|
||||||
|
e.Orm.Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).First(&data, c.GetId())
|
||||||
|
c.Generate(&data)
|
||||||
|
|
||||||
|
db := e.Orm.Save(&data)
|
||||||
|
if err = db.Error; err != nil {
|
||||||
|
e.Log.Errorf("MmRiskLogService Save error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权更新该数据")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove 删除MmRiskLog
|
||||||
|
func (e *MmRiskLog) Remove(d *dto.MmRiskLogDeleteReq, p *actions.DataPermission) error {
|
||||||
|
var data models.MmRiskLog
|
||||||
|
|
||||||
|
db := e.Orm.Model(&data).
|
||||||
|
Scopes(
|
||||||
|
actions.Permission(data.TableName(), p),
|
||||||
|
).Delete(&data, d.GetId())
|
||||||
|
if err := db.Error; err != nil {
|
||||||
|
e.Log.Errorf("Service RemoveMmRiskLog error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if db.RowsAffected == 0 {
|
||||||
|
return errors.New("无权删除该数据")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 保存MmRiskLog对象
|
||||||
|
func (e *MmRiskLog) Save(req *dto.MmRiskLogBatchReq) error {
|
||||||
|
datas := make([]models.MmRiskLog, 0)
|
||||||
|
|
||||||
|
logger.Debug("req:%v", req)
|
||||||
|
|
||||||
|
for _, item := range req.Contents {
|
||||||
|
data := models.MmRiskLog{}
|
||||||
|
data.MachineId = req.MachineId
|
||||||
|
data.BiosId = req.BiosId
|
||||||
|
data.Type = item.Type
|
||||||
|
data.Content = item.Content
|
||||||
|
datas = append(datas, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.Orm.Save(&datas).Error; err != nil {
|
||||||
|
e.Log.Errorf("MmRiskLogService Save error:%s \r\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearAll 清空日志
|
||||||
|
func (e *MmRiskLog) ClearAll() error {
|
||||||
|
if err := e.Orm.Exec("TRUNCATE TABLE mm_risk_log").Error; err != nil {
|
||||||
|
e.Log.Errorf("清空日志失败:%s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -2,14 +2,19 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
"go-admin/app/admin/service/dto"
|
"go-admin/app/admin/service/dto"
|
||||||
"go-admin/common/actions"
|
"go-admin/common/actions"
|
||||||
cDto "go-admin/common/dto"
|
cDto "go-admin/common/dto"
|
||||||
|
"go-admin/common/enums"
|
||||||
|
"go-admin/common/helper"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MmWhiteTemplate struct {
|
type MmWhiteTemplate struct {
|
||||||
@ -59,9 +64,9 @@ func (e *MmWhiteTemplate) Get(d *dto.MmWhiteTemplateGetReq, p *actions.DataPermi
|
|||||||
|
|
||||||
// Insert 创建MmWhiteTemplate对象
|
// Insert 创建MmWhiteTemplate对象
|
||||||
func (e *MmWhiteTemplate) Insert(c *dto.MmWhiteTemplateInsertReq) error {
|
func (e *MmWhiteTemplate) Insert(c *dto.MmWhiteTemplateInsertReq) error {
|
||||||
var err error
|
var err error
|
||||||
var data models.MmWhiteTemplate
|
var data models.MmWhiteTemplate
|
||||||
c.Generate(&data)
|
c.Generate(&data)
|
||||||
err = e.Orm.Create(&data).Error
|
err = e.Orm.Create(&data).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("MmWhiteTemplateService Insert error:%s \r\n", err)
|
e.Log.Errorf("MmWhiteTemplateService Insert error:%s \r\n", err)
|
||||||
@ -72,22 +77,42 @@ func (e *MmWhiteTemplate) Insert(c *dto.MmWhiteTemplateInsertReq) error {
|
|||||||
|
|
||||||
// Update 修改MmWhiteTemplate对象
|
// Update 修改MmWhiteTemplate对象
|
||||||
func (e *MmWhiteTemplate) Update(c *dto.MmWhiteTemplateUpdateReq, p *actions.DataPermission) error {
|
func (e *MmWhiteTemplate) Update(c *dto.MmWhiteTemplateUpdateReq, p *actions.DataPermission) error {
|
||||||
var err error
|
var err error
|
||||||
var data = models.MmWhiteTemplate{}
|
var data = models.MmWhiteTemplate{}
|
||||||
e.Orm.Scopes(
|
content := getDistictApp(c.Content)
|
||||||
actions.Permission(data.TableName(), p),
|
c.Content = strings.Join(content, "\n")
|
||||||
).First(&data, c.GetId())
|
e.Orm.Scopes(
|
||||||
c.Generate(&data)
|
actions.Permission(data.TableName(), p),
|
||||||
|
).First(&data, c.GetId())
|
||||||
|
c.Generate(&data)
|
||||||
|
|
||||||
db := e.Orm.Save(&data)
|
db := e.Orm.Save(&data)
|
||||||
if err = db.Error; err != nil {
|
if err = db.Error; err != nil {
|
||||||
e.Log.Errorf("MmWhiteTemplateService Save error:%s \r\n", err)
|
e.Log.Errorf("MmWhiteTemplateService Save error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if db.RowsAffected == 0 {
|
if db.RowsAffected == 0 {
|
||||||
return errors.New("无权更新该数据")
|
return errors.New("无权更新该数据")
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
machineIds := make([]string, 0)
|
||||||
|
if c.Type == 0 {
|
||||||
|
e.Orm.Model(models.MmMachine{}).Where("content='' and bios_id!=''").Select("machine_id").Find(&machineIds)
|
||||||
|
|
||||||
|
for _, machineId := range machineIds {
|
||||||
|
key := fmt.Sprintf(enums.MachineContentKey, machineId)
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, c.Content, time.Hour*3)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
e.Orm.Model(models.MmMachine{}).Where(" group_items='' and bios_id!=''").Select("machine_id").Find(&machineIds)
|
||||||
|
|
||||||
|
for _, machineId := range machineIds {
|
||||||
|
key := fmt.Sprintf(enums.MachineGroupKey, machineId)
|
||||||
|
helper.DefaultRedis.SetStringExpire(key, c.Content, time.Hour*3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove 删除MmWhiteTemplate
|
// Remove 删除MmWhiteTemplate
|
||||||
@ -99,11 +124,11 @@ func (e *MmWhiteTemplate) Remove(d *dto.MmWhiteTemplateDeleteReq, p *actions.Dat
|
|||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).Delete(&data, d.GetId())
|
).Delete(&data, d.GetId())
|
||||||
if err := db.Error; err != nil {
|
if err := db.Error; err != nil {
|
||||||
e.Log.Errorf("Service RemoveMmWhiteTemplate error:%s \r\n", err)
|
e.Log.Errorf("Service RemoveMmWhiteTemplate error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if db.RowsAffected == 0 {
|
if db.RowsAffected == 0 {
|
||||||
return errors.New("无权删除该数据")
|
return errors.New("无权删除该数据")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,15 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
"go-admin/app/admin/service/dto"
|
"go-admin/app/admin/service/dto"
|
||||||
cDto "go-admin/common/dto"
|
cDto "go-admin/common/dto"
|
||||||
|
"go-admin/common/enums"
|
||||||
|
"go-admin/common/helper"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
)
|
)
|
||||||
@ -59,6 +63,11 @@ func (e *SysConfig) Insert(c *dto.SysConfigControl) error {
|
|||||||
e.Log.Errorf("Service InsertSysConfig error:%s", err)
|
e.Log.Errorf("Service InsertSysConfig error:%s", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf(enums.Config, data.ConfigKey)
|
||||||
|
val, _ := json.Marshal(data)
|
||||||
|
helper.DefaultRedis.SetString(key, string(val))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,9 +87,36 @@ func (e *SysConfig) Update(c *dto.SysConfigControl) error {
|
|||||||
return errors.New("无权更新该数据")
|
return errors.New("无权更新该数据")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf(enums.Config, model.ConfigKey)
|
||||||
|
val, _ := json.Marshal(model)
|
||||||
|
helper.DefaultRedis.SetString(key, string(val))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetByCache 获取缓存SysConfig对象
|
||||||
|
func (e *SysConfig) GetByKey(key string) (models.SysConfig, error) {
|
||||||
|
redisKey := fmt.Sprintf(enums.Config, key)
|
||||||
|
val, _ := helper.DefaultRedis.GetString(redisKey)
|
||||||
|
result := models.SysConfig{}
|
||||||
|
if val != "" {
|
||||||
|
_ = json.Unmarshal([]byte(val), &result)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.Id == 0 {
|
||||||
|
err := e.Orm.Model(result).Where("config_key = ?", key).First(&result).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("Service GetSysConfigByKey error:%s", err)
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes, _ := json.Marshal(result)
|
||||||
|
helper.DefaultRedis.SetString(redisKey, string(bytes))
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetSysConfig 修改SysConfig对象
|
// SetSysConfig 修改SysConfig对象
|
||||||
func (e *SysConfig) SetSysConfig(c *[]dto.GetSetSysConfigReq) error {
|
func (e *SysConfig) SetSysConfig(c *[]dto.GetSetSysConfigReq) error {
|
||||||
var err error
|
var err error
|
||||||
@ -153,6 +189,10 @@ func (e *SysConfig) Remove(d *dto.SysConfigDeleteReq) error {
|
|||||||
err = errors.New("无权删除该数据")
|
err = errors.New("无权删除该数据")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf(enums.Config, data.ConfigKey)
|
||||||
|
helper.DefaultRedis.DeleteString(key)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
81
app/jobs/clear_job.go
Normal file
81
app/jobs/clear_job.go
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package jobs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk"
|
||||||
|
"github.com/go-admin-team/go-admin-core/sdk/config"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ClearLogJob struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除过期日志
|
||||||
|
func (t ClearLogJob) Exec(arg interface{}) error {
|
||||||
|
str := time.Now().Format(timeFormat) + " [INFO] JobCore ClearLogJob exec success"
|
||||||
|
defer logger.Info(str)
|
||||||
|
var db *gorm.DB
|
||||||
|
|
||||||
|
for _, item := range sdk.Runtime.GetDb() {
|
||||||
|
db = item
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
ClearLogs(db)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearLogs(orm *gorm.DB) {
|
||||||
|
dir := config.LoggerConfig.Path
|
||||||
|
|
||||||
|
if dir == "" {
|
||||||
|
dir = "temp/logs"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查文件夹是否存在
|
||||||
|
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||||
|
fmt.Printf("Directory %s does not exist, skipping cleanup.\n", dir)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前时间
|
||||||
|
now := time.Now()
|
||||||
|
expirateDay := 2
|
||||||
|
|
||||||
|
// 遍历指定文件夹中的所有文件
|
||||||
|
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只处理普通文件
|
||||||
|
if !info.IsDir() {
|
||||||
|
// 获取文件的修改时间
|
||||||
|
modTime := info.ModTime()
|
||||||
|
|
||||||
|
// 计算文件修改时间与当前时间的差值
|
||||||
|
duration := now.Sub(modTime)
|
||||||
|
|
||||||
|
// 如果文件超过7天,则删除
|
||||||
|
if duration > time.Duration(expirateDay)*24*time.Hour {
|
||||||
|
fmt.Printf("Deleting file: %s (Last modified: %s)\n", path, modTime)
|
||||||
|
err := os.Remove(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error walking the path %v: %v\n", dir, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -17,12 +18,16 @@ import (
|
|||||||
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
"go-admin/app/admin/router"
|
"go-admin/app/admin/router"
|
||||||
|
"go-admin/app/admin/service"
|
||||||
"go-admin/app/jobs"
|
"go-admin/app/jobs"
|
||||||
"go-admin/common/database"
|
"go-admin/common/database"
|
||||||
|
"go-admin/common/enums"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/helper"
|
||||||
common "go-admin/common/middleware"
|
common "go-admin/common/middleware"
|
||||||
"go-admin/common/middleware/handler"
|
"go-admin/common/middleware/handler"
|
||||||
"go-admin/common/storage"
|
"go-admin/common/storage"
|
||||||
@ -91,6 +96,9 @@ func run() error {
|
|||||||
Handler: sdk.Runtime.GetEngine(),
|
Handler: sdk.Runtime.GetEngine(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//初始化redis连接
|
||||||
|
helper.InitDefaultRedis(ext.ExtConfig.Redis.Addr, ext.ExtConfig.Redis.Password, ext.ExtConfig.Redis.Db)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
jobs.InitJob()
|
jobs.InitJob()
|
||||||
jobs.Setup(sdk.Runtime.GetDb())
|
jobs.Setup(sdk.Runtime.GetDb())
|
||||||
@ -114,6 +122,8 @@ func run() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initConfig()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
// 服务连接
|
// 服务连接
|
||||||
if config.SslConfig.Enable {
|
if config.SslConfig.Enable {
|
||||||
@ -176,11 +186,37 @@ func initRouter() {
|
|||||||
if config.SslConfig.Enable {
|
if config.SslConfig.Enable {
|
||||||
r.Use(handler.TlsHandler())
|
r.Use(handler.TlsHandler())
|
||||||
}
|
}
|
||||||
//r.Use(middleware.Metrics())
|
//r.Use(middleware.Metrics()
|
||||||
r.Use(common.Sentinel()).
|
//Use(common.Sentinel()).
|
||||||
Use(common.RequestId(pkg.TrafficKey)).
|
r.Use(common.RequestId(pkg.TrafficKey)).
|
||||||
Use(api.SetRequestLogger)
|
Use(api.SetRequestLogger)
|
||||||
|
|
||||||
common.InitMiddleware(r)
|
common.InitMiddleware(r)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initConfig() {
|
||||||
|
var db *gorm.DB
|
||||||
|
dbs := sdk.Runtime.GetDb()
|
||||||
|
|
||||||
|
for _, item := range dbs {
|
||||||
|
db = item
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
configs := make([]models.SysConfig, 0)
|
||||||
|
db.Model(models.SysConfig{}).Find(&configs)
|
||||||
|
for _, config := range configs {
|
||||||
|
key := fmt.Sprintf(enums.Config, config.ConfigKey)
|
||||||
|
cacheContent, _ := json.Marshal(config)
|
||||||
|
|
||||||
|
if err := helper.DefaultRedis.SetString(key, string(cacheContent)); err != nil {
|
||||||
|
log.Errorf("set redis key %s error, %s", key, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
keywordService := service.MmKeyword{}
|
||||||
|
keywordService.Orm = db
|
||||||
|
|
||||||
|
keywordService.ReloadMachineCache(false)
|
||||||
|
}
|
||||||
|
|||||||
24
common/enums/redis_key.go
Normal file
24
common/enums/redis_key.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package enums
|
||||||
|
|
||||||
|
const (
|
||||||
|
//设备进程白名单更新缓存 {machineId} t代表模板
|
||||||
|
MachineContentKey = "m_content:%s"
|
||||||
|
//设备进程白名单 {{machineId}} t代表模板
|
||||||
|
MachineContentUsedIdKey = "m_content_used_id:%s"
|
||||||
|
//设备应用程序白名单更新缓存 {machineId} t代表模板
|
||||||
|
MachineGroupKey = "m_group:%s"
|
||||||
|
//设备应用程序白名单 {{machineId}} t代表模板
|
||||||
|
MachineGroupUsedIdKey = "m_group_used_id:%s"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
//关键字缓存
|
||||||
|
Keywords = "keywords"
|
||||||
|
//设备更新关键字缓存 {machineId}
|
||||||
|
MachineKeywords = "m_keywords:%s"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
//系统配置缓存
|
||||||
|
Config = "config:%s"
|
||||||
|
)
|
||||||
779
common/helper/redis_helper.go
Normal file
779
common/helper/redis_helper.go
Normal file
@ -0,0 +1,779 @@
|
|||||||
|
package helper
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/bytedance/sonic"
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RedisHelper 结构体封装了 Redis 客户端及上下文
|
||||||
|
type RedisHelper struct {
|
||||||
|
client *redis.Client // Redis 客户端
|
||||||
|
ctx context.Context // 上下文
|
||||||
|
emptyCacheValue string // 缓存空值的标志
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultRedis *RedisHelper
|
||||||
|
|
||||||
|
// 初始化默认链接
|
||||||
|
func InitDefaultRedis(addr, password string, db int) {
|
||||||
|
if DefaultRedis == nil {
|
||||||
|
DefaultRedis = NewRedisHelper(addr, password, db)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("初始化redis链接")
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRedisHelper 创建一个新的 RedisHelper 实例
|
||||||
|
func NewRedisHelper(addr, password string, db int) *RedisHelper {
|
||||||
|
rdb := redis.NewClient(&redis.Options{
|
||||||
|
Addr: addr, // Redis 服务器地址
|
||||||
|
Password: password, // Redis 密码
|
||||||
|
DB: db, // 使用的数据库编号
|
||||||
|
PoolSize: 50,
|
||||||
|
MinIdleConns: 10,
|
||||||
|
DialTimeout: 10 * time.Second, // 调整连接超时时间
|
||||||
|
ReadTimeout: 10 * time.Second, // 调整读超时时间
|
||||||
|
WriteTimeout: 10 * time.Second, // 调整写超时时间
|
||||||
|
})
|
||||||
|
|
||||||
|
return &RedisHelper{
|
||||||
|
client: rdb,
|
||||||
|
ctx: context.Background(), // 创建背景上下文
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试连接
|
||||||
|
func (r *RedisHelper) Ping() error {
|
||||||
|
return r.client.Ping(r.ctx).Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetString 设置字符串值
|
||||||
|
func (r *RedisHelper) SetString(key, value string) error {
|
||||||
|
return r.client.Set(r.ctx, key, value, 0).Err() // 将值存储到指定的键
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量设置
|
||||||
|
func (r *RedisHelper) BatchSet(maps *map[string]string) error {
|
||||||
|
pipe := r.client.Pipeline()
|
||||||
|
|
||||||
|
for key, val := range *maps {
|
||||||
|
pipe.Set(r.ctx, key, val, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := pipe.Exec(r.ctx)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetString 设置字符串值
|
||||||
|
func (r *RedisHelper) SetStringExpire(key, value string, expireTime time.Duration) error {
|
||||||
|
return r.client.Set(r.ctx, key, value, expireTime).Err() // 将值存储到指定的键
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetString 设置字符串值
|
||||||
|
func (r *RedisHelper) SetAdd(key, value string, expireTime time.Duration) error {
|
||||||
|
// 存储到 SET 中
|
||||||
|
result, err := r.client.SAdd(r.ctx, key, value).Result()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if result == 1 {
|
||||||
|
// 设置 SET 的过期时间
|
||||||
|
err = r.client.Expire(r.ctx, key, expireTime).Err()
|
||||||
|
if err != nil {
|
||||||
|
return errors.New("设置过期时间失败:" + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return errors.New("key已存在")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置对象
|
||||||
|
func SetObjString[T any](r *RedisHelper, key string, value T) error {
|
||||||
|
keyValue, err := sonic.Marshal(value)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.SetString(key, string(keyValue))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取对象
|
||||||
|
func GetObjString[T any](r *RedisHelper, key string) (T, error) {
|
||||||
|
var result T
|
||||||
|
value, err := r.GetString(key)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = sonic.Unmarshal([]byte(value), &result)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) Get(key string) *redis.StringCmd {
|
||||||
|
return r.client.Get(r.ctx, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
获取剩余时间
|
||||||
|
- @key redis key
|
||||||
|
*/
|
||||||
|
func (r *RedisHelper) TTL(key string) *redis.DurationCmd {
|
||||||
|
return r.client.TTL(r.ctx, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetString 获取字符串值
|
||||||
|
func (r *RedisHelper) GetString(key string) (string, error) {
|
||||||
|
return r.client.Get(r.ctx, key).Result() // 从指定的键获取值
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteString 删除字符串键
|
||||||
|
func (r *RedisHelper) DeleteString(key string) error {
|
||||||
|
return r.client.Del(r.ctx, key).Err() // 删除指定的键
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteString 删除目录下所有key
|
||||||
|
func (r *RedisHelper) DeleteAll(key string) error {
|
||||||
|
keys, err := r.ScanKeys(key)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = r.BatchDeleteKeys(keys)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
递增
|
||||||
|
- @key rediskey
|
||||||
|
*/
|
||||||
|
func (r *RedisHelper) Incr(key string) *redis.IntCmd {
|
||||||
|
return r.client.Incr(r.ctx, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
设置过期时间
|
||||||
|
- @key redis key
|
||||||
|
- @expiration 过期时间
|
||||||
|
*/
|
||||||
|
func (r *RedisHelper) Expire(key string, expiration time.Duration) *redis.BoolCmd {
|
||||||
|
return r.client.Expire(r.ctx, key, expiration)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
批量删除
|
||||||
|
|
||||||
|
- @keys 键数组
|
||||||
|
*/
|
||||||
|
func (r *RedisHelper) BatchDeleteKeys(keys []string) (int, error) {
|
||||||
|
if r.client == nil {
|
||||||
|
return 0, errors.New("Redis client is nil")
|
||||||
|
}
|
||||||
|
if len(keys) == 0 {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
deletedCount := 0
|
||||||
|
batchSize := 1000 // 每批次删除的键数量
|
||||||
|
for i := 0; i < len(keys); i += batchSize {
|
||||||
|
end := i + batchSize
|
||||||
|
if end > len(keys) {
|
||||||
|
end = len(keys)
|
||||||
|
}
|
||||||
|
batch := keys[i:end]
|
||||||
|
|
||||||
|
_, err := r.client.Pipelined(r.ctx, func(pipe redis.Pipeliner) error {
|
||||||
|
for _, key := range batch {
|
||||||
|
pipe.Del(r.ctx, key)
|
||||||
|
deletedCount++
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return deletedCount, fmt.Errorf("failed to delete keys in batch: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return deletedCount, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteKeysByPrefix 删除指定前缀的键
|
||||||
|
func (r *RedisHelper) DeleteKeysByPrefix(prefixes ...string) error {
|
||||||
|
ctx := context.Background()
|
||||||
|
// 遍历每个前缀
|
||||||
|
for _, prefix := range prefixes {
|
||||||
|
var cursor uint64
|
||||||
|
var keys []string
|
||||||
|
|
||||||
|
// 使用 SCAN 命令查找匹配的键
|
||||||
|
for {
|
||||||
|
var err error
|
||||||
|
keys, cursor, err = r.client.Scan(ctx, cursor, prefix+"*", 1000).Result()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除匹配的键
|
||||||
|
if len(keys) > 0 {
|
||||||
|
_, err := r.client.Del(ctx, keys...).Result()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Printf("Deleted keys with prefix '%s': %v\n", prefix, keys)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果游标为 0,表示迭代结束
|
||||||
|
if cursor == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找所有value
|
||||||
|
func (r *RedisHelper) GetAllKeysAndValues(pattern string) ([]string, error) {
|
||||||
|
var cursor uint64
|
||||||
|
var result = []string{}
|
||||||
|
|
||||||
|
for {
|
||||||
|
// 使用 SCAN 命令获取匹配的键
|
||||||
|
keys, nextCursor, err := r.client.Scan(r.ctx, cursor, pattern+"*", 1000).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error scanning keys: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理匹配到的键
|
||||||
|
for _, key := range keys {
|
||||||
|
value, err := r.client.Get(r.ctx, key).Result()
|
||||||
|
if err != nil {
|
||||||
|
if err == redis.Nil {
|
||||||
|
fmt.Printf("Key %s does not exist\n", key)
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Error getting value for key %s: %v", key, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = append(result, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果 cursor 为 0,表示扫描完成
|
||||||
|
if nextCursor == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
cursor = nextCursor
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LPushList 将一个或多个值插入到列表的头部
|
||||||
|
func (r *RedisHelper) LPushList(key string, values ...string) error {
|
||||||
|
return r.client.LPush(r.ctx, key, values).Err() // 将值插入到列表的头部
|
||||||
|
}
|
||||||
|
|
||||||
|
// RPushList 将一个或多个值插入到列表的尾部
|
||||||
|
func (r *RedisHelper) RPushList(key string, values ...string) error {
|
||||||
|
return r.client.RPush(r.ctx, key, values).Err() // 将值插入到列表的尾部
|
||||||
|
}
|
||||||
|
|
||||||
|
// LPopList 从列表的头部弹出一个元素
|
||||||
|
func (r *RedisHelper) LPopList(key string) (string, error) {
|
||||||
|
return r.client.LPop(r.ctx, key).Result() // 从列表的头部移除并返回第一个元素
|
||||||
|
}
|
||||||
|
|
||||||
|
// RPopList 从列表的尾部弹出一个元素
|
||||||
|
func (r *RedisHelper) RPopList(key string) (string, error) {
|
||||||
|
return r.client.RPop(r.ctx, key).Result() // 从列表的尾部移除并返回最后一个元素
|
||||||
|
}
|
||||||
|
|
||||||
|
// LRangeList 获取列表中指定范围的元素
|
||||||
|
func (r *RedisHelper) LRangeList(key string, start, stop int64) ([]string, error) {
|
||||||
|
return r.client.LRange(r.ctx, key, start, stop).Result() // 获取列表中指定范围的元素
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAllList 获取列表中的所有元素
|
||||||
|
func (r *RedisHelper) GetAllList(key string) ([]string, error) {
|
||||||
|
values, err := r.client.LRange(r.ctx, key, 0, -1).Result()
|
||||||
|
if err == redis.Nil {
|
||||||
|
return nil, nil
|
||||||
|
} else if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否包含空值标志
|
||||||
|
if len(values) == 1 && values[0] == r.emptyCacheValue {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) LRem(key, val string) (int64, error) {
|
||||||
|
count := 0 // 删除所有与 valueToRemove 相等的元素
|
||||||
|
result, err := r.client.LRem(r.ctx, key, int64(count), val).Result()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("删除元素失败: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) IsElementInList(key string, element string) (bool, error) {
|
||||||
|
var cursor int64 = 0
|
||||||
|
const batchSize int64 = 1000 // 每批次获取的元素数量
|
||||||
|
|
||||||
|
for {
|
||||||
|
// 分批次获取列表元素
|
||||||
|
elements, err := r.client.LRange(r.ctx, key, cursor, cursor+batchSize-1).Result()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if len(elements) == 0 {
|
||||||
|
break // 没有更多数据
|
||||||
|
}
|
||||||
|
|
||||||
|
// 遍历当前批次的元素
|
||||||
|
for _, e := range elements {
|
||||||
|
if e == element {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor += batchSize // 移动到下一批次
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SetListCache 重新设置列表缓存
|
||||||
|
- @expiration 0-过期 1-过期时间
|
||||||
|
*/
|
||||||
|
func (r *RedisHelper) SetListCache(key string, expiration time.Duration, values ...string) error {
|
||||||
|
tempKey := key + ":temp"
|
||||||
|
|
||||||
|
// 使用事务来确保操作的原子性
|
||||||
|
pipe := r.client.TxPipeline()
|
||||||
|
|
||||||
|
// 将新数据插入到临时列表中
|
||||||
|
pipe.RPush(r.ctx, tempKey, values)
|
||||||
|
|
||||||
|
// 重命名临时列表为目标列表
|
||||||
|
pipe.Rename(r.ctx, tempKey, key)
|
||||||
|
|
||||||
|
if expiration > 0 {
|
||||||
|
// 设置目标列表的过期时间
|
||||||
|
pipe.Expire(r.ctx, key, expiration)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行事务
|
||||||
|
_, err := pipe.Exec(r.ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEmptyListCache 设置空值缓存
|
||||||
|
func (r *RedisHelper) SetEmptyListCache(key string, expiration time.Duration) error {
|
||||||
|
// 使用一个特殊标志值表示列表为空
|
||||||
|
_, err := r.client.RPush(r.ctx, key, r.emptyCacheValue).Result()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置列表的过期时间
|
||||||
|
return r.client.Expire(r.ctx, key, expiration).Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanKeys 使用 SCAN 命令获取所有匹配的键
|
||||||
|
func (r *RedisHelper) ScanKeys(pattern string) ([]string, error) {
|
||||||
|
|
||||||
|
var cursor uint64
|
||||||
|
var keys []string
|
||||||
|
for {
|
||||||
|
var newKeys []string
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// SCAN 命令每次返回部分匹配的键
|
||||||
|
newKeys, cursor, err = r.client.Scan(r.ctx, cursor, pattern, 1000).Result()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
keys = append(keys, newKeys...)
|
||||||
|
if cursor == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return keys, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 泛型函数,用于获取所有键的列表数据并合并为一个数组
|
||||||
|
func GetAndMergeLists[T any](r *RedisHelper, keys []string) ([]T, error) {
|
||||||
|
var combinedList []T
|
||||||
|
for _, key := range keys {
|
||||||
|
// 获取每个键的列表数据
|
||||||
|
listData, err := r.client.LRange(r.ctx, key, 0, -1).Result()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解码每个数据项为类型 T,并添加到结果列表中
|
||||||
|
for _, data := range listData {
|
||||||
|
var item T
|
||||||
|
if err := sonic.Unmarshal([]byte(data), &item); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
combinedList = append(combinedList, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return combinedList, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNX 实现类似于 Redis 的 SETNX 命令
|
||||||
|
func (r *RedisHelper) SetNX(key string, value interface{}, expiration time.Duration) (bool, error) {
|
||||||
|
result, err := r.client.Set(r.ctx, key, value, expiration).Result()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果键不存在则 result 会等于 "OK"
|
||||||
|
return result == "OK", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFieldsFromStruct(obj interface{}) map[string]interface{} {
|
||||||
|
fields := make(map[string]interface{})
|
||||||
|
val := reflect.ValueOf(obj)
|
||||||
|
typ := reflect.TypeOf(obj)
|
||||||
|
|
||||||
|
for i := 0; i < val.NumField(); i++ {
|
||||||
|
field := typ.Field(i)
|
||||||
|
tag := field.Tag.Get("redis")
|
||||||
|
if tag != "" {
|
||||||
|
fieldVal := val.Field(i)
|
||||||
|
if fieldVal.Kind() == reflect.Slice || fieldVal.Kind() == reflect.Map {
|
||||||
|
// 处理切片或映射类型
|
||||||
|
// 对于切片,使用索引作为字段名
|
||||||
|
if fieldVal.Kind() == reflect.Slice {
|
||||||
|
for j := 0; j < fieldVal.Len(); j++ {
|
||||||
|
elem := fieldVal.Index(j).Interface()
|
||||||
|
fields[fmt.Sprintf("%s_%d", tag, j)] = elem
|
||||||
|
}
|
||||||
|
} else if fieldVal.Kind() == reflect.Map {
|
||||||
|
// 对于映射,使用键作为字段名
|
||||||
|
for _, key := range fieldVal.MapKeys() {
|
||||||
|
elem := fieldVal.MapIndex(key).Interface()
|
||||||
|
fields[fmt.Sprintf("%s_%v", tag, key.Interface())] = elem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fields[tag] = fieldVal.Interface()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fields
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) SetHashWithTags(key string, obj interface{}) error {
|
||||||
|
fields := getFieldsFromStruct(obj)
|
||||||
|
_, err := r.client.HSet(r.ctx, key, fields).Result()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// HSetField 设置哈希中的一个字段
|
||||||
|
func (r *RedisHelper) HSetField(key, field string, value interface{}) error {
|
||||||
|
_, err := r.client.HSet(r.ctx, key, field, value).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error setting field %s in hash %s: %v", field, key, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HSetMultipleFields 设置哈希中的多个字段
|
||||||
|
func (r *RedisHelper) HSetMultipleFields(key string, fields map[string]interface{}) error {
|
||||||
|
_, err := r.client.HSet(r.ctx, key, fields).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error setting multiple fields in hash %s: %v", key, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HGetField 获取哈希中某个字段的值
|
||||||
|
func (r *RedisHelper) HGetField(key, field string) (string, error) {
|
||||||
|
val, err := r.client.HGet(r.ctx, key, field).Result()
|
||||||
|
if err != nil {
|
||||||
|
if err == redis.Nil {
|
||||||
|
return "", nil // Field does not exist
|
||||||
|
}
|
||||||
|
log.Printf("Error getting field %s from hash %s: %v", field, key, err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return val, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HGetAllFields 获取哈希中所有字段的值
|
||||||
|
func (r *RedisHelper) HGetAllFields(key string) (map[string]string, error) {
|
||||||
|
fields, err := r.client.HGetAll(r.ctx, key).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting all fields from hash %s: %v", key, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return fields, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HDelField 删除哈希中的某个字段
|
||||||
|
func (r *RedisHelper) HDelField(key, field string) error {
|
||||||
|
_, err := r.client.HDel(r.ctx, key, field).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error deleting field %s from hash %s: %v", field, key, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除哈希
|
||||||
|
func (r *RedisHelper) HDelAll(key string) error {
|
||||||
|
_, err := r.client.Del(r.ctx, key).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error deleting from hash %s: %v", key, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HKeys 获取哈希中所有字段的名字
|
||||||
|
func (r *RedisHelper) HKeys(key string) ([]string, error) {
|
||||||
|
fields, err := r.client.HKeys(r.ctx, key).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting keys from hash %s: %v", key, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return fields, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) HExists(key, field, value string) (bool, error) {
|
||||||
|
exists, err := r.client.HExists(r.ctx, key, field).Result()
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("check existence failed: %v", err)
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
storedValue, err := r.client.HGet(r.ctx, key, field).Result()
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("get value failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果值是 JSON,比较前反序列化
|
||||||
|
var storedObj, inputObj interface{}
|
||||||
|
if err := sonic.UnmarshalString(storedValue, &storedObj); err != nil {
|
||||||
|
return false, fmt.Errorf("unmarshal stored value failed: %v", err)
|
||||||
|
}
|
||||||
|
if err := sonic.UnmarshalString(value, &inputObj); err != nil {
|
||||||
|
return false, fmt.Errorf("unmarshal input value failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 比较两个对象(需要根据实际类型调整)
|
||||||
|
return fmt.Sprintf("%v", storedObj) == fmt.Sprintf("%v", inputObj), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DelSet 从集合中删除元素
|
||||||
|
func (r *RedisHelper) DelSet(key string, value string) error {
|
||||||
|
_, err := r.client.SRem(r.ctx, key, value).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error del value from set %s: %v", key, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RedisHelper) Sismember(key string, value string) (bool, error) {
|
||||||
|
result, err := r.client.SIsMember(r.ctx, key, value).Result()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Sismember value from set %s: %v", key, err)
|
||||||
|
}
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort set start
|
||||||
|
// 批量添加
|
||||||
|
func (r *RedisHelper) BatchSortSet(key string, array []*redis.Z) error {
|
||||||
|
pipe := r.client.Pipeline()
|
||||||
|
for _, val := range array {
|
||||||
|
pipe.ZAdd(r.ctx, key, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := pipe.Exec(r.ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单一写入 sort set
|
||||||
|
func (e *RedisHelper) SignelAdd(key string, score float64, member string) error {
|
||||||
|
// 先删除具有相同 score 的所有成员
|
||||||
|
scoreStr := strconv.FormatFloat(score, 'g', -1, 64)
|
||||||
|
_, err := e.client.ZRemRangeByScore(e.ctx, key, scoreStr, scoreStr).Result()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("删除score失败,err:%s", err.Error())
|
||||||
|
}
|
||||||
|
_, err = e.client.ZAdd(e.ctx, key, &redis.Z{
|
||||||
|
Score: score,
|
||||||
|
Member: member,
|
||||||
|
}).Result()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入数据
|
||||||
|
func (e *RedisHelper) AddSortSet(key string, score float64, member string) error {
|
||||||
|
_, err := e.client.ZAdd(e.ctx, key, &redis.Z{
|
||||||
|
Score: score,
|
||||||
|
Member: member,
|
||||||
|
}).Result()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除指定元素
|
||||||
|
func (e *RedisHelper) DelSortSet(key, member string) error {
|
||||||
|
return e.client.ZRem(e.ctx, key, member).Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveBeforeScore 移除 Sorted Set 中分数小于等于指定值的数据
|
||||||
|
// key: Sorted Set 的键
|
||||||
|
// score: 分数上限,所有小于等于此分数的元素将被移除
|
||||||
|
// 返回值: 移除的元素数量和可能的错误
|
||||||
|
func (e *RedisHelper) RemoveBeforeScore(key string, score float64) (int64, error) {
|
||||||
|
if key == "" {
|
||||||
|
return 0, errors.New("key 不能为空")
|
||||||
|
}
|
||||||
|
if math.IsNaN(score) || math.IsInf(score, 0) {
|
||||||
|
return 0, errors.New("score 必须是有效数字")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用 ZRemRangeByScore 移除数据
|
||||||
|
count, err := e.client.ZRemRangeByScore(e.ctx, key, "-inf", strconv.FormatFloat(score, 'f', -1, 64)).Result()
|
||||||
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("移除 Sorted Set 数据失败, key: %s, score: %f, err: %v", key, score, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return count, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNextAfterScore 获取指定分数及之后的第一条数据(包含指定分数)
|
||||||
|
func (e *RedisHelper) GetNextAfterScore(key string, score float64) (string, error) {
|
||||||
|
// 使用 ZRangeByScore 获取大于等于 score 的第一条数据
|
||||||
|
zs, err := e.client.ZRangeByScoreWithScores(e.ctx, key, &redis.ZRangeBy{
|
||||||
|
Min: fmt.Sprintf("%f", score), // 包含指定分数
|
||||||
|
Max: "+inf", // 上限为正无穷
|
||||||
|
Offset: 0, // 从第 0 条开始
|
||||||
|
Count: 1, // 只取 1 条
|
||||||
|
}).Result()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("获取数据失败: %v", err)
|
||||||
|
}
|
||||||
|
if len(zs) == 0 {
|
||||||
|
return "", nil // 没有符合条件的元素
|
||||||
|
}
|
||||||
|
return zs[0].Member.(string), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
获取sort set 所有数据
|
||||||
|
*/
|
||||||
|
func (e *RedisHelper) GetAllSortSet(key string) ([]string, error) {
|
||||||
|
return e.client.ZRange(e.ctx, key, 0, -1).Result()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
获取sort set 所有数据和score
|
||||||
|
*/
|
||||||
|
func (e *RedisHelper) GetRevRangeScoresSortSet(key string) ([]redis.Z, error) {
|
||||||
|
return e.client.ZRevRangeWithScores(e.ctx, key, 0, -1).Result()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取最后一条数据
|
||||||
|
func (e *RedisHelper) GetLastSortSet(key string) ([]redis.Z, error) {
|
||||||
|
// 获取最后一个元素及其分数
|
||||||
|
results, err := e.client.ZRevRangeWithScores(e.ctx, key, 0, 0).Result()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get last member: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果没有数据,返回空
|
||||||
|
if len(results) == 0 {
|
||||||
|
return []redis.Z{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return results, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取指定区间数据
|
||||||
|
func (e *RedisHelper) GetSortSetMembers(key string, start, stop int64) ([]string, error) {
|
||||||
|
return e.client.ZRange(e.ctx, key, start, stop).Result()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取最后N条数据
|
||||||
|
func (e *RedisHelper) GetLastSortSetMembers(key string, num int64) ([]string, error) {
|
||||||
|
return e.client.ZRevRange(e.ctx, key, 0, num).Result()
|
||||||
|
}
|
||||||
|
|
||||||
|
// func (e *RedisHelper) DelSortSet(key,)
|
||||||
|
|
||||||
|
// 根据索引范围删除
|
||||||
|
func (e *RedisHelper) DelByRank(key string, start, stop int64) error {
|
||||||
|
return e.client.ZRemRangeByRank(e.ctx, key, start, stop).Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort set end
|
||||||
|
|
||||||
|
// GetUserLoginPwdErrFre 获取用户登录密码错误频次
|
||||||
|
func (e *RedisHelper) GetUserLoginPwdErrFre(key string) (total int, wait time.Duration, err error) {
|
||||||
|
total, _ = e.client.Get(e.ctx, key).Int()
|
||||||
|
wait = e.client.TTL(e.ctx, key).Val()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUserLoginPwdErrFre 设置用户登录密码错误频次
|
||||||
|
func (e *RedisHelper) SetUserLoginPwdErrFre(key string, expire time.Duration) (val int64, err error) {
|
||||||
|
val, err = e.client.Incr(e.ctx, key).Result()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = e.client.Expire(e.ctx, key, expire).Err(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
@ -3,14 +3,24 @@ package config
|
|||||||
var ExtConfig Extend
|
var ExtConfig Extend
|
||||||
|
|
||||||
// Extend 扩展配置
|
// Extend 扩展配置
|
||||||
// extend:
|
//
|
||||||
// demo:
|
// extend:
|
||||||
// name: demo-name
|
// demo:
|
||||||
|
// name: demo-name
|
||||||
|
//
|
||||||
// 使用方法: config.ExtConfig......即可!!
|
// 使用方法: config.ExtConfig......即可!!
|
||||||
type Extend struct {
|
type Extend struct {
|
||||||
AMap AMap // 这里配置对应配置文件的结构即可
|
AMap AMap // 这里配置对应配置文件的结构即可
|
||||||
|
Redis RedisConfig `mapstructure:"redis"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AMap struct {
|
type AMap struct {
|
||||||
Key string
|
Key string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// redis配置
|
||||||
|
type RedisConfig struct {
|
||||||
|
Addr string
|
||||||
|
Password string
|
||||||
|
Db int
|
||||||
|
}
|
||||||
|
|||||||
@ -48,6 +48,11 @@ settings:
|
|||||||
extend: # 扩展项使用说明
|
extend: # 扩展项使用说明
|
||||||
demo:
|
demo:
|
||||||
name: data
|
name: data
|
||||||
|
# redis 配置
|
||||||
|
redis:
|
||||||
|
addr: "127.0.0.1:6379"
|
||||||
|
password: ""
|
||||||
|
db: 3
|
||||||
cache:
|
cache:
|
||||||
# redis:
|
# redis:
|
||||||
# addr: 127.0.0.1:6379
|
# addr: 127.0.0.1:6379
|
||||||
|
|||||||
2
go.mod
2
go.mod
@ -56,6 +56,7 @@ require (
|
|||||||
github.com/chanxuehong/rand v0.0.0-20211009035549-2f07823e8e99 // indirect
|
github.com/chanxuehong/rand v0.0.0-20211009035549-2f07823e8e99 // indirect
|
||||||
github.com/chanxuehong/wechat v0.0.0-20230222024006-36f0325263cd // indirect
|
github.com/chanxuehong/wechat v0.0.0-20230222024006-36f0325263cd // indirect
|
||||||
github.com/cloudwego/base64x v0.1.5 // indirect
|
github.com/cloudwego/base64x v0.1.5 // indirect
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
|
||||||
@ -73,6 +74,7 @@ require (
|
|||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
||||||
|
github.com/go-redis/redis/v8 v8.11.5 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.9.2 // indirect
|
github.com/go-sql-driver/mysql v1.9.2 // indirect
|
||||||
github.com/goccy/go-json v0.10.5 // indirect
|
github.com/goccy/go-json v0.10.5 // indirect
|
||||||
github.com/gofrs/flock v0.8.1 // indirect
|
github.com/gofrs/flock v0.8.1 // indirect
|
||||||
|
|||||||
Reference in New Issue
Block a user