-
-
Notifications
You must be signed in to change notification settings - Fork 279
/
Copy pathgroup_isql.go
148 lines (123 loc) · 4.47 KB
/
group_isql.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package isql
import (
"errors"
"fmt"
"strings"
"github.com/eryajf/go-ldap-admin/model"
"github.com/eryajf/go-ldap-admin/model/request"
"github.com/eryajf/go-ldap-admin/public/common"
"github.com/eryajf/go-ldap-admin/public/tools"
"gorm.io/gorm"
)
type GroupService struct{}
// List 获取数据列表
func (s GroupService) List(req *request.GroupListReq) ([]*model.Group, error) {
var list []*model.Group
db := common.DB.Model(&model.Group{}).Order("created_at DESC")
groupName := strings.TrimSpace(req.GroupName)
if groupName != "" {
db = db.Where("group_name LIKE ?", fmt.Sprintf("%%%s%%", groupName))
}
groupRemark := strings.TrimSpace(req.Remark)
if groupRemark != "" {
db = db.Where("remark LIKE ?", fmt.Sprintf("%%%s%%", groupRemark))
}
syncState := req.SyncState
if syncState != 0 {
db = db.Where("sync_state = ?", syncState)
}
pageReq := tools.NewPageOption(req.PageNum, req.PageSize)
err := db.Offset(pageReq.PageNum).Limit(pageReq.PageSize).Preload("Users").Find(&list).Error
return list, err
}
// List 获取数据列表
func (s GroupService) ListTree(req *request.GroupListReq) ([]*model.Group, error) {
var list []*model.Group
db := common.DB.Model(&model.Group{}).Order("created_at DESC")
groupName := strings.TrimSpace(req.GroupName)
if groupName != "" {
db = db.Where("group_name LIKE ?", fmt.Sprintf("%%%s%%", groupName))
}
groupRemark := strings.TrimSpace(req.Remark)
if groupRemark != "" {
db = db.Where("remark LIKE ?", fmt.Sprintf("%%%s%%", groupRemark))
}
pageReq := tools.NewPageOption(req.PageNum, req.PageSize)
err := db.Offset(pageReq.PageNum).Limit(pageReq.PageSize).Find(&list).Error
return list, err
}
// List 获取数据列表
func (s GroupService) ListAll() (list []*model.Group, err error) {
err = common.DB.Model(&model.Group{}).Order("created_at DESC").Find(&list).Error
return list, err
}
// GenGroupTree 生成分组树
func GenGroupTree(parentId uint, groups []*model.Group) []*model.Group {
tree := make([]*model.Group, 0)
for _, g := range groups {
if g.ParentId == parentId {
children := GenGroupTree(g.ID, groups)
g.Children = children
tree = append(tree, g)
}
}
return tree
}
// Count 获取数据总数
func (s GroupService) Count() (int64, error) {
var count int64
err := common.DB.Model(&model.Group{}).Count(&count).Error
return count, err
}
// Add 添加资源
func (s GroupService) Add(data *model.Group) error {
return common.DB.Create(data).Error
}
// Update 更新资源
func (s GroupService) Update(dataObj *model.Group) error {
return common.DB.Model(dataObj).Where("id = ?", dataObj.ID).Updates(dataObj).Error
}
// ChangeSyncState 更新分组的同步状态
func (s GroupService) ChangeSyncState(id, status int) error {
return common.DB.Model(&model.Group{}).Where("id = ?", id).Update("sync_state", status).Error
}
// Find 获取单个资源
func (s GroupService) Find(filter map[string]interface{}, data *model.Group, args ...interface{}) error {
return common.DB.Where(filter, args).Preload("Users").First(&data).Error
}
// Exist 判断资源是否存在
func (s GroupService) Exist(filter map[string]interface{}) bool {
var dataObj model.Group
err := common.DB.Debug().Order("created_at DESC").Where(filter).First(&dataObj).Error
return !errors.Is(err, gorm.ErrRecordNotFound)
}
// Delete 批量删除
func (s GroupService) Delete(groups []*model.Group) error {
return common.DB.Debug().Select("Users").Unscoped().Delete(&groups).Error
}
// GetApisById 根据接口ID获取接口列表
func (s GroupService) GetGroupByIds(ids []uint) (datas []*model.Group, err error) {
err = common.DB.Where("id IN (?)", ids).Preload("Users").Find(&datas).Error
return datas, err
}
// AddUserToGroup 添加用户到分组
func (s GroupService) AddUserToGroup(group *model.Group, users []model.User) error {
return common.DB.Model(&group).Association("Users").Append(users)
}
// RemoveUserFromGroup 将用户从分组移除
func (s GroupService) RemoveUserFromGroup(group *model.Group, users []model.User) error {
return common.DB.Model(&group).Association("Users").Delete(users)
}
// DeptIdsToGroupIds 将企业IM部门id转换为MySQL分组id
func (s GroupService) DeptIdsToGroupIds(ids []string) (groupIds []uint, err error) {
var tempGroups []model.Group
err = common.DB.Model(&model.Group{}).Where("source_dept_id IN (?)", ids).Find(&tempGroups).Error
if err != nil {
return nil, err
}
var tempGroupIds []uint
for _, g := range tempGroups {
tempGroupIds = append(tempGroupIds, g.ID)
}
return tempGroupIds, nil
}