wesmiler 3 달 전
부모
커밋
eba1b5f5c2
3개의 변경된 파일113개의 추가작업 그리고 0개의 파일을 삭제
  1. 20 0
      app/Http/Controllers/Api/v1/OrderController.php
  2. 91 0
      app/Services/Api/OrderService.php
  3. 2 0
      routes/api.php

+ 20 - 0
app/Http/Controllers/Api/v1/OrderController.php

@@ -166,4 +166,24 @@ class OrderController extends webApp
         }
     }
 
+
+    /**
+     * 售后/退款
+     * @return array
+     */
+    public function after()
+    {
+        $params = request()->all();
+        try {
+            if (!$result = OrderService::make()->after($this->userId, $params)) {
+                $error = OrderService::make()->getError();
+                return showJson($error, false, '', $error == 2206 ? '405' : -1);
+            } else {
+                return showJson(OrderService::make()->getError(), true, $result);
+            }
+        } catch (\Exception $exception) {
+            $error = ['data' => $exception->getTrace(), 'err' => $exception->getMessage()];
+            return showJson(1046, false, $error);
+        }
+    }
 }

+ 91 - 0
app/Services/Api/OrderService.php

@@ -592,6 +592,97 @@ class OrderService extends BaseService
     }
 
     /**
+     * 售后或退款
+     * @param $userId
+     * @param $params
+     * @return array|false
+     */
+    public function after($userId, $params)
+    {
+        $id = isset($params['id'])? $params['id'] : 0;
+        if ($id <= 0) {
+            $this->error = '请选择订单';
+            return false;
+        }
+
+        // 缓存锁
+        $cacheLockKey = "caches:orders:after_lock:{$userId}_{$id}";
+        if (RedisService::get($cacheLockKey)) {
+            $this->error = '订单处理中~';
+            return false;
+        }
+
+        // 商品数据
+        RedisService::set($cacheLockKey, ['params' => $params, 'user_id' => $userId], rand(3, 5));
+
+        // 用户信息
+        $userInfo = MemberModel::where(['id' => $userId, 'mark' => 1])
+            ->select(['id', 'openid', 'mobile', 'nickname', 'realname', 'balance', 'status'])
+            ->first();
+        $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
+        if (empty($userInfo) || $status != 1) {
+            $this->error = 1045;
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        // 订单信息
+        $info = $this->model->where(['id'=> $id,'mark'=>1])
+            ->select(['id','order_no','after_type','refund_status','pay_total','status'])
+            ->first();
+        $orderNo = isset($info['order_no'])? $info['order_no'] : '';
+        $status = isset($info['status'])? $info['status'] : 0;
+        $refundStatus = isset($info['refund_status'])? $info['refund_status'] : 0;
+        if(empty($info) || empty($orderNo)){
+            $this->error = '订单信息不存在';
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        if($status == 1 ){
+            $this->error = '订单未支付';
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        if($status == 4 ){
+            $this->error = '订单已完成';
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        if($refundStatus>0 && $refundStatus != 4){
+            $this->error = '订单售后处理中';
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        $afterType = isset($params['after_type'])? $params['after_type'] : 1;
+        $afterRealname = isset($params['after_realname'])? $params['after_realname'] : '';
+        $afterPhone = isset($params['after_phone'])? $params['after_phone'] : '';
+        $afterRemark = isset($params['after_remark'])? $params['after_remark'] : '';
+        if($afterType == 1){
+            if(empty($afterRealname) || empty($afterPhone) || empty($afterRemark)){
+                $this->error = '请填写售后信息';
+                RedisService::clear($cacheLockKey);
+                return false;
+            }
+        }
+
+        $data = [
+            'after_type'=> $afterType,
+            'after_realname'=> $afterRealname,
+            'after_phone'=> ,
+            'after_remark'=> isset($params['after_remark'])? $params['after_remark'] : '',
+            'refund_remark'=> isset($params['refund_remark'])? $params['refund_remark'] : '',
+            'refund_status'=> 3,
+            'update_time'=>time()
+        ];
+        $this->model->where(['id'=> $id])->update($data);
+        return ['id'=> $id];
+    }
+
+    /**
      * 今日数量统计数据
      * @param $userId
      * @param int $type

+ 2 - 0
routes/api.php

@@ -67,6 +67,8 @@ Route::prefix('v1')->middleware('web.login')->group(function() {
     Route::post('/order/count', [\App\Http\Controllers\Api\v1\OrderController::class, 'count']);
     Route::post('/order/submit', [\App\Http\Controllers\Api\v1\OrderController::class, 'submit']);
     Route::post('/order/pay', [\App\Http\Controllers\Api\v1\OrderController::class, 'pay']);
+    Route::post('/order/complete', [\App\Http\Controllers\Api\v1\OrderController::class, 'complete']);
+    Route::post('/order/after', [\App\Http\Controllers\Api\v1\OrderController::class, 'after']);
     Route::post('/order/cancel', [\App\Http\Controllers\Api\v1\OrderController::class, 'cancel']);
 
     // 购物车