sys_dept.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package service
  2. import (
  3. "context"
  4. "dashoo.cn/micro/app/dao"
  5. "dashoo.cn/micro/app/model"
  6. "github.com/gogf/gf/util/gconv"
  7. )
  8. type DeptService struct {
  9. *contextService
  10. Dao *dao.SysDeptDao
  11. }
  12. func NewDeptService(ctx context.Context) (svc *DeptService, err error) {
  13. svc = new(DeptService)
  14. if svc.contextService, err = svc.Init(ctx); err != nil {
  15. return nil, err
  16. }
  17. svc.Dao = dao.NewSysDeptDao(svc.Tenant)
  18. svc.Table = svc.Dao.Table
  19. return svc, nil
  20. }
  21. func (s *DeptService) GetList(searchParams *model.SysDeptSearchParams) ([]*model.SysDept, error) {
  22. deptModel := s.Dao.M
  23. if searchParams.DeptName != "" {
  24. deptModel = deptModel.WhereLike("dept_name", "%"+searchParams.DeptName+"%")
  25. }
  26. if searchParams.Status != "" {
  27. deptModel = deptModel.Where("status", searchParams.Status)
  28. }
  29. depts := ([]*model.SysDept)(nil)
  30. if err := deptModel.Scan(&depts); err != nil {
  31. return nil, err
  32. }
  33. list := make([]*model.SysDept, 0, len(depts))
  34. if searchParams.ExcludeId != 0 {
  35. for _, v := range depts {
  36. if searchParams.ExcludeId != v.Id {
  37. list = append(list, v)
  38. }
  39. }
  40. return list, nil
  41. } else {
  42. return depts, nil
  43. }
  44. }
  45. func (s *DeptService) GetRoleDepts(roleId int) ([]int, error) {
  46. var entityList []*model.SysRoleDept
  47. err := s.Dao.Where("role_id", roleId).Scan(&entityList)
  48. if err != nil {
  49. return nil, err
  50. }
  51. result := make([]int, 0)
  52. for _, v := range entityList {
  53. result = append(result, v.DeptId)
  54. }
  55. return result, nil
  56. }
  57. func (s *DeptService) FindSonByParentId(depts []*model.SysDept, deptId int) []*model.SysDept {
  58. children := make([]*model.SysDept, 0, len(depts))
  59. for _, v := range depts {
  60. if v.ParentId == deptId {
  61. children = append(children, v)
  62. fChildren := s.FindSonByParentId(depts, v.Id)
  63. children = append(children, fChildren...)
  64. }
  65. }
  66. return children
  67. }
  68. func (s *DeptService) GetDeptListTree(pid int, list []*model.SysDept) []*model.SysDeptTreeRes {
  69. tree := make([]*model.SysDeptTreeRes, 0, len(list))
  70. for _, v := range list {
  71. if v.ParentId == pid {
  72. t := &model.SysDeptTreeRes{
  73. SysDept: v,
  74. }
  75. child := s.GetDeptListTree(v.Id, list)
  76. if len(child) > 0 {
  77. t.Children = child
  78. }
  79. tree = append(tree, t)
  80. }
  81. }
  82. return tree
  83. }
  84. func (s *DeptService) GetDeptById(id int64) (dept *model.SysDept, err error) {
  85. err = s.Dao.Where("id", id).Scan(&dept)
  86. return
  87. }
  88. func (s *DeptService) Create(req *model.SysDeptReq) (err error) {
  89. data := new(model.SysDept)
  90. if err := gconv.Struct(req, data); err != nil {
  91. return err
  92. }
  93. SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  94. _, err = s.Dao.Insert(data)
  95. return
  96. }
  97. func (s *DeptService) UpdateById(req *model.UpdateSysDeptReq) error {
  98. data := new(model.SysDept)
  99. if err := gconv.Struct(req, data); err != nil {
  100. return err
  101. }
  102. SetUpdatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  103. _, err := s.Dao.FieldsEx(UpdateFieldEx...).WherePri(data.Id).
  104. Update(data)
  105. return err
  106. }
  107. func (s *DeptService) DeleteById(id int) error {
  108. var list []*model.SysDept
  109. err := s.Dao.Scan(&list)
  110. if err != nil {
  111. return err
  112. }
  113. children := s.FindSonByParentId(list, id)
  114. ids := make([]int, 0, len(list))
  115. for _, v := range children {
  116. ids = append(ids, v.Id)
  117. }
  118. ids = append(ids, id)
  119. _, err = s.Dao.Where(s.Dao.Columns.Id+" in (?)", ids).Delete()
  120. return err
  121. }