group_service.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package service
  2. import (
  3. "errors"
  4. "xps/datamodel"
  5. "xps/datasource"
  6. "xps/repositories"
  7. "xps/viewmodel"
  8. )
  9. type GroupService interface {
  10. GetList(m map[string]interface{})([]viewmodel.GroupInfo, error)
  11. GetTreeView(ocId int64) ([]viewmodel.GroupTreeViewInfo, error)
  12. GetById(ocId int64 ,groupId int64)(*viewmodel.GroupInfo, error)
  13. Create(group *datamodel.Group) error
  14. Update(group *datamodel.Group) error
  15. Delete(m map[string]interface{}) error
  16. }
  17. type groupService struct {
  18. groupRepo *repositories.GroupRepo
  19. groupMemberRepo *repositories.GroupMemberRepo
  20. groupMemberPositionRepo *repositories.GroupMemberPositionRepo
  21. //groupMemberPositionGrantRepo *base.GroupMemberPositionGrantRepo
  22. }
  23. func NewGroupService() GroupService {
  24. return &groupService{
  25. groupRepo: repositories.NewGroupRepo(datasource.InstanceMaster()),
  26. groupMemberRepo : repositories.NewGroupMemberRepo(datasource.InstanceMaster()),
  27. groupMemberPositionRepo : repositories.NewGroupMemberPositionRepo(datasource.InstanceMaster()),
  28. //groupMemberPositionGrantRepo : base.NewGroupMemberPositionGrantRepo(datasource.InstanceMaster()),
  29. }
  30. }
  31. func (s *groupService) GetList(m map[string]interface{})([]viewmodel.GroupInfo, error) {
  32. return s.groupRepo.GetList(m)
  33. }
  34. func (s *groupService) GetTreeView(ocId int64)([]viewmodel.GroupTreeViewInfo, error){
  35. groupList, err := s.groupRepo.GetAll(ocId)
  36. if err != nil {
  37. return nil, err
  38. }
  39. return s.GenerateTreeInfo(0, groupList)
  40. }
  41. func (s *groupService) GenerateTreeInfo(parentId int64, groups []viewmodel.GroupInfo)([]viewmodel.GroupTreeViewInfo, error) {
  42. treeItemList := make([]viewmodel.GroupTreeViewInfo, 0)
  43. for _, group := range groups {
  44. if group.ParentId == parentId {
  45. itemId := group.GroupId
  46. children, err := s.GenerateTreeInfo(itemId, groups)
  47. if err != nil {
  48. return nil, err
  49. }
  50. treeItem := viewmodel.GroupTreeViewInfo{
  51. Id: itemId,
  52. Label: group.GroupName,
  53. GroupId: group.GroupId,
  54. GroupName: group.GroupName,
  55. Children: children,
  56. }
  57. treeItemList = append(treeItemList, treeItem)
  58. }
  59. }
  60. return treeItemList, nil
  61. }
  62. func (s *groupService) GetById(ocId int64 ,gid int64)(*viewmodel.GroupInfo, error) {
  63. return s.groupRepo.GetById(ocId ,gid)
  64. }
  65. func (s *groupService) Update(a *datamodel.Group) error{
  66. return s.groupRepo.Update(a)
  67. }
  68. // Create the group
  69. func (s *groupService) Create(g *datamodel.Group) error {
  70. ocId := g.OcId
  71. parentId := g.ParentId
  72. var parentNodeRight = int64(0)
  73. var parentNodeLevel = int64(0)
  74. parent, err := s.groupRepo.GetById(ocId, parentId)
  75. if err != nil {
  76. return err
  77. }
  78. if parent != nil {
  79. parentNodeRight = parent.NodeRight
  80. parentNodeLevel = parent.NodeLevel
  81. err := s.groupRepo.IncrementGroupRight(ocId ,2 ,parentNodeRight)
  82. if err != nil {
  83. return err
  84. }
  85. err = s.groupRepo.IncrementGroupLeft(ocId ,2 ,parentNodeRight)
  86. if err != nil {
  87. return err
  88. }
  89. // refresh parent node as non-leaf status
  90. err = s.groupRepo.RefreshLeafStatus(ocId ,parentId, false)
  91. if err != nil {
  92. return err
  93. }
  94. }
  95. g.GroupId = NewID()
  96. g.NodeLeft = parentNodeRight
  97. g.NodeRight = parentNodeRight + 1
  98. g.NodeLevel = parentNodeLevel + 1
  99. g.RootId = ocId
  100. g.IsLeaf = 1
  101. return s.groupRepo.Create(g)
  102. }
  103. func (s *groupService) Delete(m map[string]interface{}) error {
  104. ocId := m["ocId"].(int64)
  105. groupId := m["groupId"].(int64)
  106. group, err := s.groupRepo.GetById(ocId ,groupId)
  107. if err != nil{
  108. return err
  109. }
  110. if group.IsFixed == 1 {
  111. return errors.New("不能删除锁定群组")
  112. }
  113. nodeLeft := group.NodeLeft
  114. nodeRight := group.NodeRight
  115. parentId := group.ParentId
  116. // delete the groups
  117. err = s.groupRepo.BatchDelete(ocId ,nodeLeft ,nodeRight)
  118. if err != nil {
  119. return err
  120. }
  121. steps := nodeRight - nodeLeft + 1
  122. // update the left
  123. err = s.groupRepo.DecrementGroupLeft(ocId ,steps ,nodeLeft)
  124. if err != nil {
  125. return err
  126. }
  127. // update the right
  128. err = s.groupRepo.DecrementGroupRight(ocId ,steps ,nodeRight)
  129. if err != nil {
  130. return err
  131. }
  132. // update the group parent leaf status
  133. countOfBrothers, err := s.groupRepo.CountOfChildren(ocId ,parentId)
  134. if err != nil {
  135. return err
  136. }
  137. if (countOfBrothers < 1){
  138. err = s.groupRepo.RefreshLeafStatus(ocId ,parentId, true)
  139. if err != nil {
  140. return err
  141. }
  142. }
  143. // delete the group members
  144. err = s.groupMemberRepo.DeleteByGroupId(ocId ,groupId)
  145. if err != nil {
  146. return err
  147. }
  148. // delete the group member position
  149. err = s.groupMemberPositionRepo.DeleteByGroupId(ocId ,groupId)
  150. if err != nil {
  151. return err
  152. }
  153. // delete the group member position grant
  154. //err = s.groupMemberPositionGrantRepo.DeleteByGroupId(ocId ,gid)
  155. return err
  156. }