report_classify.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package eta
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_eta/models/eta"
  5. "hongze/hz_crm_eta/services/alarm_msg"
  6. "hongze/hz_crm_eta/utils"
  7. "sort"
  8. )
  9. // UpdateParentClassifyHasTel 更新父级分类是否含有电话字段
  10. func UpdateParentClassifyHasTel(classifyId, parentId, hasTeleconference int) (err error) {
  11. if classifyId <= 0 || parentId <= 0 {
  12. return
  13. }
  14. defer func() {
  15. if err != nil {
  16. alarm_msg.SendAlarmMsg("编辑分类后-修改父级分类电话会信息失败, ErrMsg: "+err.Error(), 3)
  17. }
  18. }()
  19. ob := new(eta.Classify)
  20. parentClassify, e := ob.GetClassifyById(parentId)
  21. if e != nil {
  22. if e == utils.ErrNoRow {
  23. err = fmt.Errorf("父级分类不存在")
  24. return
  25. }
  26. err = fmt.Errorf("获取父级分类信息失败, Err: %s", e.Error())
  27. return
  28. }
  29. if parentClassify == nil {
  30. err = fmt.Errorf("父级分类不存在")
  31. return
  32. }
  33. updateParent := false
  34. updateCols := make([]string, 0)
  35. updateCols = append(updateCols, "HasTeleconference")
  36. if hasTeleconference == 1 {
  37. // 二级分类包含电话会,则一级分类也默认包含电话会
  38. if parentClassify.HasTeleconference == 0 {
  39. parentClassify.HasTeleconference = 1
  40. updateParent = true
  41. }
  42. } else {
  43. // 二级分类均无电话会,则一级分类也无电话会
  44. if parentClassify.HasTeleconference == 1 {
  45. child, e := eta.GetClassifyChild(parentClassify.Id, "")
  46. if e != nil {
  47. err = fmt.Errorf("获取子分类失败, Err: %s", e.Error())
  48. return
  49. }
  50. // 存在同一级分类下的二级分类有电话会则不变动
  51. hasTel := false
  52. for i := 0; i < len(child); i++ {
  53. if child[i].HasTeleconference == 1 && child[i].Id != classifyId {
  54. hasTel = true
  55. break
  56. }
  57. }
  58. if !hasTel {
  59. parentClassify.HasTeleconference = 0
  60. updateParent = true
  61. }
  62. }
  63. }
  64. if updateParent {
  65. if e = parentClassify.UpdateClassify(updateCols); e != nil {
  66. err = fmt.Errorf("更新父级分类失败, Err: %s", e.Error())
  67. return
  68. }
  69. }
  70. return
  71. }
  72. func GetParentClassifyListByParentIdList(parentClassifyIdList []int) (list []*eta.ClassifyListV2, err error) {
  73. num := len(parentClassifyIdList)
  74. if num <= 0 {
  75. return
  76. }
  77. list, err = eta.GetClassifyListByParentIdList(parentClassifyIdList)
  78. if err != nil {
  79. return
  80. }
  81. // 是否还有上级
  82. {
  83. currParentClassifyIdList := make([]int, 0)
  84. for _, v := range list {
  85. if v.ParentId > 0 {
  86. currParentClassifyIdList = append(currParentClassifyIdList, v.ParentId)
  87. }
  88. }
  89. if len(currParentClassifyIdList) > 0 {
  90. tmpList, tmpErr := GetParentClassifyListByParentIdList(currParentClassifyIdList)
  91. if tmpErr != nil {
  92. err = tmpErr
  93. return
  94. }
  95. list = append(tmpList, list...)
  96. }
  97. }
  98. return
  99. }
  100. // GetClassifyListTreeRecursive
  101. // @Description: 递归获取分类树形结构
  102. // @author: Roc
  103. // @datetime 2024-06-19 13:23:28
  104. // @param list []*models.ClassifyList
  105. // @param parentId int
  106. // @return []*models.ClassifyList
  107. func GetClassifyListTreeRecursive(list []*eta.ClassifyListV2, parentId int) []*eta.ClassifyListV2 {
  108. res := make([]*eta.ClassifyListV2, 0)
  109. for _, v := range list {
  110. if v.ParentId == parentId {
  111. v.Child = GetClassifyListTreeRecursive(list, v.Id)
  112. res = append(res, v)
  113. }
  114. }
  115. // 前端的JP需要我这么返回
  116. if len(res) <= 0 {
  117. res = nil
  118. }
  119. return res
  120. }
  121. // BySortAndCreateTime 用来排序,先按Sort字段升序排序,若Sort相同,则按照CreateTime字段升序排序。
  122. type BySortAndCreateTime []*eta.ClassifyListV2
  123. func (a BySortAndCreateTime) Len() int {
  124. return len(a)
  125. }
  126. func (a BySortAndCreateTime) Swap(i, j int) {
  127. a[i], a[j] = a[j], a[i]
  128. }
  129. func (a BySortAndCreateTime) Less(i, j int) bool {
  130. if a[i].Sort == a[j].Sort {
  131. return a[i].CreateTime.Before(a[j].CreateTime)
  132. }
  133. return a[i].Sort < a[j].Sort
  134. }
  135. // SortClassifyListBySortAndCreateTime sorts the ClassifyList slice by Sort and then CreateTime in ascending order.
  136. func SortClassifyListBySortAndCreateTime(classifyList []*eta.ClassifyListV2) {
  137. sort.Sort(BySortAndCreateTime(classifyList))
  138. }