|
@@ -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);
|
|
|
|
|
|
}
|