Lesson.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 售课
  7. */
  8. class Lesson extends Api
  9. {
  10. // 无需登录的接口,*表示全部
  11. protected $noNeedLogin = [];
  12. // 无需鉴权的接口,*表示全部
  13. protected $noNeedRight = ['*'];
  14. //售课列表
  15. public function lists(){
  16. $list = Db::name('lesson')->where('is_show',1)->order('weigh desc')->autopage()->select();
  17. $list = list_domain_image($list,['image']);
  18. $list = $this->list_lang($list,['name','content']);
  19. $this->success(1,$list);
  20. }
  21. //教练列表
  22. public function coach_list(){
  23. $list = Db::name('coach')->field('id,nickname')->where('status',1)->order('nickname asc')->select();
  24. $this->success(1,$list);
  25. }
  26. //课时首页
  27. public function slot_list(){
  28. $date = input('date',date('Y-m-d'),'strtotime');
  29. $lesson_id = input('lesson_id',0);
  30. $coach_id = input('coach_id',0);
  31. $where = [
  32. 'slot.starttime' => ['BETWEEN',[$date,$date+864010]],
  33. ];
  34. if($lesson_id){
  35. $where['slot.lesson_id'] = $lesson_id;
  36. }
  37. //课时
  38. $list = Db::name('lesson_slot')->alias('slot')
  39. ->field('slot.*,lesson.name,lesson.name_en,lesson.image,lesson.price')
  40. ->join('lesson','slot.lesson_id = lesson.id','LEFT')
  41. ->where($where);
  42. if($coach_id){
  43. $list->where('find_in_set(:coach_ids,coach_ids)', ['coach_ids' => $coach_id]);
  44. }
  45. $list = $list->order('slot.starttime asc')->select();
  46. if(empty($list)){
  47. $this->success(1,[]);
  48. }
  49. $list = list_domain_image($list,['image']);
  50. $list = $this->list_lang($list,['name']);
  51. //准备教练数据
  52. $coach_list = Db::name('coach')->column('id,nickname');
  53. foreach($list as $key => &$slot){
  54. //放入教练
  55. $coach_text = '';
  56. $coach_ids = explode(',',$slot['coach_ids']);
  57. foreach($coach_ids as $coach_id){
  58. $coach_text .= $coach_list[$coach_id].',';
  59. }
  60. $slot['coach_text'] = substr($coach_text,0,-1);
  61. //剩余空位数量
  62. $pay_number = Db::name('lesson_order')->where('slot_id',$slot['id'])->where('order_status',10)->sum('usernumber');
  63. $slot['num_remain'] = $slot['num_max'] - $pay_number;
  64. //右上角备注
  65. if(time() >= $slot['starttime']){
  66. $slot['num_remark'] = '报名已截止';
  67. }else{
  68. $slot['num_remark'] = '剩'.$slot['num_remain'].'空位';
  69. }
  70. }
  71. $this->success(1,$list);
  72. }
  73. //课时详情
  74. public function slot_info(){
  75. $slot_id = input('slot_id',0);
  76. //课时
  77. $info = Db::name('lesson_slot')->alias('slot')
  78. ->field('slot.*,lesson.name,lesson.name_en,lesson.image,lesson.price')
  79. ->join('lesson','slot.lesson_id = lesson.id','LEFT')
  80. ->where('slot.id',$slot_id)->find();
  81. if(empty($info)){
  82. $this->error('课程可能已取消,请刷新重试');
  83. }
  84. $info = info_domain_image($info,['image']);
  85. $info = $this->info_lang($info,['name']);
  86. //准备教练数据
  87. $coach_list = Db::name('coach')->where('id','IN',$info['coach_ids'])->column('nickname');
  88. $info['coach_text'] = implode(',',$coach_list);
  89. //剩余空位数量
  90. $pay_number = Db::name('lesson_order')->where('slot_id',$info['id'])->where('order_status',10)->sum('usernumber');
  91. $info['num_remain'] = $info['num_max'] - $pay_number;
  92. $this->success(1,$info);
  93. }
  94. //课时申请报名
  95. public function slot_apply(){
  96. $slot_id = input('slot_id',0);
  97. $number = input('number',1);
  98. $remark = input('remark','');
  99. $data = [];
  100. }
  101. //售课套餐列表
  102. public function package_list(){
  103. $lesson_id = input('lesson_id',0);
  104. //套餐列表
  105. $list = Db::name('lesson_package')->alias('p')
  106. ->field('p.*,e.image')
  107. ->join('lesson e','p.lesson_id = e.id','LEFT')
  108. ->where('p.lesson_id',$lesson_id)
  109. ->where('p.is_show',1)
  110. ->order('p.weigh desc')->select();
  111. $list = list_domain_image($list,['image']);
  112. $list = $this->list_lang($list,['name','validity','activeremark']);
  113. $this->success(1,$list);
  114. }
  115. //售课套餐详情
  116. public function package_info(){
  117. $package_id = input('package_id',0);
  118. //套餐详情
  119. $list = Db::name('lesson_package')->alias('p')
  120. ->field('p.*,e.image')
  121. ->join('lesson e','p.lesson_id = e.id','LEFT')
  122. ->where('p.id',$package_id)
  123. ->order('p.weigh desc')->find();
  124. $list = info_domain_image($list,['image']);
  125. $list = $this->info_lang($list,['name','validity','activeremark']);
  126. $this->success(1,$list);
  127. }
  128. //下单购买售课套餐
  129. public function package_buy(){
  130. $package_id = input('package_id',0);
  131. $package_info = Db::name('lesson_package')->where('id',$package_id)->find();
  132. //套餐
  133. $data = [
  134. 'order_no' => createUniqueNo('P',$this->auth->id),
  135. 'user_id' => $this->auth->id,
  136. 'package_id' => $package_id,
  137. 'lesson_id' => $package_info['lesson_id'],
  138. 'sessions' => $package_info['sessions'],
  139. //'starttime' => ,
  140. 'days' => $package_info['days'],
  141. //'endtime' => ,
  142. 'price' => $package_info['price'],
  143. 'remain' => $package_info['sessions'],
  144. 'order_status'=> 0,
  145. 'paytime' => 0,
  146. 'createtime' => time(),
  147. 'updatetime' => 0,
  148. 'is_gift' => 0,
  149. ];
  150. //如果有赠品
  151. if(!empty($package_info['gift_lesson_id']) && !empty($package_info['gift_sessions'])){
  152. $gift = $data;
  153. //订单号不换了
  154. $gift['lesson_id'] = $package_info['gift_lesson_id'];
  155. $gift['sessions'] = $package_info['gift_sessions'];
  156. $gift['remain'] = $package_info['gift_sessions'];
  157. $gift['is_gift'] = 1;
  158. }
  159. //支付订单下单
  160. $pay_order = [];
  161. $pay_order['user_id'] = $data['user_id'];
  162. $pay_order['out_trade_no'] = $data['order_no'];
  163. $pay_order['order_amount'] = $data['price'];
  164. $pay_order['createtime'] = $data['createtime'];
  165. $pay_order['pay_type'] = 'hitpay';
  166. $pay_order['platform'] = 'app';
  167. $pay_order['order_status'] = 0;
  168. $pay_order['table_name'] = 'package_order';
  169. $pay_order['table_id'] = 0;
  170. $pay_order['args'] = '';
  171. //入库
  172. Db::startTrans();
  173. $order_id = Db::name('package_order')->insertGetId($data);
  174. if(!$order_id){
  175. $this->error('下单失败');
  176. Db::rollback();
  177. }
  178. $gift_order_id = Db::name('package_order')->insertGetId($gift);
  179. if(!$gift_order_id){
  180. $this->error('下单失败');
  181. Db::rollback();
  182. }
  183. $pay_order['table_id'] = $order_id;
  184. $pay_order_id = Db::name('pay_order')->insertGetId($pay_order);
  185. if(!$pay_order_id){
  186. $this->error('下单失败');
  187. Db::rollback();
  188. }
  189. Db::commit();
  190. $this->success(1);
  191. }
  192. }