package service import ( "errors" "model-engine/db" "model-engine/pkg/logger" ) func GetUnitsByIds(ids []string) (list []*db.DomainUnit, err error) { list = make([]*db.DomainUnit, 0) err = db.GetDB().Model(&db.DomainUnit{}).Where("id in ?", ids).Find(&list).Error return } func GetOrgIdsAndAreaIdsByDomainUnitIds(domainUnitIds []string) (targetOrgIds, targetAreaIds []interface{}, err error) { domains, err := GetUnitsByIds(domainUnitIds) if err != nil { return nil, nil, err } otherIds := make([]string, 0) //派出所以上的区域id for _, d := range domains { if d.DomainType == db.DomainTypeArea { targetAreaIds = append(targetAreaIds, d.ID) } else if d.DomainType == db.DomainTypeOrg { targetOrgIds = append(targetOrgIds, d.ID) } else { otherIds = append(otherIds, d.ID) } } if len(otherIds) > 0 { otherTargetOrgIds, err := GetTargetSubUnitsIds(otherIds, db.DomainTypeOrg) if err != nil { return nil, nil, err } for _, id := range otherTargetOrgIds { targetOrgIds = append(targetOrgIds, id) } } return } func GetTargetSubUnitsIds(ids []string, domainType db.DomainType) (targetIds []string, err error) { units, err := GetTargetSubUnits(ids, domainType) if err != nil { logger.Errorf("GetTargetSubUnits err:%v", err) return nil, err } if len(units) == 0 { logger.Warnf("GetTargetSubUnits empty result, ids: %v", ids) return nil, errors.New("GetTargetSubUnits empty result") } targetIds = make([]string, 0, len(units)) for _, unit := range units { targetIds = append(targetIds, unit.ID) } return targetIds, nil } func GetTargetSubUnits(ids []string, domainType db.DomainType) (list []*db.DomainUnit, err error) { list = make([]*db.DomainUnit, 0) err = db.GetDB().Model(&db.DomainUnit{}).Where("parent_id in ?", ids).Find(&list).Error parentIds := make([]string, 0, len(list)) for _, v := range list { if v.DomainType == domainType { parentIds = make([]string, 0, len(list)) break } else if v.DomainType != db.DomainTypeArea { parentIds = append(parentIds, v.ID) } } if len(parentIds) > 0 { return GetTargetSubUnits(parentIds, domainType) } return list, nil } func GetUnitsMapByIds(ids []string) (m map[string]*db.DomainUnit, err error) { list := make([]*db.DomainUnit, 0) err = db.GetDB().Model(&db.DomainUnit{}).Where("id in ?", ids).Find(&list).Error if err != nil { return nil, err } m = make(map[string]*db.DomainUnit, len(list)) for _, v := range list { m[v.ID] = v } return }