Spellgroup.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. <?php
  2. namespace app\api\controller;
  3. use think\facade\Request;
  4. use app\model\Spellgroup as ModelSpellgroup;
  5. use app\model\SpellgroupJoin;
  6. use app\model\SpellgroupTeam;
  7. use think\facade\Db;
  8. use app\event\Msg;
  9. use app\event\FootPrints;
  10. class Spellgroup extends Base
  11. {
  12. /*
  13. * 拼团列表
  14. */
  15. public function list()
  16. {
  17. $param = Request::only(['page']);
  18. $data = ModelSpellgroup::where([['del','=',0 ], ['publish','=',1], ['start_date','<=',date('Y-m-d')], ['end_date','>=',date('Y-m-d')]])->whereOr([['end_date','<',date('Y-m-d')]])
  19. ->field('id , cover , title , number, hour, start_date , end_date, end_date as timestate')
  20. ->order(['start_date'=>'asc'])
  21. ->page($param['page'] , 6)
  22. ->select();
  23. foreach ($data as &$item) {
  24. //是否结束
  25. if ($item['timestate'] < date('Y-m-d')) {
  26. $item['timestate'] = false;
  27. } else {
  28. $item['timestate'] = true;
  29. }
  30. }
  31. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  32. }
  33. /*
  34. * 拼团预览
  35. */
  36. public function details($spellgroup_id)
  37. {
  38. $data = ModelSpellgroup::where([['del','=',0 ], ['publish','=',1], ['id','=',$spellgroup_id]])->field('id , cover , title , number, hour, start_date , end_date , content')->find();
  39. //已拼单数
  40. $data['success_order'] = SpellgroupTeam::where('spellgroup_id',$spellgroup_id)->whereColumn('join_num','>=','number')->sum('join_num');
  41. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  42. }
  43. /*
  44. * 拼团用户列表
  45. */
  46. public function join_user_list()
  47. {
  48. $param = Request::only(['spellgroup_id' , 'page' , 'team_id']);
  49. $where = [
  50. 'employee_id' => $this->request->token['employee_id'],
  51. 'spellgroup_id' => $param['spellgroup_id'],
  52. ];
  53. if(isset($param['team_id'])) $where['team_id'] = $param['team_id'];
  54. $data = SpellgroupJoin::with(['user'])->where($where)->field('id,join_uid,addtime,status,phone')->page($param['page'] , 15)->select();
  55. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  56. }
  57. /*
  58. * 拼团团队列表
  59. */
  60. public function join_team_list()
  61. {
  62. $param = Request::only(['spellgroup_id', 'page']);
  63. $data = SpellgroupTeam::with(['spellgroup'])->where(['employee_id'=>$this->request->token['employee_id'] , 'spellgroup_id'=>$param['spellgroup_id']])->field('id,spellgroup_id,open_time,number')->page($param['page'] , 15)->select()->toArray();
  64. if(empty($data)){
  65. return json(['code'=>0 , 'data'=>[] , 'msg'=>'获取成功']);
  66. }
  67. $tid = array_column($data,'id');
  68. $join = SpellgroupJoin::with(['user'])->where('team_id','in',$tid)->field('team_id,join_uid')->order('addtime desc')->select()->toArray();
  69. foreach($data as &$item)
  70. {
  71. $item['countdown'] = $this->countdown($item['open_time'] , $item['hour']);
  72. $item['join_user'] = [];
  73. foreach($join as $val)
  74. {
  75. if($val['team_id'] == $item['id']) $item['join_user'][] = $val['headimgurl'];
  76. }
  77. }
  78. return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']);
  79. }
  80. /*
  81. * 确认领取
  82. */
  83. public function receive()
  84. {
  85. $param = Request::only(['id']);
  86. $data = SpellgroupJoin::where(['id'=>$param['id'] , 'employee_id'=>$this->request->token['employee_id']])->find();
  87. if(empty($data)) return json(['code'=>1 , 'data'=>$data , 'msg'=>'操作失败']);
  88. $data->status = 1;
  89. $data->save();
  90. return json(['code'=>0 , 'data'=>$data , 'msg'=>'操作成功']);
  91. }
  92. /*
  93. * 拼团剩余倒计时
  94. */
  95. private function countdown($open_time , $hour)
  96. {
  97. $start_time = time();
  98. $end_time = strtotime('+'.$hour.'hour',strtotime($open_time));
  99. $t = $end_time - $start_time;
  100. if($end_time < $start_time){
  101. return 0;
  102. }
  103. if($t <= 60){
  104. return $t;
  105. }else if($t <= 3600){
  106. $i = intval(floor($t/60));
  107. $s = $t%60;
  108. return $i.':'.$s;
  109. }else if($t > 3600){
  110. $h = floor($t/3600);
  111. $i = floor(($t-3600 * $h)/60);
  112. $s = floor($t-($h*3600+$i*60));
  113. return $h.':'.$i.':'.$s;
  114. }
  115. }
  116. //查询用户拼团信息
  117. public function sel_user_group()
  118. {
  119. $token = $this->request->token;
  120. $data = $this->request->only(['teamid','empid']);
  121. if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']);
  122. if (empty($data['empid'])) return json(['code' => 1, 'msg' => '缺少员工id']);
  123. $this->up_overtime_team();
  124. $act_data = ModelSpellgroup::where('root_id','=',$token['root_org'])
  125. ->field('cover,content,hour,number,heads_reward_cont,team_member_cont,team_ok_type')
  126. ->find();
  127. // 添加足迹
  128. if (!empty($token['uid']) && !$token['isEmployee']) {
  129. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, [], 'spellgroup'));
  130. }
  131. $team_order_num=SpellgroupJoin::count();
  132. //团员状态查询
  133. $tuan=SpellgroupJoin::where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->order('id desc')->find();
  134. if(empty($data['teamid'])){
  135. if(!empty($tuan)){
  136. $teams=SpellgroupTeam::with(['user'=>function($query){
  137. $query->field('id,nickname');
  138. },'employee'=>function($query){
  139. $query->field('id,name,phone');
  140. }])->where([['id','=',$tuan['team_id']],['root_id','=',$token['root_org']]])->find();
  141. if($tuan['is_heads']==1 && $teams['employee_id']==$data['empid']){
  142. $surplus_time=date('Y-m-d H:i:s',$teams['end_time']);
  143. if($teams['status']==3){
  144. $type=5;
  145. $text='活动已经结束';
  146. $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']];
  147. }
  148. if($teams['status']==2){
  149. $type=4;
  150. $text='拼团已成功';
  151. $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']];
  152. $surplus_time=date('Y-m-d H:i:s',time());
  153. }
  154. if($teams['status']==1){
  155. $type=2;
  156. $text='邀请邻居拼团';
  157. }
  158. $user=['heads_name'=>$teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$teams['id'],'is_heads'=>$tuan['is_heads'],'surplus_num'=>$teams['number']-$teams['join_num']];
  159. $team_mer=$this->sel_team_mer($teams['id'],$teams['number']);
  160. $act_data->hour=$teams['hour'];
  161. $act_data->number=$teams['number'];
  162. }
  163. if($tuan['is_heads']==1 && $teams['employee_id']!=$data['empid']){
  164. $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']];
  165. $my_teamid=$teams['id'];
  166. }
  167. if(empty($tuan['is_heads']) && in_array($teams['status'],[2,3])){
  168. $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']];
  169. }
  170. if(empty($tuan['is_heads']) && $teams['status']==1){
  171. $my_teamid=$teams['id'];
  172. $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']];
  173. //return json(['code'=>1,'msg'=>'正在参加拼团活动,请等待活动结束']);
  174. }
  175. $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user];
  176. return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']);
  177. }else{
  178. $user=['heads_name'=>null,'text'=>'开启拼团','type'=>1,'teamid'=>null,'is_heads'=>null,'surplus_num'=>$act_data['number']];
  179. $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user];
  180. return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']);
  181. }
  182. }
  183. if(!empty($data['teamid'])){
  184. if(!empty($tuan)){
  185. $teams=SpellgroupTeam::with(['user'=>function($query){
  186. $query->field('id,nickname');
  187. },'employee'=>function($query){
  188. $query->field('id,name,phone');
  189. }])->where([['id','=',$tuan['team_id']],['root_id','=',$token['root_org']]])->find();
  190. if($teams['id']==$data['teamid']){
  191. $surplus_time=date('Y-m-d H:i:s',$teams['end_time']);
  192. if($teams['status']==3){
  193. $type=5;
  194. $text='活动已经结束';
  195. $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']];
  196. }if($teams['status']==2){
  197. $type=4;
  198. $text='拼团已成功';
  199. $empdata=['name'=>$teams['employee']['name'],'phone'=>$teams['employee']['phone']];
  200. $surplus_time=date('Y-m-d H:i:s',time());
  201. }if($teams['status']==1){
  202. $type=2;
  203. $text='邀请邻居拼团';
  204. }
  205. $act_data->hour=$teams['hour'];
  206. $act_data->number=$teams['number'];
  207. $user=['heads_name'=>$teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$teams['id'],'is_heads'=>$tuan['is_heads'],'surplus_num'=>$teams['number']-$teams['join_num']];
  208. //$surplus_time=$this->countdown($teams['open_time'] , $teams['hour']);
  209. $team_mer=$this->sel_team_mer($teams['id'],$teams['number']);
  210. $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user];
  211. }else{
  212. $others_teams=SpellgroupTeam::with(['user'=>function($query){
  213. $query->field('id,nickname');
  214. },'employee'=>function($query){
  215. $query->field('id,name,phone');
  216. }])->where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find();
  217. $my_teamid=$teams['id'];
  218. $surplus_time=date('Y-m-d H:i:s',$others_teams['end_time']);
  219. if($others_teams['status']==3){
  220. $type=5;
  221. $text='活动已经结束';
  222. $empdata=['name'=>$others_teams['employee']['name'],'phone'=>$others_teams['employee']['phone']];
  223. }if($others_teams['status']==2){
  224. $type=4;
  225. $text='拼团已成功';
  226. $empdata=['name'=>$others_teams['employee']['name'],'phone'=>$others_teams['employee']['phone']];
  227. $surplus_time=date('Y-m-d H:i:s',time());
  228. }if($others_teams['status']==1){
  229. $type=3;
  230. $text='加入拼团';
  231. }
  232. $act_data->hour=$others_teams['hour'];
  233. $act_data->number=$others_teams['number'];
  234. $user=['heads_name'=>$others_teams['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$others_teams['id'],'is_heads'=>null,'surplus_num'=>$others_teams['number']-$others_teams['join_num']];
  235. //$surplus_time=$this->countdown($teams['open_time'] , $teams['hour']);
  236. $team_mer=$this->sel_team_mer($others_teams['id'],$others_teams['number']);
  237. $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user];
  238. }
  239. return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']);
  240. }else{
  241. $te=SpellgroupTeam::with(['user'=>function($query){
  242. $query->field('id,nickname');
  243. },'employee'=>function($query){
  244. $query->field('id,name,phone');
  245. }])->where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find();
  246. if(empty($te))return json(['code'=>1,'msg'=>'团队为空']);
  247. $surplus_time=date('Y-m-d H:i:s',$te['end_time']);
  248. if($te['status']==3){
  249. $type=5;
  250. $text='活动已经结束';
  251. $empdata=['name'=>$te['employee']['name'],'phone'=>$te['employee']['phone']];
  252. }
  253. if($te['status']==2){
  254. $type=6;
  255. $text='该拼团已满员,请联系业务员开启新的拼团';
  256. $empdata=['name'=>$te['employee']['name'],'phone'=>$te['employee']['phone']];
  257. $surplus_time=date('Y-m-d H:i:s',time());
  258. }
  259. if($te['status']==1){
  260. $type=3;
  261. $text='加入团队';
  262. }
  263. $user=['heads_name'=>$te['user']['nickname'],'text'=>$text,'type'=>$type,'teamid'=>$data['teamid'],'is_heads'=>null,'surplus_num'=>$te['number']-$te['join_num']];
  264. $team_mer=$this->sel_team_mer($te['id'],$te['number']);
  265. //$surplus_time=$this->countdown($te['open_time'] , $te['hour']);
  266. $data=['team_order_num'=>$team_order_num,'my_teamid'=>!empty($my_teamid)?$my_teamid:null,'act_data'=>$act_data,'empdata'=>!empty($empdata)?$empdata:null,'surplus_time'=>!empty($surplus_time)?$surplus_time:0,'team_mer'=>!empty($team_mer)?$team_mer:$this->send_null_team($act_data['number']),'user'=>$user];
  267. return json(['code'=>0,'data'=>$data,'msg'=>'请求成功']);
  268. }
  269. }
  270. }
  271. //查询队员情况
  272. public function sel_team_mer($teamid,$num)
  273. {
  274. //$teamid=1;
  275. $list=SpellgroupJoin::with(['user'=>function($query){
  276. $query->field('id,nickname,headimgurl,phone');
  277. }])
  278. ->where('team_id',$teamid)
  279. ->field('id,join_uid,is_heads')
  280. ->select()
  281. ->toArray();
  282. //var_dump($num-count($list));
  283. //exit;
  284. $spu=$num-count($list);
  285. if(count($list) < $num){
  286. $k=$this->send_null_team($spu);
  287. foreach($k as $key=>$val){
  288. $list[]=$val;
  289. }
  290. }
  291. return $list;
  292. }
  293. //生成空队员数组
  294. public function send_null_team($num)
  295. {
  296. for($i=0;$i<$num;$i++){
  297. $a=array(
  298. 'id'=>null,
  299. 'join_uid'=>null,
  300. 'is_heads'=>null,
  301. 'user'=>array(
  302. 'id'=>null,
  303. 'nickname'=>null,
  304. 'headimgurl'=>null,
  305. 'phone'=>null
  306. )
  307. );
  308. $new[]=$a;
  309. }
  310. return $new;
  311. }
  312. //开启拼团
  313. public function open_team()
  314. {
  315. $token = $this->request->token;
  316. if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']);
  317. $data = $this->request->only(['empid']);
  318. //$you= SpellgroupTeam::where([['uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find();
  319. //if(!empty($you)) return json(['code' => 1, 'msg' => '您已经参加过队长,不能再次开启拼团']);
  320. $you= SpellgroupJoin::with(['team'])->where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find();
  321. //var_dump($you->toArray());
  322. //exit;
  323. if(!empty($you)){
  324. if($you['team']['status']==1) return json(['code' => 1, 'msg' => '您正在参加其它拼团,暂时不能开启']);
  325. if($you['is_heads']==1) return json(['code' => 1, 'msg' => '您已经参加过队长,不能再次开启拼团']);
  326. }
  327. $act_data = ModelSpellgroup::where('root_id','=',$token['root_org'])
  328. ->field('cover,content,hour,number,heads_reward_cont,team_member_cont,team_ok_type,root_id')
  329. ->find();
  330. $add=array(
  331. 'employee_id'=>$data['empid'],
  332. 'number'=>$act_data['number'],
  333. 'root_id'=>$act_data['root_id'],
  334. 'hour'=>$act_data['hour'],
  335. 'uid'=>$token['uid'],
  336. 'join_num'=>1,
  337. 'end_time'=>$act_data['hour']*3600+time()
  338. );
  339. Db::startTrans();
  340. try {
  341. $teamid=SpellgroupTeam::insertGetId($add);
  342. $new=array(
  343. 'join_uid'=>$token['uid'],
  344. 'employee_id'=>$data['empid'],
  345. 'team_id'=>$teamid,
  346. 'root_id'=>$act_data['root_id'],
  347. 'is_heads'=>1
  348. );
  349. SpellgroupJoin::insert($new);
  350. Db::commit();
  351. }catch (\Exception $e) {
  352. Db::rollback();
  353. //var_dump($e->getMessage());
  354. return json(['code' => 1, 'msg' => '开团数据失败.']);
  355. }
  356. return json(['code' => 0, 'msg' => '开团成功.']);
  357. }
  358. //加入拼团
  359. public function join_team()
  360. {
  361. $token = $this->request->token;
  362. if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您的身份是业务员,不能参加活动']);
  363. $data = $this->request->only(['teamid','empid']);
  364. $you= SpellgroupJoin::where([['join_uid','=',$token['uid']],['root_id','=',$token['root_org']]])->find();
  365. if(!empty($you)) return json(['code' => 2, 'msg' => '您已经参加过活动,不能再次加入拼团']);
  366. $tmdata=SpellgroupTeam::where([['id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find();
  367. if(empty($tmdata)) return json(['code' => 1, 'msg' => '团队数据不存在']);
  368. //if(strtotime($tmdata['open_time'])+$tmdata['hour']*3600 < time()) return json(['code' => 1, 'msg' => '已经超时']);
  369. if($tmdata['end_time'] < time()) return json(['code' => 1, 'msg' => '已经超时']);
  370. if(in_array($tmdata['status'],[2,3])) return json(['code' => 1, 'msg' => '拼团已经结束']);
  371. $add=array(
  372. 'join_uid'=>$token['uid'],
  373. 'employee_id'=>$data['empid'],
  374. 'team_id'=>$data['teamid'],
  375. 'root_id'=>$token['root_org']
  376. );
  377. Db::startTrans();
  378. try {
  379. $ms=SpellgroupJoin::insert($add);
  380. //$tmdata->join_num=Db::raw('join_num + 1');
  381. $tmdata->join_num=$tmdata['join_num'] + 1;
  382. $tmdata->save();
  383. if($tmdata['join_num']==$tmdata['number']){
  384. $tmdata->status=2;
  385. $tmdata->save();
  386. $this->send_msg($data['empid'],true);
  387. }
  388. Db::commit();
  389. }catch (\Exception $e) {
  390. Db::rollback();
  391. //var_dump($e->getMessage());
  392. return json(['code' => 1, 'msg' => '加入团队数据失败.']);
  393. }
  394. return json(['code' => 0, 'msg' => '加入成功.']);
  395. }
  396. //拼团发送消息
  397. private function send_msg($eid,$res=true){
  398. $msg = $res ? '有团队拼团成功了,请及时联系客户领取奖励。' : '有团队拼团失败了,请及时邀请客户参加其他活动。';
  399. $key = $res ? 'spellgroupSuccess' : 'spellgroupFail';
  400. event(new Msg($eid,$msg,$key));
  401. return true;
  402. }
  403. //查询当前公司是否有活动
  404. public function sel_company_spellact()
  405. {
  406. $token = $this->request->token;
  407. if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']);
  408. $data=ModelSpellgroup::where('root_id',$token['root_org'])->count();
  409. return json(['code' => 0, 'data'=>$data,'msg' => '获取成功']);
  410. }
  411. //员工查看拼团列表
  412. public function emp_sel_team_list()
  413. {
  414. $token = $this->request->token;
  415. if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']);
  416. $this->up_overtime_team();
  417. $data = $this->request->only(['teamid','empid','status','page','limit','starttime']);
  418. $where[]=['employee_id','=',$token['employee_id']];
  419. if(!empty($data['status'])){
  420. $where[]=['status','=',$data['status']];
  421. }
  422. if(!empty($data['starttime'])){
  423. $where[]=['open_time','>=',$data['starttime'].' 00:00:00'];
  424. $where[]=['open_time','<=',$data['starttime'].' 23:59:59'];
  425. }
  426. $list= SpellgroupTeam::with(['user'=>function($query){
  427. $query->field('id,nickname');
  428. }])
  429. ->field('id,uid,hour,open_time,status,end_time')
  430. ->where($where)
  431. ->page($data['page'],$data['limit'])
  432. ->select()
  433. ->toArray();
  434. // var_dump($list);
  435. // exit;
  436. foreach($list as $key=>$val){
  437. $date = date('Y-m-d',strtotime($val['open_time']));
  438. $list[$key]['date'] = $date;
  439. if($val['status']==1){
  440. $list[$key]['surplus_time']=$this->countdown($val['open_time'] , $val['hour']);
  441. }
  442. if(in_array($val['status'],[2,3])){
  443. //$list[$key]['surplus_time']=date('y-m-d H:i:s',strtotime($val['open_time'])+$val['hour']*3600);
  444. $list[$key]['surplus_time']=date('y-m-d H:i:s',$val['end_time']);
  445. }
  446. $list[$key]['joinuser']=SpellgroupJoin::with(['user'=>function($query){
  447. $query->field('id,headimgurl');
  448. }])->where('team_id',$val['id'])
  449. ->field('join_uid,is_heads')
  450. //->order('is_heads')
  451. ->select()->toArray();
  452. }
  453. foreach($list as $key=>$val){
  454. $datas[$val['date']][]=$val;
  455. }
  456. //var_dump($datas);
  457. //exit;
  458. return json(['code' => 0, 'list'=>!empty($datas)?$datas:[],'msg' => '请求成功.']);
  459. }
  460. //员工查看拼团详情
  461. public function emp_sel_team_detail()
  462. {
  463. $token = $this->request->token;
  464. if (!$token['isEmployee']) return json(['code' => 1, 'msg' => '您没有权限查看']);
  465. $data = $this->request->only(['teamid']);
  466. $team_data=SpellgroupJoin::with(['user'=>function($query){
  467. $query->field('id,nickname,headimgurl,phone');
  468. }])
  469. ->where('team_id',$data['teamid'])
  470. ->field('join_uid,addtime,is_heads')
  471. ->select()
  472. ->toArray();
  473. $tm=SpellgroupTeam::where('id',$data['teamid'])->field('join_num,number')->find();
  474. //$tm['show_join']=$tm['number']-$tm['join_num'];
  475. $te_data['team_list']=$team_data;
  476. $te_data['show_join']=$tm['number']-$tm['join_num'];
  477. //var_dump($team_data);
  478. //exit;
  479. return json(['code' => 0, 'list'=>$te_data,'msg' => '请求成功.']);
  480. }
  481. //队长删除下面队员
  482. public function del_team_mer()
  483. {
  484. $token = $this->request->token;
  485. $data = $this->request->only(['id','teamid']);
  486. $you=SpellgroupJoin::where([['join_uid','=',$token['uid']],['team_id','=',$data['teamid']],['root_id','=',$token['root_org']]])->find();
  487. if(empty($you)) return json(['code' => 1,'msg' => '队长信息为空']);
  488. if($you['is_heads']==1){
  489. SpellgroupJoin::where([['id','=',$data['id']],['team_id','=',$data['teamid']]])->delete();
  490. SpellgroupTeam::where([['id','=',$data['teamid']],['uid','=',$token['uid']]])->dec('join_num')
  491. ->update();
  492. return json(['code' => 0,'msg' => '删除成功.']);
  493. }else{
  494. return json(['code' => 1, 'msg' => '你没有权限删除.']);
  495. }
  496. }
  497. //查询已经超时的团队
  498. public function up_overtime_team()
  499. {
  500. $token = $this->request->token;
  501. $w[] = ['root_id','=',$token['root_org']];
  502. $w[] = ['end_time','<=',time()];
  503. $w[] = ['status','=',1];
  504. $eids = SpellgroupTeam::where($w)->column('employee_id');
  505. foreach ($eids as $v) {
  506. $this->send_msg($v,false);
  507. }
  508. SpellgroupTeam::where($w)->update(['status'=>3]);
  509. }
  510. }