소스 검색

用户取消订单,候补上位

lizhen_gitee 8 달 전
부모
커밋
92b75d7e2c
1개의 변경된 파일68개의 추가작업 그리고 0개의 파일을 삭제
  1. 68 0
      application/api/controller/Usercenter.php

+ 68 - 0
application/api/controller/Usercenter.php

@@ -268,6 +268,8 @@ class Usercenter extends Api
             $this->error('取消失败');
         }
 
+        $wait_rs = $this->lesson_order_wait($lesson_order,$slot);
+
         //更新已预约人数
         $pay_number = Db::name('lesson_order')->where('slot_id',$lesson_order['slot_id'])->where('order_status',10)->sum('usernumber');
         $rs_slot = Db::name('lesson_slot')->where('id',$lesson_order['slot_id'])->update(['bookednum' => $pay_number]);
@@ -281,6 +283,72 @@ class Usercenter extends Api
 
     }
 
+    //候补上位
+    private function lesson_order_wait($lesson_order,$slot){
+        //找到所有的候补单
+        $houbu_list = Db::name('lesson_order')->where('slot_id',$lesson_order['slot_id'])->where('jointype',2)->order('id asc')->select();
+        if(!empty($houbu_list)){
+
+            $up_usernumber = 0; //此次循环转正的人数
+
+            foreach($houbu_list as $key => $order){
+                if($order['usernumber'] + $up_usernumber <= $lesson_order['usernumber']){
+                    //此订单可以转正
+
+                    //检查可用的套餐,找一个就可以
+                    $map = [
+                        'user_id' => $order['user_id'],
+
+                        'endtime' => ['gt',time()],
+                        'remain' => ['gt',$order['usernumber_hours']],
+                        'order_status' => 1,
+                        'use_status'   => 1, //已激活的
+                    ];
+                    $package_order = Db::name('package_order')->where($map)->where('find_in_set(:lesson_ids,lesson_ids)', ['lesson_ids' => $slot['lesson_id']])->order('endtime asc')->find();
+                    if(!$package_order){
+                        continue;
+                    }
+
+                    //扣除一节。
+                    $update = [
+                        'remain'     => bcsub($package_order['remain'],$order['usernumber_hours'],1),
+                        'updatetime' => time(),
+                    ];
+                    $rs1 = Db::name('package_order')->where('id',$package_order['id'])->update($update);
+                    if($rs1 === false){
+                        Db::rollback();
+//                        $this->error('扣除套餐余额失败');
+                        $this->error('取消失败');
+                    }
+
+                    //修改预约单数据。延迟到转正的时候处理
+                    $lesson_order['order_amount'] = 0;
+                    $lesson_order['order_status'] = 10;
+                    $lesson_order['paytime'] = time();
+                    $lesson_order['package_order_id'] = $package_order['id'];
+
+                    $lesson_order['package_remark'] = ($package_order['sessions'] - $package_order['remain']) . '-' . ($package_order['sessions'] - $package_order['remain'] + $order['usernumber_hours']) .'/'. $package_order['sessions'];
+                    $lesson_order['paytype']  = 1; //修改支付方式为配套
+                    $lesson_order['jointype'] = 1; //修改加入方式为预约
+
+                    $rs2 = Db::name('lesson_order')->where('id',$order['id'])->update($lesson_order);
+                    if($rs2 === false){
+                        Db::rollback();
+//                        $this->error('扣除套餐余额失败');
+                        $this->error('取消失败');
+
+                    }
+
+                    //加上本次转正的人数
+                    $up_usernumber += $order['usernumber'];
+                }else{
+                    break;//跳出
+                }
+            }
+        }
+        return true;
+    }
+
     //过期课程。就是过了上课时间,没签到的
     public function lesson_order_signout(){
         $map = [