1、HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下),获取到一个树形结构的多维数组,无限级循环
/**
* HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下)
*
* @param string $groupId 租户ID
*
* @return array
* 格式如下:
* [
* 'group_id' => 'c10e87f39873512a16727e17f57456a5', // 租户ID
* 'group_pid' => '', // 租户父级 ID
* 'group_code' => '1800000001', // 租户标识
* 'group_name' => '广东省', // 租户名称
* 'is_open' => 1, // 租户状态,0:关闭;1:开启
* 'group_logo' => '/uploads/cmc_group_logo/20190214/1550128076-ccLZyN.png', // 租户 LOGO 地址
* 'open_type' => 'self-reg', // 开通方式,self-reg:自助开通;admin-open:后台开通
* 'source' => 'cmc', // 开通途径
* 'add_time' => '1970-01-01 08:00:01', // 添加时间
* 'update_time' => '2019-03-11 14:43:33', // 更新时间
* 'child' => [
* [
* 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63',
* 'group_pid' => 'c10e87f39873512a16727e17f57456a5',
* 'group_code' => '1800000005',
* 'group_name' => '深圳市',
* 'is_open' => 1,
* 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg',
* 'open_type' => 'admin-open',
* 'source' => '',
* 'add_time' => '2018-04-26 10:05:43',
* 'update_time' => '2019-03-11 14:43:38',
* 'child' => [
* [
* 'group_id' => '7a4db30bbab43d2c410ea32e877492a1',
* 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63',
* 'group_code' => '88888888',
* 'group_name' => '罗湖区',
* 'is_open' => 1,
* 'group_logo' => '',
* 'open_type' => 'admin-open'
* 'source' => '',
* 'add_time' => '2018-06-22 17:40:05',
* 'update_time' => '2019-03-11 14:41:29',
* 'child' => [
* ],
* ],
* [
* 'group_id' => 'chinamcloud',
* 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63',
* 'group_code' => '1800000056',
* 'group_name' => '南山区',
* 'is_open' => 1,
* 'group_logo' => '',
* 'open_type' => 'admin-open',
* 'source' => '',
* 'add_time' => '2018-07-25 16:17:26',
* 'update_time' => '2019-03-11 14:30:50',
* 'child' => [
* ],
* ],
* ],
* ],
* ],
* ]
*
*
* @throws ServerErrorHttpException
*/
public static function httpGetAllGroupTree($groupId)
{
/* HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下) */
$httpCmcConsoleGroup = new HttpCmcConsoleGroup();
$httpCmcConsoleGroupGetAllGroupTree = $httpCmcConsoleGroup->getAllGroupTree($groupId);
if ($httpCmcConsoleGroupGetAllGroupTree === false) {
if ($httpCmcConsoleGroup->hasErrors()) {
$firstError = '';
foreach ($httpCmcConsoleGroup->getFirstErrors() as $message) {
$firstError = $message;
break;
}
throw new ServerErrorHttpException(Yii::t('error', Yii::t('error', Yii::t('error', '201002'), ['first_error' => $firstError])), 201002);
} elseif (!$httpCmcConsoleGroup->hasErrors()) {
throw new ServerErrorHttpException('Framework service console HTTP request failed for unknown reasons.');
}
}
return $httpCmcConsoleGroupGetAllGroupTree['data'];
}
2、获取租户列表(二维数组),将一个树形结构的多维数组转换为二维数组
/**
* 获取子级租户列表(二维数组)
*
* @param array $groupTree 租户列表(树形)
*
* @return array
* 格式如下:
* [
* '015ce30b116ce86058fa6ab4fea4ac63' => [
* 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
* 'group_pid' => 'c10e87f39873512a16727e17f57456a5', // 租户父级 ID
* 'group_code' => '1800000005', // 租户标识
* 'group_name' => '深圳市', // 租户名称
* 'is_open' => 1, // 租户状态,0:关闭;1:开启
* 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg', // 租户 LOGO 地址
* 'open_type' => 'admin-open', // 开通方式,self-reg:自助开通;admin-open:后台开通
* 'source' => '', // 开通途径
* 'add_time' => '2018-04-26 10:05:43', // 添加时间
* 'update_time' => '2019-03-11 14:43:38', // 更新时间
* ],
* '7a4db30bbab43d2c410ea32e877492a1' => [
* 'group_id' => '7a4db30bbab43d2c410ea32e877492a1',
* 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63',
* 'group_code' => '88888888',
* 'group_name' => '罗湖区',
* 'is_open' => 1,
* 'group_logo' => '',
* 'open_type' => 'admin-open',
* 'source' => '',
* 'add_time' => '2018-06-22 17:40:05',
* 'update_time' => '2019-03-11 14:41:29',
* ],
* ...
* ]
*
* @throws ServerErrorHttpException
*/
public static function getChildGroupTwo($groupTree)
{
if (isset($groupTree['child'])) {
if (!empty($groupTree['child'])) {
foreach ($groupTree['child'] as $childGroup) {
$groupTree[$childGroup['group_id']] = $childGroup;
unset($groupTree[$childGroup['group_id']]['child']);
$groupTree['child'] = $childGroup['child'];
$groupTree = static::getChildGroupTwo($groupTree);
}
} else {
unset($groupTree['child']);
$groupTree = static::getChildGroupTwo($groupTree);
}
}
return $groupTree;
}
/**
* 获取租户列表(二维数组)
*
* @param object $identity 当前用户的身份实例
*
* @return array
* 格式如下:
* [
* 'c10e87f39873512a16727e17f57456a5' => [
* 'group_id' => 'c10e87f39873512a16727e17f57456a5', // 租户ID
* 'group_pid' => '', // 租户父级 ID
* 'group_code' => '1800000001', // 租户标识
* 'group_name' => '广东省', // 租户名称
* 'is_open' => 1, // 租户状态,0:关闭;1:开启
* 'group_logo' => '/uploads/cmc_group_logo/20190214/1550128076-ccLZyN.png', // 租户 LOGO 地址
* 'open_type' => 'self-reg', // 开通方式,self-reg:自助开通;admin-open:后台开通
* 'source' => '', // 开通途径
* 'add_time' => '1970-01-01 08:00:01', // 添加时间
* 'update_time' => '2019-03-11 14:43:33', // 更新时间
* ],
* '015ce30b116ce86058fa6ab4fea4ac63' => [
* 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
* 'group_pid' => 'c10e87f39873512a16727e17f57456a5', // 租户父级 ID
* 'group_code' => '1800000005', // 租户标识
* 'group_name' => '深圳市', // 租户名称
* 'is_open' => 1, // 租户状态,0:关闭;1:开启
* 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg', // 租户 LOGO 地址
* 'open_type' => 'admin-open', // 开通方式,self-reg:自助开通;admin-open:后台开通
* 'source' => '', // 开通途径
* 'add_time' => '2018-04-26 10:05:43', // 添加时间
* 'update_time' => '2019-03-11 14:43:38', // 更新时间
* ],
* '7a4db30bbab43d2c410ea32e877492a1' => [
* 'group_id' => '7a4db30bbab43d2c410ea32e877492a1',
* 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63',
* 'group_code' => '88888888',
* 'group_name' => '罗湖区',
* 'is_open' => 1,
* 'group_logo' => '',
* 'open_type' => 'admin-open',
* 'source' => '',
* 'add_time' => '2018-06-22 17:40:05',
* 'update_time' => '2019-03-11 14:41:29',
* ],
* ...
* ]
*
*
* @throws ServerErrorHttpException
*/
public static function getAllGroupTwo($identity)
{
// HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下)
$httpGetAllGroupTree = CmcConsoleGroupService::httpGetAllGroupTree($identity->group_id);
$rootGroupTwo[$httpGetAllGroupTree['group_id']] = $httpGetAllGroupTree;
$allGroupTwo = $rootGroupTwo;
if (isset($httpGetAllGroupTree['child'])) {
unset($rootGroupTwo[$httpGetAllGroupTree['group_id']]['child']);
$allGroupTree['child'] = $httpGetAllGroupTree['child'];
$childGroupTwo = static::getChildGroupTwo($allGroupTree);
$allGroupTwo = array_merge($rootGroupTwo, $childGroupTwo);
}
return $allGroupTwo;
}