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
|
|
}
|