sys_dept.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. return svc, nil
  19. }
  20. func (s *deptService) GetList(searchParams *model.SysDeptSearchParams) ([]*model.SysDept, error) {
  21. deptModel := dao.SysDept.M
  22. if searchParams.DeptName != "" {
  23. deptModel = deptModel.Where("dept_name like ?", "%"+searchParams.DeptName+"%")
  24. }
  25. if searchParams.Status != "" {
  26. deptModel = deptModel.Where("status", searchParams.Status)
  27. }
  28. depts := ([]*model.SysDept)(nil)
  29. if err := deptModel.Scan(&depts); err != nil {
  30. return nil, err
  31. }
  32. list := make([]*model.SysDept, 0, len(depts))
  33. if searchParams.ExcludeId != 0 {
  34. for _, v := range depts {
  35. if searchParams.ExcludeId != v.Id {
  36. list = append(list, v)
  37. }
  38. }
  39. return list, nil
  40. } else {
  41. return depts, nil
  42. }
  43. }
  44. func (s *deptService) GetRoleDepts(roleId int) ([]int, error) {
  45. var entitys []*model.SysRoleDept
  46. err := dao.SysRoleDept.Where("role_id", roleId).Scan(&entitys)
  47. if err != nil {
  48. return nil, err
  49. }
  50. result := make([]int, 0)
  51. for _, v := range entitys {
  52. result = append(result, v.DeptId)
  53. }
  54. return result, nil
  55. }
  56. func (s *deptService) FindSonByParentId(depts []*model.SysDept, deptId int) []*model.SysDept {
  57. children := make([]*model.SysDept, 0, len(depts))
  58. for _, v := range depts {
  59. if v.ParentId == deptId {
  60. children = append(children, v)
  61. fChildren := s.FindSonByParentId(depts, v.Id)
  62. children = append(children, fChildren...)
  63. }
  64. }
  65. return children
  66. }
  67. func (s *deptService) GetDeptListTree(pid int, list []*model.SysDept) []*model.SysDeptTreeRes {
  68. tree := make([]*model.SysDeptTreeRes, 0, len(list))
  69. for _, v := range list {
  70. if v.ParentId == pid {
  71. t := &model.SysDeptTreeRes{
  72. SysDept: v,
  73. }
  74. child := s.GetDeptListTree(v.Id, list)
  75. if len(child) > 0 {
  76. t.Children = child
  77. }
  78. tree = append(tree, t)
  79. }
  80. }
  81. return tree
  82. }
  83. func (s *deptService) GetDeptById(id int64) (dept *model.SysDept, err error) {
  84. err = dao.SysDept.Where("id", id).Scan(&dept)
  85. return
  86. }
  87. func (s *deptService) Create(req *model.SysDeptReq) (err error) {
  88. data := new(model.SysDept)
  89. if err := gconv.Struct(req, data); err != nil {
  90. return err
  91. }
  92. SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  93. _, err = dao.SysDept.Insert(data)
  94. return
  95. }
  96. func (s *deptService) UpdateById(req *model.UpdateSysDeptReq) error {
  97. data := new(model.SysDept)
  98. if err := gconv.Struct(req, data); err != nil {
  99. return err
  100. }
  101. SetUpdatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  102. _, err := dao.SysDept.FieldsEx(dao.SysDept.Columns.Id, dao.SysDept.Columns.CreatedBy, dao.SysDept.Columns.CreatedName, dao.SysDept.Columns.CreatedTime).WherePri(data.Id).
  103. Update(data)
  104. return err
  105. }
  106. func (s *deptService) DeleteById(id int) error {
  107. var list []*model.SysDept
  108. err := dao.SysDept.Scan(&list)
  109. if err != nil {
  110. return err
  111. }
  112. children := s.FindSonByParentId(list, id)
  113. ids := make([]int, 0, len(list))
  114. for _, v := range children {
  115. ids = append(ids, v.Id)
  116. }
  117. ids = append(ids, id)
  118. _, err = dao.SysDept.Where(dao.SysDept.Columns.Id+" in (?)", ids).Delete()
  119. return err
  120. }