sys_auth_rule.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package service
  2. import (
  3. "gfast/app/common/global"
  4. "gfast/app/common/service"
  5. "gfast/app/system/dao"
  6. "gfast/app/system/model"
  7. "github.com/gogf/gf/frame/gmvc"
  8. "github.com/gogf/gf/util/gconv"
  9. )
  10. type rule struct {
  11. }
  12. var Rule = new(rule)
  13. //获取status==1的菜单列表
  14. func (s *rule) GetMenuIsStatusList() ([]*model.SysAuthRuleInfoRes, error) {
  15. list, err := s.GetMenuList()
  16. if err != nil {
  17. return nil, err
  18. }
  19. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  20. for _, v := range list {
  21. if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
  22. gList = append(gList, v)
  23. }
  24. }
  25. return gList, nil
  26. }
  27. //获取所有菜单
  28. func (s *rule) GetMenuList() (list []*model.SysAuthRuleInfoRes, err error) {
  29. cache := service.Cache.New()
  30. //从缓存获取
  31. iList := cache.Get(global.SysAuthMenu)
  32. if iList != nil {
  33. err = gconv.Struct(iList, &list)
  34. return
  35. }
  36. //从数据库获取
  37. list, err = dao.SysAuthRule.GetMenuList()
  38. if err != nil || list == nil {
  39. return
  40. }
  41. //缓存菜单
  42. cache.Set(global.SysAuthMenu, list, 0, global.SysAuthTag)
  43. return
  44. }
  45. func (s *rule) GetMenuListSearch(req *model.SysAuthRuleReqSearch) (list []*model.SysAuthRuleInfoRes, err error) {
  46. list, err = dao.SysAuthRule.Scope(func(m gmvc.M) gmvc.M {
  47. if req != nil && !req.IsEmpty() {
  48. if req.Title != "" {
  49. m = m.Where("title like ?", "%"+req.Title+"%")
  50. }
  51. if req.Status != "" {
  52. m = m.Where("status = ?", req.Status)
  53. }
  54. }
  55. return m
  56. }).GetMenuList()
  57. if err != nil || list == nil {
  58. return
  59. }
  60. return
  61. }
  62. func (s *rule) GetMenuListTree(pid uint, list []*model.SysAuthRuleInfoRes) []*model.SysAuthRuleTreeRes {
  63. tree := make([]*model.SysAuthRuleTreeRes, 0, len(list))
  64. for _, menu := range list {
  65. if menu.Pid == pid {
  66. t := &model.SysAuthRuleTreeRes{
  67. SysAuthRuleInfoRes: menu,
  68. }
  69. child := s.GetMenuListTree(menu.Id, list)
  70. if child != nil {
  71. t.Children = child
  72. }
  73. tree = append(tree, t)
  74. }
  75. }
  76. return tree
  77. }
  78. // GetIsButtonStatusList 获取所有按钮isMenu=2 且status=1的菜单列表
  79. func (s *rule) GetIsButtonStatusList() ([]*model.SysAuthRuleInfoRes, error) {
  80. list, err := s.GetMenuList()
  81. if err != nil {
  82. return nil, err
  83. }
  84. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  85. for _, v := range list {
  86. if v.MenuType == 2 && v.Status == 1 {
  87. gList = append(gList, v)
  88. }
  89. }
  90. return gList, nil
  91. }
  92. func (s *rule) GetIsMenuList() ([]*model.SysAuthRuleInfoRes, error) {
  93. list, err := s.GetMenuList()
  94. if err != nil {
  95. return nil, err
  96. }
  97. var gList = make([]*model.SysAuthRuleInfoRes, 0)
  98. for _, v := range list {
  99. if v.MenuType == 0 || v.MenuType == 1 {
  100. gList = append(gList, v)
  101. }
  102. }
  103. return gList, nil
  104. }
  105. //检查菜单规则是否存在
  106. func (s *rule) CheckMenuNameUnique(name string, id int) bool {
  107. return dao.SysAuthRule.CheckMenuNameUnique(name, id)
  108. }
  109. //检查菜单路由地址是否已经存在
  110. func (s *rule) CheckMenuPathUnique(path string, id int) bool {
  111. return dao.SysAuthRule.CheckMenuPathUnique(path, id)
  112. }
  113. func (s *rule) AddMenu(req *model.MenuReq) (err error, insertId int64) {
  114. result, e := dao.SysAuthRule.Save(req)
  115. if e != nil {
  116. return e, 0
  117. }
  118. lastId, e := result.LastInsertId()
  119. if e != nil {
  120. return e, 0
  121. }
  122. return nil, lastId
  123. }
  124. //获取分类模型选项
  125. func (s *rule) ModelOptions(module string) (models []*model.SysModelInfo, err error) {
  126. dictType := ""
  127. switch module {
  128. case "gov_work":
  129. //政务平台
  130. dictType = "gov_cate_models"
  131. }
  132. if dictType != "" {
  133. //栏目模型分类
  134. //var modelOptions g.Map
  135. modelOptions, e := SysDictData.GetDictWithDataByType(&model.GetDictReq{
  136. DictType: dictType,
  137. })
  138. if e != nil {
  139. err = e
  140. return
  141. }
  142. values := gconv.SliceAny(modelOptions.Values)
  143. keys := make([]int, len(values))
  144. for k, val := range values {
  145. data := gconv.Map(val)
  146. keys[k] = gconv.Int(data["key"])
  147. }
  148. //获取对应模型
  149. models, err = SysInfo.GetModelsByCateIds(keys)
  150. if err != nil {
  151. return
  152. }
  153. }
  154. return
  155. }
  156. func (s *rule) One(id uint64) (*model.SysAuthRule, error) {
  157. return dao.SysAuthRule.Where("id = ?", id).FindOne()
  158. }
  159. func (s *rule) EditMenu(req *model.MenuReq, id int) (err error, rows int64) {
  160. result, e := dao.SysAuthRule.Where("id = ?", id).Update(req)
  161. if e != nil {
  162. err = e
  163. return
  164. }
  165. r, e := result.RowsAffected()
  166. if e != nil {
  167. err = e
  168. return
  169. }
  170. return nil, r
  171. }
  172. func (s *rule) DeleteMenuByIds(ids []int) (err error) {
  173. var list []*model.SysAuthRuleInfoRes
  174. list, err = s.GetMenuList()
  175. if err != nil {
  176. return
  177. }
  178. childrenIds := make([]int, 0, len(list))
  179. for _, id := range ids {
  180. rules := s.FindSonByParentId(list, gconv.Uint(id))
  181. for _, child := range rules {
  182. childrenIds = append(childrenIds, gconv.Int(child.Id))
  183. }
  184. }
  185. ids = append(ids, childrenIds...)
  186. _, err = dao.SysAuthRule.Where("id in (?)", ids).Delete()
  187. return
  188. }
  189. func (s *rule) ParentSonSort(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
  190. newList := make([]*model.SysAuthRuleInfoRes, 0, len(list))
  191. for _, v := range list {
  192. if pid == v.Pid {
  193. newList = append(newList, v)
  194. newList2 := s.ParentSonSort(list, v.Id)
  195. newList = append(newList, newList2...)
  196. }
  197. }
  198. return newList
  199. }
  200. func (s *rule) FindSonByParentId(list []*model.SysAuthRuleInfoRes, pid uint) []*model.SysAuthRuleInfoRes {
  201. children := make([]*model.SysAuthRuleInfoRes, 0, len(list))
  202. for _, v := range list {
  203. if v.Pid == pid {
  204. children = append(children, v)
  205. fChildren := s.FindSonByParentId(list, v.Id)
  206. children = append(children, fChildren...)
  207. }
  208. }
  209. return children
  210. }