workDesktop.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. //工作桌面--菜单当前选择模式--全部:all/可用:usable
  15. //工作桌面--常用功能更新
  16. func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *WorkDesktopComprehensiveResp) {
  17. //
  18. r = &WorkDesktopComprehensiveResp{}
  19. switch in.ActionMode {
  20. case "commonly": //常用功能更新
  21. //in.MenuIds 为空;删除
  22. if in.MenuIds == "" {
  23. if !func() bool {
  24. if entity.BaseMysql.CountBySql(`SELECT COUNT(id) FROM `+entity.WorkCommonly+` WHERE userid = '?' AND appid = ? AND platform = '?' AND field = ?`, in.UserId, in.AppId, in.Platform, in.ActionMode) > 0 {
  25. return entity.BaseMysql.UpdateOrDeleteBySql(`DELETE FROM `+entity.WorkCommonly+` WHERE userid = '?' AND appid = ? AND platform = '?' AND field = ?`, in.UserId, in.AppId, in.Platform, in.ActionMode) > 0
  26. }
  27. return true
  28. }() {
  29. r.ErrorCode = -1
  30. r.ErrorMsg = "常用功能-清空常用功能异常"
  31. }
  32. } else {
  33. //in.MenuIds 不为空:更新
  34. if b, m := entity.CommonlyUpdate(in); !b {
  35. r.ErrorCode = -1
  36. r.ErrorMsg = m
  37. }
  38. }
  39. case "menuMode": //菜单模式更新
  40. if in.MenuMode == "" || (in.MenuMode != "usable" && in.MenuMode != "all") {
  41. r.ErrorCode = -1
  42. r.ErrorMsg = "菜单模式-参数异常"
  43. } else {
  44. menuModes := entity.BaseMysql.SelectBySql(`SELECT id,value FROM `+entity.WorkCommonly+` WHERE appid=? AND userid=? AND field = ? AND platform = ? LIMIT 1`, in.AppId, in.UserId, in.ActionMode, in.Platform)
  45. if menuModes != nil && len(*menuModes) > 0 {
  46. menuMode := (*menuModes)[0]
  47. if MC.ObjToString(menuMode["value"]) != in.MenuMode {
  48. if entity.BaseMysql.UpdateOrDeleteBySql(`UPDATE `+entity.WorkCommonly+` SET value = ? WHERE id = ?`, in.MenuMode, MC.IntAll(menuMode["id"])) < 0 {
  49. r.ErrorCode = -1
  50. r.ErrorMsg = "菜单模式-更新异常"
  51. }
  52. }
  53. }
  54. }
  55. }
  56. return
  57. }
  58. //获取工作桌面菜单树
  59. func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq, redisOutTime int, bigMemberOff bool) ([]*pb.MenuList, error) {
  60. t1 := time.Now()
  61. //redis缓存
  62. var menuList []*pb.MenuList
  63. RedisMenuKey := fmt.Sprintf(entity.RedisMenuKey, in.AppId, in.UserId)
  64. menuBytes, err := redis.GetBytes(entity.RedisCode, RedisMenuKey)
  65. if err == nil && len(*menuBytes) > 0 {
  66. if json.Unmarshal(*menuBytes, &menuList) == nil {
  67. return menuList, nil
  68. }
  69. }
  70. //tidb数据
  71. menuData := entity.BaseMysql.SelectBySql(`SELECT * FROM `+entity.WorkCommonly+` WHERE status=0 AND appid=? ORDER BY id ASC`, in.AppId)
  72. if menuData == nil || len(*menuData) == 0 {
  73. return nil, errors.New("查询数据异常")
  74. }
  75. wdm := &entity.WorkDesktopMenu{
  76. MenuTree: []*entity.JYMenu{},
  77. UserId: in.UserId,
  78. TimeOut: redisOutTime,
  79. BigMemberOff: bigMemberOff,
  80. }
  81. for _, v := range *menuData {
  82. menu := &entity.JYMenu{
  83. Id: MC.IntAll(v["id"]),
  84. Name: MC.ObjToString(v["name"]),
  85. OrderId: MC.IntAll(v["orderid"]),
  86. ParentId: MC.IntAll(v["parentid"]),
  87. PowerIds: MC.ObjToString(v["powerids"]),
  88. CheckCode: MC.IntAll(v["checkcode"]),
  89. Icon: MC.ObjToString(v["icon"]),
  90. AppType: MC.ObjToString(v["apptype"]),
  91. OpenType: MC.ObjToString(v["opentype"]),
  92. }
  93. switch in.Platform {
  94. case "WX":
  95. menu.Url = MC.ObjToString(v["wxurl"])
  96. case "APP":
  97. menu.Url = MC.ObjToString(v["appurl"])
  98. default:
  99. menu.Url = MC.ObjToString(v["pcurl"])
  100. }
  101. if additionalInfo := MC.ObjToString(v["additionalinfo"]); additionalInfo != "" {
  102. additional := entity.Additional{}
  103. if json.Unmarshal([]byte(additionalInfo), &additional) == nil {
  104. menu.AdditionalInfo = additional
  105. }
  106. }
  107. if menu.Id > 0 {
  108. wdm.MenuTree = append(wdm.MenuTree, menu)
  109. }
  110. }
  111. logx.Info("数据长度:", len(wdm.MenuTree), "-- 查询菜单数据耗时:", time.Since(t1))
  112. //jyMenu := wdm.WorkMenuTree(0)
  113. wdm.MenuTree = wdm.WorkMenuTree(0)
  114. logx.Info("菜单树生成耗时:", time.Since(t1))
  115. menuList, err = wdm.WorkMenuFormat()
  116. logx.Info("菜单格式化耗时:", time.Since(t1))
  117. if err == nil && len(menuList) > 0 {
  118. if menuBytes, err := json.Marshal(menuList); err == nil {
  119. if redis.PutBytes(entity.RedisCode, RedisMenuKey, &menuBytes, redisOutTime) != nil {
  120. logx.Info("工作桌面菜单 redis缓存异常")
  121. }
  122. } else {
  123. logx.Info("菜单数据序列化异常")
  124. }
  125. }
  126. logx.Info("整体耗时:", time.Since(t1))
  127. return menuList, err
  128. }