feat(用户列表): 地址列优先展示默认收货地址

批量取用户默认收货地址按 uid 索引,无默认地址时回退微信省市,避免逐行点查
This commit is contained in:
吴昊天 2026-10-16 15:15:29 +08:00
parent c28a941257
commit 48ae01d903
3 changed files with 29 additions and 1 deletions

View File

@ -46,4 +46,17 @@ class UserAddressDao extends BaseDao
{
return $this->search($where)->field($field)->page($page, $limit)->order('is_default DESC,id DESC')->select()->toArray();
}
/**
* 批量获取多个用户的默认地址,按 uid 索引
* @param array $uids
* @return array
*/
public function getDefaultAddressMapByUids(array $uids): array
{
if (!$uids) {
return [];
}
return $this->getColumn([['uid', 'in', array_unique($uids)], ['is_default', '=', 1], ['is_del', '=', 0]], 'province,city,district,detail', 'uid');
}
}

View File

@ -95,6 +95,16 @@ class UserAddressServices extends BaseService
return $this->dao->getOne(['uid' => $uid, 'is_default' => 1, 'is_del' => 0], $field);
}
/**
* 批量获取多个用户的默认地址,按 uid 索引
* @param array $uids
* @return array
*/
public function getDefaultAddressMapByUids(array $uids): array
{
return $this->dao->getDefaultAddressMapByUids($uids);
}
/**
* 获取条数
* @param array $where

View File

@ -571,9 +571,14 @@ class UserServices extends BaseService
$levelName = app()->make(SystemUserLevelServices::class)->getUsersLevel(array_unique(array_column($list, 'level')));
$userLevel = app()->make(UserLevelServices::class)->getUsersLevelInfo($uids);
$spread_names = $this->dao->getColumn([['uid', 'in', array_unique(array_column($list, 'spread_uid'))]], 'nickname', 'uid');
$defaultAddressMap = app()->make(UserAddressServices::class)->getDefaultAddressMapByUids($uids);
foreach ($list as &$item) {
if (empty($item['addres'])) {
if (!empty($item['country']) || !empty($item['province']) || !empty($item['city'])) {
// 优先展示用户默认收货地址,无默认地址时回退微信用户省市
$defaultAddress = $defaultAddressMap[$item['uid']] ?? null;
if ($defaultAddress) {
$item['addres'] = $defaultAddress['province'] . $defaultAddress['city'] . $defaultAddress['district'] . $defaultAddress['detail'];
} elseif (!empty($item['country']) || !empty($item['province']) || !empty($item['city'])) {
$item['addres'] = $item['country'] . $item['province'] . $item['city'];
}
}