user.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package entity
  2. import (
  3. MC "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/redis"
  5. "encoding/json"
  6. "fmt"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. const (
  12. IsNewFreeTimeCell = 1637830020
  13. BigMemberUserPowerTable = "bigmember_service_user"
  14. RedisCode = "newother"
  15. RedisMenuKey = "jy_workdesktopmenu_%s_%s_%s"
  16. UserPowerRedisKey = "jy_userpowerredis_%s_%d_%s"
  17. )
  18. /*
  19. *待调整 调整为存redis
  20. *测试用例放的地方不对 待调整
  21. */
  22. //用户权限 初始化
  23. func AutoUserPowerInfo(userId, appId string, internalTime int, bigMemberOff bool) map[string]int {
  24. /*
  25. * 商机管理--》新版商机管理vs老版商机管理
  26. * 大会员--》bigmember_service
  27. * 超级订阅--》新版超级订阅vs老版超级订阅
  28. * 免费用户--》新免费用户
  29. */
  30. var UserPowerMap = map[string]int{}
  31. //redis newother 查询是否存在用户功能信息
  32. userPowerRedisKey := fmt.Sprintf(UserPowerRedisKey, appId, time.Now().Day(), userId)
  33. bytes, err := redis.GetBytes(RedisCode, userPowerRedisKey)
  34. if err == nil && len(*bytes) > 0 {
  35. if err = json.Unmarshal(*bytes, &UserPowerMap); err == nil {
  36. return UserPowerMap
  37. }
  38. }
  39. //查询用户信息
  40. data, ok := Mgo.FindById("user", userId, `{"s_phone":1,"s_m_phone":1,i_member_status":1,"s_member_mainid":1,"i_member_sub_status":1,"i_vip_status":1,"o_vipjy":1,"o_jy":1,"l_registedate":1}`)
  41. if ok && *data != nil && len(*data) > 0 {
  42. var isFree = true
  43. phone, _ := MC.If((*data)["s_phone"] != nil, (*data)["s_phone"], (*data)["s_m_phone"]).(string)
  44. if phone != "" {
  45. //商机管理用户
  46. //同一个手机号 多个商机管理角色 其中一个是企业管理员或者部门管理员 查的时候按角色权重排序
  47. entNicheInfos := Mysql.SelectBySql(`SELECT i.isNew,r.role_id FROM (entniche_user u LEFT JOIN entniche_user_role r ON r.user_id = u.id) LEFT JOIN entniche_info i ON u.ent_id=i.id WHERE u.phone = ? and u.power=1 and i.status=1 ORDER BY r.role_id DESC`, phone)
  48. //商机管理用户信息判断
  49. if entNicheInfos != nil && len(*entNicheInfos) > 0 {
  50. isFree = false
  51. entNicheInfo := (*entNicheInfos)[0]
  52. UserPowerMap["100"] = 1
  53. if MC.ObjToString(entNicheInfo["isNew"]) != "" {
  54. switch MC.ObjToString(entNicheInfo["isNew"]) {
  55. case "1": //新版商机管理
  56. UserPowerMap["110"] = 1
  57. switch MC.ObjToString(entNicheInfo["role_id"]) {
  58. case "1": //部门管理员
  59. UserPowerMap["111"] = 1
  60. case "2": //企业管理员
  61. UserPowerMap["112"] = 1
  62. }
  63. case "0": //老版商机管理
  64. switch MC.ObjToString(entNicheInfo["role_id"]) {
  65. case "1": //部门管理员
  66. UserPowerMap["101"] = 1
  67. case "2": //企业管理员
  68. UserPowerMap["102"] = 1
  69. }
  70. }
  71. }
  72. }
  73. //大会员
  74. if memberStatus := MC.IntAll((*data)["i_member_status"]); memberStatus > 0 || bigMemberOff {
  75. userId := userId
  76. if memberStatus > 0 {
  77. isFree = false
  78. UserPowerMap["1"] = memberStatus
  79. //是否是子账号 而且 子账号被启用
  80. if (*data)["s_member_mainid"] != nil && MC.ObjToString((*data)["s_member_mainid"]) != "" && MC.IntAllDef((*data)["i_member_sub_status"], 0) > 0 {
  81. userId = MC.ObjToString((*data)["s_member_mainid"])
  82. }
  83. }
  84. //大会员用户购买的服务
  85. serviceList := Mysql.Find(BigMemberUserPowerTable, map[string]interface{}{"s_userid": userId, "i_status": 0}, "DISTINCT(s_serviceid),i_frequency", "", -1, -1)
  86. if serviceList != nil && len(*serviceList) != 0 {
  87. for _, sv := range *serviceList {
  88. UserPowerMap[MC.ObjToString(sv["s_serviceid"])] = MC.IntAll(sv["i_frequency"])
  89. }
  90. }
  91. }
  92. //VIP用户
  93. if vipStatus := MC.IntAll((*data)["i_vip_status"]); vipStatus > 0 {
  94. isFree = false
  95. UserPowerMap["200"] = vipStatus
  96. if vipSet := MC.ObjToMap((*data)["o_vipjy"]); vipSet != nil {
  97. if buySet := MC.ObjToMap((*vipSet)["o_buyset"]); buySet != nil {
  98. //vip 升级用户
  99. if MC.IntAll((*buySet)["upgrade"]) > 0 {
  100. UserPowerMap["201"] = vipStatus
  101. }
  102. }
  103. }
  104. }
  105. //免费用户
  106. if isFree {
  107. UserPowerMap["300"] = 1
  108. }
  109. freeSet := MC.ObjToMap((*data)["o_jy"])
  110. if MC.IntAll((*freeSet)["i_newfree"]) > 0 || IsNewFreeTimeCell < MC.IntAll((*data)["l_registedate"]) {
  111. //新免费用户
  112. UserPowerMap["301"] = 1
  113. }
  114. //广东移动DICT
  115. if Mysql.CountBySql(`select count(*) from privatedata where phone = ?`, phone) > 0 {
  116. UserPowerMap["400"] = 1
  117. }
  118. }
  119. if UserPowerMap != nil {
  120. bytes, err := json.Marshal(UserPowerMap)
  121. if err == nil && len(bytes) > 0 {
  122. redis.PutBytes(RedisCode, userPowerRedisKey, &bytes, internalTime)
  123. }
  124. }
  125. }
  126. return UserPowerMap
  127. }
  128. //clear One
  129. func ClearUserPowerFunc(userId, appId string) {
  130. userPowerRedisKey := fmt.Sprintf(UserPowerRedisKey, appId, time.Now().Day(), userId)
  131. redis.Del(RedisCode, userPowerRedisKey)
  132. }
  133. type userRolePower struct {
  134. Name string
  135. PowerIds []int
  136. }
  137. var UserRolePowers = map[string][]string{}
  138. //用户角色权限初始化
  139. func UserRolePowerInit(strs []string) {
  140. if len(strs) > 0 {
  141. jyUserRoleData := BaseMysql.SelectBySql(`SELECT id,name FROM jyfunction WHERE status = 1`)
  142. if jyUserRoleData != nil && len(*jyUserRoleData) > 0 {
  143. for _, jv := range *jyUserRoleData {
  144. for _, v := range strs {
  145. if strings.Contains(MC.ObjToString(jv["name"]), v) {
  146. UserRolePowers[v] = append(UserRolePowers[v], strconv.Itoa(MC.IntAll(jv["id"])))
  147. }
  148. }
  149. }
  150. }
  151. }
  152. }