DataController.php 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Carbon\Carbon;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. use App\Http\Controllers\Controller;
  7. use Jenssegers\Agent\Facades\Agent;
  8. class DataController extends Controller{
  9. /*
  10. * 接口一,计算参赛情况
  11. */
  12. public function type_num(Request $request){
  13. $season=DB::table('basic')->where('keys','=','season')->value('value');
  14. if ($request->season==$season){
  15. $per_num=DB::table('user')->join('enroll','enroll.uid','=','user.id')
  16. ->where('enroll.season',$season)
  17. ->where('enroll.status','=',0)
  18. ->where('user.integral','<>',0)
  19. ->count();
  20. }else{
  21. $per_num=DB::table('user')->join('glory','glory.uid','=','user.id')
  22. ->where('glory.season',$request->season)
  23. ->where('glory.integral','<>',0)
  24. ->count();
  25. }
  26. $dat=DB::table('user')->join('enroll','enroll.uid','=','user.id')->where('enroll.status',0)
  27. ->where('enroll.season','=',$request->season) ->select('user.level_name',DB::raw('count(*) as num'))
  28. ->groupBy('user.level_name')
  29. ->get();
  30. $data=DB::table('user')->select('level_name',DB::raw('count(*) as num'))->groupBy('level_name')->get();
  31. $super_join=0;
  32. $top_join=0;
  33. if ($dat){
  34. foreach ($dat as $k=>$v){
  35. if ($v->level_name=='销售主管'){
  36. $super_join=$v->num;
  37. }
  38. if ($v->level_name=='销售经理'){
  39. $top_join=$v->num;
  40. }
  41. }
  42. }
  43. $season_data=DB::table('season')->where('season',$request->season)->first();
  44. $time=$season_data->round_start_time;
  45. $end=$season_data->round_end_time;
  46. $super_total=0;
  47. $top_total=0;
  48. $crown_total=0;
  49. $crown_join=0;
  50. if ($data){
  51. foreach ($data as $k=>$v){
  52. if ($v->level_name=='销售主管'){
  53. $super_total=$v->num;
  54. }
  55. if ($v->level_name=='销售经理'){
  56. $top_total=$v->num;
  57. }
  58. if ($v->level_name=='代理公司'){
  59. $crown_total=$v->num;
  60. $crown_join=$v->num;
  61. }
  62. }
  63. }
  64. $num1=(int)DB::table('inte_review')->where('season','=',$request->season)->whereBetween('time',[$time,$end])
  65. ->sum('type_one');
  66. $num2=(int)DB::table('inte_review')->where('season','=',$request->season)->whereBetween('time',[$time,$end])
  67. ->sum('type_two');
  68. $num3=(int)DB::table('inte_review')->where('season','=',$request->season)->whereBetween('time',[$time,$end])
  69. ->sum('type_three');
  70. $list=[
  71. 'crown_join'=>$crown_join,
  72. 'super_join'=>$super_join,
  73. 'top_join'=>$top_join,
  74. 'crown_total'=>$crown_total,
  75. 'super_total'=>$super_total,
  76. 'top_total'=>$top_total,
  77. 'hard_sale_total'=>$num1*399,
  78. 'simple_sale_total'=>$num2*169,
  79. 'old_sale_total'=>$num3*199,
  80. 'hard_order_total'=>$num1,
  81. 'simple_order_total'=>$num2,
  82. 'old_order_total'=>$num3,
  83. 'per_num'=>$per_num
  84. ];
  85. return $this->success($list);
  86. }
  87. public function day_num(Request $request){
  88. if ($request->has('day')){
  89. $start=date('Y-m-d H:i:s',$request->day);
  90. $day=$request->day+86400;
  91. $end=date('Y-m-d H:i:s',$day);
  92. }else{
  93. $now=Carbon::today()->timestamp;
  94. $s=DB::table('season')->where('season',$request->season)->first();
  95. $time=$s->round_start_time;
  96. $ends=$s->round_end_time;
  97. // $starts=DB::table('basic')->where('keys','round_start_time')->value('value');
  98. if ($now>$ends){
  99. $end=date('Y-m-d H:i:s',$ends-1);
  100. $start=Carbon::parse($end)->startOfDay();
  101. }else{
  102. $start=Carbon::today();
  103. $end=date('Y-m-d H:i:s',$now+86399);
  104. }
  105. }
  106. $data['hard']=(int)DB::table('inte_review')->where('season',$request->season)->where('created_at','>',$start)->where('created_at','<',$end)->sum('type_one');
  107. $data['simple']=(int)DB::table('inte_review')->where('season',$request->season)->whereBetween('created_at',[$start,$end])->sum('type_two');
  108. $data['old']=(int)DB::table('inte_review')->where('season',$request->season)->whereBetween('created_at',[$start,$end])->sum('type_three');
  109. return $this->success($data);
  110. }
  111. /*
  112. * 销售统计
  113. */
  114. public function order_count(Request $request){
  115. $season=DB::table('basic')->where('keys','=','season')->value('value');
  116. $res=DB::table('data_his')->where('season',$request->season)->where('type',2)->first();
  117. if ($res){
  118. $data=json_decode($res->data);
  119. }else{
  120. $s=DB::table('season')->where('season',$request->season)->first();
  121. $time=$s->round_start_time;
  122. $time_end=$s->round_end_time;
  123. $start=$time;
  124. $end=Carbon::now()->timestamp;
  125. if ($request->has('start')){
  126. $start=$request->start;
  127. $end=$request->end;
  128. }
  129. if ($start>$end){
  130. $data=[
  131. 'date'=>[],
  132. 'hard'=>[],
  133. 'old'=>[],
  134. 'simple'=>[],
  135. ];
  136. return $this->success($data);
  137. }
  138. if ($end>$time_end){
  139. $end=$time_end;
  140. }
  141. $day=ceil(($end-$start)/86400);
  142. $sold_total=0;
  143. $date=[date('n/j',Carbon::today()->timestamp)];
  144. for ($i=0;$i<$day;$i++){
  145. $date[$i] = date('n/j', $start+(86400*$i));
  146. $dat[$i]=date('Y-m-d', $start+(86400*$i));
  147. $data1[$i]=(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  148. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  149. ->sum('type_one');
  150. $data2[$i]=(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  151. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  152. ->sum('type_two');
  153. $data3[$i]=(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  154. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  155. ->sum('type_three');
  156. }
  157. $data=[
  158. 'date'=>$date,
  159. 'hard'=>$data1,
  160. 'old'=>$data3,
  161. 'simple'=>$data2,
  162. ];
  163. if ($request->season!=$season){
  164. DB::table('data_his')->insert(['data'=>json_encode($data),'type'=>2,'season'=>$request->season]);
  165. }
  166. }
  167. return $this->success($data);
  168. }
  169. public function sales(Request $request){
  170. if ($request->has('day')){
  171. $start=date('Y-m-d H:i:s',$request->day);
  172. $day=$request->day+86399;
  173. $end=date('Y-m-d H:i:s',$day);
  174. }else{
  175. $now=Carbon::today()->timestamp;
  176. $s=DB::table('season')->where('season',$request->season)->first();
  177. $time=$s->round_start_time;
  178. $ends=$s->round_end_time;
  179. // $starts=DB::table('basic')->where('keys','round_start_time')->value('value');
  180. if ($now>$ends){
  181. $end=date('Y-m-d H:i:s',$ends-1);
  182. $start=Carbon::parse($end)->startOfDay();
  183. }else{
  184. $start=Carbon::today();
  185. $end=date('Y-m-d H:i:s',$now+86399);
  186. }
  187. }
  188. $data['hard']=(int)DB::table('inte_review')->where('season',$request->season)->whereBetween('created_at',[$start,$end])->sum('type_one');
  189. $data['simple']=(int)DB::table('inte_review')->where('season',$request->season)->whereBetween('created_at',[$start,$end])->sum('type_two');
  190. $data['old']=(int)DB::table('inte_review')->where('season',$request->season)->whereBetween('created_at',[$start,$end])->sum('type_three');
  191. $data['hard']=$data['hard']*399;
  192. $data['old']=$data['old']*199;
  193. $data['simple']=$data['simple']*169;
  194. return $this->success($data);
  195. }
  196. public function sales_all(Request $request){
  197. // return Carbon::now()->endOfDay()->timestamp;
  198. $s=DB::table('season')->where('season',$request->season)->first();
  199. $time=$s->round_start_time;
  200. $time_end=$s->round_end_time;
  201. $start=$time;
  202. $end=Carbon::now()->timestamp;
  203. if ($end>$time_end){
  204. $end=$time_end;
  205. }
  206. if ($request->has('start')){
  207. $start=$request->start;
  208. $end=$request->end;
  209. }
  210. if ($start>$end){
  211. $data=[
  212. 'date'=>[],
  213. 'hard'=>[],
  214. 'old'=>[],
  215. 'simple'=>[],
  216. ];
  217. return $this->success($data);
  218. }
  219. $day=ceil(($end-$start)/86400);
  220. $sold_total=0;
  221. $date=[date('n/j',Carbon::today()->timestamp)];
  222. for ($i=0;$i<$day;$i++){
  223. $date[$i] = date('n/j', $start+(86400*$i));
  224. $dat[$i]=date('Y-m-d', $start+(86400*$i));
  225. $data1[$i]=399*(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  226. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  227. ->sum('type_one');
  228. $data2[$i]=169*(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  229. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  230. ->sum('type_two');
  231. $data3[$i]=199*(int)DB::table('inte_review')->where([['season','=',$request->season],['status','=',0]])
  232. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  233. ->sum('type_three');
  234. }
  235. $data=[
  236. 'date'=>$date,
  237. 'hard'=>$data1,
  238. 'old'=>$data3,
  239. 'simple'=>$data2,
  240. ];
  241. return $this->success($data);
  242. }
  243. public function war_data(Request $request){
  244. $res=DB::table('data_his')->where('season',$request->season)->where('type',3)->first();
  245. if ($res){
  246. $data=$res->data;
  247. }else {
  248. $seasons=DB::table('basic')->where('keys','=','season')->value('value');
  249. $datas = DB::table('service')->groupBy('war_names')->select('war_names')->get();
  250. $season = DB::table('season')->where('season', $request->season)->first();
  251. $data = $this->war_zone($datas, $season->season, $season->round_start_time, $season->round_end_time);
  252. if ($request->season!=$seasons){
  253. DB::table('data_his')->insert(['type'=>3,'season'=>$request->season,'data'=>json_encode($data)]);
  254. }
  255. }
  256. return $data;
  257. }
  258. public function war_zone($datas,$season,$start,$end){
  259. $season_now=DB::table('basic')->where('keys','=','season')->value('value');
  260. foreach ($datas as $k=>$v){
  261. $num=DB::table('enroll')
  262. ->join('user','user.id','=','enroll.uid')
  263. ->join('service','service.phone','=','user.up_phone')
  264. ->where('enroll.season',$season)
  265. ->where('enroll.status',0)
  266. ->where('service.war_names',$v->war_names)->count();
  267. if ($season==$season_now){
  268. $join_num[$k]=DB::table('user')->join('service','service.phone','=','user.up_phone')
  269. ->whereIn('user.level_name',['销售主管','销售经理'])
  270. ->where('user.integral','<>',0)->where('service.war_names',$v->war_names)->count();
  271. }else{
  272. $join_num[$k]=DB::table('user')
  273. ->join('service','service.phone','=','user.up_phone')
  274. ->join('glory','glory.uid','=','user.id')
  275. ->where('glory.season',$season)
  276. ->whereIn('user.level_name',['销售主管','销售经理'])
  277. ->where('glory.integral','<>',0)->where('service.war_names',$v->war_names)->count();
  278. }
  279. $nums[$k]=$num;
  280. $hard[$k]=$this->war_type($v->war_names,$season,$start,$end,'type_one');
  281. $simple[$k]=$this->war_type($v->war_names,$season,$start,$end,'type_two');
  282. $old[$k]=$this->war_type($v->war_names,$season,$start,$end,'type_three');
  283. // $count[$k]=round((($hard[$k]+$simple[$k]+$old[$k])/$num),2);
  284. $data[$k]=$v->war_names;
  285. }
  286. return ['war_name'=>$data,'num'=>$nums,'hard'=>$hard,'simple'=>$simple,'old'=>$old,'join_num'=>$join_num];
  287. }
  288. public function war_type($war_names,$season,$start,$end,$type){
  289. $data=(int)DB::table('inte_review')
  290. ->join('user','user.id','=','inte_review.uid')
  291. ->join('service','service.phone','=','user.up_phone')
  292. ->where('service.war_names',$war_names)
  293. ->where('inte_review.season',$season)
  294. ->whereBetween('inte_review.time',[$start,$end])
  295. ->sum("inte_review.$type");
  296. return $data;
  297. }
  298. public function data_count(Request $request){
  299. $season=DB::table('basic')->where('keys','=','season')->value('value');
  300. $re=[];
  301. $season_data=DB::table('season')->orderByDesc('season')->get();
  302. foreach ($season_data as $key=>$val){
  303. $time=$val->round_start_time;
  304. $end=$val->round_end_time;
  305. $enroll=DB::table('enroll')
  306. ->join('user','user.id','=','enroll.uid')
  307. ->where('enroll.season',$val->season)->where('enroll.status','=',0)->groupBy('enroll.uid')->get();
  308. foreach ($enroll as $k=>$v){
  309. $re[$k]=$v->uid;
  310. }
  311. for ($i=0;$i<3;$i++){
  312. // $week[$i]='第'.($i+1).'周';
  313. $join[$i]=count($enroll);
  314. $sale[$i]=count(DB::table('inte_review')
  315. ->whereIn('uid',$re)
  316. ->where('inte_review.season',$val->season)
  317. ->where('inte_review.time','>=',$time+7*86400*($i))
  318. ->where('inte_review.time','<=',$time+7*86400*($i+1)-1)
  319. ->groupBy('inte_review.uid')->get());
  320. $num_one=$this->sql($val->season,$time,$end,$i,"type_one");
  321. $num_two=$this->sql($val->season,$time,$end,$i,"type_two");
  322. $num_three=$this->sql($val->season,$time,$end,$i,"type_three");
  323. $num_all=$num_one+$num_two+$num_three;
  324. $money_all=$num_one*399+$num_two*179+$num_three*199;
  325. $num[$i]=$num_all;
  326. $money[$i]=$money_all;
  327. if ($join[$i]==0||$sale[$i]==0){
  328. $enroll_avg[$i]=0;
  329. $sale_avg[$i]=0;
  330. }else{
  331. $enroll_avg[$i]=round($num_all / $join[$i],2);
  332. $sale_avg[$i]=round($num_all / $sale[$i],2);
  333. }
  334. // $money_join_avg=round($money_all / $join[$i] ,2);
  335. // $money_sale_avg=round($money_all / $sale[$i] ,2);
  336. }
  337. // $num[3]=$num[2];
  338. // $money[3]=$money[2];
  339. // $s['week']=$week;
  340. $s['num']=$num;//每周卖货量
  341. $s['money']=$money;//每周卖货金额
  342. $s['enroll_num']=$join;//参赛人数
  343. $s['sale_num']=$sale;//卖货人数
  344. $s['enroll_avg']=$enroll_avg;
  345. $s['join_avg']=$sale_avg;
  346. // $s['money_join_avg']=$money_join_avg;
  347. // $s['money_sale_avg']=$money_sale_avg;
  348. $data[$key]=$s;
  349. $data[$key]['season']=$val->season;
  350. // if ($season!=$val->season){
  351. // $r=json_encode($s);
  352. // DB::table('data_his')->insert(['season'=>$val->season,'data'=>$r]);
  353. // }
  354. }
  355. return $this->success($data);
  356. }
  357. public function sql($season,$time,$end,$i,$type){
  358. // if ($i==2){
  359. // $data=DB::table('inte_review')
  360. // ->where('inte_review.season',$season)
  361. // ->where('inte_review.time','>=',$time)
  362. // ->where('inte_review.time','<=',$end)
  363. // ->sum("$type");
  364. // }else{
  365. $data=DB::table('inte_review')
  366. ->where('inte_review.season',$season)
  367. ->where('inte_review.time','>=',$time+7*86400*$i)
  368. ->where('inte_review.time','<=',$time+7*86400*($i+1)-1)
  369. ->sum("$type");
  370. // }
  371. return $data;
  372. }
  373. public function season_sale(){
  374. $season=DB::table('basic')->where('keys','=','season')->value('value');
  375. $re=DB::table('season')->orderByDesc('season')->get();
  376. foreach ($re as $k=>$v){
  377. $res=DB::table('data_his')->where('season',$v->season)->where('type',1)->first();
  378. if ($res){
  379. $data[$k]=[
  380. 'season'=>$v->season,
  381. 'all'=>json_decode($res->data)
  382. ];
  383. }else{
  384. $time=$v->round_start_time;
  385. $time_end=$v->round_end_time;
  386. $start=$time;
  387. $day=ceil(($time_end-$start)/86400);
  388. // $sold_total=0;
  389. $date=[date('n/j',Carbon::today()->timestamp)];
  390. for ($i=0;$i<$day;$i++){
  391. // $date[$i] = date('n/j', $start+(86400*$i));
  392. $dat[$i]=date('Y-m-d', $start+(86400*$i));
  393. $data1[$i]=399*(int)DB::table('inte_review')->where([['season','=',$v->season],['status','=',0]])
  394. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  395. ->sum('type_one');
  396. $data2[$i]=169*(int)DB::table('inte_review')->where([['season','=',$v->season],['status','=',0]])
  397. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  398. ->sum('type_two');
  399. $data3[$i]=199*(int)DB::table('inte_review')->where([['season','=',$v->season],['status','=',0]])
  400. ->whereBetween('created_at',[Carbon::parse($dat[$i])->startOfDay(),Carbon::parse($dat[$i])->endOfDay()])
  401. ->sum('type_three');
  402. $all[$i]=$data1[$i]+$data2[$i]+$data3[$i];
  403. }
  404. $data[$k]=[
  405. 'season'=>$v->season,
  406. 'all'=>$all
  407. ];
  408. if ($v->season!=$season){
  409. DB::table('data_his')->insert(['type'=>1,'season'=>$v->season,'data'=>json_encode($all)]);
  410. }
  411. }
  412. }
  413. return $this->success($data);
  414. }
  415. public function location(Request $request){
  416. $season=DB::table('basic')->where('keys','=','season')->value('value');
  417. $data=['北京', '天津', '上海', '重庆', '河北', '河南', '云南', '辽宁', '黑龙江', '湖南', '安徽', '山东', '新疆', '江苏','浙江', '江西', '湖北', '广西', '甘肃', '山西', '内蒙古', '陕西', '吉林', '福建', '贵州', '广东', '青海', '西藏', '四川', '宁夏', '海南', '台湾','香港', '澳门'];
  418. foreach ($data as $k=>$v){
  419. $top=DB::table('user')
  420. ->join('enroll','enroll.uid','=','user.id')
  421. ->where('enroll.season',$season)
  422. ->where('user.level_name','=','销售经理')
  423. ->where('user.province','like',$v.'%')
  424. ->where('enroll.status',0)->count();
  425. $tj=DB::table('user')
  426. ->join('enroll','enroll.uid','=','user.id')
  427. ->where('enroll.season',$season)
  428. ->where('user.level_name','=','销售主管')
  429. ->where('user.province','like',$v.'%')
  430. ->where('enroll.status',0)->count();
  431. $re_1[$k]['name']=$v;
  432. $re_1[$k]['top']=$top;
  433. $re_1[$k]['tj']=$tj;
  434. $re_1[$k]['value']=$tj+$top;
  435. }
  436. $top1=DB::table('user')
  437. ->join('enroll','enroll.uid','=','user.id')
  438. ->where('enroll.season',$season)
  439. ->where('user.level_name','=','销售经理')
  440. ->where('enroll.status',0)->count();
  441. $tj1=DB::table('user')
  442. ->join('enroll','enroll.uid','=','user.id')
  443. ->where('enroll.season',$season)
  444. ->where('user.level_name','=','销售主管')
  445. ->where('enroll.status',0)->count();
  446. $season=DB::table('basic')->where('keys','=','season')->value('value');
  447. $time_start=DB::table('basic')->where('keys','=','sign_start_time')->value('value');
  448. $time_end=DB::table('basic')->where('keys','=','sign_end_time')->value('value');
  449. $time=$time_end-$time_start+1;
  450. if (Agent::isMobile()){
  451. $l=6;
  452. $num=ceil($time/($l*3600));
  453. }elseif (Agent::isTablet()){
  454. $l=2;
  455. $num=ceil($time/($l*3600));
  456. }elseif (Agent::isDesktop()){
  457. $l=2;
  458. $num=ceil($time/($l*3600));
  459. }
  460. $k=0;
  461. $re=[];
  462. $res=[];
  463. $ress=[];
  464. for($i=0;$i<=$num;$i++){
  465. if ($num==$i){
  466. $time_s=date('Y-m-d H:i:s',$i*3600*$l+$time_start);
  467. $time_s_end=date('Y-m-d H:i:s',$time_end);
  468. }else{
  469. $time_s=date('Y-m-d H:i:s',$i*3600*$l+$time_start);
  470. $time_s_end=date('Y-m-d H:i:s',($i+1)*3600*$l+$time_start-1);
  471. }
  472. $top_1=DB::table('user')
  473. ->join('enroll','enroll.uid','=','user.id')
  474. ->where('enroll.season',$season)
  475. ->where('user.level_name','=','销售经理')
  476. ->whereBetween('enroll.created_at',[$time_s,$time_s_end])
  477. ->where('enroll.status',0)->count();
  478. $tj_1=DB::table('user')
  479. ->join('enroll','enroll.uid','=','user.id')
  480. ->where('enroll.season',$season)
  481. ->where('user.level_name','=','销售主管')
  482. ->whereBetween('enroll.created_at',[$time_s,$time_s_end])
  483. ->where('enroll.status',0)->count();
  484. $re[].=$top_1;
  485. $res[].=$tj_1;
  486. // $re[]=$tj+$top;
  487. if ($num==$i){
  488. $ress[].=date('m/d H:i',$time_end);
  489. }else{
  490. $ress[].=date('m/d H:i',$i*3600*$l+$time_start);
  491. }
  492. $k++;
  493. }
  494. $city=$this->city($season);
  495. $per=$this->per_season($season);
  496. $now=Carbon::now()->timestamp;
  497. if ($now>=$time_start&&$now<$time_end){
  498. $status=true;
  499. }else{
  500. $status=false;
  501. }
  502. return $this->success_list_one($re_1,'',$top1+$tj1,$top1,$tj1,$re,$res,$ress,$status,$city,$per);
  503. }
  504. /*-报名人数等级与上届对比-*/
  505. public function per_season($season){
  506. $top_ids=$this->per_season_all($season,'销售经理');
  507. $top_ids_yes=$this->per_season_all($season-1,'销售经理');
  508. $tj_ids=$this->per_season_all($season,'销售主管');
  509. $tj_ids_yes=$this->per_season_all($season-1,'销售主管');
  510. $num_top_season=count($top_ids);
  511. $num_top_season_yes=count($top_ids_yes);
  512. $num_tj_season=count($tj_ids);
  513. $num_tj_season_yes=count($tj_ids_yes);
  514. $includ_top=count(array_intersect($top_ids,$top_ids_yes));
  515. $includ_tj=count(array_intersect($tj_ids,$tj_ids_yes));
  516. $add_top=$num_top_season-$num_top_season_yes;
  517. $add_tj=$num_tj_season-$num_tj_season_yes;
  518. return [
  519. ['level'=>'销售主管','now'=>$num_tj_season,'pre'=>$num_tj_season_yes,'include'=>$includ_tj,'add'=>$add_tj],
  520. ['level'=>'销售经理','now'=>$num_top_season,'pre'=>$num_top_season_yes,'include'=>$includ_top,'add'=>$add_top],
  521. ];
  522. }
  523. public function per_season_all($season,$level_name){
  524. $re=DB::table('user')
  525. ->join('enroll','enroll.uid','=','user.id')
  526. ->where('enroll.season','=',$season)
  527. ->where('enroll.status','=',0)
  528. ->where('user.level_name','=',$level_name)
  529. ->pluck('enroll.uid')->toArray();
  530. return $re;
  531. }
  532. /*--报名地区对比--*/
  533. public function city($season){
  534. $city=DB::table('city_copy1')->groupBy('type')->select('type')->get();
  535. $ids=[];
  536. foreach ($city as $k=>$v){
  537. $num_all=0;
  538. $data=DB::table('city_copy1')->where('type',$v->type)->get();
  539. $res=[];
  540. foreach ($data as $ke=>$va){
  541. if ($va->city=='北京市'||$va->city=='上海市'||$va->city=='重庆市'){
  542. $id=DB::table('user')->where('province','like','%'.$va->city.'%')->pluck('id');
  543. }else{
  544. $id=DB::table('user')->where('city','like','%'.$va->city.'%')->pluck('id');
  545. }
  546. // $ids=array_merge($id,$ids);
  547. // $a=DB::table('inte_review')->whereIn('uid',$id)->where('season',$season)->sum('type_one');
  548. // $b=DB::table('inte_review')->whereIn('uid',$id)->where('season',$season)->sum('type_two');
  549. // $c=DB::table('inte_review')->whereIn('uid',$id)->where('season',$season)->sum('type_three');
  550. $num=DB::table('enroll')
  551. ->where('season',$season)->where('status',0)
  552. ->whereIn('uid',$id)->count();
  553. $res[$ke]['name']=$va->city;
  554. $res[$ke]['num']=$num;
  555. $num_all=$num_all+$num;
  556. }
  557. if ($v->type=='一线城市'){
  558. $re[$k]['xh']=0;
  559. }elseif ($v->type=='新一线城市'){
  560. $re[$k]['xh']=1;
  561. }elseif ($v->type=='二线城市'){
  562. $re[$k]['xh']=2;
  563. }elseif ($v->type=='三线城市'){
  564. $re[$k]['xh']=3;
  565. }elseif ($v->type=='四线城市'){
  566. $re[$k]['xh']=4;
  567. }elseif ($v->type=='五线城市'){
  568. $re[$k]['xh']=5;
  569. }elseif ($v->type=='其他'){
  570. $re[$k]['xh']=6;
  571. }
  572. $re[$k]['name']=$v->type;
  573. $re[$k]['num']=$num_all;
  574. $re[$k]['city']=$res;
  575. // $re[$k]['money']=$a*399+$b*169+$c*199;
  576. }
  577. $a=[];
  578. foreach($re as $key=>$val){
  579. $a[] = $val['xh'];//这里要注意$val['nums']不能为空,不然后面会出问题
  580. }
  581. //$a先排序
  582. sort($a);
  583. $a = array_flip($a);
  584. $result = array();
  585. foreach($re as $k=>$v){
  586. $temp1 = $v['xh'];
  587. $temp2 = $a[$temp1];
  588. $result[$temp2] = $v;
  589. }
  590. //这里还要把$result进行排序,健的位置不对
  591. sort($result);
  592. //然后就是你想看到的结果了
  593. // var_dump($result);
  594. return $result;
  595. }
  596. public function province(Request $request){
  597. $season=DB::table('basic')->where('keys','=','season')->value('value');
  598. $datas=DB::table('dt_area')->where('area_name','like',"%$request->province%")->where('area_parent_id','=',0)->value('id');
  599. $data=DB::table('dt_area')->where('area_parent_id',$datas)->get();
  600. $re=[];
  601. foreach ($data as $k=>$v){
  602. $top=DB::table('user')
  603. ->join('enroll','enroll.uid','=','user.id')
  604. ->where('enroll.season',$season)
  605. ->where('user.level_name','=','销售经理')
  606. ->where('user.province','like','%'.$request->province.'%')
  607. ->where('city','like',"%$v->area_name%")
  608. ->where('enroll.status',0)->count();
  609. $tj=DB::table('user')
  610. ->join('enroll','enroll.uid','=','user.id')
  611. ->where('enroll.season',$season)
  612. ->where('user.level_name','=','销售主管')
  613. ->where('user.province','like','%'.$request->province.'%')
  614. ->where('city','like',"%$v->area_name%")
  615. ->where('enroll.status',0)->count();
  616. $re[$k]['name']=$v->area_name;
  617. $re[$k]['top']=$top;
  618. $re[$k]['tj']=$tj;
  619. $re[$k]['value']=$tj+$top;
  620. }
  621. return $this->success_list($re);
  622. }
  623. public function province_time(Request $request){
  624. $season=DB::table('basic')->where('keys','=','season')->value('value');
  625. $time_start=DB::table('basic')->where('keys','=','sign_start_time')->value('value');
  626. $time_end=DB::table('basic')->where('keys','=','sign_end_time')->value('value');
  627. $time=$time_end-$time_start+1;
  628. if (Agent::isMobile()){
  629. $l=6;
  630. $num=ceil($time/($l*3600));
  631. }elseif (Agent::isTablet()){
  632. $l=2;
  633. $num=ceil($time/($l*3600));
  634. }elseif (Agent::isDesktop()){
  635. $l=2;
  636. $num=ceil($time/($l*3600));
  637. }
  638. // dump($num);
  639. $k=0;
  640. $re=[];
  641. $res=[];
  642. $ress=[];
  643. for($i=0;$i<=$num;$i++){
  644. if ($num==$i){
  645. $time_s=date('Y-m-d H:i:s',$i*3600*$l+$time_start);
  646. $time_s_end=date('Y-m-d H:i:s',$time_end);
  647. }else{
  648. $time_s=date('Y-m-d H:i:s',$i*3600*$l+$time_start);
  649. $time_s_end=date('Y-m-d H:i:s',($i+1)*3600*$l+$time_start-1);
  650. }
  651. $top=DB::table('user')
  652. ->join('enroll','enroll.uid','=','user.id')
  653. ->where('enroll.season',$season)
  654. ->where('user.level_name','=','销售经理')
  655. ->where('user.province','like','%'.$request->province.'%')
  656. ->whereBetween('enroll.created_at',[$time_s,$time_s_end])
  657. ->where('enroll.status',0)->count();
  658. $tj=DB::table('user')
  659. ->join('enroll','enroll.uid','=','user.id')
  660. ->where('enroll.season',$season)
  661. ->where('user.level_name','=','销售主管')
  662. ->where('user.province','like','%'.$request->province.'%')
  663. ->whereBetween('enroll.created_at',[$time_s,$time_s_end])
  664. ->where('enroll.status',0)->count();
  665. $re[].=$top;
  666. $res[].=$tj;
  667. // $re[]=$tj+$top;
  668. if ($num==$i){
  669. $ress[].=date('m/d H:i',$time_end);
  670. }else{
  671. $ress[].=date('m/d H:i',$i*3600*$l+$time_start);
  672. }
  673. $k++;
  674. }
  675. // dump($re);
  676. $arr=[
  677. 'top'=>$re,
  678. 'tj'=>$res,
  679. 'time'=>$ress
  680. ];
  681. return $this->success($arr);
  682. }
  683. public function juge_head(){
  684. if (Agent::isMobile()){
  685. return '手机1';
  686. }elseif (Agent::isTablet()){
  687. return '未知';
  688. }elseif (Agent::isDesktop()){
  689. return '桌面';
  690. }
  691. }
  692. public function sale_location(){
  693. $season=DB::table('basic')->where('keys','=','season')->value('value');
  694. // $season=21;
  695. $data=['北京', '天津', '上海', '重庆', '河北', '河南', '云南', '辽宁', '黑龙江', '湖南', '安徽', '山东', '新疆', '江苏','浙江', '江西', '湖北', '广西', '甘肃', '山西', '内蒙古', '陕西', '吉林', '福建', '贵州', '广东', '青海', '西藏', '四川', '宁夏', '海南', '台湾','香港', '澳门'];
  696. $hard_all=0;
  697. $old_all=0;
  698. $simple_all=0;
  699. foreach ($data as $k=>$v){
  700. $datas=DB::table('inte_review')
  701. ->join('user','user.id','=','inte_review.uid')
  702. ->where('user.province','like',$v.'%')
  703. ->where('inte_review.season','=',$season)
  704. ->first(
  705. array(
  706. \DB::raw('SUM(type_one) as hard'),
  707. \DB::raw('SUM(type_two) as simple'),
  708. \DB::raw('SUM(type_three) as old'),
  709. )
  710. );
  711. $a=$datas->hard==null?0:$datas->hard;
  712. $b=$datas->simple==null?0:$datas->simple;
  713. $c=$datas->old==null?0:$datas->old;
  714. $re[$k]['name']=$v;
  715. $re[$k]['hard']=$datas->hard==null?0:$datas->hard;
  716. $re[$k]['simple']=$datas->simple==null?0:$datas->simple;
  717. $re[$k]['old']=$datas->old==null?0:$datas->old;
  718. $re[$k]['money']=$re[$k]['hard']*399+$re[$k]['simple']*169+$re[$k]['old']*199;
  719. $re[$k]['value']=$re[$k]['hard']+$re[$k]['simple']+$re[$k]['old'];
  720. }
  721. $f=$this->all_sale($season);
  722. $hard_all=$f['hard'];
  723. $simple_all=$f['simple'];
  724. $old_all=$f['old'];
  725. $all=$old_all+$hard_all+$simple_all;
  726. $money=$old_all*199+$hard_all*399+$simple_all*169;
  727. $season=DB::table('basic')->where('keys','=','season')->value('value');
  728. $time_start=DB::table('basic')->where('keys','=','round_start_time')->value('value');
  729. $time_end=DB::table('basic')->where('keys','=','round_end_time')->value('value');
  730. // $season=21;
  731. // $d=DB::table('season')->where('season',21)->first();
  732. // $time_start=$d->round_start_time;
  733. // $time_end=$d->round_end_time;
  734. $hard=[];
  735. $simple=[];
  736. $old=[];
  737. $time=[];
  738. for($i=0;$i<21;$i++){
  739. $time_s=$i*3600*24+$time_start;
  740. $time_s_end=($i+1)*3600*24+$time_start-1;
  741. $data=DB::table('inte_review')
  742. // ->join('user','user.id','=','inte_review.uid')
  743. // ->where('user.province','like','%'.$request->province.'%')
  744. // ->where('inte_review.season','=',$season)
  745. ->whereBetween('inte_review.time',[$time_s,$time_s_end])
  746. ->where('inte_review.season','=',$season)
  747. ->first(
  748. array(
  749. \DB::raw('SUM(type_one) as hard'),
  750. \DB::raw('SUM(type_two) as simple'),
  751. \DB::raw('SUM(type_three) as old'),
  752. )
  753. );
  754. $hard[].=$data->hard==null?0:$data->hard;
  755. $simple[].=$data->simple==null?0:$data->simple;
  756. $old[].=$data->old==null?0:$data->old;
  757. $time[].=date('m/d',$time_s);
  758. }
  759. $yes=$this->yes_sale($season,$time_start);
  760. $yes_hard=(int)$yes['hard'];
  761. $yes_simple=(int)$yes['simple'];
  762. $yes_old=(int)$yes['old'];
  763. $crown=$this->crown_sale($season);
  764. $service=$this->service_sale($season);
  765. // $city=$this->sale_type($season);
  766. $now=Carbon::now()->timestamp;
  767. if ($now>=$time_start&&$now<$time_end){
  768. $status=true;
  769. }else{
  770. $status=false;
  771. }
  772. return $this->success_list_two($re,'',$all,$hard_all,$simple_all,$old_all,$hard,$simple,$old,$time,$status,$money,$yes_hard,$yes_simple,$yes_old,$crown,$service);
  773. }
  774. public function sale_type(){
  775. // dd(DB::table('season')->get());
  776. $season=DB::table('basic')->where('keys','=','season')->value('value');
  777. $city=DB::table('city_copy1')->groupBy('type')->select('type')->get();
  778. $ids=[];
  779. foreach ($city as $k=>$v){
  780. $num_all=0;
  781. $money_all=0;
  782. $data=DB::table('city_copy1')->where('type',$v->type)->get();
  783. $res=[];
  784. foreach ($data as $ke=>$va){
  785. if ($va->city=='北京市'||$va->city=='上海市'||$va->city=='重庆市'){
  786. $id=DB::table('user')->where('province','like','%'.$va->city.'%')->pluck('id');
  787. }else{
  788. $id=DB::table('user')->where('city','like','%'.$va->city.'%')->pluck('id');
  789. }
  790. // $ids=array_merge($id,$ids);
  791. $datas=DB::table('inte_review')
  792. ->whereIn('uid',$id)
  793. ->where('inte_review.season','=',$season)
  794. ->first(
  795. array(
  796. \DB::raw('SUM(type_one) as hard'),
  797. \DB::raw('SUM(type_two) as simple'),
  798. \DB::raw('SUM(type_three) as old'),
  799. )
  800. );
  801. $a=$datas->hard==null?0:$datas->hard;
  802. $b=$datas->simple==null?0:$datas->simple;
  803. $c=$datas->old==null?0:$datas->old;
  804. // $num=DB::table('enroll')
  805. // ->where('season',$season)->where('status',0)
  806. // ->whereIn('uid',$id)->count();
  807. $res[$ke]['name']=$va->city;
  808. $res[$ke]['num']=$a+$b+$c;
  809. $res[$ke]['money']=$a*399+$b*179+$c*199;
  810. $num_all=$num_all+$res[$ke]['num'];
  811. $money_all=$money_all+$res[$ke]['money'];
  812. }
  813. if ($v->type=='一线城市'){
  814. $re[$k]['xh']=0;
  815. }elseif ($v->type=='新一线城市'){
  816. $re[$k]['xh']=1;
  817. }elseif ($v->type=='二线城市'){
  818. $re[$k]['xh']=2;
  819. }elseif ($v->type=='三线城市'){
  820. $re[$k]['xh']=3;
  821. }elseif ($v->type=='四线城市'){
  822. $re[$k]['xh']=4;
  823. }elseif ($v->type=='五线城市'){
  824. $re[$k]['xh']=5;
  825. }elseif ($v->type=='其他'){
  826. $re[$k]['xh']=6;
  827. }
  828. $re[$k]['name']=$v->type;
  829. $re[$k]['num']=$num_all;
  830. $re[$k]['city']=$res;
  831. $re[$k]['money']=$money_all;
  832. }
  833. $a=[];
  834. foreach($re as $key=>$val){
  835. $a[] = $val['xh'];//这里要注意$val['nums']不能为空,不然后面会出问题
  836. }
  837. //$a先排序
  838. sort($a);
  839. $a = array_flip($a);
  840. $result = array();
  841. foreach($re as $k=>$v){
  842. $temp1 = $v['xh'];
  843. $temp2 = $a[$temp1];
  844. $result[$temp2] = $v;
  845. }
  846. //这里还要把$result进行排序,健的位置不对
  847. sort($result);
  848. //然后就是你想看到的结果了
  849. // var_dump($result);
  850. return $result;
  851. }
  852. public function crown_sale($season){
  853. $crown=DB::table('crown_data')->where('type','=',1)->get();
  854. foreach ($crown as $k=>$v){
  855. $re[$k]['hard']=$v->hard;
  856. $re[$k]['nickname']=$v->nickname;
  857. $re[$k]['simple']=$v->simple;
  858. $re[$k]['old']=$v->old;
  859. $re[$k]['value']=$v->total;
  860. $re[$k]['money']=$v->money;
  861. }
  862. return $re;
  863. }
  864. public function all_sale($season){
  865. $datas=DB::table('inte_review')
  866. // ->join('user','user.id','=','inte_review.uid')
  867. // ->where('user.province','like',$v.'%')
  868. ->where('inte_review.season','=',$season)
  869. ->first(
  870. array(
  871. \DB::raw('SUM(type_one) as hard'),
  872. \DB::raw('SUM(type_two) as simple'),
  873. \DB::raw('SUM(type_three) as old'),
  874. )
  875. );
  876. $a=$datas->hard==null?0:$datas->hard;
  877. $b=$datas->simple==null?0:$datas->simple;
  878. $c=$datas->old==null?0:$datas->old;
  879. // $hard_all=$hard_all+$a;
  880. // $simple_all=$simple_all+$b;
  881. // $old_all=$old_all+$c;
  882. return ['hard'=>$a,'simple'=>$b,'old'=>$c];
  883. }
  884. public function service_sale($season){
  885. $crown=DB::table('crown_data')->where('type','=',0)->get();
  886. foreach ($crown as $k=>$v){
  887. $re[$k]['hard']=$v->hard;
  888. $re[$k]['nickname']=$v->nickname;
  889. $re[$k]['war_name']=$v->war_name;
  890. $re[$k]['simple']=$v->simple;
  891. $re[$k]['old']=$v->old;
  892. $re[$k]['value']=$v->total;
  893. $re[$k]['money']=$v->money;
  894. }
  895. return $re;
  896. }
  897. public function yes_sale($season,$time_start){
  898. $today=Carbon::today()->timestamp;
  899. $data=DB::table('inte_review')
  900. // ->join('user','user.id','=','inte_review.uid')
  901. // ->where('user.province','like','%'.$request->province.'%')
  902. ->where('inte_review.season','=',$season)
  903. ->whereBetween('inte_review.time',[$time_start,$today-1])
  904. // ->where('inte_review.season','=',$season)
  905. ->first(
  906. array(
  907. \DB::raw('SUM(type_one) as hard'),
  908. \DB::raw('SUM(type_two) as simple'),
  909. \DB::raw('SUM(type_three) as old'),
  910. )
  911. );
  912. $hard=$data->hard==null?0:$data->hard;
  913. $simple=$data->simple==null?0:$data->simple;
  914. $old=$data->old==null?0:$data->old;
  915. return ['hard'=>$hard,'simple'=>$simple,'old'=>$old];
  916. }
  917. public function sale_province(Request $request){
  918. $season=DB::table('basic')->where('keys','=','season')->value('value');
  919. // $season=21;
  920. // $season=21;
  921. $datas=DB::table('dt_area')->where('area_name','like',"%$request->province%")->where('area_parent_id','=',0)->value('id');
  922. $data=DB::table('dt_area')->where('area_parent_id',$datas)->get();
  923. $re=[];
  924. foreach ($data as $k=>$v){
  925. $datas=DB::table('inte_review')
  926. ->join('user','user.id','=','inte_review.uid')
  927. ->where('user.province','like','%'.$request->province.'%')
  928. ->where('city','like',"%$v->area_name%")
  929. ->where('inte_review.season','=',$season)
  930. ->first(
  931. array(
  932. \DB::raw('SUM(type_one) as hard'),
  933. \DB::raw('SUM(type_two) as simple'),
  934. \DB::raw('SUM(type_three) as old'),
  935. )
  936. );
  937. $re[$k]['name']=$v->area_name;
  938. $re[$k]['hard']=$datas->hard==null?0:$datas->hard;
  939. $re[$k]['simple']=$datas->simple==null?0:$datas->simple;
  940. $re[$k]['old']=$datas->old==null?0:$datas->old;
  941. $re[$k]['value']=$re[$k]['hard']+$re[$k]['simple']+$re[$k]['old'];
  942. }
  943. return $this->success_list($re);
  944. }
  945. public function sale_province_time(Request $request){
  946. $season=DB::table('basic')->where('keys','=','season')->value('value');
  947. // $season=21;
  948. $time_start=DB::table('basic')->where('keys','=','round_start_time')->value('value');
  949. // $d=DB::table('season')->where('season',21)->first();
  950. // $time_start=$d->round_start_time;
  951. $hard=[];
  952. $simple=[];
  953. $old=[];
  954. $time=[];
  955. for($i=0;$i<21;$i++){
  956. $time_s=$i*3600*24+$time_start;
  957. $time_s_end=($i+1)*3600*24+$time_start-1;
  958. $data=DB::table('inte_review')
  959. ->join('user','user.id','=','inte_review.uid')
  960. ->where('user.province','like','%'.$request->province.'%')
  961. ->where('inte_review.season','=',$season)
  962. ->whereBetween('inte_review.time',[$time_s,$time_s_end])
  963. ->where('inte_review.season','=',$season)
  964. ->first(
  965. array(
  966. \DB::raw('SUM(type_one) as hard'),
  967. \DB::raw('SUM(type_two) as simple'),
  968. \DB::raw('SUM(type_three) as old'),
  969. )
  970. );
  971. $hard[].=$data->hard==null?0:$data->hard;
  972. $simple[].=$data->simple==null?0:$data->simple;
  973. $old[].=$data->old==null?0:$data->old;
  974. $time[].=date('m/d',$time_s);
  975. }
  976. $arr=[
  977. 'hard'=>$hard,
  978. 'simple'=>$simple,
  979. 'old'=>$old,
  980. 'time'=>$time
  981. ];
  982. return $this->success($arr);
  983. }
  984. }