Spellgroup.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. namespace app\client\controller;
  3. use think\facade\Request;
  4. use app\model\Spellgroup as ModelSpellgroup;
  5. use app\model\SpellgroupJoin;
  6. use app\model\SpellgroupTeam;
  7. class Spellgroup extends Base
  8. {
  9. /*
  10. * 拼团详情
  11. */
  12. public function details()
  13. {
  14. $param = Request::only(['spellgroup_id','team_id','employee_id']);
  15. if(empty($param['employee_id'])) return json(['code'=>1 , 'msg'=>'缺少参数信息']);
  16. $data = ModelSpellgroup::where(['id'=>$param['spellgroup_id'] , 'del'=>0])->field('id,title,cover,start_date,end_date,hour,number,content')->find();
  17. if(empty($data)) return json(['code'=>1 , 'msg'=>'拼团活动已下架']);
  18. $data['end'] = 0;
  19. //已拼单数
  20. $data['success_order'] = SpellgroupTeam::where('spellgroup_id',$param['spellgroup_id'])->whereColumn('join_num','>=','number')->sum('join_num');
  21. //多少人参与拼单
  22. $data['join_order'] = SpellgroupTeam::where('spellgroup_id',$param['spellgroup_id'])->whereColumn('join_num','<','number')->sum('join_num');
  23. //拼团组详情
  24. $data['team'] = [
  25. 'tid' => 0,
  26. 'countdown' => '',
  27. 'headimgurl' => [],
  28. 'number' => $data['number']
  29. ];
  30. //通过业务员端分享过来
  31. if(empty($param['team_id']))
  32. {
  33. //是否参与过拼团
  34. $token = request()->token;
  35. $isJoin = SpellgroupJoin::where(['join_uid'=>$token['uid'] , 'spellgroup_id'=>$param['spellgroup_id']])->find();
  36. if(!empty($isJoin)){
  37. $team = SpellgroupTeam::where(['id'=>$isJoin['team_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->find();
  38. $headimgurl = SpellgroupJoin::with(['user'])->where(['team_id'=>$isJoin['team_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->field('join_uid')->select();
  39. $data['team'] = [
  40. 'tid' => $isJoin['team_id'],
  41. 'countdown' => $this->countdown($team['open_time'] , $data['hour']),
  42. 'headimgurl' => $headimgurl,
  43. 'number' => $team['join_num'] >= $team['number'] ? 0 : $team['number']-$team['join_num'],
  44. ];
  45. $data['team']['countdown'] == 0 ? $data['end'] = 2 : '' ;
  46. $data['team']['number'] == 0 ? $data['end'] = 3 : '' ;
  47. }
  48. }else{
  49. $team = SpellgroupTeam::where(['id'=>$param['team_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->find();
  50. $headimgurl = SpellgroupJoin::with(['user'])->where(['team_id'=>$team['id'] , 'spellgroup_id'=>$param['spellgroup_id']])->field('join_uid')->select();
  51. $data['team'] = [
  52. 'tid' => $team['id'],
  53. 'countdown' => $this->countdown($team['open_time'] , $data['hour']),
  54. 'headimgurl' => $headimgurl,
  55. 'number' => $team['join_num'] >= $team['number'] ? 0 : $team['number']-$team['join_num'],
  56. ];
  57. $data['team']['countdown'] == 0 ? $data['end'] = 2 : '' ;
  58. $data['team']['number'] == 0 ? $data['end'] = 3 : '' ;
  59. }
  60. //是否参与该拼团
  61. $token = request()->token;
  62. $userIsJoin = SpellgroupJoin::where(['join_uid'=>$token['uid'] , 'spellgroup_id'=>$param['spellgroup_id']])->count();
  63. $userIsJoin > 0 ? $data['end'] = 4 : '' ;
  64. //拼团活动是否结束
  65. if($data['end_date'] < date('Y-m-d')) $data['end'] = 1;
  66. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  67. }
  68. /*
  69. * 拼团列表
  70. */
  71. public function team_list()
  72. {
  73. $param = Request::only(['spellgroup_id','page']);
  74. $group = ModelSpellgroup::where('id',$param['spellgroup_id'])->field('hour')->find();
  75. $data = SpellgroupTeam::where([['spellgroup_id','=',$param['spellgroup_id']]])->whereColumn('join_num','<','number')
  76. ->field('id,employee_id,spellgroup_id,open_time,number,join_num')
  77. ->order(['open_time'=>'desc'])
  78. ->page($param['page'] , 15)
  79. ->select()
  80. ->toArray();
  81. foreach ($data as &$item) {
  82. //是否结束
  83. $item['countdown'] = $this->countdown($item['open_time'] , $group['hour']);
  84. //相差人数
  85. $item['lack_number'] = $item['number'] - $item['join_num'];
  86. //展示头像
  87. $item['userinfo'] = SpellgroupJoin::with(['user'])->where('team_id',$item['id'])->field('join_uid')->order('addtime')->find();
  88. }
  89. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  90. }
  91. /*
  92. * 参与拼团
  93. */
  94. public function join()
  95. {
  96. $param = Request::only(['spellgroup_id','employee_id','team_id','phone']);
  97. //拼团信息
  98. $group = ModelSpellgroup::where(['id'=>$param['spellgroup_id'] , 'del'=>0])->whereTime('end_date','>=',date('Y-m-d'))->find();
  99. if(empty($group)) return json(['code'=>1 , 'msg'=>'拼团活动已下架']);
  100. $token = request()->token;
  101. $count = SpellgroupJoin::where(['join_uid'=>$token['uid'] , 'spellgroup_id'=>$group['spellgroup_id']])->count();
  102. if($count>0) return json(['code'=>2 , 'msg'=>'您已参加过该拼团']);
  103. //拼团
  104. if(!empty($param['team_id']))
  105. {
  106. $team = SpellgroupTeam::where(['id'=>$param['team_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->find();
  107. if($team['join_num'] >= $team['number']) return json(['code'=>3 , 'msg'=>'拼团人数已满']);
  108. if(strtotime('+'.$group['hour'].'hour',strtotime($team['open_time'])) < time()) return json(['code'=>4 , 'msg'=>'拼团时限已结束']);
  109. SpellgroupTeam::where(['id'=>$param['team_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->inc('join_num')->update();
  110. $addJoinUid = [
  111. 'join_uid' => $token['uid'],
  112. 'phone' => $param['phone'],
  113. 'spellgroup_id' => $group['id'],
  114. 'employee_id' => $param['employee_id'],
  115. 'team_id' => $param['team_id']
  116. ];
  117. SpellgroupJoin::insert($addJoinUid);
  118. }else{
  119. $addTeam = [
  120. 'employee_id' => $param['employee_id'],
  121. 'spellgroup_id' => $param['spellgroup_id'],
  122. 'open_time' => date('Y-m-d h:i:s'),
  123. 'join_num' => 1,
  124. 'number' => $group['number']
  125. ];
  126. $param['team_id'] = SpellgroupTeam::insertGetId($addTeam);
  127. $addJoinUid = [
  128. 'join_uid' => $token['uid'],
  129. 'phone' => $param['phone'],
  130. 'spellgroup_id' => $group['id'],
  131. 'employee_id' => $param['employee_id'],
  132. 'team_id' => $param['team_id']
  133. ];
  134. SpellgroupJoin::insert($addJoinUid);
  135. }
  136. return json(['code'=>0 , 'msg'=>'拼团成功' , 'team_id'=>$param['team_id']]);
  137. }
  138. /*
  139. * 拼团剩余倒计时
  140. */
  141. private function countdown($open_time , $hour)
  142. {
  143. $start_time = time();
  144. $end_time = strtotime('+'.$hour.'hour',strtotime($open_time));
  145. $t = $end_time - $start_time;
  146. if($end_time <= $start_time){
  147. return 0;
  148. }
  149. if($t <= 60){
  150. return $t;
  151. }else if($t <= 3600){
  152. $i = intval(floor($t/60));
  153. $s = $t%60;
  154. return $i.':'.$s;
  155. }else if($t > 3600){
  156. $h = floor($t/3600);
  157. $i = floor(($t-3600 * $h)/60);
  158. $s = floor($t-($h*3600+$i*60));
  159. return $h.':'.$i.':'.$s;
  160. }
  161. }
  162. }