workDesktop.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package service
  2. import (
  3. MC "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/redis"
  5. "encoding/json"
  6. "errors"
  7. "fmt"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "time"
  10. "userCenter/entity"
  11. "userCenter/rpc/pb"
  12. . "userCenter/rpc/usercenter"
  13. )
  14. //获取工作桌面菜单当前选择模式--全部/可用
  15. func GetWorkDesktopMenuMode(in *WorkDesktopMenuReq) string {
  16. logx.Info("_______________________")
  17. menuModes := entity.BaseMysql.SelectBySql(`SELECT value FROM work_commonly WHERE appid=? AND userid=? AND field = 'navigation' LIMIT 1`, in.AppId, in.UserId)
  18. logx.Info("_______________________")
  19. if menuModes != nil && len(*menuModes) > 0 {
  20. menuMode := (*menuModes)[0]
  21. return MC.ObjToString(menuMode["value"])
  22. }
  23. return "all"
  24. }
  25. //获取工作桌面菜单树
  26. func GetWordDesktopMenuTree(in *WorkDesktopMenuReq, redisOutTime int, bigMemberOff bool) ([]*pb.MenuList, error) {
  27. t1 := time.Now()
  28. //redis缓存
  29. var menuList []*pb.MenuList
  30. RedisMenuKey := fmt.Sprintf(entity.RedisMenuKey, in.AppId, in.UserId)
  31. menuBytes, err := redis.GetBytes(entity.RedisCode, RedisMenuKey)
  32. if err == nil && len(*menuBytes) > 0 {
  33. if json.Unmarshal(*menuBytes, &menuList) == nil {
  34. return menuList, nil
  35. }
  36. }
  37. //tidb数据
  38. menuData := entity.BaseMysql.SelectBySql(`SELECT * FROM work_menu WHERE status=0 AND appid=? ORDER BY id ASC`, in.AppId)
  39. if menuData == nil || len(*menuData) == 0 {
  40. return nil, errors.New("查询数据异常")
  41. }
  42. wdm := &entity.WorkDesktopMenu{
  43. MenuTree: []*entity.JYMenu{},
  44. UserId: in.UserId,
  45. TimeOut: redisOutTime,
  46. BigMemberOff: bigMemberOff,
  47. }
  48. for _, v := range *menuData {
  49. menu := &entity.JYMenu{
  50. Id: MC.IntAll(v["id"]),
  51. Name: MC.ObjToString(v["name"]),
  52. OrderId: MC.IntAll(v["orderid"]),
  53. ParentId: MC.IntAll(v["parentid"]),
  54. PowerIds: MC.ObjToString(v["powerids"]),
  55. CheckCode: MC.IntAll(v["checkcode"]),
  56. Icon: MC.ObjToString(v["icon"]),
  57. AppType: MC.ObjToString(v["apptype"]),
  58. OpenType: MC.ObjToString(v["opentype"]),
  59. }
  60. switch in.Platform {
  61. case "WX":
  62. menu.Url = MC.ObjToString(v["wxurl"])
  63. case "APP":
  64. menu.Url = MC.ObjToString(v["appurl"])
  65. default:
  66. menu.Url = MC.ObjToString(v["pcurl"])
  67. }
  68. if additionalInfo := MC.ObjToString(v["additionalinfo"]); additionalInfo != "" {
  69. additional := entity.Additional{}
  70. if json.Unmarshal([]byte(additionalInfo), &additional) == nil {
  71. menu.AdditionalInfo = additional
  72. }
  73. }
  74. if menu.Id > 0 {
  75. wdm.MenuTree = append(wdm.MenuTree, menu)
  76. }
  77. }
  78. logx.Info("数据长度:", len(wdm.MenuTree), "-- 查询菜单数据耗时:", time.Since(t1))
  79. //jyMenu := wdm.WorkMenuTree(0)
  80. wdm.MenuTree = wdm.WorkMenuTree(0)
  81. logx.Info("菜单树生成耗时:", time.Since(t1))
  82. menuList, err = wdm.WorkMenuFormat()
  83. logx.Info("菜单格式化耗时:", time.Since(t1))
  84. if err == nil && len(menuList) > 0 {
  85. if menuBytes, err := json.Marshal(menuList); err == nil {
  86. if redis.PutBytes(entity.RedisCode, RedisMenuKey, &menuBytes, redisOutTime) != nil {
  87. logx.Info("工作桌面菜单 redis缓存异常")
  88. }
  89. } else {
  90. logx.Info("菜单数据序列化异常")
  91. }
  92. }
  93. logx.Info("整体耗时:", time.Since(t1))
  94. return menuList, err
  95. }