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 { | ||||||
| @ -25,4 +24,4 @@ func (e *MmWhiteTemplate) Generate() models.ActiveRecord { | |||||||
|  |  | ||||||
| func (e *MmWhiteTemplate) GetId() interface{} { | func (e *MmWhiteTemplate) GetId() interface{} { | ||||||
| 	return e.Id | 	return e.Id | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										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