Browse Source

feat:用户权限信息内存优化

wangshan 3 năm trước cách đây
mục cha
commit
f8eed87ead

BIN
api/api.exe


+ 1 - 1
api/internal/handler/workdesktopclearuserinfohandler.go

@@ -11,7 +11,7 @@ import (
 
 func WorkDesktopClearUserInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
-		var req types.WorkDesktopComprehensiveReq
+		var req types.WorkDesktopClearUserInfo
 		if err := httpx.Parse(r, &req); err != nil {
 			httpx.Error(w, err)
 			return

+ 7 - 7
api/internal/types/types.go

@@ -222,15 +222,15 @@ type UserDelReq struct {
 
 type WorkDesktopMenuInfoReq struct {
 	Platform string `json:"platform,optional"`
-	UserId   string `header:"userId,optional"`
-	AppId    string `header:"appId,optional"`
+	UserId   string `header:"userId"`
+	AppId    string `header:"appId"`
 	Phone    string `header:"phone,optional"`
 }
 
 type WorkDesktopComprehensiveReq struct {
 	Platform   string `json:"platform,optional"`
-	UserId     string `header:"userId,optional"`
-	AppId      string `header:"appId,optional"`
+	UserId     string `header:"userId"`
+	AppId      string `header:"appId"`
 	Phone      string `header:"phone,optional"`
 	MenuMode   string `json:"menuMode,optional"`
 	MenuIds    string `json:"menuIds,optional"`
@@ -245,7 +245,7 @@ type CommonResp struct {
 
 type WorkDesktopClearUserInfo struct {
 	Platform string `json:"platform,optional"`
-	UserId   string `header:"userId,optional"`
-	AppId    string `header:"appId,optional"`
-	UserIds  string `json:"userIds"`
+	UserId   string `header:"userId"`
+	AppId    string `header:"appId"`
+	UserIds  string `json:"userIds,optional"`
 }

+ 7 - 7
api/userCenter.api

@@ -236,16 +236,16 @@ type (
 	//工作桌面 -- 菜单
 	WorkDesktopMenuInfoReq {
 		Platform string `json:"platform,optional"`
-		UserId   string `header:"userId,optional"`
-		AppId    string `header:"appId,optional"`
+		UserId   string `header:"userId"`
+		AppId    string `header:"appId"`
 		Phone    string `header:"phone,optional"`
 	}
 	//工作桌面-- 菜单模式:全部/可用选择记录
 	//工作桌面--常用功能更新
 	WorkDesktopComprehensiveReq {
 		Platform   string `json:"platform,optional"`
-		UserId     string `header:"userId,optional"`
-		AppId      string `header:"appId,optional"`
+		UserId     string `header:"userId"`
+		AppId      string `header:"appId"`
 		Phone      string `header:"phone,optional"`
 		MenuMode   string `json:"menuMode,optional"`
 		MenuIds    string `json:"menuIds,optional"`
@@ -260,9 +260,9 @@ type (
 	//工作桌面清用户内存信息
 	WorkDesktopClearUserInfo {
 		Platform string `json:"platform,optional"`
-		UserId   string `header:"userId,optional"`
-		AppId    string `header:"appId,optional"`
-		UserIds  string `json:"userIds"`
+		UserId   string `header:"userId"`
+		AppId    string `header:"appId"`
+		UserIds  string `json:"userIds,optional"`
 	}
 )
 

+ 22 - 3
entity/user.go

@@ -115,8 +115,9 @@ func AutoUserPowerInfo(userId string, internalTime int, bigMemberOff bool) map[s
 		}
 		go func(userId string) {
 			//默认存2分钟
-			time.Sleep(time.Duration(internalTime))
-			UserPowerPools <- userId
+			time.AfterFunc(time.Duration(internalTime)*time.Second, func() {
+				UserPowerPools <- userId
+			})
 		}(userId)
 	}
 	return UserPowerMapMap[userId]
@@ -127,6 +128,7 @@ func ClearUserPower() {
 	for {
 		select {
 		case userId := <-UserPowerPools:
+			logx.Info("-获取 userId:-", userId)
 			if userId != "" {
 				go ClearFunc(userId)
 			}
@@ -138,12 +140,13 @@ func ClearUserPower() {
 	}
 }
 
-//
+//clear One
 func ClearFunc(userId string) {
 	PowerLock.Lock()
 	userPower := UserPowerMapMap[userId]
 	PowerLock.Unlock()
 	if userPower != nil {
+		logx.Info("--清除 userId:--", userId)
 		func() {
 			UserPowerLock[userId].Lock()
 			defer UserPowerLock[userId].Lock()
@@ -153,3 +156,19 @@ func ClearFunc(userId string) {
 		}()
 	}
 }
+
+//clear all
+func ClearFuncAll() {
+	PowerLock.Lock()
+	if UserPowerMapMap != nil {
+		for uk, _ := range UserPowerMapMap {
+			UserPowerLock[uk].Lock()
+			defer UserPowerLock[uk].Unlock()
+			PowerLock.Lock()
+			delete(UserPowerMapMap, uk)
+			PowerLock.Unlock()
+		}
+	}
+	PowerLock.Unlock()
+
+}

+ 1 - 1
rpc/etc/usercenter.yaml

@@ -42,7 +42,7 @@ Timeout: 5000
 RedisAddrees:
   - newother=192.168.3.206:1712
 RedisOutTime: 300
-InternalTime: 120
+InternalTime: 20
 Mongo:
   Main:
     dbName: qfw

+ 5 - 1
rpc/internal/logic/workdesktopclearuserinfologic.go

@@ -27,6 +27,7 @@ func NewWorkDesktopClearUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceCo
 
 // 手动清除用户功能内存信息
 func (l *WorkDesktopClearUserInfoLogic) WorkDesktopClearUserInfo(in *pb.WorkDesktopClearUserInfoReq) (*pb.WorkDesktopComprehensiveResp, error) {
+	var r = &pb.WorkDesktopComprehensiveResp{}
 	//是否是管理者账号
 	if config.ManagerUserIdsMap[in.UserId] {
 		//in.UserIds 不为空;清此用户内存信息
@@ -35,9 +36,12 @@ func (l *WorkDesktopClearUserInfoLogic) WorkDesktopClearUserInfo(in *pb.WorkDesk
 			for _, uv := range strings.Split(in.UserIds, ",") {
 				go entity.ClearFunc(uv)
 			}
+		} else {
+			go entity.ClearFuncAll()
 		}
 	} else {
-		go entity.ClearFunc(in.UserId)
+		r.ErrorCode = -1
+		r.ErrorMsg = "暂无权限"
 	}
 	return &pb.WorkDesktopComprehensiveResp{}, nil
 }

+ 1 - 1
rpc/internal/logic/workdesktopmenuinfologic.go

@@ -54,7 +54,7 @@ func (l *WorkDesktopMenuInfoLogic) WorkDesktopMenuInfo(in *pb.WorkDesktopMenuInf
 		menuMode        = "all"
 	)
 	//菜单树
-	menuList, err := service.GetWordDesktopMenuTree(in, config.ConfigJson.RedisOutTime, config.ConfigJson.BigMemberOff)
+	menuList, err := service.GetWordDesktopMenuTree(in, config.ConfigJson.RedisOutTime, config.ConfigJson.InternalTime, config.ConfigJson.BigMemberOff)
 	//菜单模式
 	menuMode, err = service.GetWorkDesktopMenuMode(in)
 	logx.Info(err, "+++++:", len(menuList))

BIN
rpc/rpc.exe


+ 4 - 2
service/workDesktop.go

@@ -7,6 +7,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/zeromicro/go-zero/core/logx"
+	"math/rand"
 	"strings"
 	"time"
 	"userCenter/entity"
@@ -140,7 +141,7 @@ func GetWorkDesktopMenuMode(in *WorkDesktopMenuInfoReq) (str string, err error)
 }
 
 //获取工作桌面菜单树
-func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq, redisOutTime int, bigMemberOff bool) ([]*pb.MenuList, error) {
+func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq, redisOutTime, internalTime int, bigMemberOff bool) ([]*pb.MenuList, error) {
 	t1 := time.Now()
 	//redis缓存
 	var menuList []*pb.MenuList
@@ -159,7 +160,7 @@ func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq, redisOutTime int, bigMem
 	wdm := &entity.WorkDesktopMenu{
 		MenuTree:     []*entity.JYMenu{},
 		UserId:       in.UserId,
-		TimeOut:      redisOutTime,
+		TimeOut:      internalTime,
 		BigMemberOff: bigMemberOff,
 	}
 	for _, v := range *menuData {
@@ -200,6 +201,7 @@ func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq, redisOutTime int, bigMem
 	logx.Info("菜单格式化耗时:", time.Since(t1))
 	if err == nil && len(menuList) > 0 {
 		if menuBytes, err := json.Marshal(menuList); err == nil {
+			redisOutTime += rand.Intn(60 * 60)
 			if redis.PutBytes(entity.RedisCode, RedisMenuKey, &menuBytes, redisOutTime) != nil {
 				logx.Info("工作桌面菜单 redis缓存异常")
 			}