详情加入缓存

This commit is contained in:
xiangheng
2024-07-09 01:30:11 +08:00
parent 0aea72fb12
commit 69fe1613fa
7 changed files with 175 additions and 85 deletions

View File

@@ -1,5 +1,5 @@
.x-loading {
background-color: #17607d;
background-color: #6676fe;
position: fixed;
height: 100%;

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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("验证失败")