diff --git a/app/common/dao/user/UserAddressDao.php b/app/common/dao/user/UserAddressDao.php index d6159a05..d326a4ae 100644 --- a/app/common/dao/user/UserAddressDao.php +++ b/app/common/dao/user/UserAddressDao.php @@ -15,6 +15,7 @@ namespace app\common\dao\user; use app\common\dao\BaseDao; +use app\common\model\store\GeoVillage; use app\common\model\user\UserAddress as model; class UserAddressDao extends BaseDao @@ -30,6 +31,10 @@ class UserAddressDao extends BaseDao return model::class; } + public function villageExists($field, $value): bool + { + return ((GeoVillage::getDB())->where($field,$value)->count()) > 0; + } public function userFieldExists($field, $value,$uid): bool { diff --git a/app/common/repositories/store/CityAreaRepository.php b/app/common/repositories/store/CityAreaRepository.php index f9a16ef6..e0211b53 100644 --- a/app/common/repositories/store/CityAreaRepository.php +++ b/app/common/repositories/store/CityAreaRepository.php @@ -38,7 +38,7 @@ class CityAreaRepository extends BaseRepository { return $this->searchGeo($where)->select(); } - + public function getBrigade($where) { return $this->searchBrigade($where)->select(); diff --git a/app/common/repositories/user/UserAddressRepository.php b/app/common/repositories/user/UserAddressRepository.php index 89a8891a..ea2aefa6 100644 --- a/app/common/repositories/user/UserAddressRepository.php +++ b/app/common/repositories/user/UserAddressRepository.php @@ -52,6 +52,17 @@ class UserAddressRepository extends BaseRepository return $this->dao->userFieldExists($this->dao->getPk(),$id,$uid); } + /** + * @param int $id + * @param int $uid + * @return bool + * @author Qinii + */ + public function villageExists($field, $value) + { + return $this->dao->villageExists($field, $value); + } + /** * @param int $uid * @return bool diff --git a/app/controller/api/user/UserAddress.php b/app/controller/api/user/UserAddress.php index 386e5870..8169652f 100644 --- a/app/controller/api/user/UserAddress.php +++ b/app/controller/api/user/UserAddress.php @@ -126,19 +126,14 @@ class UserAddress extends BaseController { $data = $this->request->params(['address_id', 'real_name', 'phone', 'area', 'detail', 'post_code', 'is_default']); $validate->check($data); - [$province, $city, $district, $street] = ((array)$data['area']) + [null, null, null, null]; - $last = $street ?? $district ?? $city ?? $province; + [$province, $city, $district, $street, $village, $brigade] = ((array)$data['area']) + [null, null, null, null, null, null]; + $last = $village ?? $street ?? $district ?? $city ?? $province; if (!$last) { throw new ValidateException('请选择正确的收货地址'); } - $make = app()->make(CityAreaRepository::class); - if (!$make->existsWhere(['id' => $last['id'], 'snum' => 0])) { - throw new ValidateException('请手动选择所在地区'); + if (!$this->repository->villageExists('village_code', $last['code'])) { + throw new ValidateException('地址信息错误'); } - if ($make->search([])->where('id', 'in', array_column($data['area'], 'id'))->count() !== count($data['area'])) { - throw new ValidateException('请选择正确的收货地址'); - } - $data['province'] = $province['name']; $data['province_id'] = $province['id']; $data['city'] = $city['name']; @@ -149,6 +144,14 @@ class UserAddress extends BaseController $data['street'] = $street['name']; $data['street_id'] = $street['id']; } + if (isset($village)) { + $data['village'] = $village['name']; + $data['village_id'] = $village['id']; + } + if (isset($brigade)) { + $data['brigade'] = $brigade['name']; + $data['brigade_id'] = $brigade['id']; + } unset($data['area']); return $data; }