system_service_more.go 7.0 KB

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