123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use think\Db;
- /**
- * 售课
- */
- class Lesson extends Api
- {
- // 无需登录的接口,*表示全部
- protected $noNeedLogin = [];
- // 无需鉴权的接口,*表示全部
- protected $noNeedRight = ['*'];
- //售课列表
- public function lists(){
- $list = Db::name('lesson')->where('is_show',1)->order('weigh desc')->autopage()->select();
- $list = list_domain_image($list,['image']);
- $list = $this->list_lang($list,['name','content']);
- $this->success(1,$list);
- }
- //教练列表
- public function coach_list(){
- $list = Db::name('coach')->field('id,nickname')->where('status',1)->order('nickname asc')->select();
- $this->success(1,$list);
- }
- //课时首页
- public function slot_list(){
- $date = input('date',date('Y-m-d'),'strtotime');
- $lesson_id = input('lesson_id',0);
- $coach_id = input('coach_id',0);
- $where = [
- 'slot.starttime' => ['BETWEEN',[$date,$date+864010]],
- ];
- if($lesson_id){
- $where['slot.lesson_id'] = $lesson_id;
- }
- //课时
- $list = 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($where);
- if($coach_id){
- $list->where('find_in_set(:coach_ids,coach_ids)', ['coach_ids' => $coach_id]);
- }
- $list = $list->order('slot.starttime asc')->select();
- if(empty($list)){
- $this->success(1,[]);
- }
- $list = list_domain_image($list,['image']);
- $list = $this->list_lang($list,['name']);
- //准备教练数据
- $coach_list = Db::name('coach')->column('id,nickname');
- foreach($list as $key => &$slot){
- //放入教练
- $coach_text = '';
- $coach_ids = explode(',',$slot['coach_ids']);
- foreach($coach_ids as $coach_id){
- $coach_text .= $coach_list[$coach_id].',';
- }
- $slot['coach_text'] = substr($coach_text,0,-1);
- //剩余空位数量
- $pay_number = Db::name('lesson_order')->where('slot_id',$slot['id'])->where('order_status',10)->sum('usernumber');
- $slot['num_remain'] = $slot['num_max'] - $pay_number;
- //右上角备注
- if(time() >= $slot['starttime']){
- $slot['num_remark'] = '报名已截止';
- }else{
- $slot['num_remark'] = '剩'.$slot['num_remain'].'空位';
- }
- }
- $this->success(1,$list);
- }
- //课时详情
- public function slot_info(){
- $slot_id = input('slot_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('课程可能已取消,请刷新重试');
- }
- $info = info_domain_image($info,['image']);
- $info = $this->info_lang($info,['name']);
- //准备教练数据
- $coach_list = Db::name('coach')->where('id','IN',$info['coach_ids'])->column('nickname');
- $info['coach_text'] = implode(',',$coach_list);
- //剩余空位数量
- $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;
- $this->success(1,$info);
- }
- //课时申请报名
- public function slot_apply(){
- $slot_id = input('slot_id',0);
- $number = input('number',1);
- $remark = input('remark','');
- $data = [];
- }
- //售课套餐列表
- public function package_list(){
- $lesson_id = input('lesson_id',0);
- //套餐列表
- $list = Db::name('lesson_package')->alias('p')
- ->field('p.*,e.image')
- ->join('lesson e','p.lesson_id = e.id','LEFT')
- ->where('p.lesson_id',$lesson_id)
- ->where('p.is_show',1)
- ->order('p.weigh desc')->select();
- $list = list_domain_image($list,['image']);
- $list = $this->list_lang($list,['name','validity','activeremark']);
- $this->success(1,$list);
- }
- //售课套餐详情
- public function package_info(){
- $package_id = input('package_id',0);
- //套餐详情
- $list = Db::name('lesson_package')->alias('p')
- ->field('p.*,e.image')
- ->join('lesson e','p.lesson_id = e.id','LEFT')
- ->where('p.id',$package_id)
- ->order('p.weigh desc')->find();
- $list = info_domain_image($list,['image']);
- $list = $this->info_lang($list,['name','validity','activeremark']);
- $this->success(1,$list);
- }
- //下单购买售课套餐
- public function package_buy(){
- $package_id = input('package_id',0);
- $package_info = Db::name('lesson_package')->where('id',$package_id)->find();
- //套餐
- $data = [
- 'order_no' => createUniqueNo('P',$this->auth->id),
- 'user_id' => $this->auth->id,
- 'package_id' => $package_id,
- 'lesson_id' => $package_info['lesson_id'],
- 'sessions' => $package_info['sessions'],
- //'starttime' => ,
- 'days' => $package_info['days'],
- //'endtime' => ,
- 'price' => $package_info['price'],
- 'remain' => $package_info['sessions'],
- 'order_status'=> 0,
- 'paytime' => 0,
- 'createtime' => time(),
- 'updatetime' => 0,
- 'is_gift' => 0,
- ];
- //如果有赠品
- if(!empty($package_info['gift_lesson_id']) && !empty($package_info['gift_sessions'])){
- $gift = $data;
- //订单号不换了
- $gift['lesson_id'] = $package_info['gift_lesson_id'];
- $gift['sessions'] = $package_info['gift_sessions'];
- $gift['remain'] = $package_info['gift_sessions'];
- $gift['is_gift'] = 1;
- }
- //支付订单下单
- $pay_order = [];
- $pay_order['user_id'] = $data['user_id'];
- $pay_order['out_trade_no'] = $data['order_no'];
- $pay_order['order_amount'] = $data['price'];
- $pay_order['createtime'] = $data['createtime'];
- $pay_order['pay_type'] = 'hitpay';
- $pay_order['platform'] = 'app';
- $pay_order['order_status'] = 0;
- $pay_order['table_name'] = 'package_order';
- $pay_order['table_id'] = 0;
- $pay_order['args'] = '';
- //入库
- Db::startTrans();
- $order_id = Db::name('package_order')->insertGetId($data);
- if(!$order_id){
- $this->error('下单失败');
- Db::rollback();
- }
- $gift_order_id = Db::name('package_order')->insertGetId($gift);
- if(!$gift_order_id){
- $this->error('下单失败');
- Db::rollback();
- }
- $pay_order['table_id'] = $order_id;
- $pay_order_id = Db::name('pay_order')->insertGetId($pay_order);
- if(!$pay_order_id){
- $this->error('下单失败');
- Db::rollback();
- }
- Db::commit();
- $this->success(1);
- }
- }
|