代码拉取完成,页面将自动刷新
package controller
import (
"fmt"
"reflect"
"gitee.com/linqwen/momo/app/log/model"
"gitee.com/linqwen/momo/app/log/schema"
"gitee.com/linqwen/momo/app/log/service"
"gitee.com/linqwen/momo/base"
"gitee.com/linqwen/momo/cache"
"gitee.com/linqwen/momo/igin"
"gitee.com/linqwen/momo/rbac"
"gitee.com/linqwen/momo/utils"
"gorm.io/gorm"
)
type accessCtl struct {
base.BaseController[model.AccessEntity, schema.AccessCreateDTO, schema.AccessQueryDTO, schema.AccessVO]
}
func newAccessService() *accessCtl {
return &accessCtl{BaseController: *base.NewBaseController[model.AccessEntity, schema.AccessCreateDTO, schema.AccessQueryDTO, schema.AccessVO](service.NewAccessService())}
}
func AccessRouter(router igin.IRouterGroup) {
var tc base.IBaseController = newAccessService()
c := tc.(*accessCtl)
r := router.Group("access")
r.GET("/", rbac.Auth.HasPermit("conf_access"), c.PageByDTO)
r.POST("/", rbac.Auth.HasPermit("conf_access_add"), c.Create)
r.PUT("/:id", rbac.Auth.HasPermit("conf_access_edit"), c.UpdateByMap)
r.GET("/:id", rbac.Auth.HasPermit("conf_access_view"), c.GetById)
r.POST("/deletes", rbac.Auth.HasPermit("conf_access_delete"), c.BulkDelete)
r.POST("/loadcache", rbac.Auth.HasPermit("conf_access_view"), c.loadcache)
}
func (*accessCtl) loadcache(c igin.IContext) {
// 从缓存中获取 accessMap
accessMap, _ := cache.GetCacheValue[map[string]model.AccessEntity]("accessMap")
var countCreate, countUpdate int
// 遍历缓存中的每个 AccessEntity,使用 accessMap 的键作为 ID
for key, accessEntity := range accessMap {
// key 作为 ID 查询
existingEntity, err := service.NewAccessService().GetById(key)
if err != nil && err != gorm.ErrRecordNotFound {
// 如果查询数据库时出错(但不是记录不存在错误),返回错误
utils.ResponseApiError(c, 500, "Failed to query access entity", err)
return
}
if err == gorm.ErrRecordNotFound {
// 数据库中不存在该记录,执行创建操作
accessEntity.Id = key
_, err := service.NewAccessService().Create(&accessEntity)
if err != nil {
utils.ResponseApiError(c, 500, "Failed to create access entity", err)
return
}
countCreate++
} else if existingEntity != nil && !reflect.DeepEqual(existingEntity, accessEntity) {
// 数据库中存在该记录,且与缓存中的数据不一致,执行更新操作
accessEntity.Id = existingEntity.Id // 确保 ID 不被修改
if accessEntity.Count != existingEntity.Count {
_, err := service.NewAccessService().Update(key, accessEntity) // 使用 key 作为 ID
if err != nil {
utils.ResponseApiError(c, 500, "Failed to update access entity", err)
return
}
countUpdate++
}
}
}
utils.ResponseApiOk(c, "OK", fmt.Sprintf("Success: Created %d, Updated %d", countCreate, countUpdate))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。