MemberGroupModel.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package models
  2. import (
  3. "time"
  4. "github.com/lifei6671/mindoc/conf"
  5. "github.com/astaxie/beego/orm"
  6. "github.com/astaxie/beego"
  7. "strings"
  8. "errors"
  9. "strconv"
  10. )
  11. type MemberGroup struct {
  12. GroupId int `orm:"column(group_id);pk;auto;unique;" json:"group_id"`
  13. GroupName string `orm:"column(group_name);size(255);" json:"group_name"`
  14. GroupNumber int `orm:"column(group_number);default(0)" json:"group_number"`
  15. CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add" json:"create_time"`
  16. CreateAt int `orm:"type(int);column(create_at)" json:"create_at"`
  17. CreateName string `orm:"-" json:"create_name"`
  18. CreateRealName string `orm:"-" json:"create_real_name"`
  19. ModifyTime time.Time `orm:"column(modify_time);type(datetime);auto_now" json:"modify_time"`
  20. Resources string `orm:"column(resources);type(text);null" json:"-"`
  21. IsEnableDelete bool `orm:"column(is_enable_delete);type(bool);default(true)" json:"is_enable_delete"`
  22. ResourceList []*Resource `orm:"-" json:"resource_list"`
  23. ModifyAt int `orm:"column(modify_at);type(int)" json:"-"`
  24. ModifyName string `orm:"-" json:"modify_name"`
  25. ModifyRealName string `orm:"-" json:"modify_real_name"`
  26. }
  27. // TableName 获取对应数据库表名.
  28. func (m *MemberGroup) TableName() string {
  29. return "member_group"
  30. }
  31. // TableEngine 获取数据使用的引擎.
  32. func (m *MemberGroup) TableEngine() string {
  33. return "INNODB"
  34. }
  35. func (m *MemberGroup) TableNameWithPrefix() string {
  36. return conf.GetDatabasePrefix() + m.TableName()
  37. }
  38. func NewMemberGroup() *MemberGroup {
  39. return &MemberGroup{}
  40. }
  41. //根据id查询用户组
  42. func (m *MemberGroup) FindFirst(id int) (*MemberGroup,error){
  43. o := orm.NewOrm()
  44. if err :=o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",id).One(m); err != nil {
  45. beego.Error("查询用户组时出错 =>",err)
  46. return m,err
  47. }
  48. createMember,err := NewMember().Find(m.CreateAt);
  49. if err != nil {
  50. beego.Error("查询用户组创建人失败 =>",err)
  51. }else{
  52. m.CreateName = createMember.Account
  53. m.CreateRealName = createMember.RealName
  54. }
  55. if m.ModifyAt > 0 {
  56. modifyMember, err := NewMember().Find(m.ModifyAt)
  57. if err != nil {
  58. beego.Error("查询用户组修改人失败 =>",err)
  59. }else{
  60. m.ModifyName = modifyMember.Account
  61. m.ModifyRealName = modifyMember.RealName
  62. }
  63. }
  64. return m,nil
  65. }
  66. //删除指定用户组
  67. func (m *MemberGroup) Delete(id int) error {
  68. o := orm.NewOrm()
  69. o.Begin()
  70. _,err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",id).Delete()
  71. if err != nil {
  72. o.Rollback()
  73. beego.Error("删除用户组失败 =>",err)
  74. }
  75. _,err = o.QueryTable(NewMemberGroupMembers().TableNameWithPrefix()).Filter("group_id",id).Delete()
  76. if err != nil {
  77. o.Rollback()
  78. beego.Error("删除用户组失败 =>",err)
  79. }
  80. return o.Commit()
  81. }
  82. //分页查询用户组
  83. func (m *MemberGroup) FindByPager(pageIndex, pageSize int) ([]*MemberGroup,int,error){
  84. o := orm.NewOrm()
  85. if pageIndex <= 0 {
  86. pageIndex = 1
  87. }
  88. offset := (pageIndex - 1) * pageSize
  89. var memberGroups []*MemberGroup
  90. totalCount := 0
  91. _,err := o.QueryTable(m.TableNameWithPrefix()).OrderBy("-group_id").Offset(offset).Limit(pageSize).All(&memberGroups)
  92. if err != nil {
  93. beego.Error("分页查询用户组失败 =>",err)
  94. }else{
  95. i,err := o.QueryTable(m.TableNameWithPrefix()).Count()
  96. if err != nil {
  97. beego.Error("分页查询用户组失败 =>",err)
  98. }else {
  99. totalCount = int(i)
  100. }
  101. }
  102. memberIds := make([]int,0)
  103. for _,memberGroup := range memberGroups {
  104. if memberGroup.CreateAt > 0 {
  105. memberIds = append(memberIds,memberGroup.CreateAt)
  106. }
  107. if memberGroup.ModifyAt > 0 {
  108. memberIds = append(memberIds,memberGroup.ModifyAt)
  109. }
  110. }
  111. var members []*Member
  112. _,err = o.QueryTable(NewMember().TableNameWithPrefix()).Filter("member_id__in",memberIds).All(&members,"member_id","account","real_name")
  113. if err != nil {
  114. beego.Error("查询用户组信息时出错 =>",err)
  115. }else {
  116. for _,memberGroup := range memberGroups {
  117. for _,member := range members {
  118. if memberGroup.ModifyAt == member.MemberId {
  119. memberGroup.ModifyRealName = member.RealName
  120. memberGroup.ModifyName = member.Account
  121. }
  122. if memberGroup.CreateAt == member.MemberId {
  123. memberGroup.CreateRealName = member.RealName
  124. memberGroup.CreateName = member.Account
  125. }
  126. }
  127. }
  128. }
  129. return memberGroups,totalCount,err
  130. }
  131. //添加或更新用户组信息
  132. func (m *MemberGroup) InsertOrUpdate(cols...string) error {
  133. o := orm.NewOrm()
  134. if m.ResourceList != nil && len(m.ResourceList) > 0 {
  135. for _,resource := range m.ResourceList {
  136. m.Resources = m.Resources + strconv.Itoa(resource.ResourceId) + ","
  137. }
  138. m.Resources = strings.Trim(m.Resources,",")
  139. }
  140. var err error
  141. if m.GroupId > 0 {
  142. _,err = o.Update(m, cols...)
  143. }else{
  144. _,err = o.Insert(m)
  145. }
  146. return err
  147. }
  148. //重置用户组数量
  149. func (m *MemberGroup) ResetMemberGroupNumber(groupId int) error {
  150. o := orm.NewOrm()
  151. i,err := o.QueryTable(NewMemberGroupMembers().TableNameWithPrefix()).Filter("group_id",groupId).Count()
  152. if err != nil {
  153. beego.Error("重置用户组用户数量失败 =>",err)
  154. }else{
  155. err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).One(m)
  156. if err != nil {
  157. beego.Error("重置用户组用户数量失败 =>",err)
  158. return err
  159. }else{
  160. m.GroupNumber = int(i)
  161. _,err = o.Update(m)
  162. return err
  163. }
  164. }
  165. return nil
  166. }
  167. //判断用户组是否存在
  168. func (m *MemberGroup) Exist(groupId int) bool {
  169. o := orm.NewOrm()
  170. return o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).Exist()
  171. }
  172. //模糊查询用户组列表
  173. func (m *MemberGroup) FindMemberGroupList(keyword string) ([]*MemberGroup,error) {
  174. o := orm.NewOrm()
  175. var memberGroups []*MemberGroup
  176. _,err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_name__icontains",keyword).All(&memberGroups)
  177. return memberGroups,err
  178. }
  179. //查询指定用户组的资源列表
  180. func (m *MemberGroup) FindMemberGroupResourceList(groupId int) ([]*Resource,error) {
  181. o := orm.NewOrm()
  182. memberGroup := NewMemberGroup()
  183. err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).One(memberGroup)
  184. if err != nil {
  185. beego.Error("查询用户组资源时出错 =>", err)
  186. return nil,err
  187. }
  188. if memberGroup.Resources != "" {
  189. resourceIds := strings.Split(strings.Trim(memberGroup.Resources,","),",")
  190. var resources []*Resource
  191. _,err = o.QueryTable(NewResource().TableNameWithPrefix()).Filter("resource_id__in",resourceIds).All(resources)
  192. if err != nil {
  193. beego.Error("查询用户组资源时出错 =>", err)
  194. }
  195. return resources,err
  196. }
  197. return nil,errors.New("当前用户组未设置资源")
  198. }