diff --git a/backend/app/dao/user/UserAddressDao.php b/backend/app/dao/user/UserAddressDao.php index 3c35d3bbb..49e8887be 100644 --- a/backend/app/dao/user/UserAddressDao.php +++ b/backend/app/dao/user/UserAddressDao.php @@ -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'); + } } diff --git a/backend/app/services/user/UserAddressServices.php b/backend/app/services/user/UserAddressServices.php index 46af6ab14..bc264724e 100644 --- a/backend/app/services/user/UserAddressServices.php +++ b/backend/app/services/user/UserAddressServices.php @@ -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 diff --git a/backend/app/services/user/UserServices.php b/backend/app/services/user/UserServices.php index 66237e389..e0c50c3db 100644 --- a/backend/app/services/user/UserServices.php +++ b/backend/app/services/user/UserServices.php @@ -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']; } }