group_member_repo.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package system
  2. import (
  3. "fmt"
  4. "log"
  5. "xorm.io/xorm"
  6. "xps/datamodels"
  7. "xps/viewmodels"
  8. )
  9. // Role repository data struct
  10. type GroupMemberRepo struct {
  11. engine *xorm.Engine
  12. }
  13. // New role repository instance
  14. func NewGroupMemberRepo(engine *xorm.Engine) *GroupMemberRepo {
  15. return &GroupMemberRepo{
  16. engine: engine,
  17. }
  18. }
  19. // Get role by id
  20. func (d *GroupMemberRepo) GetById(ocId int64, gmId int64) *datamodels.GroupMember {
  21. data := &datamodels.GroupMember{GmId: gmId}
  22. ok, err := d.engine.Get(data)
  23. if ok && err == nil {
  24. return data
  25. } else {
  26. data.GroupId = 0
  27. return data
  28. }
  29. }
  30. func (d *GroupMemberRepo) GetByList(m map[string]interface{})([]viewmodels.GroupMemberInfo, error) {
  31. ocId := m["ocId"].(int64)
  32. keywords := m["keywords"].(string)
  33. sqlSelect := `SELECT A.gm_id,
  34. A.group_id,
  35. A.group_name,
  36. A.account_id,
  37. A.group_member_remark `
  38. sqlFrom := `FROM s_group_member AS A
  39. LEFT JOIN s_group AS B ON (A.group_id = B.group_id) `
  40. sqlWhere := `WHERE A.deleted_flag = 0 and A.oc_id = ` + fmt.Sprintf("%d", ocId)
  41. if keywords != "" {
  42. sqlWhere += ` AND B.group_name like ` + "'%" + keywords + "%'"
  43. }
  44. datalist := make([]viewmodels.GroupMemberInfo, 0)
  45. err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).OrderBy("group_id DESC").Find(&datalist)
  46. if err != nil {
  47. return nil, err
  48. }
  49. return datalist, nil
  50. }
  51. func (d *GroupMemberRepo) GetMembersOfSubordinateGroupByPage(ocId, groupId, groupLeft, groupRight int64, keyword string) []viewmodels.GroupMemberInfo {
  52. var datalist = make([]viewmodels.GroupMemberInfo, 0)
  53. sqlSelect := `
  54. SELECT
  55. DISTINCT(A.account_id),
  56. A.gm_id,
  57. A.oc_id,
  58. A.group_id,
  59. A.created_by,
  60. A.created_time,
  61. A.updated_by,
  62. A.updated_time,
  63. A.deleted_flag,
  64. A.deleted_by,
  65. A.deleted_time,
  66. B.account_name,
  67. B.account_real_name,
  68. B.account_phone,
  69. B.account_pic,
  70. B.status,
  71. C.group_name,
  72. C.node_left,
  73. C.node_right,
  74. D.gmp_id,
  75. D.position_id,
  76. D.position_name,
  77. E.gmpg_id,
  78. E.grant_group_id,
  79. F.group_name as grant_group_name
  80. `
  81. sqlFrom := `
  82. FROM
  83. s_group_member AS A
  84. LEFT JOIN account AS B ON (A.oc_id = B.oc_id AND A.account_id = B.account_id)
  85. LEFT JOIN s_group AS C ON (A.oc_id = C.oc_id AND A.group_id = C.group_id)
  86. LEFT JOIN s_group_member_position_grant AS E ON (B.oc_id = E.oc_id AND B.account_id = E.account_id)
  87. LEFT JOIN s_group AS F ON(E.oc_id = F.oc_id AND E.grant_group_id = F.group_id)
  88. LEFT JOIN (
  89. SELECT
  90. M.oc_id,
  91. M.account_id,
  92. M.gmp_id,
  93. M.group_id,
  94. M.position_id,
  95. P.position_name,
  96. N.gmpg_id,
  97. N.grant_group_id,
  98. GP.group_name as grant_group_name
  99. FROM
  100. s_group_member_position AS M
  101. LEFT JOIN s_group_member_position_grant AS N ON (
  102. M.oc_id = N.oc_id
  103. AND M.account_id = N.account_id
  104. AND M.group_id = N.group_id
  105. AND M.position_id = N.position_id)
  106. LEFT JOIN s_position AS P ON(M.oc_id = P.oc_id AND M.position_id = P.position_id)
  107. LEFT JOIN s_group AS GP ON(M.oc_id = GP.oc_id AND N.grant_group_id = GP.group_id)
  108. ) AS D ON (A.oc_id= D.oc_id AND A.account_id = D.account_id AND A.group_id = D.group_id)
  109. `
  110. sqlWhere := `WHERE B.deleted_flag = 0 and A.oc_id = ` + fmt.Sprintf("%d", ocId)
  111. if keyword != "" {
  112. sqlWhere += ` AND ( B.account_real_name LIKE ` + "'%" + keyword + "%'"
  113. sqlWhere += ` OR B.account_name LIKE ` + "'%" + keyword + "%'"
  114. sqlWhere += ` OR B.account_phone LIKE ` + "'%" + keyword + "%'"
  115. sqlWhere += ` OR D.position_title LIKE ` + "'%" + keyword + "%'"
  116. }
  117. if groupLeft > 0 && groupRight > 0 {
  118. sqlWhere += ` AND C.node_left >= ` + fmt.Sprintf("%d", groupLeft)
  119. sqlWhere += ` AND C.node_right <= ` + fmt.Sprintf("%d", groupRight)
  120. }
  121. err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).OrderBy("A.group_id DESC").Find(&datalist)
  122. if err != nil {
  123. log.Fatal(err)
  124. }
  125. return datalist
  126. }
  127. func (d *GroupMemberRepo) GetFirstGroupByAccountId(ocId int64, aid int64) (*viewmodels.GroupMemberInfo, error) {
  128. var groupMemberInfo = &viewmodels.GroupMemberInfo{}
  129. sqlSelect := `
  130. SELECT
  131. A.gm_id,
  132. A.oc_id,
  133. A.account_id,
  134. A.group_id,
  135. B.group_name,
  136. B.node_left,
  137. B.node_right
  138. `
  139. sqlFrom := `
  140. FROM
  141. s_group_member AS A
  142. LEFT JOIN s_group AS B ON (A.oc_id = B.oc_id AND A.group_id = B.group_id)
  143. `
  144. sqlWhere := ` WHERE A.oc_id = ` + fmt.Sprintf("%d", ocId)
  145. sqlWhere += ` AND A.account_id = ` + fmt.Sprintf("%d", aid)
  146. has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).OrderBy("A.group_id DESC").Limit(1).Get(groupMemberInfo)
  147. if !has || err != nil {
  148. log.Fatal(err)
  149. return nil, err
  150. }
  151. return groupMemberInfo, nil
  152. }
  153. // Create
  154. func (d *GroupMemberRepo) Create(data *datamodels.GroupMember) error {
  155. _, err := d.engine.Insert(data)
  156. return err
  157. }
  158. // Update
  159. func (d *GroupMemberRepo) Update(ocId int64, gmId int64, data *datamodels.GroupMember) error {
  160. _, err := d.engine.Where("oc_id = ?", ocId).Where("gm_id =?", gmId).Update(data)
  161. return err
  162. }
  163. // Delete
  164. func (d *GroupMemberRepo) Delete(ocId int64, gmId int64) error {
  165. _, err := d.engine.Where("oc_id = ?", ocId).Where("gm_id =?", gmId).Delete(new(datamodels.GroupMember))
  166. return err
  167. }
  168. // Delete
  169. func (d *GroupMemberRepo) DeleteByGroupId(ocId int64, groupId int64) error {
  170. _, err := d.engine.Where("oc_id = ?", ocId).
  171. Where("group_id = ?", groupId).
  172. Delete(new(datamodels.GroupMember))
  173. return err
  174. }
  175. // Delete
  176. func (d *GroupMemberRepo) DeleteByAccountId(ocId int64, accountId int64) error {
  177. _, err := d.engine.Where("oc_id = ?", ocId).
  178. Where("account_id = ?", accountId).
  179. Delete(new(datamodels.GroupMember))
  180. return err
  181. }