wesmiler 2 лет назад
Родитель
Сommit
eab6c86878

+ 74 - 0
app/Http/Controllers/Api/v1/MemberAddressController.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Api\v1;
+
+use App\Http\Controllers\Api\webApp;
+use App\Http\Validator\AddressValidator;
+use App\Http\Validator\BankValidator;
+use App\Services\Api\MemberAddressService;
+use App\Services\Api\MemberBankService;
+use App\Services\RedisService;
+
+/**
+ * 用户收货地址
+ * @package App\Http\Controllers\Api
+ */
+class MemberAddressController extends webApp
+{
+
+    /**
+     * 列表
+     * @return array|mixed
+     */
+    public function index()
+    {
+        $params = request()->all();
+        $pageSize = isset($params['pageSize'])? $params['pageSize'] : 18;
+        $params['user_id'] = $this->userId;
+        $datas = MemberAddressService::make()->getDataList($params, $pageSize);
+        return showJson(1010, true, $datas);
+    }
+
+    /**
+     * 可选择的地址
+     * @return array
+     */
+    public function regions()
+    {
+        $code = request()->post('code','');
+        $datas = MemberAddressService::make()->getRegion($code);
+        return showJson(1010, true, $datas);
+    }
+
+    /**
+     * @return array
+     */
+    public function save(AddressValidator $validator)
+    {
+        $params = $validator->check(request()->all(), '');
+        if(!is_array($params)){
+            return showJson($params, false);
+        }
+
+        if(MemberAddressService::make()->saveData($this->userId, $params)){
+            RedisService::clear("caches:members:banks:{$this->userId}");
+            return showJson(MemberAddressService::make()->getError(), true);
+        }else{
+            return showJson(MemberAddressService::make()->getError(), false);
+        }
+    }
+
+    /**
+     * 删除
+     * @return array
+     */
+    public function delete()
+    {
+        if(MemberAddressService::make()->delete()){
+            RedisService::clear("caches:members:address:{$this->userId}");
+            return showJson(MemberAddressService::make()->getError(), true);
+        }else{
+            return showJson(MemberAddressService::make()->getError(), false);
+        }
+    }
+}

+ 53 - 0
app/Http/Validator/AddressValidator.php

@@ -0,0 +1,53 @@
+<?php
+namespace App\Http\Validator;
+class AddressValidator extends BaseValidator
+{
+    // 当前模型所有验证规则
+    public static $rules = [
+        'id' => 'required',
+        'realname' => 'required|max:20',
+        'mobile' => 'required|max:30',
+        'province' => 'required|max:30',
+        'city' => 'required|max:30',
+        'street_code' => 'required|max:30',
+        'type' => 'required',
+        'status' => 'required',
+    ];
+    public static $msgs = [
+        'required' => ':attribute不能为空',
+        'string' => ':attribute必须是字符串',
+        'min' => ':attribute长度不能小于:min位',
+        'max' => ':attribute长度不能大于:max位',
+        'exists' => ':attribute不存在',
+        'rule' => ':attribute格式不正确',
+        'mobile' => ':attribute格式不正确',
+    ];
+
+    // 当前模型所有验证字段
+    public static $fields = [
+        'id' => 'ID',
+        'type' => '账户类型',
+        'realname' => '收款人姓名',
+        'bank_name' => '账户名称',
+        'bank_card' => '银行卡号',
+        'qrcode' => '收款码',
+    ];
+
+    // 当前模型所有验证场景
+    public static $scenes = [
+        'add'=> ['realname','mobile','province','city','district_code','street_code','address'],
+        'save'=> ['id','realname','mobile','province','city','district_code','street_code','address'],
+        'del'=> ['id'],
+    ];
+
+    /**
+     * 验证
+     * @param $request
+     * @param string $scene
+     * @return int|mixed
+     */
+    public static function check($request, $scene=''){
+        $validator = new BaseValidator(self::$rules, self::$msgs, self::$fields, self::$scenes);
+        return $validator->checkParams($request, $scene);
+    }
+}

+ 2 - 1
app/Services/Api/GoodsService.php

@@ -457,7 +457,8 @@ class GoodsService extends BaseService
 
         if(empty($addressId)){
             $address = MemberAddressService::make()->getBindInfo($userId);
-            $addressId = isset($address['district_code'])? $address['district_code'] : '';
+            $streetCode = isset($address['street_code'])? $address['street_code'] : '';
+            $addressId = $streetCode? $streetCode : (isset($address['district_code'])? $address['district_code'] : '');
         }
 
         $result = SupplyService::make()->getApiData('getFreight',['address_id'=> intval($addressId),'sku_list'=> $skuList]);

+ 19 - 4
app/Services/Api/MemberAddressService.php

@@ -100,12 +100,17 @@ class MemberAddressService extends BaseService
         $isDefault = isset($params['is_default']) ? $params['is_default'] : 2;
         $data = [
             'user_id'=> $userId,
+            'type'=> isset($params['type']) && $params['type']? intval($params['type']) :1,
             'mobile'=> isset($params['mobile'])? $params['mobile'] : '',
             'realname'=> isset($params['realname'])? $params['realname'] : '',
+            'province_code'=> isset($params['province_code'])? $params['province_code'] : '',
+            'city_code'=> isset($params['city_code'])? $params['city_code'] : '',
+            'district_code'=> isset($params['district_code'])? $params['district_code'] : '',
+            'street_code'=> isset($params['street_code'])? $params['street_code'] : '',
             'province'=> isset($params['province'])? $params['province'] : '',
             'city'=> isset($params['city'])? $params['city'] : '',
             'district'=> isset($params['district'])? $params['district'] : '',
-            'codes'=> isset($params['codes'])? (is_array($params['codes'])?implode(',', $params['codes']):$params['codes']) : '',
+            'street'=> isset($params['street'])? $params['street'] : '',
             'address'=> isset($params['address'])? $params['address'] : '',
             'is_default'=> $isDefault==1? 1: 2,
             'status'=> isset($params['status'])? $params['status'] : 1,
@@ -117,7 +122,7 @@ class MemberAddressService extends BaseService
             $this->model->where(['user_id'=> $userId])->update(['is_default'=> 2,'update_time'=> time()]);
         }
 
-        RedisService::keyDel("caches:address:{$userId}");
+        RedisService::clear("caches:members:address:{$userId}");
         if($id && $this->model->where(['id'=> $id])->value('id')){
             $this->model->where(['id'=> $id])->update($data);
             $this->error = $id? 1008 : 1027;
@@ -135,7 +140,7 @@ class MemberAddressService extends BaseService
      */
     public function getBindInfo($userId)
     {
-        $cacheKey = "caches:address:{$userId}";
+        $cacheKey = "caches:members:address:{$userId}";
         $info = RedisService::get($cacheKey);
         if($info){
             return $info;
@@ -157,6 +162,9 @@ class MemberAddressService extends BaseService
             if(isset($info['district']) && $info['district']){
                 $address[] = $info['district'];
             }
+            if(isset($info['street']) && $info['street']){
+                $address[] = $info['street'];
+            }
             if(isset($info['address']) && $info['address']){
                 $address[] = $info['address'];
             }
@@ -168,6 +176,11 @@ class MemberAddressService extends BaseService
         return $info;
     }
 
+    /**
+     * 获取可选择的地址列表
+     * @param $code
+     * @return array|false|mixed|string
+     */
     public function getRegion($code)
     {
         $cacheKey ="caches:members:regions:{$code}";
@@ -178,8 +191,10 @@ class MemberAddressService extends BaseService
 
         $datas = SupplyService::make()->getApiData('getRegion',['code'=> $code]);
         if($datas){
-
+            RedisService::set($cacheKey, $datas, rand(300, 600));
         }
+
+        return $datas;
     }
 
     /**

+ 2 - 1
app/Services/Api/MemberService.php

@@ -139,7 +139,8 @@ class MemberService extends BaseService
             }else if($type == 'buy'){
                 $address = MemberAddressService::make()->getBindInfo($userId);
                 $info['address'] = $address;
-                $info['freight_address_id'] = isset($address['district_code'])? $address['district_code'] : '';
+                $streetCode = isset($address['street_code'])? $address['street_code'] : '';
+                $info['freight_address_id'] = $streetCode? $streetCode : (isset($address['district_code'])? $address['district_code'] : '');
                 $info['address_id'] = isset($address['id'])? $address['id'] : 0;
                 $info['cart_num'] = GoodsService::make()->getCartCount($info['id']);
             }else if($type == 'upgrade'){

+ 7 - 0
routes/api.php

@@ -173,6 +173,13 @@ Route::prefix('v1')->group(function(){
     Route::match(['get','post'],'/trade/index', [\App\Http\Controllers\Api\v1\TradeController::class, 'index']);
     Route::match(['get','post'],'/trade/info', [\App\Http\Controllers\Api\v1\TradeController::class, 'info']);
 
+    // 收货地址
+    Route::post('/address/index', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'index']);
+    Route::post('/address/regions', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'regions']);
+    Route::post('/address/save', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'save']);
+    Route::post('/address/delete', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'delete']);
+
+
     // 银行卡
     Route::post('/bank/index', [\App\Http\Controllers\Api\v1\MemberBankController::class, 'index']);
     Route::post('/bank/list', [\App\Http\Controllers\Api\v1\MemberBankController::class, 'list']);