system_service_more.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "kpt-pasture/model"
  7. "net/http"
  8. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  9. operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
  10. "gitee.com/xuyiping_admin/pkg/xerr"
  11. "gorm.io/gorm"
  12. )
  13. // CreateOrUpdateSystemMenu 添加或者更新系统菜单权限
  14. func (s *StoreEntry) CreateOrUpdateSystemMenu(ctx context.Context, req *pasturePb.SearchMenuRequest) error {
  15. if req.Id > 0 {
  16. systemMenu := &model.SystemMenu{Id: int64(req.Id)}
  17. if err := s.DB.Model(&model.SystemMenu{}).First(systemMenu).Error; err != nil {
  18. if !errors.Is(err, gorm.ErrRecordNotFound) {
  19. return xerr.WithStack(err)
  20. }
  21. }
  22. }
  23. if err := s.DB.Model(&model.SystemMenu{}).Where(map[string]interface{}{
  24. "id": req.Id,
  25. }).Assign(map[string]interface{}{
  26. "name": req.Name,
  27. "path": req.Path,
  28. "title": req.Title,
  29. "menu_type": req.MenuType,
  30. "parent_id": req.ParentId,
  31. "frame_src": req.FrameSrc,
  32. "frame_loading": model.BooleanToIsShow(req.FrameLoading),
  33. "keepalive": model.BooleanToIsShow(req.Keepalive),
  34. "hidden_tag": model.BooleanToIsShow(req.HiddenTag),
  35. "show_link": model.BooleanToIsShow(req.ShowLink),
  36. "show_parent": model.BooleanToIsShow(req.ShowParent),
  37. "icon": req.Icon,
  38. "component": req.Component,
  39. "redirect": req.Redirect,
  40. "auths": req.Auths,
  41. "rank": req.Rank,
  42. "extra_icon": req.ExtraIcon,
  43. "enter_transition": req.EnterTransition,
  44. "leave_transition": req.LeaveTransition,
  45. "active_path": req.ActivePath,
  46. "is_delete": pasturePb.IsShow_Ok,
  47. "is_show": pasturePb.IsShow_Ok,
  48. }).FirstOrCreate(&model.SystemMenu{}).Error; err != nil {
  49. return xerr.WithStack(err)
  50. }
  51. return nil
  52. }
  53. func (s *StoreEntry) SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuTreeResponse, error) {
  54. systemMenuList := make([]*model.SystemMenu, 0)
  55. if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ?", pasturePb.IsShow_Ok).
  56. Where("is_show = ?", pasturePb.IsShow_Ok).Find(&systemMenuList).Error; err != nil {
  57. return nil, xerr.WithStack(err)
  58. }
  59. return &pasturePb.SystemMenuTreeResponse{
  60. Code: http.StatusOK,
  61. Msg: "ok",
  62. Data: model.SystemMenuSlice(systemMenuList).ToPB(),
  63. }, nil
  64. }
  65. // SearchSystemMenuList 菜单列表查询
  66. func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMenuResponse, error) {
  67. systemMenuList := make([]*model.SystemMenu, 0)
  68. var count int64 = 0
  69. if err := s.DB.Model(new(model.SystemMenu)).
  70. Where("is_delete = ? ", operationPb.IsShow_OK).
  71. Order("parent_id").Count(&count).
  72. Find(&systemMenuList).Error; err != nil {
  73. return nil, xerr.WithStack(err)
  74. }
  75. return &pasturePb.SearchMenuResponse{
  76. Code: http.StatusOK,
  77. Msg: "ok",
  78. Data: &pasturePb.SearchMenuData{
  79. Page: pagination.Page,
  80. Total: int32(count),
  81. PageSize: pagination.PageSize,
  82. List: model.SystemMenuSlice(systemMenuList).ToPB(),
  83. },
  84. }, nil
  85. }
  86. // DeleteSystemMenu 删除系统菜单
  87. func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
  88. systemMenu := &model.SystemMenu{Id: menuId}
  89. if err := s.DB.First(systemMenu).Error; err != nil {
  90. if errors.Is(err, gorm.ErrRecordNotFound) {
  91. return xerr.Custom("该数据不存在")
  92. }
  93. return xerr.WithStack(err)
  94. }
  95. if err := s.DB.Model(systemMenu).Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
  96. return xerr.WithStack(err)
  97. }
  98. return nil
  99. }
  100. func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.SearchDeptRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchDeptResponse, error) {
  101. deptList := make([]*model.SystemDept, 0)
  102. var count int64 = 0
  103. pref := s.DB.Model(new(model.SystemDept)).Where("is_delete = ?", operationPb.IsShow_OK)
  104. if req.Name != "" {
  105. pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
  106. }
  107. if req.IsShow > 0 {
  108. pref.Where("is_show = ?", req.IsShow)
  109. }
  110. if err := pref.Order("sort desc").
  111. Count(&count).
  112. Limit(int(pagination.PageSize)).
  113. Offset(int(pagination.PageOffset)).
  114. Find(&deptList).Error; err != nil {
  115. return nil, xerr.WithStack(err)
  116. }
  117. systemUserList, _ := s.SystemUserList(ctx)
  118. return &pasturePb.SearchDeptResponse{
  119. Code: http.StatusOK,
  120. Msg: "ok",
  121. Data: &pasturePb.DeptData{
  122. List: model.SystemDeptSlice(deptList).ToPB(systemUserList),
  123. Total: int32(count),
  124. PageSize: pagination.PageSize,
  125. Page: pagination.Page,
  126. },
  127. }, nil
  128. }
  129. func (s *StoreEntry) SystemDepDelete(ctx context.Context, id int64) error {
  130. dept := &model.SystemDept{Id: id}
  131. if err := s.DB.First(dept).Error; err != nil {
  132. return xerr.WithStack(err)
  133. }
  134. if dept.IsShow == pasturePb.IsShow_No {
  135. return nil
  136. }
  137. if err := s.DB.Model(dept).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
  138. return xerr.WithStack(err)
  139. }
  140. return nil
  141. }
  142. func (s *StoreEntry) SystemDeptCreateOrUpdate(ctx context.Context, req *pasturePb.SearchDeptRequest) error {
  143. if req.Id > 0 {
  144. barn := &model.SystemDept{Id: int64(req.Id)}
  145. if err := s.DB.Model(&model.SystemDept{}).First(barn).Error; err != nil {
  146. if !errors.Is(err, gorm.ErrRecordNotFound) {
  147. return xerr.WithStack(err)
  148. }
  149. }
  150. }
  151. if err := s.DB.Model(&model.SystemDept{}).Where(map[string]interface{}{
  152. "id": req.Id,
  153. }).Assign(map[string]interface{}{
  154. "name": req.Name,
  155. "sort": req.Sort,
  156. "parent_id": req.ParentId,
  157. "remarks": req.Remarks,
  158. "is_delete": operationPb.IsShow_OK,
  159. "is_show": req.IsShow,
  160. "dept_type": pasturePb.Depth_Department,
  161. "leader_id": req.LeaderId,
  162. }).FirstOrCreate(&model.SystemDept{}).Error; err != nil {
  163. return xerr.WithStack(err)
  164. }
  165. return nil
  166. }
  167. func (s *StoreEntry) SearchUserPastureList(ctx context.Context) (*pasturePb.SystemUserPastureListResponse, error) {
  168. currentUser, err := s.GetCurrentSystemUser(ctx)
  169. if err != nil {
  170. return nil, xerr.WithStack(err)
  171. }
  172. farmList, err := s.FindPastureList(ctx, currentUser.PastureIds)
  173. if err != nil {
  174. return nil, xerr.WithStack(err)
  175. }
  176. return &pasturePb.SystemUserPastureListResponse{
  177. Code: http.StatusOK,
  178. Msg: "ok",
  179. Data: model.AppPastureListSlice(farmList).ToPB(),
  180. }, err
  181. }
  182. func (s *StoreEntry) SystemDeptTree(ctx context.Context) (*pasturePb.DeptTreeResponse, error) {
  183. systemDeptList := make([]*model.SystemDept, 0)
  184. if err := s.DB.Model(new(model.SystemDept)).Where("is_delete = ?", pasturePb.IsShow_Ok).
  185. Where("is_show = ?", pasturePb.IsShow_Ok).Find(&systemDeptList).Error; err != nil {
  186. return nil, xerr.WithStack(err)
  187. }
  188. return &pasturePb.DeptTreeResponse{
  189. Code: http.StatusOK,
  190. Msg: "ok",
  191. Data: model.SystemDeptSlice(systemDeptList).ToTree(),
  192. }, nil
  193. }