zhangzengfei
2025-02-11 b6207787439e29b0fe899ba53de624b08506d211
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
}