|
|
@@ -142,7 +142,8 @@ class UserAddressRepository extends BaseRepository
|
|
142
|
142
|
/**
|
|
143
|
143
|
* 阿里云市场 - 地址解析
|
|
144
|
144
|
*
|
|
145
|
|
- * 调用阿里云市场地址解析接口,将完整的地址文本解析为省/市/区/街道等结构化信息
|
|
|
145
|
+ * 调用阿里云市场地址解析接口,将完整的地址文本解析为省/市/区/街道等结构化信息,
|
|
|
146
|
+ * 并从 rrx_regions 表查询省/市/区/街道的 id 追加到返回数据中
|
|
146
|
147
|
*
|
|
147
|
148
|
* 接口文档: https://market.aliyun.com/detail/cmapi00067026
|
|
148
|
149
|
* 请求方式: POST
|
|
|
@@ -193,7 +194,10 @@ class UserAddressRepository extends BaseRepository
|
|
193
|
194
|
// 接口返回格式:{"msg":"成功","success":true,"code":200,"data":{"orderNo":"...","data":{...}}}
|
|
194
|
195
|
// 提取内层 data.data 作为解析结果
|
|
195
|
196
|
if (isset($result['code']) && $result['code'] == 200 && isset($result['data']['data'])) {
|
|
196
|
|
- return ['code' => 200, 'msg' => '成功', 'data' => $result['data']['data']];
|
|
|
197
|
+ $data = $result['data']['data'];
|
|
|
198
|
+ // 从 rrx_regions 表查询省/市/区/街道的 id
|
|
|
199
|
+ $data = $this->appendRegionIds($data);
|
|
|
200
|
+ return ['code' => 200, 'msg' => '成功', 'data' => $data];
|
|
197
|
201
|
}
|
|
198
|
202
|
|
|
199
|
203
|
// 如果外层 code 不是 200,返回接口的错误信息
|
|
|
@@ -211,4 +215,66 @@ class UserAddressRepository extends BaseRepository
|
|
211
|
215
|
return ['code' => -5, 'msg' => $msg, 'data' => []];
|
|
212
|
216
|
}
|
|
213
|
217
|
}
|
|
|
218
|
+
|
|
|
219
|
+ /**
|
|
|
220
|
+ * 根据省/市/区/街道名称从 rrx_regions 表查询对应的 id,并追加到返回数据中
|
|
|
221
|
+ *
|
|
|
222
|
+ * 注意:每次查询必须重新调用 Db::name('regions'),避免 ThinkPHP 查询构造器复用导致 where 条件叠加
|
|
|
223
|
+ *
|
|
|
224
|
+ * @param array $data 接口返回的地址解析数据,包含 province/city/district/street
|
|
|
225
|
+ * @return array
|
|
|
226
|
+ */
|
|
|
227
|
+ private function appendRegionIds(array $data)
|
|
|
228
|
+ {
|
|
|
229
|
+ $provinceId = 0;
|
|
|
230
|
+ $cityId = 0;
|
|
|
231
|
+ $districtId = 0;
|
|
|
232
|
+ $streetId = 0;
|
|
|
233
|
+
|
|
|
234
|
+ // 查询省份 id (level = 1),未查到返回 0
|
|
|
235
|
+ if (!empty($data['province'])) {
|
|
|
236
|
+ $province = \think\facade\Db::name('regions')
|
|
|
237
|
+ ->where('name', $data['province'])
|
|
|
238
|
+ ->where('level', 1)
|
|
|
239
|
+ ->find();
|
|
|
240
|
+ $provinceId = $province ? (int)$province['id'] : 0;
|
|
|
241
|
+ }
|
|
|
242
|
+ $data['province_id'] = $provinceId;
|
|
|
243
|
+
|
|
|
244
|
+ // 查询城市 id (level = 2),未查到返回 0
|
|
|
245
|
+ if (!empty($data['city'])) {
|
|
|
246
|
+ $city = \think\facade\Db::name('regions')
|
|
|
247
|
+ ->where('name', $data['city'])
|
|
|
248
|
+ ->where('level', 2)
|
|
|
249
|
+ ->find();
|
|
|
250
|
+ $cityId = $city ? (int)$city['id'] : 0;
|
|
|
251
|
+ }
|
|
|
252
|
+ $data['city_id'] = $cityId;
|
|
|
253
|
+
|
|
|
254
|
+ // 查询区/县 id (level = 3),未查到返回 0
|
|
|
255
|
+ if (!empty($data['district'])) {
|
|
|
256
|
+ $district = \think\facade\Db::name('regions')
|
|
|
257
|
+ ->where('name', $data['district'])
|
|
|
258
|
+ ->where('level', 3)
|
|
|
259
|
+ ->find();
|
|
|
260
|
+ $districtId = $district ? (int)$district['id'] : 0;
|
|
|
261
|
+ }
|
|
|
262
|
+ $data['district_id'] = $districtId;
|
|
|
263
|
+
|
|
|
264
|
+ // 查询街道/乡镇 id (level = 4),未查到返回 0
|
|
|
265
|
+ if (!empty($data['street'])) {
|
|
|
266
|
+ $street = \think\facade\Db::name('regions')
|
|
|
267
|
+ ->where('name', $data['street'])
|
|
|
268
|
+ ->where('level', 4)
|
|
|
269
|
+ ->find();
|
|
|
270
|
+ $streetId = $street ? (int)$street['id'] : 0;
|
|
|
271
|
+ }
|
|
|
272
|
+ $data['street_id'] = $streetId;
|
|
|
273
|
+
|
|
|
274
|
+ // 拼接 code_list,格式:province_id,city_id,district_id,street_id
|
|
|
275
|
+ $codeList = implode(',', [$provinceId, $cityId, $districtId, $streetId]);
|
|
|
276
|
+ $data['code_list'] = $codeList;
|
|
|
277
|
+
|
|
|
278
|
+ return $data;
|
|
|
279
|
+ }
|
|
214
|
280
|
}
|