package eta import ( "fmt" "hongze/hz_crm_eta/models/eta" "hongze/hz_crm_eta/services/alarm_msg" "hongze/hz_crm_eta/utils" "sort" ) // UpdateParentClassifyHasTel 更新父级分类是否含有电话字段 func UpdateParentClassifyHasTel(classifyId, parentId, hasTeleconference int) (err error) { if classifyId <= 0 || parentId <= 0 { return } defer func() { if err != nil { alarm_msg.SendAlarmMsg("编辑分类后-修改父级分类电话会信息失败, ErrMsg: "+err.Error(), 3) } }() ob := new(eta.Classify) parentClassify, e := ob.GetClassifyById(parentId) if e != nil { if e == utils.ErrNoRow { err = fmt.Errorf("父级分类不存在") return } err = fmt.Errorf("获取父级分类信息失败, Err: %s", e.Error()) return } if parentClassify == nil { err = fmt.Errorf("父级分类不存在") return } updateParent := false updateCols := make([]string, 0) updateCols = append(updateCols, "HasTeleconference") if hasTeleconference == 1 { // 二级分类包含电话会,则一级分类也默认包含电话会 if parentClassify.HasTeleconference == 0 { parentClassify.HasTeleconference = 1 updateParent = true } } else { // 二级分类均无电话会,则一级分类也无电话会 if parentClassify.HasTeleconference == 1 { child, e := eta.GetClassifyChild(parentClassify.Id, "") if e != nil { err = fmt.Errorf("获取子分类失败, Err: %s", e.Error()) return } // 存在同一级分类下的二级分类有电话会则不变动 hasTel := false for i := 0; i < len(child); i++ { if child[i].HasTeleconference == 1 && child[i].Id != classifyId { hasTel = true break } } if !hasTel { parentClassify.HasTeleconference = 0 updateParent = true } } } if updateParent { if e = parentClassify.UpdateClassify(updateCols); e != nil { err = fmt.Errorf("更新父级分类失败, Err: %s", e.Error()) return } } return } func GetParentClassifyListByParentIdList(parentClassifyIdList []int) (list []*eta.ClassifyListV2, err error) { num := len(parentClassifyIdList) if num <= 0 { return } list, err = eta.GetClassifyListByParentIdList(parentClassifyIdList) if err != nil { return } // 是否还有上级 { currParentClassifyIdList := make([]int, 0) for _, v := range list { if v.ParentId > 0 { currParentClassifyIdList = append(currParentClassifyIdList, v.ParentId) } } if len(currParentClassifyIdList) > 0 { tmpList, tmpErr := GetParentClassifyListByParentIdList(currParentClassifyIdList) if tmpErr != nil { err = tmpErr return } list = append(tmpList, list...) } } return } // GetClassifyListTreeRecursive // @Description: 递归获取分类树形结构 // @author: Roc // @datetime 2024-06-19 13:23:28 // @param list []*models.ClassifyList // @param parentId int // @return []*models.ClassifyList func GetClassifyListTreeRecursive(list []*eta.ClassifyListV2, parentId int) []*eta.ClassifyListV2 { res := make([]*eta.ClassifyListV2, 0) for _, v := range list { if v.ParentId == parentId { v.Child = GetClassifyListTreeRecursive(list, v.Id) res = append(res, v) } } // 前端的JP需要我这么返回 if len(res) <= 0 { res = nil } return res } // BySortAndCreateTime 用来排序,先按Sort字段升序排序,若Sort相同,则按照CreateTime字段升序排序。 type BySortAndCreateTime []*eta.ClassifyListV2 func (a BySortAndCreateTime) Len() int { return len(a) } func (a BySortAndCreateTime) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a BySortAndCreateTime) Less(i, j int) bool { if a[i].Sort == a[j].Sort { return a[i].CreateTime.Before(a[j].CreateTime) } return a[i].Sort < a[j].Sort } // SortClassifyListBySortAndCreateTime sorts the ClassifyList slice by Sort and then CreateTime in ascending order. func SortClassifyListBySortAndCreateTime(classifyList []*eta.ClassifyListV2) { sort.Sort(BySortAndCreateTime(classifyList)) }