Эх сурвалжийг харах

Merge branch 'feature/gn3.2_send_msg' into debug

# Conflicts:
#	services/system.go
xyxie 2 өдөр өмнө
parent
commit
11d58a961c

+ 5 - 1
controllers/base_auth.go

@@ -53,6 +53,7 @@ type BaseAuthController struct {
 	SysUser *system.Admin
 	Session *system.SysSession
 	Lang    string `description:"当前语言类型,中文:zh;英文:en;默认:zh"`
+	GnToken string `description:"国能的token"`
 }
 
 //func (c *BaseAuthController) Prepare() {
@@ -569,7 +570,10 @@ func (c *BaseAuthController) Prepare() {
 
 	//接口权限校验
 	roleId := admin.RoleId
-	list, e := system.GetMenuButtonApisByRoleId(roleId)
+	// 单点登录逻辑
+	token := c.Ctx.GetCookie("token")
+	c.GnToken = token
+	list, e := services.GetMenuList(token, roleId)
 	if e != nil {
 		c.JSON(models.BaseResponse{Ret: 403, Msg: "获取接口权限出错!", ErrMsg: "获取接口权限出错!"}, false, false)
 		c.StopRun()

+ 1 - 1
controllers/report_ice_message.go

@@ -429,7 +429,7 @@ func (c *ReportIceMessageController) IceMsgPush() {
 		return
 	}
 
-	if successCount >= 0 {
+	if successCount > 0 {
 		sendTime := time.Now()
 		// 更新报告表的推送记录
 		if classifyType == 1 {

+ 4 - 5
controllers/report_v2.go

@@ -307,6 +307,10 @@ func (this *ReportController) ListReport() {
 	}
 
 	for _, item := range list {
+		// 判断分类名称
+		if item.ClassifyIdThird != 0 && utils.InArrayByStr(utils.REPORT_ICE_MSG_CLASSIFY_NAMES, item.ClassifyNameThird) && (item.State == 2 || item.State == 6) && item.DetailPdfUrl != "" {
+			item.CanSendMsg = true
+		}
 		/*key := fmt.Sprint(`crm:report:edit:`, item.Id)
 		opUserId, _ := utils.Rc.RedisInt(key)
 		//如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
@@ -336,11 +340,6 @@ func (this *ReportController) ListReport() {
 		} else {
 			item.Editor = markStatus.Editor
 		}
-
-		// 判断分类名称
-		if item.ClassifyIdThird != 0 && utils.InArrayByStr(utils.REPORT_ICE_MSG_CLASSIFY_NAMES, item.ClassifyNameThird) && (item.State == 2 || item.State == 6) && item.DetailPdfUrl != "" {
-			item.CanSendMsg = true
-		}
 	}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)

+ 2 - 1
controllers/sys_role.go

@@ -619,7 +619,8 @@ func (this *SysRoleController) ButtonList() {
 	}
 
 	roleId := sysUser.RoleId
-	list, e := system.GetMenuButtonsByRoleId(roleId)
+	//list, e := system.GetMenuButtonsByRoleId(roleId)
+	list, e := services.GetMenuList(this.GnToken, roleId)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取角色按钮权限失败, Err: " + e.Error()

+ 102 - 0
services/system.go

@@ -1,9 +1,14 @@
 package services
 
 import (
+	"encoding/json"
 	"eta_gn/eta_api/global"
 	"eta_gn/eta_api/models/system"
+	"eta_gn/eta_api/services/third"
 	"eta_gn/eta_api/utils"
+	"fmt"
+	"strconv"
+	"time"
 )
 
 func GetRoleTypeCode(roleType string) string {
@@ -142,3 +147,100 @@ func BuildGroupTreeV2(groups []*system.SysFullGroup, groupAdmins map[int][]*syst
 
 	return groupTree
 }
+
+// GetMenuList
+// @Description: 获取菜单列表
+// @author: Roc
+// @datetime 2025-06-10 11:16:34
+// @param token string
+// @param roleId int
+// @return items []*system.SysMenu
+// @return err error
+func GetMenuList(token string, roleId int) (items []*system.SysMenu, err error) {
+	items = make([]*system.SysMenu, 0)
+	if token == `` || utils.GnSciUserApiUrl == `` {
+		// 没有token,那么就直接通过角色吧
+		items, err = system.GetMenuButtonApisByRoleId(roleId)
+		if err != nil {
+			return
+		}
+
+		return
+	}
+
+	// 先从缓存里面获取,如果取不到,那么再去调用接口
+	key := fmt.Sprintf("%s%s", utils.CACHE_USER_MENU, utils.MD5(token))
+	//menuJsonStr, tmpErr := utils.Rc.RedisString(key)
+	//if tmpErr == nil && menuJsonStr != `` {
+	//	err = json.Unmarshal([]byte(menuJsonStr), &items)
+	//	if err == nil {
+	//		return
+	//	}
+	//}
+
+	resp, err := third.GetUserInfo(token)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	if resp.Info.Resource != nil && len(resp.Info.Resource) > 0 {
+
+		for _, v := range resp.Info.Resource {
+			var nameEn, path, iconPath, component, levelPath, buttonCode, api string
+			if v.NameEn != nil {
+				nameEn = *v.NameEn
+			}
+			if v.PATH != nil {
+				path = *v.PATH
+			}
+			if v.Icon != nil {
+				iconPath = *v.Icon
+			}
+			if v.Component != nil {
+				component = *v.Component
+			}
+			if v.LevelPath != nil {
+				levelPath = *v.LevelPath
+			}
+			if v.ButtonCode != nil {
+				buttonCode = *v.ButtonCode
+			}
+			if v.Api != nil {
+				api = *v.Api
+			}
+
+			var menuType int
+			if v.MenuType != `` {
+				menuType, _ = strconv.Atoi(v.MenuType)
+			}
+
+			items = append(items, &system.SysMenu{
+				MenuId:    v.MenuId,
+				ParentId:  v.ParentId,
+				Name:      v.MenuName,
+				Sort:      fmt.Sprint(v.OrderNum),
+				Path:      path,
+				IconPath:  iconPath,
+				Component: component,
+				//Hidden:     v.Hi,
+				IsLevel:    v.IsLevel,
+				LevelPath:  levelPath,
+				MenuType:   menuType,
+				ButtonCode: buttonCode,
+				//CreateTime: time.Time{},
+				//ModifyTime: time.Time{},
+				Api:    api,
+				NameEn: nameEn,
+			})
+		}
+	}
+
+	// 30分钟缓存,避免多次调用接口获取数据
+	menuJsonByte, tmpErr := json.Marshal(items)
+	if tmpErr == nil {
+		_ = utils.Rc.Put(key, menuJsonByte, 30*time.Minute)
+	}
+
+	return
+}

+ 136 - 0
services/third/gn.go

@@ -0,0 +1,136 @@
+package third
+
+import (
+	"encoding/json"
+	"errors"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"io"
+	"net/http"
+)
+
+type SciUserBaseInfoResp struct {
+	Code int    `json:"code"`
+	Msg  string `json:"msg"`
+	//Info  DeptItemResp `json:"info"`
+}
+
+type UserInfoResp struct {
+	SciUserBaseInfoResp
+
+	Info UserBaseInfResp `json:"info"`
+}
+
+type UserBaseInfResp struct {
+	Sub               string      `json:"sub"`
+	EmailVerified     bool        `json:"email_verified"`
+	UserName          string      `json:"user_name"`
+	Sex               string      `json:"sex"`
+	Phonenumber       interface{} `json:"phonenumber"`
+	DeptName          string      `json:"dept_name"`
+	Remark            string      `json:"remark"`
+	PreferredUsername string      `json:"preferred_username"`
+	GivenName         string      `json:"given_name"`
+	PostName          string      `json:"post_name"`
+	NickName          string      `json:"nick_name"`
+	PostCode          string      `json:"post_code"`
+	Name              string      `json:"name"`
+	DeptId            string      `json:"dept_id"`
+	FamilyName        string      `json:"family_name"`
+	Email             interface{} `json:"email"`
+	Status            string      `json:"status"`
+
+	Resource []MenuItemResp `json:"resource"`
+}
+
+type MenuItemResp struct {
+	PATH       *string `json:"PATH"`
+	ButtonCode *string `json:"button_code"`
+	MenuType   string  `json:"menu_type"`
+	UserName   string  `json:"user_name"`
+	Icon       *string `json:"icon"`
+	IsLevel    int     `json:"is_level"`
+	VISIBLE    string  `json:"VISIBLE"`
+	RoleName   string  `json:"role_name"`
+	Component  *string `json:"component"`
+	RoleId     int     `json:"role_id"`
+	LevelPath  *string `json:"level_path"`
+	NickName   string  `json:"nick_name"`
+	MenuName   string  `json:"menu_name"`
+	OrderNum   int     `json:"order_num"`
+	Api        *string `json:"api"`
+	MenuId     int     `json:"menu_id"`
+	ParentId   int     `json:"parent_id"`
+	NameEn     *string `json:"name_en"`
+}
+
+// GetUserInfo
+// @Description: 获取用户信息
+// @author: Roc
+// @datetime 2025-06-09 17:01:43
+// @param token string
+// @return resp *UserInfoResp
+// @return err error
+func GetUserInfo(token string) (resp *UserInfoResp, err error) {
+	urlPath := `index/getuserinfo?token=` + token
+	result, err := HttpUserGet(urlPath)
+	if err != nil {
+		return
+	}
+	//  解析响应结果
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+// HttpUserGet
+// @Description: get请求
+// @author: Roc
+// @datetime 2025-06-05 14:40:36
+// @param urlPath string
+// @return []byte
+// @return error
+func HttpUserGet(urlPath string) ([]byte, error) {
+	if utils.GnSciUserApiUrl == `` {
+		return nil, errors.New("用户中心同步接口地址为空")
+	}
+	// 请求地址
+	getUrl := utils.GnSciUserApiUrl + urlPath
+	client := &http.Client{}
+	req, err := http.NewRequest("GET", getUrl, nil)
+	if err != nil {
+		return nil, err
+	}
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	result, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, err
+	}
+
+	// 日志记录
+	utils.FileLog.Debug("用户中心平台:地址:" + getUrl + ";\n返回参数:" + string(result))
+
+	//  解析返回参数,判断是否是json
+	if !json.Valid(result) {
+		err = errors.New("返回参数不是json格式")
+	}
+
+	var respItem SciUserBaseInfoResp
+	err = json.Unmarshal(result, &respItem)
+	if err != nil {
+		return nil, err
+	}
+	if respItem.Code != 0 {
+		err = fmt.Errorf("HttpUserGet请求失败, Err: %d, ErrMsg: %s ", respItem.Code, respItem.Msg)
+		return nil, err
+	}
+
+	return result, err
+}

+ 10 - 0
utils/config.go

@@ -196,6 +196,10 @@ var (
 	ETA_FORUM_HUB_MD5_KEY string
 )
 
+var (
+	GnSciUserApiUrl string //卓创用户中心接口地址
+)
+
 // BusinessCode 商家编码
 var BusinessCode string
 
@@ -546,6 +550,12 @@ func init() {
 		ETA_FORUM_HUB_NAME_EN = config["eta_forum_hub_name_en"]
 		ETA_FORUM_HUB_MD5_KEY = config["eta_forum_hub_md5_key"]
 	}
+
+	// 国能地址
+	{
+		GnSciUserApiUrl = config["gn_sci_user_api_url"]
+	}
+
 	// 商家编码
 	BusinessCode = config["business_code"]
 	// eta_mini_bridge 小程序桥接服务地址

+ 1 - 0
utils/constants.go

@@ -219,6 +219,7 @@ const (
 	CACHE_KEY_BI_DASHBOARD_PREPARE_RESOURCE = "eta:bi_dashboard:prepare_resource" // 准备引用到看板的知识资源
 	CACHE_KEY_DATA_COLLECT_HANDLER          = "eta:data:collect:handler"          // 资产收藏处理队列
 	CACHE_REPORT_ICE_MSG_PUSH               = "eta:report:ice_msg:push:"           // 研报消息推送缓存
+	CACHE_USER_MENU                         = "eta:user:menu:"                    // 用户菜单权限
 )
 
 // 模板消息推送类型