mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-12-24 08:12:55 +08:00
详情加入缓存
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
.x-loading {
|
||||
background-color: #17607d;
|
||||
background-color: #6676fe;
|
||||
|
||||
position: fixed;
|
||||
height: 100%;
|
||||
|
||||
@@ -20,6 +20,36 @@ type {{{ toCamelCase .EntityName }}}Service struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
|
||||
// 设置缓存
|
||||
func (service {{{ toCamelCase .EntityName }}}Service) SetCache(obj model.{{{ title (toCamelCase .EntityName) }}}) bool {
|
||||
str, e := util.ToolsUtil.ObjToJson(obj)
|
||||
if e != nil {
|
||||
return false
|
||||
}
|
||||
return util.RedisUtil.Set("{{{ toCamelCase .EntityName }}}:id:"+strconv.Itoa(obj.Id), str, 3600)
|
||||
}
|
||||
|
||||
// 获取缓存
|
||||
func (service {{{ toCamelCase .EntityName }}}Service) GetCache(id int) (model.{{{ title (toCamelCase .EntityName) }}}, error) {
|
||||
var obj model.{{{ title (toCamelCase .EntityName) }}}
|
||||
str := util.RedisUtil.Get("{{{ toCamelCase .EntityName }}}:id:" + strconv.Itoa(id))
|
||||
if str == "" {
|
||||
return obj, errors.New("获取缓存失败")
|
||||
}
|
||||
err := util.ToolsUtil.JsonToObj(str, &obj)
|
||||
|
||||
if err != nil {
|
||||
return obj, errors.New("获取缓存失败")
|
||||
}
|
||||
return obj, nil
|
||||
}
|
||||
// 删除缓存
|
||||
func (service {{{ toCamelCase .EntityName }}}Service) RemoveCache(obj model.{{{ title (toCamelCase .EntityName) }}}) bool {
|
||||
return util.RedisUtil.Del("{{{ toCamelCase .EntityName }}}:id:" + strconv.Itoa(obj.Id))
|
||||
}
|
||||
|
||||
|
||||
// List {{{ .FunctionName }}}列表
|
||||
func (service {{{ toCamelCase .EntityName }}}Service) GetModel(listReq {{{ title (toCamelCase .EntityName) }}}ListReq) *gorm.DB {
|
||||
// 查询
|
||||
@@ -95,20 +125,26 @@ func (service {{{ toCamelCase .EntityName }}}Service) ListAll(listReq {{{ title
|
||||
|
||||
// Detail {{{ .FunctionName }}}详情
|
||||
func (service {{{ toCamelCase .EntityName }}}Service) Detail(id int) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error) {
|
||||
var obj model.{{{ title (toCamelCase .EntityName) }}}
|
||||
err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", id{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
var obj, err = service.GetCache(id)
|
||||
// var obj model.{{{ title (toCamelCase .EntityName) }}}
|
||||
if err != nil {
|
||||
err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", id{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
if e = response.CheckErr(err, "获取详情失败"); e != nil {
|
||||
return
|
||||
}
|
||||
response.Copy(&res, obj)
|
||||
{{{- range .Columns }}}
|
||||
{{{- if and .IsEdit (contains (slice "image" "avatar" "logo" "img") .GoField) }}}
|
||||
res.Avatar = util.UrlUtil.ToAbsoluteUrl(res.Avatar)
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
service.SetCache(obj)
|
||||
}
|
||||
if e = response.CheckErr(err, "获取详情失败"); e != nil {
|
||||
return
|
||||
}
|
||||
response.Copy(&res, obj)
|
||||
{{{- range .Columns }}}
|
||||
{{{- if and .IsEdit (contains (slice "image" "avatar" "logo" "img") .GoField) }}}
|
||||
res.Avatar = util.UrlUtil.ToAbsoluteUrl(res.Avatar)
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -121,6 +157,7 @@ func (service {{{ toCamelCase .EntityName }}}Service) Add(addReq {{{ title (toCa
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
service.SetCache(obj)
|
||||
e = response.CheckErr(err, "添加失败")
|
||||
return
|
||||
}
|
||||
@@ -140,6 +177,7 @@ func (service {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ title (to
|
||||
response.Copy(&obj, editReq)
|
||||
err = service.db.Model(&obj).Select("*").Updates(obj).Error
|
||||
e = response.CheckErr(err, "更新失败")
|
||||
service.SetCache(obj)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -166,6 +204,7 @@ func (service {{{ toCamelCase .EntityName }}}Service) Del(id int) (e error) {
|
||||
err = service.db.Delete(&obj).Error
|
||||
e = response.CheckErr(err, "删除失败")
|
||||
{{{- end }}}
|
||||
service.RemoveCache(obj)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -10,22 +10,23 @@ import (
|
||||
"x_admin/util/excel"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"golang.org/x/sync/singleflight"
|
||||
)
|
||||
|
||||
type MonitorProjectHandler struct{}
|
||||
|
||||
// @Summary 错误项目列表
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param PageNo query int true "页码"
|
||||
// @Param PageSize query int true "每页数量"
|
||||
// @Param projectKey query string false "项目uuid."
|
||||
// @Param projectName query string false "项目名称."
|
||||
// @Param projectType query string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response{data=response.PageResp{lists=[]MonitorProjectResp}} "成功"
|
||||
// @Failure 400 {object} string "请求错误"
|
||||
// @Router /api/admin/monitor_project/list [get]
|
||||
// @Summary 错误项目列表
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param PageNo query int true "页码"
|
||||
// @Param PageSize query int true "每页数量"
|
||||
// @Param projectKey query string false "项目uuid."
|
||||
// @Param projectName query string false "项目名称."
|
||||
// @Param projectType query string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response{data=response.PageResp{lists=[]MonitorProjectResp}} "成功"
|
||||
// @Failure 400 {object} string "请求错误"
|
||||
// @Router /api/admin/monitor_project/list [get]
|
||||
func (hd MonitorProjectHandler) List(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq MonitorProjectListReq
|
||||
@@ -39,13 +40,20 @@ func (hd MonitorProjectHandler) List(c *gin.Context) {
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// @Summary 错误项目列表-所有
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Success 200 {object} response.Response{data=[]MonitorProjectResp} "成功"
|
||||
// @Router /api/admin/monitor_project/listAll [get]
|
||||
// @Summary 错误项目列表-所有
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Success 200 {object} response.Response{data=[]MonitorProjectResp} "成功"
|
||||
// @Router /api/admin/monitor_project/listAll [get]
|
||||
var sg singleflight.Group
|
||||
|
||||
func (hd MonitorProjectHandler) ListAll(c *gin.Context) {
|
||||
res, err := Service.ListAll()
|
||||
res, err, shared := sg.Do("key", func() (any, error) {
|
||||
v, err := Service.ListAll()
|
||||
return v, err
|
||||
})
|
||||
fmt.Printf("v: %v, shared: %v\n", res, shared)
|
||||
|
||||
// var listReq MonitorProjectListReq
|
||||
// if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
// return
|
||||
@@ -53,13 +61,13 @@ func (hd MonitorProjectHandler) ListAll(c *gin.Context) {
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// @Summary 错误项目详情
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id query int false "项目id."
|
||||
// @Success 200 {object} response.Response{data=MonitorProjectResp} "成功"
|
||||
// @Router /api/admin/monitor_project/detail [get]
|
||||
// @Summary 错误项目详情
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id query int false "项目id."
|
||||
// @Success 200 {object} response.Response{data=MonitorProjectResp} "成功"
|
||||
// @Router /api/admin/monitor_project/detail [get]
|
||||
func (hd MonitorProjectHandler) Detail(c *gin.Context) {
|
||||
var detailReq MonitorProjectDetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
@@ -69,15 +77,15 @@ func (hd MonitorProjectHandler) Detail(c *gin.Context) {
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// @Summary 错误项目新增
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param projectKey body string false "项目uuid."
|
||||
// @Param projectName body string false "项目名称."
|
||||
// @Param projectType body string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/add [post]
|
||||
// @Summary 错误项目新增
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param projectKey body string false "项目uuid."
|
||||
// @Param projectName body string false "项目名称."
|
||||
// @Param projectType body string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/add [post]
|
||||
func (hd MonitorProjectHandler) Add(c *gin.Context) {
|
||||
var addReq MonitorProjectAddReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
|
||||
@@ -86,16 +94,16 @@ func (hd MonitorProjectHandler) Add(c *gin.Context) {
|
||||
response.CheckAndResp(c, Service.Add(addReq))
|
||||
}
|
||||
|
||||
// @Summary 错误项目编辑
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id body int false "项目id."
|
||||
// @Param projectKey body string false "项目uuid."
|
||||
// @Param projectName body string false "项目名称."
|
||||
// @Param projectType body string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/edit [post]
|
||||
// @Summary 错误项目编辑
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id body int false "项目id."
|
||||
// @Param projectKey body string false "项目uuid."
|
||||
// @Param projectName body string false "项目名称."
|
||||
// @Param projectType body string false "项目类型go java web node php 等."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/edit [post]
|
||||
func (hd MonitorProjectHandler) Edit(c *gin.Context) {
|
||||
var editReq MonitorProjectEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
|
||||
@@ -104,13 +112,13 @@ func (hd MonitorProjectHandler) Edit(c *gin.Context) {
|
||||
response.CheckAndResp(c, Service.Edit(editReq))
|
||||
}
|
||||
|
||||
// @Summary 错误项目删除
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id body int false "项目id."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/del [post]
|
||||
// @Summary 错误项目删除
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param id body int false "项目id."
|
||||
// @Success 200 {object} response.Response "成功"
|
||||
// @Router /api/admin/monitor_project/del [post]
|
||||
func (hd MonitorProjectHandler) Del(c *gin.Context) {
|
||||
var delReq MonitorProjectDelReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
|
||||
@@ -119,14 +127,14 @@ func (hd MonitorProjectHandler) Del(c *gin.Context) {
|
||||
response.CheckAndResp(c, Service.Del(delReq.Id))
|
||||
}
|
||||
|
||||
// @Summary 错误项目导出
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param projectKey query string false "项目uuid."
|
||||
// @Param projectName query string false "项目名称."
|
||||
// @Param projectType query string false "项目类型go java web node php 等."
|
||||
// @Router /api/admin/monitor_project/ExportFile [get]
|
||||
// @Summary 错误项目导出
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Param Token header string true "token"
|
||||
// @Param projectKey query string false "项目uuid."
|
||||
// @Param projectName query string false "项目名称."
|
||||
// @Param projectType query string false "项目类型go java web node php 等."
|
||||
// @Router /api/admin/monitor_project/ExportFile [get]
|
||||
func (hd MonitorProjectHandler) ExportFile(c *gin.Context) {
|
||||
var listReq MonitorProjectListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
@@ -145,9 +153,9 @@ func (hd MonitorProjectHandler) ExportFile(c *gin.Context) {
|
||||
excel.DownLoadExcel("错误项目"+time.Now().Format("2006-01-02 15:04:05"), c.Writer, f)
|
||||
}
|
||||
|
||||
// @Summary 错误项目导入
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
// @Summary 错误项目导入
|
||||
// @Tags monitor_project-错误项目
|
||||
// @Produce json
|
||||
func (hd MonitorProjectHandler) ImportFile(c *gin.Context) {
|
||||
file, _, err := c.Request.FormFile("file")
|
||||
if err != nil {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package monitor_project
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"x_admin/core"
|
||||
"x_admin/core/request"
|
||||
"x_admin/core/response"
|
||||
@@ -33,6 +35,35 @@ type monitorProjectService struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// 设置缓存
|
||||
func (service monitorProjectService) SetCache(obj model.MonitorProject) bool {
|
||||
str, e := util.ToolsUtil.ObjToJson(obj)
|
||||
if e != nil {
|
||||
return false
|
||||
}
|
||||
return util.RedisUtil.Set("MonitorProject:id:"+strconv.Itoa(obj.Id), str, 3600)
|
||||
}
|
||||
|
||||
// 获取缓存
|
||||
func (service monitorProjectService) GetCache(id int) (model.MonitorProject, error) {
|
||||
var obj model.MonitorProject
|
||||
str := util.RedisUtil.Get("MonitorProject:id:" + strconv.Itoa(id))
|
||||
if str == "" {
|
||||
return obj, errors.New("获取缓存失败")
|
||||
}
|
||||
err := util.ToolsUtil.JsonToObj(str, &obj)
|
||||
|
||||
if err != nil {
|
||||
return obj, errors.New("获取缓存失败")
|
||||
}
|
||||
return obj, nil
|
||||
}
|
||||
|
||||
// 删除缓存
|
||||
func (service monitorProjectService) RemoveCache(obj model.MonitorProject) bool {
|
||||
return util.RedisUtil.Del("{{{ toCamelCase .EntityName }}}:id:" + strconv.Itoa(obj.Id))
|
||||
}
|
||||
|
||||
// List 错误项目列表
|
||||
func (service monitorProjectService) List(page request.PageReq, listReq MonitorProjectListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
@@ -98,14 +129,19 @@ func (service monitorProjectService) ListAll() (res []MonitorProjectResp, e erro
|
||||
|
||||
// Detail 错误项目详情
|
||||
func (service monitorProjectService) Detail(id int) (res MonitorProjectResp, e error) {
|
||||
var obj model.MonitorProject
|
||||
err := service.db.Where("id = ? AND is_delete = ?", id, 0).Limit(1).First(&obj).Error
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
if e = response.CheckErr(err, "详情获取失败"); e != nil {
|
||||
return
|
||||
|
||||
var obj, err = service.GetCache(id)
|
||||
if err != nil {
|
||||
err := service.db.Where("id = ? AND is_delete = ?", id, 0).Limit(1).First(&obj).Error
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
if e = response.CheckErr(err, "详情获取失败"); e != nil {
|
||||
return
|
||||
}
|
||||
service.SetCache(obj)
|
||||
}
|
||||
|
||||
response.Copy(&res, obj)
|
||||
return
|
||||
}
|
||||
@@ -120,6 +156,7 @@ func (service monitorProjectService) Add(addReq MonitorProjectAddReq) (e error)
|
||||
if e = response.CheckMysqlErr(err); e != nil {
|
||||
return e
|
||||
}
|
||||
service.SetCache(obj)
|
||||
e = response.CheckErr(err, "添加失败")
|
||||
return
|
||||
}
|
||||
@@ -138,6 +175,7 @@ func (service monitorProjectService) Edit(editReq MonitorProjectEditReq) (e erro
|
||||
// 更新
|
||||
response.Copy(&obj, editReq)
|
||||
err = service.db.Model(&obj).Updates(obj).Error
|
||||
service.SetCache(obj)
|
||||
e = response.CheckErr(err, "编辑失败")
|
||||
return
|
||||
}
|
||||
@@ -156,6 +194,7 @@ func (service monitorProjectService) Del(id int) (e error) {
|
||||
// 删除
|
||||
obj.IsDelete = 1
|
||||
err = service.db.Save(&obj).Error
|
||||
util.RedisUtil.Del("MonitorProject:id:" + strconv.Itoa(obj.Id))
|
||||
e = response.CheckErr(err, "Del Save err")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ func MonitorProjectRoute(rg *gin.RouterGroup) {
|
||||
handle := monitor_project.MonitorProjectHandler{}
|
||||
|
||||
r := rg.Group("/", middleware.TokenAuth())
|
||||
|
||||
r.GET("/monitor_project/list", handle.List)
|
||||
r.GET("/monitor_project/listAll", handle.ListAll)
|
||||
r.GET("/monitor_project/detail", handle.Detail)
|
||||
|
||||
@@ -27,7 +27,10 @@ require (
|
||||
gorm.io/plugin/soft_delete v1.2.1
|
||||
)
|
||||
|
||||
require github.com/redis/go-redis/v9 v9.5.2
|
||||
require (
|
||||
github.com/redis/go-redis/v9 v9.5.2
|
||||
golang.org/x/sync v0.7.0
|
||||
)
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
|
||||
@@ -89,7 +89,7 @@ func (c *ClickWordCaptchaService) Check(token string, pointJson string) error {
|
||||
for i, pointVO := range cachePoint {
|
||||
targetPoint := userPoint[i]
|
||||
|
||||
if targetPoint.X >= pointVO.X-10 && targetPoint.X <= pointVO.X+fontSize+10 && targetPoint.Y >= pointVO.Y-10 && targetPoint.Y <= pointVO.Y+fontSize+10 {
|
||||
if targetPoint.X >= pointVO.X-15 && targetPoint.X <= pointVO.X+fontSize+15 && targetPoint.Y >= pointVO.Y-15 && targetPoint.Y <= pointVO.Y+fontSize+15 {
|
||||
|
||||
} else {
|
||||
return errors.New("验证失败")
|
||||
|
||||
Reference in New Issue
Block a user