1、消息提示
This commit is contained in:
		
							
								
								
									
										217
									
								
								app/admin/apis/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								app/admin/apis/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,217 @@ | |||||||
|  | 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 MmAlarmLog struct { | ||||||
|  | 	api.Api | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GetPage 获取钱包告警记录列表 | ||||||
|  | // @Summary 获取钱包告警记录列表 | ||||||
|  | // @Description 获取钱包告警记录列表 | ||||||
|  | // @Tags 钱包告警记录 | ||||||
|  | // @Param machineId query string false "设备id" | ||||||
|  | // @Param biosId query string false "设备码" | ||||||
|  | // @Param pageSize query int false "页条数" | ||||||
|  | // @Param pageIndex query int false "页码" | ||||||
|  | // @Success 200 {object} response.Response{data=response.Page{list=[]models.MmAlarmLog}} "{"code": 200, "data": [...]}" | ||||||
|  | // @Router /api/v1/mm-alarm-log [get] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmAlarmLog) GetPage(c *gin.Context) { | ||||||
|  | 	req := dto.MmAlarmLogGetPageReq{} | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	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.MmAlarmLog, 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.MmAlarmLog} "{"code": 200, "data": [...]}" | ||||||
|  | // @Router /api/v1/mm-alarm-log/{id} [get] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmAlarmLog) Get(c *gin.Context) { | ||||||
|  | 	req := dto.MmAlarmLogGetReq{} | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	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.MmAlarmLog | ||||||
|  |  | ||||||
|  | 	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.MmAlarmLogInsertReq true "data" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "添加成功"}" | ||||||
|  | // @Router /api/v1/mm-alarm-log [post] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmAlarmLog) Insert(c *gin.Context) { | ||||||
|  | 	req := dto.MmAlarmLogInsertReq{} | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	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.MmAlarmLogUpdateReq true "body" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}" | ||||||
|  | // @Router /api/v1/mm-alarm-log/{id} [put] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmAlarmLog) Update(c *gin.Context) { | ||||||
|  | 	req := dto.MmAlarmLogUpdateReq{} | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	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.MmAlarmLogDeleteReq true "body" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}" | ||||||
|  | // @Router /api/v1/mm-alarm-log [delete] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmAlarmLog) Delete(c *gin.Context) { | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	req := dto.MmAlarmLogDeleteReq{} | ||||||
|  | 	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(), "删除成功") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ClearAll 清空钱包告警记录 | ||||||
|  | func (e MmAlarmLog) ClearAll(c *gin.Context) { | ||||||
|  | 	s := service.MmAlarmLog{} | ||||||
|  | 	err := e.MakeContext(c). | ||||||
|  | 		MakeOrm(). | ||||||
|  | 		MakeService(&s.Service). | ||||||
|  | 		Errors | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Error(500, err, err.Error()) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	p := actions.GetPermissionFromContext(c) | ||||||
|  |  | ||||||
|  | 	err = s.ClearAll(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Error(500, err, fmt.Sprintf("清空钱包告警记录失败,\r\n失败信息 %s", err.Error())) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.OK(nil, "清空成功") | ||||||
|  | } | ||||||
							
								
								
									
										236
									
								
								app/admin/apis/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								app/admin/apis/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,236 @@ | |||||||
|  | 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 MmWalletWhiteList struct { | ||||||
|  | 	api.Api | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GetPage 获取钱包白名单列表 | ||||||
|  | // @Summary 获取钱包白名单列表 | ||||||
|  | // @Description 获取钱包白名单列表 | ||||||
|  | // @Tags 钱包白名单 | ||||||
|  | // @Param address query string false "钱包地址" | ||||||
|  | // @Param status query string false "是否启用" | ||||||
|  | // @Param pageSize query int false "页条数" | ||||||
|  | // @Param pageIndex query int false "页码" | ||||||
|  | // @Success 200 {object} response.Response{data=response.Page{list=[]models.MmWalletWhiteList}} "{"code": 200, "data": [...]}" | ||||||
|  | // @Router /api/v1/mm-wallet-white-list [get] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmWalletWhiteList) GetPage(c *gin.Context) { | ||||||
|  | 	req := dto.MmWalletWhiteListGetPageReq{} | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	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.MmWalletWhiteList, 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.MmWalletWhiteList} "{"code": 200, "data": [...]}" | ||||||
|  | // @Router /api/v1/mm-wallet-white-list/{id} [get] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmWalletWhiteList) Get(c *gin.Context) { | ||||||
|  | 	req := dto.MmWalletWhiteListGetReq{} | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	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.MmWalletWhiteList | ||||||
|  |  | ||||||
|  | 	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.MmWalletWhiteListInsertReq true "data" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "添加成功"}" | ||||||
|  | // @Router /api/v1/mm-wallet-white-list [post] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmWalletWhiteList) Insert(c *gin.Context) { | ||||||
|  | 	req := dto.MmWalletWhiteListInsertReq{} | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	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 req.Address == "" { | ||||||
|  | 		e.Error(500, err, "钱包地址不能为空") | ||||||
|  | 		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.MmWalletWhiteListUpdateReq true "body" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "修改成功"}" | ||||||
|  | // @Router /api/v1/mm-wallet-white-list/{id} [put] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmWalletWhiteList) Update(c *gin.Context) { | ||||||
|  | 	req := dto.MmWalletWhiteListUpdateReq{} | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	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 req.Address == "" { | ||||||
|  | 		e.Error(500, err, "钱包地址不能为空") | ||||||
|  | 		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(), "修改成功") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // BatchInsert 批量创建钱包白名单 | ||||||
|  | func (e MmWalletWhiteList) BatchInsert(c *gin.Context) { | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	req := dto.MmWalletWhiteListBatchInsertReq{} | ||||||
|  | 	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 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	addresss, err := req.GetAddresss() | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Error(500, nil, err.Error()) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	err = s.BatchInsert(addresss, user.GetUserId(c)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Error(500, err, fmt.Sprintf("批量创建钱包白名单失败,\r\n失败信息 %s", err.Error())) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.OK(nil, "批量创建成功") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Delete 删除钱包白名单 | ||||||
|  | // @Summary 删除钱包白名单 | ||||||
|  | // @Description 删除钱包白名单 | ||||||
|  | // @Tags 钱包白名单 | ||||||
|  | // @Param data body dto.MmWalletWhiteListDeleteReq true "body" | ||||||
|  | // @Success 200 {object} response.Response	"{"code": 200, "message": "删除成功"}" | ||||||
|  | // @Router /api/v1/mm-wallet-white-list [delete] | ||||||
|  | // @Security Bearer | ||||||
|  | func (e MmWalletWhiteList) Delete(c *gin.Context) { | ||||||
|  | 	s := service.MmWalletWhiteList{} | ||||||
|  | 	req := dto.MmWalletWhiteListDeleteReq{} | ||||||
|  | 	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(), "删除成功") | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								app/admin/models/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/admin/models/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | package models | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |  | ||||||
|  | 	"go-admin/common/models" | ||||||
|  |  | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type MmAlarmLog struct { | ||||||
|  |     models.Model | ||||||
|  |      | ||||||
|  |     MachineId string `json:"machineId" gorm:"type:varchar(255);comment:设备id"`  | ||||||
|  |     BiosId string `json:"biosId" gorm:"type:varchar(255);comment:设备码"`  | ||||||
|  |     Content string `json:"content" gorm:"type:varchar(255);comment:内容"`  | ||||||
|  |     models.ModelTime | ||||||
|  |     models.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (MmAlarmLog) TableName() string { | ||||||
|  |     return "mm_alarm_log" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (e *MmAlarmLog) Generate() models.ActiveRecord { | ||||||
|  | 	o := *e | ||||||
|  | 	return &o | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (e *MmAlarmLog) GetId() interface{} { | ||||||
|  | 	return e.Id | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								app/admin/models/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								app/admin/models/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | package models | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"go-admin/common/models" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type MmWalletWhiteList struct { | ||||||
|  | 	models.Model | ||||||
|  |  | ||||||
|  | 	Address string `json:"address" gorm:"type:varchar(255);comment:钱包地址"` | ||||||
|  | 	Status  int    `json:"status" gorm:"type:tinyint;comment:是否启用"` | ||||||
|  | 	models.ModelTime | ||||||
|  | 	models.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (MmWalletWhiteList) TableName() string { | ||||||
|  | 	return "mm_wallet_white_list" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (e *MmWalletWhiteList) Generate() models.ActiveRecord { | ||||||
|  | 	o := *e | ||||||
|  | 	return &o | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (e *MmWalletWhiteList) GetId() interface{} { | ||||||
|  | 	return e.Id | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								app/admin/router/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								app/admin/router/mm_alarm_log.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, registerMmAlarmLogRouter) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // registerMmAlarmLogRouter | ||||||
|  | func registerMmAlarmLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { | ||||||
|  | 	api := apis.MmAlarmLog{} | ||||||
|  | 	r := v1.Group("/mm-alarm-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-all", actions.PermissionAction(), api.ClearAll) //清理所有数据 | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								app/admin/router/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								app/admin/router/mm_wallet_white_list.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, registerMmWalletWhiteListRouter) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // registerMmWalletWhiteListRouter | ||||||
|  | func registerMmWalletWhiteListRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { | ||||||
|  | 	api := apis.MmWalletWhiteList{} | ||||||
|  | 	r := v1.Group("/mm-wallet-white-list").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.POST("batch", api.BatchInsert) | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -2,6 +2,7 @@ package router | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"go-admin/app/admin/apis" | 	"go-admin/app/admin/apis" | ||||||
|  | 	"go-admin/app/websocket" | ||||||
| 	"mime" | 	"mime" | ||||||
|  |  | ||||||
| 	"github.com/go-admin-team/go-admin-core/sdk/config" | 	"github.com/go-admin-team/go-admin-core/sdk/config" | ||||||
| @ -13,6 +14,7 @@ import ( | |||||||
|  |  | ||||||
| 	swaggerfiles "github.com/swaggo/files" | 	swaggerfiles "github.com/swaggo/files" | ||||||
|  |  | ||||||
|  | 	"go-admin/common/global" | ||||||
| 	"go-admin/common/middleware" | 	"go-admin/common/middleware" | ||||||
| 	"go-admin/common/middleware/handler" | 	"go-admin/common/middleware/handler" | ||||||
| 	_ "go-admin/docs/admin" | 	_ "go-admin/docs/admin" | ||||||
| @ -60,10 +62,15 @@ func sysSwaggerRouter(r *gin.RouterGroup) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { | func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { | ||||||
|  | 	hub := websocket.NewHub() | ||||||
|  | 	global.WebSocketHub = hub // 👈 挂到全局 | ||||||
|  | 	go global.WebSocketHub.Run() | ||||||
|  |  | ||||||
| 	wss := r.Group("").Use(authMiddleware.MiddlewareFunc()) | 	wss := r.Group("").Use(authMiddleware.MiddlewareFunc()) | ||||||
| 	{ | 	{ | ||||||
| 		wss.GET("/ws/:id/:channel", ws.WebsocketManager.WsClient) | 		wss.GET("/ws", websocket.ServeWS(hub)) | ||||||
| 		wss.GET("/wslogout/:id/:channel", ws.WebsocketManager.UnWsClient) | 		// wss.GET("/ws/:id/:channel", ws.WebsocketManager.WsClient) | ||||||
|  | 		// wss.GET("/wslogout/:id/:channel", ws.WebsocketManager.UnWsClient) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	v1 := r.Group("/api/v1") | 	v1 := r.Group("/api/v1") | ||||||
|  | |||||||
							
								
								
									
										93
									
								
								app/admin/service/dto/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								app/admin/service/dto/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | |||||||
|  | package dto | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |  | ||||||
|  | 	"go-admin/app/admin/models" | ||||||
|  | 	"go-admin/common/dto" | ||||||
|  | 	common "go-admin/common/models" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type MmAlarmLogGetPageReq struct { | ||||||
|  | 	dto.Pagination     `search:"-"` | ||||||
|  |     MachineId string `form:"machineId"  search:"type:exact;column:machine_id;table:mm_alarm_log" comment:"设备id"` | ||||||
|  |     BiosId string `form:"biosId"  search:"type:exact;column:bios_id;table:mm_alarm_log" comment:"设备码"` | ||||||
|  |     MmAlarmLogOrder | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmAlarmLogOrder struct { | ||||||
|  |     Id string `form:"idOrder"  search:"type:order;column:id;table:mm_alarm_log"` | ||||||
|  |     MachineId string `form:"machineIdOrder"  search:"type:order;column:machine_id;table:mm_alarm_log"` | ||||||
|  |     BiosId string `form:"biosIdOrder"  search:"type:order;column:bios_id;table:mm_alarm_log"` | ||||||
|  |     Content string `form:"contentOrder"  search:"type:order;column:content;table:mm_alarm_log"` | ||||||
|  |     CreatedAt string `form:"createdAtOrder"  search:"type:order;column:created_at;table:mm_alarm_log"` | ||||||
|  |     UpdatedAt string `form:"updatedAtOrder"  search:"type:order;column:updated_at;table:mm_alarm_log"` | ||||||
|  |     DeletedAt string `form:"deletedAtOrder"  search:"type:order;column:deleted_at;table:mm_alarm_log"` | ||||||
|  |     CreateBy string `form:"createByOrder"  search:"type:order;column:create_by;table:mm_alarm_log"` | ||||||
|  |     UpdateBy string `form:"updateByOrder"  search:"type:order;column:update_by;table:mm_alarm_log"` | ||||||
|  |      | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *MmAlarmLogGetPageReq) GetNeedSearch() interface{} { | ||||||
|  | 	return *m | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmAlarmLogInsertReq struct { | ||||||
|  |     Id int `json:"-" comment:"主键id"` // 主键id | ||||||
|  |     MachineId string `json:"machineId" comment:"设备id"` | ||||||
|  |     BiosId string `json:"biosId" comment:"设备码"` | ||||||
|  |     Content string `json:"content" comment:"内容"` | ||||||
|  |     common.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmAlarmLogInsertReq) Generate(model *models.MmAlarmLog)  { | ||||||
|  |     if s.Id == 0 { | ||||||
|  |         model.Model = common.Model{ Id: s.Id } | ||||||
|  |     } | ||||||
|  |     model.MachineId = s.MachineId | ||||||
|  |     model.BiosId = s.BiosId | ||||||
|  |     model.Content = s.Content | ||||||
|  |     model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmAlarmLogInsertReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmAlarmLogUpdateReq struct { | ||||||
|  |     Id int `uri:"id" comment:"主键id"` // 主键id | ||||||
|  |     MachineId string `json:"machineId" comment:"设备id"` | ||||||
|  |     BiosId string `json:"biosId" comment:"设备码"` | ||||||
|  |     Content string `json:"content" comment:"内容"` | ||||||
|  |     common.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmAlarmLogUpdateReq) Generate(model *models.MmAlarmLog)  { | ||||||
|  |     if s.Id == 0 { | ||||||
|  |         model.Model = common.Model{ Id: s.Id } | ||||||
|  |     } | ||||||
|  |     model.MachineId = s.MachineId | ||||||
|  |     model.BiosId = s.BiosId | ||||||
|  |     model.Content = s.Content | ||||||
|  |     model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmAlarmLogUpdateReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MmAlarmLogGetReq 功能获取请求参数 | ||||||
|  | type MmAlarmLogGetReq struct { | ||||||
|  |      Id int `uri:"id"` | ||||||
|  | } | ||||||
|  | func (s *MmAlarmLogGetReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MmAlarmLogDeleteReq 功能删除请求参数 | ||||||
|  | type MmAlarmLogDeleteReq struct { | ||||||
|  | 	Ids []int `json:"ids"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmAlarmLogDeleteReq) GetId() interface{} { | ||||||
|  | 	return s.Ids | ||||||
|  | } | ||||||
							
								
								
									
										113
									
								
								app/admin/service/dto/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								app/admin/service/dto/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | package dto | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"errors" | ||||||
|  | 	"go-admin/app/admin/models" | ||||||
|  | 	"go-admin/common/dto" | ||||||
|  | 	common "go-admin/common/models" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type MmWalletWhiteListGetPageReq struct { | ||||||
|  | 	dto.Pagination `search:"-"` | ||||||
|  | 	Address        string `form:"address"  search:"type:contains;column:address;table:mm_wallet_white_list" comment:"钱包地址"` | ||||||
|  | 	Status         string `form:"status"  search:"type:exact;column:status;table:mm_wallet_white_list" comment:"是否启用"` | ||||||
|  | 	MmWalletWhiteListOrder | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmWalletWhiteListOrder struct { | ||||||
|  | 	Id        string `form:"idOrder"  search:"type:order;column:id;table:mm_wallet_white_list"` | ||||||
|  | 	Address   string `form:"addressOrder"  search:"type:order;column:address;table:mm_wallet_white_list"` | ||||||
|  | 	Status    string `form:"statusOrder"  search:"type:order;column:status;table:mm_wallet_white_list"` | ||||||
|  | 	CreatedAt string `form:"createdAtOrder"  search:"type:order;column:created_at;table:mm_wallet_white_list"` | ||||||
|  | 	UpdatedAt string `form:"updatedAtOrder"  search:"type:order;column:updated_at;table:mm_wallet_white_list"` | ||||||
|  | 	DeletedAt string `form:"deletedAtOrder"  search:"type:order;column:deleted_at;table:mm_wallet_white_list"` | ||||||
|  | 	CreateBy  string `form:"createByOrder"  search:"type:order;column:create_by;table:mm_wallet_white_list"` | ||||||
|  | 	UpdateBy  string `form:"updateByOrder"  search:"type:order;column:update_by;table:mm_wallet_white_list"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *MmWalletWhiteListGetPageReq) GetNeedSearch() interface{} { | ||||||
|  | 	return *m | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmWalletWhiteListBatchInsertReq struct { | ||||||
|  | 	Addresss string `json:"addresss" comment:"钱包地址"` | ||||||
|  | 	common.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListBatchInsertReq) GetAddresss() ([]string, error) { | ||||||
|  | 	result := []string{} | ||||||
|  | 	items := strings.Split(strings.ReplaceAll(s.Addresss, " ", ""), "\n") | ||||||
|  |  | ||||||
|  | 	for _, item := range items { | ||||||
|  | 		if item != "" { | ||||||
|  | 			result = append(result, strings.ToLower(item)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(result) == 0 { | ||||||
|  | 		return nil, errors.New("钱包地址不能为空") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmWalletWhiteListInsertReq struct { | ||||||
|  | 	Id      int    `json:"-" comment:"主键"` // 主键 | ||||||
|  | 	Address string `json:"address" comment:"钱包地址"` | ||||||
|  | 	Status  int    `json:"status" comment:"是否启用"` | ||||||
|  | 	common.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListInsertReq) Generate(model *models.MmWalletWhiteList) { | ||||||
|  | 	if s.Id == 0 { | ||||||
|  | 		model.Model = common.Model{Id: s.Id} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	model.Address = strings.ToLower(s.Address) | ||||||
|  | 	model.Status = s.Status | ||||||
|  | 	model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListInsertReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type MmWalletWhiteListUpdateReq struct { | ||||||
|  | 	Id      int    `uri:"id" comment:"主键"` // 主键 | ||||||
|  | 	Address string `json:"address" comment:"钱包地址"` | ||||||
|  | 	Status  int    `json:"status" comment:"是否启用"` | ||||||
|  | 	common.ControlBy | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListUpdateReq) Generate(model *models.MmWalletWhiteList) { | ||||||
|  | 	if s.Id == 0 { | ||||||
|  | 		model.Model = common.Model{Id: s.Id} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	model.Address = strings.ToLower(s.Address) | ||||||
|  | 	model.Status = s.Status | ||||||
|  | 	model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListUpdateReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MmWalletWhiteListGetReq 功能获取请求参数 | ||||||
|  | type MmWalletWhiteListGetReq struct { | ||||||
|  | 	Id int `uri:"id"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListGetReq) GetId() interface{} { | ||||||
|  | 	return s.Id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MmWalletWhiteListDeleteReq 功能删除请求参数 | ||||||
|  | type MmWalletWhiteListDeleteReq struct { | ||||||
|  | 	Ids []int `json:"ids"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *MmWalletWhiteListDeleteReq) GetId() interface{} { | ||||||
|  | 	return s.Ids | ||||||
|  | } | ||||||
							
								
								
									
										118
									
								
								app/admin/service/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								app/admin/service/mm_alarm_log.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | |||||||
|  | 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 MmAlarmLog struct { | ||||||
|  | 	service.Service | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 清除所有记录 | ||||||
|  | func (e MmAlarmLog) ClearAll(p *actions.DataPermission) error { | ||||||
|  | 	if err := e.Orm.Exec("TRUNCATE TABLE mm_alarm_log;").Error; err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GetPage 获取MmAlarmLog列表 | ||||||
|  | func (e *MmAlarmLog) GetPage(c *dto.MmAlarmLogGetPageReq, p *actions.DataPermission, list *[]models.MmAlarmLog, count *int64) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data models.MmAlarmLog | ||||||
|  |  | ||||||
|  | 	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("MmAlarmLogService GetPage error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Get 获取MmAlarmLog对象 | ||||||
|  | func (e *MmAlarmLog) Get(d *dto.MmAlarmLogGetReq, p *actions.DataPermission, model *models.MmAlarmLog) error { | ||||||
|  | 	var data models.MmAlarmLog | ||||||
|  |  | ||||||
|  | 	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 GetMmAlarmLog error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("db error:%s", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Insert 创建MmAlarmLog对象 | ||||||
|  | func (e *MmAlarmLog) Insert(c *dto.MmAlarmLogInsertReq) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data models.MmAlarmLog | ||||||
|  | 	c.Generate(&data) | ||||||
|  | 	err = e.Orm.Create(&data).Error | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("MmAlarmLogService Insert error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Update 修改MmAlarmLog对象 | ||||||
|  | func (e *MmAlarmLog) Update(c *dto.MmAlarmLogUpdateReq, p *actions.DataPermission) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data = models.MmAlarmLog{} | ||||||
|  | 	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("MmAlarmLogService Save error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if db.RowsAffected == 0 { | ||||||
|  | 		return errors.New("无权更新该数据") | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Remove 删除MmAlarmLog | ||||||
|  | func (e *MmAlarmLog) Remove(d *dto.MmAlarmLogDeleteReq, p *actions.DataPermission) error { | ||||||
|  | 	var data models.MmAlarmLog | ||||||
|  |  | ||||||
|  | 	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 RemoveMmAlarmLog error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if db.RowsAffected == 0 { | ||||||
|  | 		return errors.New("无权删除该数据") | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| @ -2,9 +2,10 @@ package service | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
|  | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| 	"github.com/go-admin-team/go-admin-core/logger" | 	"github.com/bytedance/sonic" | ||||||
| 	"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" | ||||||
|  |  | ||||||
| @ -12,6 +13,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/global" | ||||||
|  | 	"go-admin/common/helper" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type MmRiskLog struct { | type MmRiskLog struct { | ||||||
| @ -146,8 +149,6 @@ func (e *MmRiskLog) Remove(d *dto.MmRiskLogDeleteReq, p *actions.DataPermission) | |||||||
| func (e *MmRiskLog) Save(req *dto.MmRiskLogBatchReq) error { | func (e *MmRiskLog) Save(req *dto.MmRiskLogBatchReq) error { | ||||||
| 	datas := make([]models.MmRiskLog, 0) | 	datas := make([]models.MmRiskLog, 0) | ||||||
|  |  | ||||||
| 	logger.Debug("req:%v", req) |  | ||||||
|  |  | ||||||
| 	for _, item := range req.Contents { | 	for _, item := range req.Contents { | ||||||
| 		data := models.MmRiskLog{} | 		data := models.MmRiskLog{} | ||||||
| 		data.MachineId = req.MachineId | 		data.MachineId = req.MachineId | ||||||
| @ -161,6 +162,73 @@ func (e *MmRiskLog) Save(req *dto.MmRiskLogBatchReq) error { | |||||||
| 		e.Log.Errorf("MmRiskLogService Save error:%s \r\n", err) | 		e.Log.Errorf("MmRiskLogService Save error:%s \r\n", err) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	helper.SafeGo(func() { | ||||||
|  | 		if err := e.SendMsg(datas); err != nil { | ||||||
|  | 			e.Log.Errorf("发送消息失败:%s", err) | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 发送消息并保存日志 | ||||||
|  | func (e *MmRiskLog) SendMsg(datas []models.MmRiskLog) error { | ||||||
|  | 	walletWhiteListService := MmWalletWhiteList{Service: e.Service} | ||||||
|  | 	addresss, err := walletWhiteListService.GetList() | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("获取白名单缓存失败:") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	alarmLogs := []models.MmAlarmLog{} | ||||||
|  | 	for _, item := range datas { | ||||||
|  | 		if helper.ArrayAny(addresss, item.Content) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		alarmLog := models.MmAlarmLog{} | ||||||
|  | 		alarmLog.MachineId = item.MachineId | ||||||
|  | 		alarmLog.BiosId = item.BiosId | ||||||
|  | 		alarmLog.Content = item.Content | ||||||
|  | 		alarmLogs = append(alarmLogs, alarmLog) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(alarmLogs) == 0 { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	userService := SysUser{Service: e.Service} | ||||||
|  | 	userIds, err := userService.GetByPermission("admin:mmAlarmLog:notice") | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("获取管理员失败:%s", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	userIdStr := []string{} | ||||||
|  |  | ||||||
|  | 	for _, item := range userIds { | ||||||
|  | 		userIdStr = append(userIdStr, strconv.Itoa(item)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if err := e.Orm.Save(&alarmLogs).Error; err != nil { | ||||||
|  | 		e.Log.Errorf("保存告警日志失败:%s", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for _, item := range alarmLogs { | ||||||
|  | 		notice := global.AlarmLogNotice{ | ||||||
|  | 			MachineId: item.MachineId, | ||||||
|  | 			BiosId:    item.BiosId, | ||||||
|  | 			Content:   item.Content, | ||||||
|  | 		} | ||||||
|  | 		vals, _ := sonic.Marshal(notice) | ||||||
|  |  | ||||||
|  | 		if vals != nil { | ||||||
|  | 			global.WebSocketHub.SendToAll(userIdStr, vals) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										180
									
								
								app/admin/service/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								app/admin/service/mm_wallet_white_list.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,180 @@ | |||||||
|  | package service | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"errors" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	"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 MmWalletWhiteList struct { | ||||||
|  | 	service.Service | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GetPage 获取MmWalletWhiteList列表 | ||||||
|  | func (e *MmWalletWhiteList) GetPage(c *dto.MmWalletWhiteListGetPageReq, p *actions.DataPermission, list *[]models.MmWalletWhiteList, count *int64) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data models.MmWalletWhiteList | ||||||
|  |  | ||||||
|  | 	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("MmWalletWhiteListService GetPage error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Get 获取MmWalletWhiteList对象 | ||||||
|  | func (e *MmWalletWhiteList) Get(d *dto.MmWalletWhiteListGetReq, p *actions.DataPermission, model *models.MmWalletWhiteList) error { | ||||||
|  | 	var data models.MmWalletWhiteList | ||||||
|  |  | ||||||
|  | 	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 GetMmWalletWhiteList error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("db error:%s", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Insert 创建MmWalletWhiteList对象 | ||||||
|  | func (e *MmWalletWhiteList) Insert(c *dto.MmWalletWhiteListInsertReq) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data models.MmWalletWhiteList | ||||||
|  | 	c.Generate(&data) | ||||||
|  |  | ||||||
|  | 	err = e.Orm.Create(&data).Error | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("MmWalletWhiteListService Insert error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.SaveCache() | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (e *MmWalletWhiteList) BatchInsert(addresss []string, userId int) error { | ||||||
|  | 	var err error | ||||||
|  | 	datas := make([]models.MmWalletWhiteList, 0) | ||||||
|  | 	for _, address := range addresss { | ||||||
|  | 		data := models.MmWalletWhiteList{ | ||||||
|  | 			Address: strings.ToLower(address), | ||||||
|  | 			Status:  1, | ||||||
|  | 		} | ||||||
|  | 		datas = append(datas, data) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	err = e.Orm.Save(&datas).Error | ||||||
|  |  | ||||||
|  | 	if err != nil { | ||||||
|  | 		e.Log.Errorf("MmWalletWhiteListService BatchInsert error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.SaveCache() | ||||||
|  |  | ||||||
|  | 	return err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Update 修改MmWalletWhiteList对象 | ||||||
|  | func (e *MmWalletWhiteList) Update(c *dto.MmWalletWhiteListUpdateReq, p *actions.DataPermission) error { | ||||||
|  | 	var err error | ||||||
|  | 	var data = models.MmWalletWhiteList{} | ||||||
|  | 	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("MmWalletWhiteListService Save error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if db.RowsAffected == 0 { | ||||||
|  | 		return errors.New("无权更新该数据") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.SaveCache() | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 保存缓存 | ||||||
|  | func (e *MmWalletWhiteList) SaveCache() error { | ||||||
|  | 	var datas []string | ||||||
|  | 	// var list []models.MmWalletWhiteList | ||||||
|  |  | ||||||
|  | 	if err := e.Orm.Model(&models.MmWalletWhiteList{}).Where("status =1").Distinct("address").Select("address").Find(&datas).Error; err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(datas) == 0 { | ||||||
|  | 		if err := helper.DefaultRedis.SetEmptyListCache(enums.WalletWhiteListKey, 0); err != nil { | ||||||
|  | 			e.Log.Errorf("MmWalletWhiteListService SaveCache error:%s \r\n", err) | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		if err := helper.DefaultRedis.SetListCache(enums.WalletWhiteListKey, 0, datas...); err != nil { | ||||||
|  | 			e.Log.Errorf("MmWalletWhiteListService SaveCache error:%s \r\n", err) | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Remove 删除MmWalletWhiteList | ||||||
|  | func (e *MmWalletWhiteList) Remove(d *dto.MmWalletWhiteListDeleteReq, p *actions.DataPermission) error { | ||||||
|  | 	var data models.MmWalletWhiteList | ||||||
|  |  | ||||||
|  | 	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 RemoveMmWalletWhiteList error:%s \r\n", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if db.RowsAffected == 0 { | ||||||
|  | 		return errors.New("无权删除该数据") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	e.SaveCache() | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获取白名单列表 | ||||||
|  | func (e *MmWalletWhiteList) GetList() ([]string, error) { | ||||||
|  | 	address, _ := helper.DefaultRedis.GetAllList(enums.WalletWhiteListKey) | ||||||
|  |  | ||||||
|  | 	if address == nil || len(address) == 0 { | ||||||
|  | 		err := e.Orm.Model(&models.MmWalletWhiteList{}).Where("status =1").Distinct("address").Select("address").Find(&address).Error | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return address, nil | ||||||
|  | } | ||||||
| @ -18,6 +18,26 @@ type SysUser struct { | |||||||
| 	service.Service | 	service.Service | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 根据权限获取user id | ||||||
|  | func (e SysUser) GetByPermission(permission string) ([]int, error) { | ||||||
|  | 	result := make([]int, 0) | ||||||
|  |  | ||||||
|  | 	if err := e.Orm.Raw(`select DISTINCT user_id from ( | ||||||
|  | select u.user_id from sys_user u | ||||||
|  | join sys_role r on r.role_id =u.role_id | ||||||
|  | where r.role_key='admin' | ||||||
|  | union all | ||||||
|  | select u.user_id from sys_user u | ||||||
|  | join sys_role_menu t on t.role_id =u.role_id | ||||||
|  | join sys_role r on r.role_id =u.role_id | ||||||
|  | join sys_menu sm on sm.menu_id=t.menu_id | ||||||
|  | where  sm.permission = ?) tt`, permission).Scan(&result).Error; err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return result, nil | ||||||
|  | } | ||||||
|  |  | ||||||
| // GetPage 获取SysUser列表 | // GetPage 获取SysUser列表 | ||||||
| func (e *SysUser) GetPage(c *dto.SysUserGetPageReq, p *actions.DataPermission, list *[]models.SysUser, count *int64) error { | func (e *SysUser) GetPage(c *dto.SysUserGetPageReq, p *actions.DataPermission, list *[]models.SysUser, count *int64) error { | ||||||
| 	var err error | 	var err error | ||||||
|  | |||||||
							
								
								
									
										84
									
								
								app/websocket/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								app/websocket/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,84 @@ | |||||||
|  | package websocket | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"log" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/gorilla/websocket" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Client struct { | ||||||
|  | 	ID         string | ||||||
|  | 	Conn       *websocket.Conn | ||||||
|  | 	Send       chan []byte | ||||||
|  | 	Context    context.Context | ||||||
|  | 	CancelFunc context.CancelFunc | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *Client) Read(hub *Hub) { | ||||||
|  | 	defer func() { | ||||||
|  | 		hub.Unregister <- c | ||||||
|  | 		c.Conn.Close() | ||||||
|  | 		log.Printf("Client %s disconnected\n", c.ID) | ||||||
|  | 		c.CancelFunc() | ||||||
|  | 	}() | ||||||
|  |  | ||||||
|  | 	c.Conn.SetReadLimit(512) | ||||||
|  | 	c.Conn.SetReadDeadline(time.Now().Add(60 * time.Second)) | ||||||
|  | 	c.Conn.SetPongHandler(func(string) error { | ||||||
|  | 		c.Conn.SetReadDeadline(time.Now().Add(60 * time.Second)) | ||||||
|  | 		return nil | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	for { | ||||||
|  | 		select { | ||||||
|  | 		case <-c.Context.Done(): | ||||||
|  | 			return | ||||||
|  | 		default: | ||||||
|  | 			_, message, err := c.Conn.ReadMessage() | ||||||
|  | 			if err != nil { | ||||||
|  | 				log.Printf("Read error from client %s: %v", c.ID, err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			log.Printf("Receive [%s]: %s", c.ID, message) | ||||||
|  | 			// 这里你可以把消息发给 hub.Broadcast 或业务处理 | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (c *Client) Write() { | ||||||
|  | 	ticker := time.NewTicker(54 * time.Second) // 小于读超时,保证ping及时发 | ||||||
|  | 	defer func() { | ||||||
|  | 		ticker.Stop() | ||||||
|  | 		c.Conn.Close() | ||||||
|  | 		c.CancelFunc() | ||||||
|  | 	}() | ||||||
|  |  | ||||||
|  | 	for { | ||||||
|  | 		select { | ||||||
|  | 		case <-c.Context.Done(): | ||||||
|  | 			return | ||||||
|  | 		case msg, ok := <-c.Send: | ||||||
|  | 			if !ok { | ||||||
|  | 				// 通道关闭,结束写入 | ||||||
|  | 				c.Conn.WriteMessage(websocket.CloseMessage, []byte{}) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			c.Conn.SetWriteDeadline(time.Now().Add(10 * time.Second)) | ||||||
|  | 			err := c.Conn.WriteMessage(websocket.TextMessage, msg) | ||||||
|  | 			if err != nil { | ||||||
|  | 				log.Printf("Write error to client %s: %v", c.ID, err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 		case <-ticker.C: | ||||||
|  | 			// 发送 ping | ||||||
|  | 			c.Conn.SetWriteDeadline(time.Now().Add(10 * time.Second)) | ||||||
|  | 			if err := c.Conn.WriteMessage(websocket.PingMessage, nil); err != nil { | ||||||
|  | 				log.Printf("Ping error to client %s: %v", c.ID, err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										55
									
								
								app/websocket/handler.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								app/websocket/handler.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | package websocket | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | 	"net/http" | ||||||
|  |  | ||||||
|  | 	"github.com/gin-gonic/gin" | ||||||
|  | 	"github.com/go-admin-team/go-admin-core/logger" | ||||||
|  | 	"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth" | ||||||
|  | 	"github.com/gorilla/websocket" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var upgrader = websocket.Upgrader{ | ||||||
|  | 	CheckOrigin: func(r *http.Request) bool { | ||||||
|  | 		return true // 允许跨域 | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func ServeWS(hub *Hub) gin.HandlerFunc { | ||||||
|  | 	return func(c *gin.Context) { | ||||||
|  | 		// 这里假设 JWT 中间件已验证,且用户 ID 在 Context | ||||||
|  | 		claims := jwtauth.ExtractClaims(c) | ||||||
|  | 		userID, ok := claims["identity"].(float64) | ||||||
|  | 		if !ok { | ||||||
|  | 			c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid user ID in token"}) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// 设置 Subprotocols 支持客户端传来的协议(token等) | ||||||
|  | 		upgrader.Subprotocols = []string{c.GetHeader("Sec-WebSocket-Protocol")} | ||||||
|  |  | ||||||
|  | 		conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) | ||||||
|  | 		if err != nil { | ||||||
|  | 			logger.Errorf("WebSocket upgrade failed: %v", err) | ||||||
|  | 			c.JSON(http.StatusBadRequest, gin.H{"error": "upgrade failed"}) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		ctx, cancel := context.WithCancel(context.Background()) | ||||||
|  |  | ||||||
|  | 		client := &Client{ | ||||||
|  | 			ID:         fmt.Sprintf("%v", userID), | ||||||
|  | 			Conn:       conn, | ||||||
|  | 			Send:       make(chan []byte, 1024), | ||||||
|  | 			Context:    ctx, | ||||||
|  | 			CancelFunc: cancel, | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		hub.Register <- client | ||||||
|  |  | ||||||
|  | 		go client.Read(hub) | ||||||
|  | 		go client.Write() | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										63
									
								
								app/websocket/hub.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								app/websocket/hub.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | package websocket | ||||||
|  |  | ||||||
|  | import "sync" | ||||||
|  |  | ||||||
|  | type Hub struct { | ||||||
|  | 	Clients    map[string]*Client | ||||||
|  | 	Register   chan *Client | ||||||
|  | 	Unregister chan *Client | ||||||
|  | 	mu         sync.RWMutex | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewHub() *Hub { | ||||||
|  | 	return &Hub{ | ||||||
|  | 		Clients:    make(map[string]*Client), | ||||||
|  | 		Register:   make(chan *Client), | ||||||
|  | 		Unregister: make(chan *Client), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (h *Hub) Run() { | ||||||
|  | 	for { | ||||||
|  | 		select { | ||||||
|  | 		case client := <-h.Register: | ||||||
|  | 			h.mu.Lock() | ||||||
|  | 			h.Clients[client.ID] = client | ||||||
|  | 			h.mu.Unlock() | ||||||
|  | 		case client := <-h.Unregister: | ||||||
|  | 			h.mu.Lock() | ||||||
|  | 			if _, ok := h.Clients[client.ID]; ok { | ||||||
|  | 				delete(h.Clients, client.ID) | ||||||
|  | 				close(client.Send) | ||||||
|  | 			} | ||||||
|  | 			h.mu.Unlock() | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (h *Hub) SendToClient(id string, msg []byte) { | ||||||
|  | 	h.mu.RLock() | ||||||
|  | 	defer h.mu.RUnlock() | ||||||
|  | 	if c, ok := h.Clients[id]; ok { | ||||||
|  | 		c.Send <- msg | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (h *Hub) SendToAll(ids []string, msg []byte) { | ||||||
|  | 	h.mu.RLock() | ||||||
|  | 	defer h.mu.RUnlock() | ||||||
|  |  | ||||||
|  | 	for _, id := range ids { | ||||||
|  | 		if c, ok := h.Clients[id]; ok { | ||||||
|  | 			c.Send <- msg | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (h *Hub) Broadcast(msg []byte) { | ||||||
|  | 	h.mu.RLock() | ||||||
|  | 	defer h.mu.RUnlock() | ||||||
|  | 	for _, client := range h.Clients { | ||||||
|  | 		client.Send <- msg | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -27,3 +27,8 @@ const ( | |||||||
| 	//系统配置缓存 | 	//系统配置缓存 | ||||||
| 	Config = "config:%s" | 	Config = "config:%s" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// 钱包白名单缓存 | ||||||
|  | 	WalletWhiteListKey = "wallet_white_list" | ||||||
|  | ) | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								common/global/websocket.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								common/global/websocket.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | package global | ||||||
|  |  | ||||||
|  | import "go-admin/app/websocket" | ||||||
|  |  | ||||||
|  | var WebSocketHub *websocket.Hub | ||||||
|  |  | ||||||
|  | type AlarmLogNotice struct { | ||||||
|  | 	MachineId string `json:"machineId"` | ||||||
|  | 	BiosId    string `json:"biosId"` | ||||||
|  | 	Content   string `json:"content"` | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								common/helper/safego.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								common/helper/safego.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | package helper | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"runtime" | ||||||
|  | 	"runtime/debug" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	"github.com/go-admin-team/go-admin-core/logger" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // SafeGo 安全地启动一个 goroutine,捕获 panic | ||||||
|  | func SafeGo(fn func()) { | ||||||
|  | 	go func() { | ||||||
|  | 		defer func() { | ||||||
|  | 			if r := recover(); r != nil { | ||||||
|  | 				// 记录 Goroutine ID、panic 信息和堆栈 | ||||||
|  | 				logger.Error(fmt.Sprintf("Recovered from panic in Goroutine %s: %v\nStack Trace:\n%s", GetGoroutineID(), r, string(debug.Stack()))) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  | 		fn() | ||||||
|  | 	}() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 获取 Goroutine ID | ||||||
|  | func GetGoroutineID() string { | ||||||
|  | 	buf := make([]byte, 64) | ||||||
|  | 	n := runtime.Stack(buf, false) | ||||||
|  | 	stack := string(buf[:n]) | ||||||
|  | 	// 提取 Goroutine ID | ||||||
|  | 	id := strings.Split(stack, " ")[1] | ||||||
|  | 	return id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func SafeGoParam[T any](fn func(T), param T) { | ||||||
|  | 	go func() { | ||||||
|  | 		defer func() { | ||||||
|  | 			if r := recover(); r != nil { | ||||||
|  | 				logger.Error(fmt.Sprintf(" SafeGoParam Recovered from panic in Goroutine %s: %v\nStack Trace:\n%s", GetGoroutineID(), r, string(debug.Stack()))) | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
|  | 		fn(param) // 执行传入的函数 | ||||||
|  | 	}() | ||||||
|  | } | ||||||
| @ -7,7 +7,7 @@ settings: | |||||||
|     # 服务名称 |     # 服务名称 | ||||||
|     name: testApp |     name: testApp | ||||||
|     # 端口号 |     # 端口号 | ||||||
|     port: 8000 # 服务端口号 |     port: 8001 # 服务端口号 | ||||||
|     readtimeout: 1 |     readtimeout: 1 | ||||||
|     writertimeout: 2 |     writertimeout: 2 | ||||||
|     # 数据权限功能开关 |     # 数据权限功能开关 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| @ -78,6 +78,7 @@ require ( | |||||||
| 	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 | ||||||
|  | 	github.com/golang-jwt/jwt/v4 v4.5.2 // indirect | ||||||
| 	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect | 	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect | ||||||
| 	github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect | 	github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect | ||||||
| 	github.com/golang-sql/sqlexp v0.1.0 // indirect | 	github.com/golang-sql/sqlexp v0.1.0 // indirect | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user