diff --git a/features/cm/ne.go b/features/cm/ne.go index 06f14004..16e96f2b 100644 --- a/features/cm/ne.go +++ b/features/cm/ne.go @@ -16,6 +16,7 @@ import ( "ems.agt/lib/services" "ems.agt/restagent/config" tokenConst "ems.agt/src/framework/constants/token" + neService "ems.agt/src/modules/network_element/service" "github.com/go-resty/resty/v2" "github.com/gorilla/mux" @@ -158,6 +159,9 @@ func PostNeInfo(w http.ResponseWriter, r *http.Request) { return } + // 刷新缓存,不存在结构体网元Id空字符串 + neService.NewNeInfoImpl.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + mapRow := make(map[string]interface{}) row := map[string]interface{}{"affectedRows": affected} mapRow["data"] = row @@ -205,6 +209,10 @@ func PostNeInfo(w http.ResponseWriter, r *http.Request) { } else if affected <= 0 { log.Infof("Not record affected to insert ne_info") } + + // 刷新缓存,不存在结构体网元Id空字符串 + neService.NewNeInfoImpl.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + services.ResponseStatusOK204NoContent(w) return default: @@ -261,6 +269,9 @@ func PutNeInfo(w http.ResponseWriter, r *http.Request) { return } + // 刷新缓存,不存在结构体网元Id空字符串 + neService.NewNeInfoImpl.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + mapRow := make(map[string]interface{}) row := map[string]interface{}{"affectedRows": affected} mapRow["data"] = row @@ -309,6 +320,10 @@ func PutNeInfo(w http.ResponseWriter, r *http.Request) { } else if affected <= 0 { log.Infof("Not record affected to insert ne_info") } + + // 刷新缓存,不存在结构体网元Id空字符串 + neService.NewNeInfoImpl.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + services.ResponseStatusOK204NoContent(w) return default: @@ -390,6 +405,9 @@ func DeleteNeInfo(w http.ResponseWriter, r *http.Request) { return } + // 刷新缓存,不存在结构体网元Id空字符串 + neService.NewNeInfoImpl.RefreshByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) + mapRow := make(map[string]interface{}) row := map[string]interface{}{"affectedRows": affected} mapRow["data"] = row diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 6ae71f76..15dee48a 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -6,6 +6,7 @@ import ( "ems.agt/src/framework/middleware/collectlogs" "ems.agt/src/framework/middleware/repeat" "ems.agt/src/modules/network_element/controller" + "ems.agt/src/modules/network_element/service" "github.com/gin-gonic/gin" ) @@ -14,6 +15,9 @@ import ( func Setup(router *gin.Engine) { logger.Infof("开始加载 ====> network_element 模块路由") + // 启动时需要的初始参数 + InitLoad() + neGroup := router.Group("/ne") { neGroup.GET("/info", @@ -155,18 +159,10 @@ func Setup(router *gin.Engine) { controller.NewUDMSub.Import, ) } - - // 性能统计信息 - kpiGroup := neGroup.Group("/kpi") - { - kpiGroup.GET("/title", - middleware.PreAuthorize(nil), - controller.NewPerfKPI.Title, - ) - kpiGroup.GET("/data", - middleware.PreAuthorize(nil), - controller.NewPerfKPI.GoldKPI, - ) - } - +} + +// InitLoad 初始参数 +func InitLoad() { + // 启动时,清除缓存-网元类型 + service.NewNeInfoImpl.ClearNeCacheByNeType("*") } diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index e6e611b6..61225040 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -7,6 +7,12 @@ type INeInfo interface { // SelectNeInfoByNeTypeAndNeID 通过ne_type和ne_id查询网元信息 SelectNeInfoByNeTypeAndNeID(neType, neID string) model.NeInfo + // RefreshByNeTypeAndNeID 通过ne_type和ne_id刷新redis中的缓存 + RefreshByNeTypeAndNeID(neType, neID string) model.NeInfo + + // ClearNeCacheByNeType 清除网元类型缓存 + ClearNeCacheByNeType(neType string) bool + // SelectNeList 查询网元列表 SelectNeList(ne model.NeInfo, bandStatus bool) []model.NeInfo } diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index 8ef7cc13..d2ae5c1c 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -1,6 +1,11 @@ package service import ( + "encoding/json" + "fmt" + + "ems.agt/src/framework/constants/cachekey" + "ems.agt/src/framework/redis" "ems.agt/src/modules/network_element/model" "ems.agt/src/modules/network_element/repository" ) @@ -18,7 +23,50 @@ type NeInfoImpl struct { // SelectNeInfoByNeTypeAndNeID 通过ne_type和ne_id查询网元信息 func (r *NeInfoImpl) SelectNeInfoByNeTypeAndNeID(neType, neID string) model.NeInfo { - return r.neInfoRepository.SelectNeInfoByNeTypeAndNeID(neType, neID) + var neInfo model.NeInfo + key := fmt.Sprintf("%s%s.%s", cachekey.NE_KEY, neType, neID) + jsonStr, _ := redis.Get("", key) + if len(jsonStr) > 7 { + err := json.Unmarshal([]byte(jsonStr), &neInfo) + if err != nil { + neInfo = model.NeInfo{} + } + } else { + neInfo = r.neInfoRepository.SelectNeInfoByNeTypeAndNeID(neType, neID) + if neInfo.NeId == neID { + redis.Del("", key) + values, _ := json.Marshal(neInfo) + redis.Set("", key, string(values)) + } + } + return neInfo +} + +// RefreshByNeTypeAndNeID 通过ne_type和ne_id刷新redis中的缓存 +func (r *NeInfoImpl) RefreshByNeTypeAndNeID(neType, neID string) model.NeInfo { + var neInfo model.NeInfo + key := fmt.Sprintf("%s%s.%s", cachekey.NE_KEY, neType, neID) + redis.Del("", key) + neInfo = r.neInfoRepository.SelectNeInfoByNeTypeAndNeID(neType, neID) + if neInfo.NeId == neID { + values, _ := json.Marshal(neInfo) + redis.Set("", key, string(values)) + } + return neInfo +} + +// ClearNeCacheByNeType 清除网元类型缓存 +func (r *NeInfoImpl) ClearNeCacheByNeType(neType string) bool { + key := fmt.Sprintf("%s*", cachekey.NE_KEY) + if neType != "*" { + key = fmt.Sprintf("%s%s*", cachekey.NE_KEY, neType) + } + keys, err := redis.GetKeys("", key) + if err != nil { + return false + } + delOk, _ := redis.DelKeys("", keys) + return delOk } // SelectNeList 查询网元列表 diff --git a/src/modules/system/service/sys_menu.go b/src/modules/system/service/sys_menu.go index e4fbd5e5..f7648b54 100644 --- a/src/modules/system/service/sys_menu.go +++ b/src/modules/system/service/sys_menu.go @@ -13,7 +13,7 @@ type ISysMenu interface { // SelectMenuPermsByUserId 根据用户ID查询权限 SelectMenuPermsByUserId(userId string) []string - // SelectMenuPermsByUserId 根据用户ID查询权限 + // SelectMenuTreeByUserId 根据用户ID查询权限 SelectMenuTreeByUserId(userId string) []model.SysMenu // SelectMenuTreeSelectByUserId 查询菜单树结构信息