Pārlūkot izejas kodu

课时详情是否有可用套餐,课时申请报名

lizhen_gitee 1 gadu atpakaļ
vecāks
revīzija
aba8fb2bd3
1 mainītis faili ar 158 papildinājumiem un 9 dzēšanām
  1. 158 9
      application/api/controller/Lesson.php

+ 158 - 9
application/api/controller/Lesson.php

@@ -110,16 +110,158 @@ class Lesson extends Api
         $pay_number = Db::name('lesson_order')->where('slot_id',$info['id'])->where('order_status',10)->sum('usernumber');
         $info['num_remain'] = $info['num_max'] - $pay_number;
 
+        //此课程是否还有未使用的套餐(多个包含赠送的)
+        $map = [
+            'o.user_id' =>$this->auth->id,
+            'o.lesson_id' => $info['lesson_id'],
+            'o.endtime' => ['gt',time()],
+            'o.remain' => ['gt',0],
+            'o.order_status' => 1,
+        ];
+        $package_list = Db::name('package_order')->alias('o')
+            ->join('lesson_package p','o.package_id = p.id','LEFT')
+            ->field('o.id,o.remain,o.starttime,o.endtime,o.is_gift,p.name,p.name_en')
+            ->where($map)->order('o.endtime asc')->select();
+        $package_list = $this->list_lang($package_list,['name']);
+        $info['package_list'] = $package_list;
+
+
         $this->success(1,$info);
     }
 
     //课时申请报名
     public function slot_apply(){
         $slot_id = input('slot_id',0);
-        $number  = input('number',1);
-        $remark  = input('remark','');
+        $number  = input('number',1,'intval');
+        $remark  = input('remark','','trim');
+        $paytype = input('paytype',1,'intval');//支付类型:1=课程套餐,2=线上付款,3=购买套餐中
+        $packageorder_id = input('packageorder_id',0);
+
+        //课时
+        $info = Db::name('lesson_slot')->alias('slot')
+            ->field('slot.*,lesson.name,lesson.name_en,lesson.image,lesson.price')
+            ->join('lesson','slot.lesson_id = lesson.id','LEFT')
+            ->where('slot.id',$slot_id)->find();
+        if(empty($info)){
+            $this->error('课程可能已取消,请刷新重试');
+        }
+        if($info['endtime'] < time()){
+            $this->error('课程已经结束了,不能再进行预约');
+        }
+
+        $lesson_order = [
+            'order_no' => createUniqueNo('S',$this->auth->id),
+            'user_id' => $this->auth->id,
+            'slot_id' => $slot_id,
+            'lesson_id' => $info['lesson_id'],
+            'order_amount' => bcmul($info['price'],$number,2),
+            'order_status' => 0,
+            'paytype' => $paytype, //支付类型:1=课程套餐,2=线上付款,3=购买套餐中
+            'paytime' => 0,
+            'createtime' => time(),
+//            'updatetime' => ,
+//            'finishtime' => ,
+            'usernumber' => $number,
+            'userremark' => $remark,
+            'package_order_id' => 0,//好像多余了
+            'package_remark' => '',//  比如:5/30,5-7/30
+        ];
+
+        //
+        Db::startTrans();
+        if($paytype == 1){
+            //检查已选择套餐
+            $map = [
+                'user_id' =>$this->auth->id,
+                'lesson_id' => $info['lesson_id'],
+                'endtime' => ['gt',time()],
+                'remain' => ['gt',0],
+                'order_status' => 1,
+                'id' => $packageorder_id,
+            ];
+            $package_order = Db::name('package_order')->where($map)->lock(true)->find();
+            if(!$package_order){
+                Db::rollback();
+                $this->error('套餐信息不正确,请刷新重试');
+            }
+
+            //课时不足支撑报名人数
+            if($package_order['remain'] < $number){
+                Db::rollback();
+                $this->error('该套餐余额不足,可以使用其他支付方式');
+            }
+
+            //扣除一节
+            $update = [
+                'remain'     => $package_order['remain']-$number,
+                'updatetime' => time(),
+            ];
+            $rs1 = Db::name('package_order')->where('id',$packageorder_id)->update($update);
+            if($rs1 === false){
+                Db::rollback();
+                $this->error('扣除套餐余额失败');
+            }
+
+            //修改预约单数据
+            $lesson_order['order_status'] = 10;
+            $lesson_order['paytime'] = time();
+            $lesson_order['package_order_id'] = $packageorder_id;
+            $lesson_order['package_remark'] = $package_order['remain']+1 . '-' . $package_order['remain']+$number .'/'. $package_order['sessions'];
+
+            //预约单写入
+            $lesson_order_id = Db::name('lesson_order')->insertGetId($lesson_order);
+            if(!$lesson_order_id){
+                Db::rollback();
+                $this->error('预约失败');
+            }
+
+            Db::commit();
+            $this->success('预约成功');
+        }
+        elseif($paytype == 2)
+        {
+            //预约单写入
+            $lesson_order_id = Db::name('lesson_order')->insertGetId($lesson_order);
+            if(!$lesson_order_id){
+                Db::rollback();
+                $this->error('预约失败');
+            }
 
-        $data = [];
+            //支付订单下单
+            $pay_order = [];
+            $pay_order['user_id'] = $lesson_order['user_id'];
+            $pay_order['out_trade_no'] = $lesson_order['order_no'];
+            $pay_order['order_amount'] = $lesson_order['order_amount'];
+            $pay_order['createtime'] = $lesson_order['createtime'];
+
+            $pay_order['pay_type'] = 'hitpay';
+            $pay_order['platform'] = 'app';
+            $pay_order['order_status'] = 0;
+            $pay_order['table_name'] = 'lesson_order';
+            $pay_order['table_id'] = $lesson_order_id;
+            $pay_order['args'] = '';
+
+            $pay_order_id = Db::name('pay_order')->insertGetId($pay_order);
+            if(!$pay_order_id){
+                Db::rollback();
+                $this->error('下单失败');
+            }
+
+            Db::commit();
+
+            //拉起支付
+
+            $this->success(1);
+        }
+        elseif($paytype == 3)
+        {
+            //预约单写入
+            $lesson_order_id = Db::name('lesson_order')->insertGetId($lesson_order);
+            if(!$lesson_order_id){
+                Db::rollback();
+                $this->error('预约失败');
+            }
+        }
     }
 
     //售课套餐列表
@@ -181,6 +323,7 @@ class Lesson extends Api
         ];
 
         //如果有赠品
+        $gift = [];
         if(!empty($package_info['gift_lesson_id']) && !empty($package_info['gift_sessions'])){
             $gift = $data;
 
@@ -209,25 +352,31 @@ class Lesson extends Api
         Db::startTrans();
         $order_id = Db::name('package_order')->insertGetId($data);
         if(!$order_id){
-            $this->error('下单失败');
             Db::rollback();
+            $this->error('下单失败');
         }
 
-        $gift_order_id = Db::name('package_order')->insertGetId($gift);
-        if(!$gift_order_id){
-            $this->error('下单失败');
-            Db::rollback();
+        //礼物
+        if(!empty($gift)){
+            $gift_order_id = Db::name('package_order')->insertGetId($gift);
+            if(!$gift_order_id){
+                Db::rollback();
+                $this->error('下单失败');
+            }
         }
 
+        //支付单
         $pay_order['table_id'] = $order_id;
         $pay_order_id = Db::name('pay_order')->insertGetId($pay_order);
         if(!$pay_order_id){
-            $this->error('下单失败');
             Db::rollback();
+            $this->error('下单失败');
         }
 
         Db::commit();
 
+        //拉起支付
+
         $this->success(1);
 
     }