'收货人', 'mobile' => '联系电话', 'province_id' => '所在地区', 'city_id' => '所在地区', 'district_id' => '所在地区', 'town_id' => 'town ID', 'village_id' => 'Village ID', 'detail' => '详细地址', 'latitude' => '地址纬度', 'longitude' => '地址经度', ]; } public function save() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } $store_mobile_verify = Option::get(OptionSetting::STORE_MOBILE_VERIFY, get_store_id(), 'store', '')['value']; $option = Option::get(OptionSetting::STORE_MOBILE_VERIFY, get_store_id(), 'reg', $store_mobile_verify); if ($option['value']) { if (strlen($this->mobile) != 11) { return [ 'code' => 1, 'msg' => '请输入正确的手机号' ]; } } if ($this->is_default) { Address::updateAll(['is_default' => 0], ['user_id' => $this->user_id]); } $address = Address::findOne([ 'id' => $this->address_id, 'is_delete' => 0, 'user_id' => $this->user_id ]); if (!$address) { $address = new Address(); $address->store_id = $this->store_id; $address->user_id = $this->user_id; $address->is_delete = Address::DELETE_STATUS_FALSE; $address->addtime = time(); } $address->name = trim($this->name); $address->mobile = $this->mobile; $address->detail = trim($this->detail); $province = District::findOne($this->province_id); if (!$province) { return [ 'code' => 1, 'msg' => '省份数据错误,请重新选择', ]; } $address->province_id = $province->id; $address->province = $province->name; $city = District::findOne($this->city_id); if (!$city) { return [ 'code' => 1, 'msg' => '城市数据错误,请重新选择', ]; } $address->city_id = $city->id; $address->city = $city->name; $district = District::findOne($this->district_id); if (!$district) { return [ 'code' => 1, 'msg' => '地区数据错误,请重新选择', ]; } $old_district_id = $address->district_id; $address->district_id = $district->id; $address->district = $district->name; $address->longitude = $this->longitude ?: $district->lng; $address->latitude = $this->latitude ?: $district->lat; /* 2023年7月14日17:11:25 begin */ if($this->town_id && $this->town_id > 0) { $town = District::findOne($this->town_id); $address->town_id = $town->id; $address->town = $town->name; } elseif($old_district_id != $district->id) { $address->town_id = 0; $address->town = ''; } if($this->village_id && $this->village_id > 0) { $village = District::findOne($this->village_id); $address->village_id = $village->id; $address->village = $village->name; } elseif($old_district_id != $district->id) { $address->village_id = 0; $address->village = ''; } /* end */ $address->is_default = $this->is_default ? 1 : 0; if ($address->save()) { if (empty($address->longitude) || empty($address->latitude)) { try { $addressDetail = $address->province . $address->city . $address->district . $address->town . $address->village . $address->detail; $res = \app\utils\Coordinate::getCoordinateByAddress($addressDetail); if ($res['code'] == 0) { $address->longitude = $res['data']['longitude']; $address->latitude = $res['data']['latitude']; $address->save(); } } catch (\Exception $e) { // Todo } } return [ 'code' => 0, 'msg' => '保存成功', 'data' => [ 'address_id' => $address->attributes['id'] ] ]; } else { foreach ($address->errors as $error) { return [ 'code' => 1, 'msg' => $error[0], ]; } } } }