menuSvc.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package menu
  2. import (
  3. "errors"
  4. "github.com/gogf/gf/frame/g"
  5. "github.com/gogf/gf/os/glog"
  6. "github.com/gogf/gf/text/gstr"
  7. "github.com/gogf/gf/util/gconv"
  8. "gmanager/app/constants"
  9. "gmanager/app/model/menu"
  10. "gmanager/app/service/log"
  11. "gmanager/library"
  12. "gmanager/library/base"
  13. )
  14. // 请求参数
  15. type Request struct {
  16. menu.Entity
  17. UserId int `form:"userId" json:"userId"`
  18. }
  19. // 通过id获取实体
  20. func GetById(id int64) (*menu.Entity, error) {
  21. if id <= 0 {
  22. glog.Error(" get id error")
  23. return new(menu.Entity), errors.New("参数不合法")
  24. }
  25. return menu.Model.FindOne(" id = ?", id)
  26. }
  27. // 根据条件获取实体
  28. func GetOne(form *base.BaseForm) (*menu.Entity, error) {
  29. where := " 1 = 1 "
  30. var params []interface{}
  31. if form.Params != nil && form.Params["id"] != "" {
  32. where += " and id = ? "
  33. params = append(params, gconv.Int(form.Params["id"]))
  34. }
  35. if form.Params != nil && form.Params["parentId"] != "" {
  36. where += " and parent_id = ? "
  37. params = append(params, gconv.Int(form.Params["parentId"]))
  38. }
  39. return menu.Model.FindOne(where, params)
  40. }
  41. // 删除实体
  42. func Delete(id int64, userId int) (int64, error) {
  43. if id <= 0 {
  44. glog.Error("delete id error")
  45. return 0, errors.New("参数不合法")
  46. }
  47. // 获取删除对象
  48. entity, err := GetById(id)
  49. if err != nil {
  50. return 0, err
  51. }
  52. entity.UpdateId = userId
  53. entity.UpdateTime = library.GetNow()
  54. r, err1 := menu.Model.Delete(" id = ?", id)
  55. if err1 != nil {
  56. return 0, err1
  57. }
  58. log.SaveLog(entity, constants.DELETE)
  59. return r.RowsAffected()
  60. }
  61. // 保存实体
  62. func Save(request *Request) (int64, error) {
  63. entity := (*menu.Entity)(nil)
  64. err := gconv.Struct(request.Entity, &entity)
  65. if err != nil {
  66. return 0, errors.New("数据错误")
  67. }
  68. entity.UpdateId = request.UserId
  69. entity.UpdateTime = library.GetNow()
  70. // 根目录级别为1,其他为父节点 + 1
  71. parentId := entity.ParentId
  72. if parentId == 0 {
  73. entity.Level = 1
  74. } else {
  75. form := base.NewForm(g.Map{"id": parentId})
  76. parentModel, err := GetOne(&form)
  77. if err != nil {
  78. return 0, err
  79. }
  80. entity.Level = parentModel.Level + 1
  81. }
  82. // 判断新增还是修改
  83. if entity.Id <= 0 {
  84. entity.CreateId = request.UserId
  85. entity.CreateTime = library.GetNow()
  86. r, err := menu.Model.Insert(entity)
  87. if err != nil {
  88. return 0, err
  89. }
  90. // 回写主键
  91. lastId, err := r.LastInsertId()
  92. if err != nil {
  93. return 0, err
  94. }
  95. entity.Id = gconv.Int(lastId)
  96. log.SaveLog(entity, constants.INSERT)
  97. return r.RowsAffected()
  98. } else {
  99. r, err := menu.Model.OmitEmpty().Where(" id = ?", entity.Id).Update(entity)
  100. if err != nil {
  101. return 0, err
  102. }
  103. log.SaveLog(entity, constants.UPDATE)
  104. return r.RowsAffected()
  105. }
  106. }
  107. func ListUser(userId int, userType int) ([]*menu.Entity, error) {
  108. if userType == constants.UserTypeAdmin {
  109. return List(&base.BaseForm{})
  110. }
  111. return menu.Model.As("t").Fields(menu.Model.Columns()).LeftJoin(
  112. "sys_role_menu rm", "rm.menu_id = t.id ").LeftJoin(
  113. "sys_user_role ur", "ur.role_id = rm.role_id ").Where(
  114. "ur.user_id = ? ", userId).FindAll()
  115. }
  116. // 列表数据查询
  117. func List(form *base.BaseForm) ([]*menu.Entity, error) {
  118. where := " 1 = 1 "
  119. var params []interface{}
  120. if form.Params != nil && form.Params["name"] != "" {
  121. where += " and name like ? "
  122. params = append(params, "%"+form.Params["name"]+"%")
  123. }
  124. if form.Params != nil && form.Params["level"] != "" {
  125. where += " and level in (?) "
  126. params = append(params, gstr.Split(form.Params["level"], ","))
  127. }
  128. if gstr.Trim(form.OrderBy) == "" {
  129. form.OrderBy = " sort,id desc"
  130. }
  131. return menu.Model.Order(form.OrderBy).FindAll(where, params)
  132. }
  133. // 分页查询
  134. func Page(form *base.BaseForm) ([]menu.Entity, error) {
  135. if form.Page <= 0 || form.Rows <= 0 {
  136. glog.Error("page param error", form.Page, form.Rows)
  137. return []menu.Entity{}, nil
  138. }
  139. where := " 1 = 1 "
  140. var params []interface{}
  141. if form.Params != nil && form.Params["name"] != "" {
  142. where += " and name like ? "
  143. params = append(params, "%"+form.Params["name"]+"%")
  144. }
  145. num, err := menu.Model.As("t").FindCount(where, params)
  146. form.TotalSize = num
  147. form.TotalPage = num / form.Rows
  148. if err != nil {
  149. glog.Error("page count error", err)
  150. return []menu.Entity{}, err
  151. }
  152. // 没有数据直接返回
  153. if num == 0 {
  154. form.TotalPage = 0
  155. form.TotalSize = 0
  156. return []menu.Entity{}, err
  157. }
  158. var resData []menu.Entity
  159. dbModel := menu.Model.As("t").Fields(menu.Model.Columns() + ",su1.real_name as updateName,su2.real_name as createName")
  160. dbModel = dbModel.LeftJoin("sys_user su1", " t.update_id = su1.id ")
  161. dbModel = dbModel.LeftJoin("sys_user su2", " t.update_id = su2.id ")
  162. err = dbModel.Where(where, params).Order(form.OrderBy).Page(form.Page, form.Rows).M.Structs(&resData)
  163. if err != nil {
  164. glog.Error("page list error", err)
  165. return []menu.Entity{}, err
  166. }
  167. return resData, nil
  168. }