Просмотр исходного кода

wesmiler 报恩寺项目提交

wesmiler 4 лет назад
Родитель
Сommit
1e7b2ddc06

+ 2 - 2
app/Http/Controllers/Api/v1/ActivityController.php

@@ -45,8 +45,8 @@ class ActivityController extends BaseController
      * @param ActivityValidator $validate
      * @return array
      */
-    public function books(Request $request, ActivityValidator $validate){
-        $params = $validate->check($request->all(),'books');
+    public function books(Request $request, ActivityValidator $validator){
+        $params = $validator->check($request->all(),'books');
         if(!is_array($params)){
             return message($params, false);
         }

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

@@ -3,12 +3,15 @@
 namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\BaseController;
+use App\Http\Validator\OrderValidator;
 use App\Services\GongdengFoxiangService;
 use App\Services\GongdengOrderService;
 use App\Services\LampMealsService;
+use App\Services\OrdersService;
 use App\Services\RechargeService;
 use App\Services\RedisService;
 use App\Services\WechatService;
+use Illuminate\Http\Request;
 
 /**
  * 订单控制器类
@@ -30,6 +33,21 @@ class OrderController extends BaseController
         parent::__construct();
         $this->service = new GongdengOrderService();
         $this->rechargeService = new RechargeService();
+        $this->shopService = new OrdersService();
     }
 
+    /**
+     * 商城兑换订单创建
+     * @param Request $request
+     * @param OrderValidator $validator
+     * @return array
+     */
+    public function exchange(Request $request, OrderValidator $validator){
+        $params = $validator->check($request->all(),'books');
+        if(!is_array($params)){
+            return message($params, false);
+        }
+
+        return $this->shopService->exchange($this->userId);
+    }
 }

+ 45 - 0
app/Http/Validator/OrderValidator.php

@@ -0,0 +1,45 @@
+<?php
+namespace App\Http\Validator;
+class OrderValidator extends BaseValidator
+{
+    // 当前模型所有验证规则
+    public static $rules = [
+        'id' => 'required',
+        'num' => 'required|string|min:1|max:100',
+        'remark' => 'nullable|string|min:2|max:150',
+    ];
+
+    // 当前模型所有错误提示信息
+    public static $msgs = [
+        'required' => ':attribute不能为空',
+        'string' => ':attribute必须是字符串',
+        'min' => ':attribute长度不能小于:min位',
+        'max' => ':attribute长度不能大于:max位',
+        'exists' => ':attribute不存在',
+        'rule' => ':attribute格式不正确',
+    ];
+
+    // 当前模型所有验证字段
+    public static $fields = [
+        'id' => '商品ID',
+        'num' => '购买数量',
+        'remark' => '备注内容',
+    ];
+
+    // 当前模型所有验证场景
+    public static $scenes = [
+        'info'=> ['id'],
+        'buy'=> ['id','num','remark'],
+    ];
+
+    /**
+     * 验证
+     * @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 - 2
app/Services/GoodsService.php

@@ -128,7 +128,7 @@ class GoodsService extends BaseService
                 }
 
             })
-            ->select(['g.id', 'g.cate_id', 'c.name as cate_name', 'g.title', 'g.stock', 'g.price', 'g.specs', 'g.thumb', 'g.status', 'g.create_time', 'g.description', 'g.view_num','g.is_recommand'])
+            ->select(['g.id', 'g.cate_id', 'c.name as cate_name', 'g.title', 'g.stock','g.score', 'g.price', 'g.specs', 'g.thumb', 'g.status', 'g.create_time', 'g.description', 'g.view_num','g.is_recommand'])
             ->orderBy('g.create_time', 'desc')
             ->paginate($pageSize);
 
@@ -162,7 +162,7 @@ class GoodsService extends BaseService
         $info = $this->model::from('goods as g')
             ->leftJoin('goods_cates as c', 'g.cate_id', '=', 'c.id')
             ->where(['g.id'=> $id,'g.mark'=> 1,'g.status'=> 1])
-            ->select(['g.id', 'g.cate_id', 'c.name as cate_name', 'g.title', 'g.stock', 'g.price', 'g.specs', 'g.thumb', 'g.status', 'g.create_time', 'g.description', 'g.view_num','g.is_recommand','g.content'])
+            ->select(['g.id', 'g.cate_id', 'c.name as cate_name', 'g.title', 'g.stock','g.score', 'g.price', 'g.specs', 'g.thumb', 'g.status', 'g.create_time', 'g.description', 'g.view_num','g.is_recommand','g.content'])
             ->first();
         $info = $info? $info->toArray() : [];
         if($info){

+ 3 - 3
app/Services/MemberService.php

@@ -741,16 +741,16 @@ class MemberService extends BaseService
             ->where($where)
             ->where(function($query) use($type){
                 if($type==1){
-                    $query->where('ms.type',1);
+                    $query->where('ms.type',1)->where(['ms.mark'=> 1,'ms.status'=> 1]);
                 }else if($type == 2){
-                    $query->whereNotIn('ms.type',[1]);
+                    $query->whereNotIn('ms.type',[1])->where(['ms.mark'=> 1,'ms.status'=> 1]);
                 }
             })
             ->whereNotIn('m.id', [$userId])
             ->whereNotIn('m.id',function($query) use ($userId){
                 $query->from('member_follow')->where(['user_id'=> $userId])->select(['follow_uid']);
             })
-            ->select(['m.id', 'm.avatar','m.nickname','ms.realname as master_name','ms.type as master_type','m.gender','m.status','m.create_time'])
+            ->select(['m.id', 'm.avatar','m.nickname','ms.realname as master_name','ms.type as mtype','m.gender','m.status','m.create_time'])
             ->orderBy('mf.create_time', 'asc')
             ->paginate($pageSize);
 

+ 110 - 0
app/Services/OrdersService.php

@@ -11,6 +11,7 @@
 
 namespace App\Services;
 
+use App\Models\GoodsModel;
 use App\Models\OrdersModel;
 
 /**
@@ -146,4 +147,113 @@ class OrdersService extends BaseService
         return parent::edit($data); // TODO: Change the autogenerated stub
     }
 
+    /**
+     * 积分商品兑换
+     */
+    public function buy($userId)
+    {
+        $params = request()->all();
+        // 验证佛像信息
+        $fid = isset($params['fid']) ? $params['fid'] : 0;
+        $info = GoodsModel::where(['id' => $fid, 'status' => 1, 'mark' => 1])
+            ->select(['id', 'title'])
+            ->first();
+        if (!$info || $fid <= 0) {
+            return message('商品信息不存在', false);
+        }
+
+        $payType = isset($params['payType']) ? $params['payType'] : 0;
+        if (!in_array($payType, [1])) {
+            return message('支付方式暂不支持', false);
+        }
+
+        // 套餐信息
+        $mid = isset($params['mid']) ? $params['mid'] : 0;
+        $mealInfo = LampMealsModel::where(['id' => $mid, 'status' => 1, 'mark' => 1])
+            ->select(['id', 'name', 'price', 'num'])
+            ->first();
+        if (!$mealInfo) {
+            return message('供灯套餐不存在或已下架', false);
+        }
+
+        // 验证用户是否已授权
+        $memberInfo = MemberModel::where(['id' => $userId, 'mark' => 1, 'status' => 1])
+            ->select('id', 'openid', 'nickname')
+            ->first();
+        $openid = isset($memberInfo['openid']) ? trim($memberInfo['openid']) : '';
+        if (!$memberInfo) {
+            return message('账号已被冻结,请联系客服', false);
+        }
+
+        if (empty($openid)) {
+            return message('账号获取授权参数失败,请退出重试', false);
+        }
+
+        // 验证是否供灯过
+        $buyType = 1;
+        $gdCheckData = GongdengOrderModel::where(['source_id' => $fid, 'user_id' => $userId,'lamp_status'=> 2, 'status' => 2, 'mark' => 1])
+            ->where('expire_time', '>=', time())
+            ->select(['id', 'source_id', 'user_id','device_num', 'expire_time', 'params'])
+            ->first();
+
+        // 续费
+        if ($gdCheckData && $gdCheckData->id) {
+            $buyType = 2;
+        }
+
+        // 创建订单
+        $expireTime = ($mealInfo->num * 24 * 3600) + time();
+        $data = [
+            'source_id' => $fid,
+            'user_id' => $userId,
+            'pay_type' => $payType,
+            'buy_type' => $buyType,
+            'order_sn' => get_order_num('G'),
+            'num' => 1,
+            'price' => $mealInfo->price,
+            'total' => $mealInfo->price,
+            'sf_name' => isset($params['sf_name']) ? trim($params['sf_name']) : '',
+            'qf_content' => isset($params['qf_content']) ? trim($params['qf_content']) : '',
+            'is_hide' => isset($params['is_hide']) ? intval($params['is_hide']) : 0,
+            'expire_time' => $expireTime,
+            'create_time' => time(),
+            'status' => 1,
+        ];
+
+        if($gdCheckData){
+            $data['device_num'] = $gdCheckData->device_num;
+            $data['params'] = $gdCheckData->params;
+        }
+
+        // 订单
+        if (!$oid = GongdengOrderModel::insertGetId($data)) {
+            return message('供灯订单创建失败', false);
+        }
+
+
+        // 支付参数
+        switch ($payType) {
+            case 1: // 微信支付
+                $order = [
+                    'openid' => $openid,
+                    'orderNo' => $data['order_sn'],
+                    'amount' => $data['total'],
+                    'body' => '供灯订单支付',
+                ];
+
+                $jsapiParams = WechatService::jsapiUnifiedorder($order);
+                $code = isset($jsapiParams['code']) ? $jsapiParams['code'] : '';
+                if ($code == 'error' || empty($jsapiParams)) {
+                    $message = isset($jsapiParams['message']) && $jsapiParams['message'] ? $jsapiParams['message'] : '订单支付处理失败';
+                    return message($message, false);
+                }
+                return message('订单创建成功', true, ['id' => $oid, 'params' => $jsapiParams]);
+                break;
+            default:
+                break;
+        }
+
+        return message('支付处理失败', false);
+    }
+
 }

BIN
public/uploads/img/qrcode/U_11770EE25BB6370D6FB7581C7F683E33.png


+ 3 - 1
routes/api.php

@@ -136,4 +136,6 @@ Route::post('/goods/cates', [\App\Http\Controllers\Api\v1\GoodsController::class
 Route::post('/goods/info', [\App\Http\Controllers\Api\v1\GoodsController::class, 'info']);
 
 // 商城订单
-Route::post('/orders/list', [\App\Http\Controllers\Api\v1\OrderController::class, 'index']);
+Route::post('/orders/list', [\App\Http\Controllers\Api\v1\OrderController::class, 'index']);
+Route::post('/orders/buy', [\App\Http\Controllers\Api\v1\OrderController::class, 'buy']);
+Route::post('/orders/exchange', [\App\Http\Controllers\Api\v1\OrderController::class, 'buy']);