@startuml

package Facade {

[checkPermissionBy]-->[HousedelAndPoint]
[checkPermissionBy]-->[PointOnly]
[checkPermissionBy]-->[PointUcidOnly]
[checkPermissionBy]-->[ResblockAndPoint]
[checkPermissionBy]-->[BuildingAndPoint]
[checkPermissionBy]-->[HousedelsAndPoint]
[checkPermissionBy]-->[HousedelAndPoints]

}
package ServiceImpl{
[HousedelAndPoint]-->[入参参数-Validator]
[PointOnly]-->[入参参数-Validator]
[PointUcidOnly]-->[入参参数-Validator]
[ResblockAndPoint]-->[入参参数-Validator]
[BuildingAndPoint]-->[入参参数-Validator]
[HousedelsAndPoint]-->[入参参数-Validator]
[HousedelAndPoints]-->[入参参数-Validator]
'[入参参数-Validator]-->[Tree-node]:执行默认表达式

package 表达式 {
[入参参数-Validator]-->[表达式=黑名单&&业务类型&&（组队盘验证||角色人验证）]:执行默认表达式

[表达式=黑名单&&业务类型&&（组队盘验证||角色人验证）]-->[Tree-node]:根据条件重新构建表达式Tree-node
[Tree-node]-right..[角色人验证]:是否需要验证此节点
[Tree-node]-right..[组队盘验证]:是否需要验证此节点
[Tree-node]-left..[业务类型]:是否需要验证此节点
[Tree-node]-left..[黑名单验证]:是否需要验证此节点
[Tree-node]-down->[表达式]:去掉无需验证校验点，将节点翻译成表达式
}

package response{
[表达式]-->[鉴权结果]:执行表达式，记录错误原因
[表达式]-->[错误原因]
[鉴权结果]-->[结果返回]
[错误原因]-->[结果返回]

}


}




@enduml