-
Notifications
You must be signed in to change notification settings - Fork 20
/
group_user.go
115 lines (103 loc) · 3.14 KB
/
group_user.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
package models
import (
"time"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
"github.com/pibigstar/go-todo/models/db"
)
// MGroupUser 实体外部引用
var MGroupUser = &GroupUser{}
// GroupUser 组织用户关联实体
type GroupUser struct {
ID int `gorm:"column:id;primary_key"`
GroupID int `gorm:"group_id"`
GroupName string `gorm:"group_name"`
UserID string `gorm:"user_id"` //用户OpenID
UserName string `gorm:"user_name"` //用户名
CreateTime time.Time `gorm:"column:create_time"`
IsDelete bool `gorm:"column:is_delete"`
IsCreate bool `gorm:"column:is_create"`
}
func (*GroupUser) TableName() string {
return "group_user"
}
// Insert 创建
func (*GroupUser) Create(groupUser *GroupUser) error {
return db.Mysql.Insert(&groupUser)
}
// GetGroupsByUserOpenID 获取用户加入的群
func (t *GroupUser) GetUserJoinGroups(openID string) (*[]Group, error) {
var groupIDs []int
var groups []Group
err := db.Mysql.Table(t.TableName()).Where("user_id = ?", openID).Pluck("group_id", &groupIDs).Error
if err == gorm.ErrRecordNotFound || len(groupIDs) == 0 {
return nil, errors.New("此用户没有加入任何群")
}
err = db.Mysql.Find(&groups, "id in(?) and is_delete = ?", groupIDs, false).Error
if err == gorm.ErrRecordNotFound {
return nil, errors.New("没有找到群")
}
return &groups, nil
}
// GetUserOpenIDs 获取某个群的所有群成员的OpenID
func (t *GroupUser) GetUserOpenIDs(groupID int) ([]string, error) {
var userOpenIds []string
err := db.Mysql.Table(t.TableName()).
Where("group_id in (?)", groupID).
Pluck("user_id", &userOpenIds).Error
if err != nil {
return nil, err
}
return userOpenIds, nil
}
func (t *GroupUser) GetFormIds(openIds []string) []string {
var formIds []string
for _, id := range openIds {
formId, err := GetCollectionFormID(id)
if err == nil {
formIds = append(formIds, formId)
}
}
return formIds
}
func (t *GroupUser) IsExist(openId string, groupId int) (bool, error) {
var result = &GroupUser{}
err := db.Mysql.Table(t.TableName()).Where("user_id = ? and group_id = ?", openId, groupId).Find(&result).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return false, nil
}
return false, err
}
if result != nil {
return true, nil
}
return false, nil
}
func (t *GroupUser) GetUsers(groupId int) ([]GroupUser, error) {
var users []GroupUser
err := db.Mysql.Table(t.TableName()).Where("group_id = ?", groupId).Find(&users).Error
if err != nil {
log.Error("获取此群下的成员失败", "GroupId", groupId)
return nil, err
}
return users, nil
}
func (t *GroupUser) ListMyCreateGroup(openId string) ([]GroupUser, error) {
var groups []GroupUser
err := db.Mysql.Table(t.TableName()).Where("user_id = ? and is_create = ?", openId, true).Find(&groups).Error
if err != nil {
return nil, err
}
return groups, nil
}
func (t *GroupUser) ListMyJoinGroup(openId string) ([]GroupUser, error) {
var groups []GroupUser
err := db.Mysql.Table(t.TableName()).
Where("user_id = ? and is_create = ? and is_delete = ?", openId, false, false).
Find(&groups).Error
if err != nil {
return nil, err
}
return groups, nil
}