dept.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package dept
  2. import (
  3. "errors"
  4. "strings"
  5. "zhiyuan/models"
  6. "zhiyuan/pkg/app"
  7. "zhiyuan/pkg/db"
  8. "zhiyuan/pkg/redis"
  9. "zhiyuan/pkg/utils"
  10. "zhiyuan/services/form"
  11. )
  12. const cacheKey = "dept_list_cache"
  13. var Dept models.Dept
  14. func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.Dept, error) {
  15. if page.PageNum > 0 && page.PageSize > 0 {
  16. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  17. }
  18. return Dept.GetMulti(where, fields, retVal)
  19. }
  20. func Count(where map[string]interface{}) (int64, error) {
  21. return db.Count(Dept.TableName(), where)
  22. }
  23. func Add(form form.DeptAdd) (int64, error) {
  24. if CheckDeptDuplicate(form.Name, form.Pid) {
  25. return 0, errors.New("department already exists")
  26. }
  27. mapDept := map[string]interface{}{
  28. "name": form.Name,
  29. "pid": form.Pid,
  30. "attribute": form.Attribute,
  31. }
  32. deptID, err := db.InsertOne(Dept.TableName(), mapDept)
  33. redis.Del(cacheKey)
  34. if err != nil {
  35. return 0, nil
  36. }
  37. return deptID, nil
  38. }
  39. func EditByID(form form.DeptAdd, id int) error {
  40. deptInfo, err := GetInfoByID(id)
  41. if deptInfo == nil {
  42. return errors.New("invalid department id")
  43. }
  44. if deptInfo.Name != form.Name && CheckDeptDuplicate(form.Name, form.Pid) {
  45. return errors.New("dept already exists")
  46. }
  47. mapDept := map[string]interface{}{
  48. "name": form.Name,
  49. "pid": form.Pid,
  50. "attribute": form.Attribute,
  51. }
  52. _, err = db.Update(Dept.TableName(), map[string]interface{}{"id": id}, mapDept)
  53. redis.Del(cacheKey)
  54. return err
  55. }
  56. func CheckDeptDuplicate(name string, pid int) bool {
  57. deptInfo, err := GetOne(map[string]interface{}{"name": name, "pid": pid}, nil, nil)
  58. return deptInfo != nil && err == nil
  59. }
  60. func DeleteByID(id int) error {
  61. authInfo, _ := GetInfoByID(id)
  62. if authInfo == nil {
  63. return errors.New("invalid department id")
  64. }
  65. _, err := db.Delete(Dept.TableName(), map[string]interface{}{"id": id})
  66. redis.Del(cacheKey)
  67. return err
  68. }
  69. func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.Dept, error) {
  70. return Dept.GetOne(where, fields, retVal)
  71. }
  72. func GetInfoByID(id int) (*models.Dept, error) {
  73. return GetOne(map[string]interface{}{"id": id}, nil, nil)
  74. }
  75. func GetListByCache() ([]*models.Dept, error) {
  76. res, err := redis.Get(cacheKey)
  77. var deptList []*models.Dept
  78. if err != nil {
  79. deptList, err = GetList(nil, nil, app.Page{}, nil)
  80. if err != nil {
  81. return nil, err
  82. }
  83. redis.Set(cacheKey, deptList, 3600)
  84. } else {
  85. utils.JsonDecode(res).To(&deptList)
  86. }
  87. return deptList, nil
  88. }
  89. func GetSubDepts(deptID int) []*models.Dept {
  90. deptList, err := GetListByCache()
  91. if err != nil {
  92. return nil
  93. }
  94. list := make([]*models.Dept, 0)
  95. for _, v := range deptList {
  96. if v.ID == deptID {
  97. list = append(list, v)
  98. } else if v.Pid == deptID {
  99. list = append(list, GetSubDepts(v.ID)...)
  100. }
  101. }
  102. return list
  103. }
  104. func GetSubDeptIds(deptID int, deptIds []int) []int {
  105. deptList, err := GetListByCache()
  106. if err != nil {
  107. return []int{}
  108. }
  109. for _, v := range deptList {
  110. if v.Pid == deptID {
  111. deptIds = GetSubDeptIds(v.ID, append(deptIds, v.ID))
  112. }
  113. }
  114. return deptIds
  115. }
  116. func GetParentDeptIds(deptID int, parentIds []int) []int {
  117. deptList, err := GetListByCache()
  118. if err != nil {
  119. return []int{}
  120. }
  121. for _, v := range deptList {
  122. if v.ID == deptID && v.Pid > 0 {
  123. parentIds = GetParentDeptIds(v.Pid, append(parentIds, v.Pid))
  124. }
  125. }
  126. return parentIds
  127. }
  128. func GetDeptFullName(deptID int, sep string) string {
  129. if deptID == 0 {
  130. return ""
  131. }
  132. deptIds := GetParentDeptIds(deptID, []int{deptID})
  133. deptList, err := GetListByCache()
  134. if err != nil {
  135. return ""
  136. }
  137. deptMap := make(map[int]string, 0)
  138. for _, v := range deptList {
  139. deptMap[v.ID] = v.Name
  140. }
  141. deptNames := make([]string, 0)
  142. for i := len(deptIds) - 1; i >= 0; i-- {
  143. deptNames = append(deptNames, deptMap[deptIds[i]])
  144. }
  145. return strings.Join(deptNames, sep)
  146. }