| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- package service
- import (
- "errors"
- "xps/datamodel"
- "xps/datasource"
- "xps/repositories"
- "xps/viewmodel"
- )
- type GroupService interface {
- GetList(m map[string]interface{})([]viewmodel.GroupInfo, error)
- GetTreeView(ocId int64) ([]viewmodel.GroupTreeViewInfo, error)
- GetById(ocId int64 ,groupId int64)(*viewmodel.GroupInfo, error)
- Create(group *datamodel.Group) error
- Update(group *datamodel.Group) error
- Delete(m map[string]interface{}) error
- }
- type groupService struct {
- groupRepo *repositories.GroupRepo
- groupMemberRepo *repositories.GroupMemberRepo
- groupMemberPositionRepo *repositories.GroupMemberPositionRepo
- //groupMemberPositionGrantRepo *base.GroupMemberPositionGrantRepo
- }
- func NewGroupService() GroupService {
- return &groupService{
- groupRepo: repositories.NewGroupRepo(datasource.InstanceMaster()),
- groupMemberRepo : repositories.NewGroupMemberRepo(datasource.InstanceMaster()),
- groupMemberPositionRepo : repositories.NewGroupMemberPositionRepo(datasource.InstanceMaster()),
- //groupMemberPositionGrantRepo : base.NewGroupMemberPositionGrantRepo(datasource.InstanceMaster()),
- }
- }
- func (s *groupService) GetList(m map[string]interface{})([]viewmodel.GroupInfo, error) {
- return s.groupRepo.GetList(m)
- }
- func (s *groupService) GetTreeView(ocId int64)([]viewmodel.GroupTreeViewInfo, error){
- groupList, err := s.groupRepo.GetAll(ocId)
- if err != nil {
- return nil, err
- }
- return s.GenerateTreeInfo(0, groupList)
- }
- func (s *groupService) GenerateTreeInfo(parentId int64, groups []viewmodel.GroupInfo)([]viewmodel.GroupTreeViewInfo, error) {
- treeItemList := make([]viewmodel.GroupTreeViewInfo, 0)
- for _, group := range groups {
- if group.ParentId == parentId {
- itemId := group.GroupId
-
- children, err := s.GenerateTreeInfo(itemId, groups)
- if err != nil {
- return nil, err
- }
- treeItem := viewmodel.GroupTreeViewInfo{
- Id: itemId,
- Label: group.GroupName,
- GroupId: group.GroupId,
- GroupName: group.GroupName,
- Children: children,
- }
- treeItemList = append(treeItemList, treeItem)
- }
- }
- return treeItemList, nil
- }
- func (s *groupService) GetById(ocId int64 ,gid int64)(*viewmodel.GroupInfo, error) {
- return s.groupRepo.GetById(ocId ,gid)
- }
- func (s *groupService) Update(a *datamodel.Group) error{
- return s.groupRepo.Update(a)
- }
- // Create the group
- func (s *groupService) Create(g *datamodel.Group) error {
- ocId := g.OcId
- parentId := g.ParentId
-
- var parentNodeRight = int64(0)
- var parentNodeLevel = int64(0)
-
- parent, err := s.groupRepo.GetById(ocId, parentId)
- if err != nil {
- return err
- }
-
- if parent != nil {
- parentNodeRight = parent.NodeRight
- parentNodeLevel = parent.NodeLevel
-
- err := s.groupRepo.IncrementGroupRight(ocId ,2 ,parentNodeRight)
- if err != nil {
- return err
- }
-
- err = s.groupRepo.IncrementGroupLeft(ocId ,2 ,parentNodeRight)
- if err != nil {
- return err
- }
-
- // refresh parent node as non-leaf status
- err = s.groupRepo.RefreshLeafStatus(ocId ,parentId, false)
- if err != nil {
- return err
- }
- }
-
- g.GroupId = NewID()
- g.NodeLeft = parentNodeRight
- g.NodeRight = parentNodeRight + 1
- g.NodeLevel = parentNodeLevel + 1
- g.RootId = ocId
- g.IsLeaf = 1
- return s.groupRepo.Create(g)
- }
- func (s *groupService) Delete(m map[string]interface{}) error {
- ocId := m["ocId"].(int64)
- groupId := m["groupId"].(int64)
- group, err := s.groupRepo.GetById(ocId ,groupId)
- if err != nil{
- return err
- }
-
- if group.IsFixed == 1 {
- return errors.New("不能删除锁定群组")
- }
-
- nodeLeft := group.NodeLeft
- nodeRight := group.NodeRight
- parentId := group.ParentId
-
- // delete the groups
- err = s.groupRepo.BatchDelete(ocId ,nodeLeft ,nodeRight)
- if err != nil {
- return err
- }
-
- steps := nodeRight - nodeLeft + 1
-
- // update the left
- err = s.groupRepo.DecrementGroupLeft(ocId ,steps ,nodeLeft)
- if err != nil {
- return err
- }
-
- // update the right
- err = s.groupRepo.DecrementGroupRight(ocId ,steps ,nodeRight)
- if err != nil {
- return err
- }
-
- // update the group parent leaf status
- countOfBrothers, err := s.groupRepo.CountOfChildren(ocId ,parentId)
- if err != nil {
- return err
- }
- if (countOfBrothers < 1){
- err = s.groupRepo.RefreshLeafStatus(ocId ,parentId, true)
- if err != nil {
- return err
- }
- }
-
- // delete the group members
- err = s.groupMemberRepo.DeleteByGroupId(ocId ,groupId)
- if err != nil {
- return err
- }
-
- // delete the group member position
- err = s.groupMemberPositionRepo.DeleteByGroupId(ocId ,groupId)
- if err != nil {
- return err
- }
-
- // delete the group member position grant
- //err = s.groupMemberPositionGrantRepo.DeleteByGroupId(ocId ,gid)
-
- return err
- }
|