IndexController.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\SignMessageEvent;
  4. use App\Jobs\SignTestJob;
  5. use App\Models\Activity;
  6. use App\Models\Express;
  7. use App\Models\Goodattr;
  8. use App\Models\Goodtest;
  9. use App\Models\Orderdetail;
  10. use App\Models\Ordertest;
  11. use App\Models\UserZ;
  12. use App\Models\Warea;
  13. use Carbon\Carbon;
  14. use Illuminate\Http\Request;
  15. use App\Models\User;
  16. use App\Models\Order;
  17. use App\Models\Goods;
  18. use App\Models\OrderGoods;
  19. use App\Models\Article;
  20. use Illuminate\Support\Facades\Cache;
  21. use Illuminate\Support\Facades\DB;
  22. use Illuminate\Database\Eloquent\Builder;
  23. use Illuminate\Support\Facades\Log;
  24. class IndexController extends Controller
  25. {
  26. public function TestCache(){
  27. $data=[];
  28. SignTestJob::dispatch(new SignTestJob($data));
  29. }
  30. //代理总数
  31. public function getDataTotal(){
  32. $data['userCount']=User::where('cert_status','6')->count();
  33. $data['account']= DB::table('order')
  34. ->leftJoin('users', 'order.user_id', '=', 'users.id')
  35. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  36. ->whereIn('order.status', [2,3])
  37. ->sum('totalprice');
  38. $data['orderCount']=Order::whereIn('status',[2,3])->count();
  39. $data['goodsCount']=Goods::where('status','1')->count();
  40. $data['articleCount']=Article::where('status','1')->count();
  41. return $this->success($data);
  42. }
  43. //代理组成
  44. public function getEveryAgentTotal(){
  45. $data['superCount']=User::where('cert_status','6')->where('level','1')->count();
  46. $data['topCount']=User::where('cert_status','6')->where('level','2')->count();
  47. $data['crownCount']=User::where('cert_status','6')->where('level','3')->count();
  48. return $this->success($data);
  49. }
  50. //代理业绩组成
  51. public function getEveryAgentResult(){
  52. $data['superAccount']=DB::table('order')
  53. ->leftJoin('users', 'order.user_id', '=', 'users.id')
  54. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  55. ->whereIn('order.status', [2,3])
  56. ->where('users.level','1')
  57. ->sum('totalprice');
  58. $data['topAccount']=DB::table('order')
  59. ->leftJoin('users', 'order.user_id', '=', 'users.id')
  60. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  61. ->whereIn('order.status', [2,3])
  62. ->where('users.level','2')
  63. ->sum('totalprice');
  64. $data['crownAccount']=DB::table('order')
  65. ->leftJoin('users', 'order.user_id', '=', 'users.id')
  66. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  67. ->whereIn('order.status', [2,3])
  68. ->where('users.level','3')
  69. ->sum('totalprice');
  70. return $this->success($data);
  71. }
  72. //代理订单
  73. public function getEveryAgentOrder(){
  74. $data['superCount']=Order::whereIn('status',[2,3])
  75. ->whereHas('user', function (Builder $query) {
  76. $query->where('level', '=', '1');
  77. })->count();
  78. $data['topCount']=Order::whereIn('status',[2,3])
  79. ->whereHas('user', function (Builder $query) {
  80. $query->where('level', '=', '2');
  81. })->count();
  82. $data['crownCount']=Order::whereIn('status',[2,3])
  83. ->whereHas('user', function (Builder $query) {
  84. $query->where('level', '=', '3');
  85. })->count();
  86. return $this->success($data);
  87. }
  88. //商品销量前十
  89. public function getGoodsSalesNum(){
  90. $list=DB::table('goods')
  91. ->select('goods.name',DB::raw('SUM(order_goods.num) as total'))
  92. ->leftJoin('order_goods','goods.id','=','order_goods.goods_id')
  93. ->leftJoin('order','order.id','=','order_goods.order_id')
  94. ->where('order.agent_id',1)
  95. ->whereIn('order.status',[2,3])
  96. ->groupBy('goods.id')
  97. ->orderBy('total','desc')
  98. ->take('10')->get();
  99. return $this->success($list);
  100. }
  101. public function demo(){
  102. $data=User::where('level',3)->with(['get_order_de'=>function($q){
  103. $q->whereBetween('order_detail.created_at',['2020-07-06 00:00:00','2020-07-10 00:00:00']);
  104. }])->get()->toArray();
  105. dd($data);
  106. }
  107. public function sign_message(Request $request){
  108. Log::error(json_encode($request->all()));
  109. if ($request->appids=='daweiboshi_szy' && $request->secret=='daweiboshi_szy_secret'){
  110. $s_user=$request->data;
  111. if ($request->type==0){
  112. $mean='实战营';
  113. }else{
  114. $mean='密训营';
  115. }
  116. $season=$request->season;
  117. $d_user=User::where('mobile',$request->mobile)->first();
  118. foreach ($s_user as $k=>$v){
  119. $user=User::where('mobile',$v)->first();
  120. if ($user->openid){
  121. $data['data']=[
  122. 'first'=>'有代理报名成功了',
  123. 'keyword1'=>'第'.$season.'届大卫博士创业'.$mean,
  124. 'keyword2'=>$d_user->nickname,
  125. 'keyword3'=>$d_user->mobile,
  126. // 'keyword4'=>date('Y年m月d日',time()),
  127. 'remark'=>'点击进入小程序',
  128. ];
  129. $data['openid']=$user->openid;
  130. event(new SignMessageEvent($data));
  131. Log::error($k);
  132. }
  133. }
  134. }else{
  135. return false;
  136. }
  137. }
  138. public function getGoodsStyleNum1(Request $request){
  139. $activity=Activity::where('disabled',0)->get();
  140. //$input=$request->all();
  141. //$cycle=$input['cycle'];
  142. $cycle=2;//间隔周期
  143. foreach($activity as $keys=>$value){
  144. $start_time=$value->start_time;
  145. $end_time=$value->end_time;
  146. $n=1;
  147. for($i=strtotime($start_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  148. $start=date("Y-m-d H:i:s",strtotime("+". 3*($n-1). "hours", strtotime($start_time)));
  149. if(date("Y-m-d H:i:s",strtotime("+3 hours",strtotime($start)))>$end_time){
  150. $end=$end_time;
  151. }else{
  152. $end=date("Y-m-d H:i:s",strtotime("+3 hours",strtotime($start)));
  153. }
  154. // $list[$value->title][$n*$cycle]=Orderdetail::whereBetween('created_at',[$start,$end])
  155. // ->with(['get_goods:id,name,size'])
  156. // ->GroupBy('goods_id','Goods_size')
  157. // ->select('goods_id','goods_size',DB::raw('sum(num) as total'))->get();
  158. $list[$value->title][$n*$cycle]=Orderdetail::whereBetween('order_detail.created_at',[$start,$end])
  159. ->leftjoin('goods_test as gt','gt.id','=','order_detail.goods_id')
  160. ->whereHas('order',function($query){
  161. $query->where('is_deleted',0);
  162. })
  163. ->GroupBy('gt.main_attr')
  164. ->select('gt.id','gt.main_attr',DB::raw('sum(order_detail.num) as total'))->get();
  165. $n++;
  166. }
  167. // $goods=Goodtest::where('is_deleted',0)->GroupBy('main_attr')->pluck('main_attr');
  168. // return $goods;
  169. // for($i=strtotime($start_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  170. // $start=$start_time;
  171. // if(date("Y-m-d H:i:s",strtotime("+". 3*$n. "hours",strtotime($start)))>$end_time){
  172. // $end=$end_time;
  173. // }else{
  174. // $end=date("Y-m-d H:i:s",strtotime("+". 3*$n. "hours",strtotime($start)));
  175. // }
  176. // $list[$value->title][$n*$cycle]=Orderdetail::whereBetween('created_at',[$start,$end])
  177. // ->with(['get_goods:id,name,size'])
  178. // ->whereHas('order',function($query){
  179. // $query->where('is_deleted',0);
  180. // })
  181. // ->GroupBy('goods_id','goods_size')
  182. // ->select('goods_id','goods_size',DB::raw('sum(num) as total'))
  183. // ->get();
  184. // $n++;
  185. // }
  186. }
  187. return $this->success($list);
  188. }
  189. public function getGoodsMainAttr(){
  190. $data=Goodtest::where('is_deleted',0)->groupBy('main_attr')->pluck('main_attr');
  191. return $this->success($data);
  192. }
  193. public function getGoodsStyleNum(Request $request){
  194. $activity=Activity::where('disabled',0)->get();
  195. $input=$request->all();
  196. $cycle=$input['cycle'];
  197. $type=$input['type'];
  198. // $cycle=2;//间隔周期
  199. // $type='大卫博士精装版';
  200. foreach($activity as $keys=>$value){
  201. $start_time=$value->start_time;
  202. $end_time=$value->end_time;
  203. $n=1;
  204. for($i=strtotime($start_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  205. $start=date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours", strtotime($start_time)));
  206. if(date("Y-m-d H:i:s",strtotime("+$cycle hours",strtotime($start)))>$end_time){
  207. $end=$end_time;
  208. }else{
  209. $end=date("Y-m-d H:i:s",strtotime("+$cycle hours",strtotime($start)));
  210. }
  211. $list[$value->title][$n*$cycle]=Orderdetail::
  212. whereHas('get_goods',function($query)use($type){
  213. $query->where('main_attr',$type);
  214. })
  215. ->whereHas('order',function($query)use($start,$end){
  216. $query->where('is_deleted',0)->whereBetween('created_at',[$start,$end]);
  217. })
  218. ->sum('num');
  219. $n++;
  220. }
  221. }
  222. return $this->success($list);
  223. }
  224. public function getOrderAccount(Request $request){
  225. $input=$request->all();
  226. $activity=Activity::where('disabled',0)->get();
  227. $cycle=$input['cycle'];
  228. // $cycle=3;//间隔周期
  229. foreach($activity as $keys=>$value){
  230. $start_time=$value->start_time;
  231. $end_time=$value->end_time;
  232. $n=1;
  233. for($i=strtotime($start_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  234. // $start=$start_time;
  235. // if(date("Y-m-d H:i:s",strtotime("+". 3*$n. "hours",strtotime($start)))>$end_time){
  236. // $end=$end_time;
  237. // }else{
  238. // $end=date("Y-m-d H:i:s",strtotime("+". 3*$n. "hours",strtotime($start)));
  239. // }
  240. $start=date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours", strtotime($start_time)));
  241. if(date("Y-m-d H:i:s",strtotime("+$cycle hours",strtotime($start)))>$end_time){
  242. $end=$end_time;
  243. }else{
  244. $end=date("Y-m-d H:i:s",strtotime("+$cycle hours",strtotime($start)));
  245. }
  246. $list[$value->title][$n*$cycle]=Ordertest::whereBetween('created_at',[$start,$end])
  247. ->where('is_deleted',0)
  248. ->select(DB::raw('sum(money) as total'))
  249. ->get();
  250. $n++;
  251. }
  252. }
  253. return $this->success($list);
  254. }
  255. public function getOrderEveryAccount(Request $request){
  256. $input=$request->all();
  257. $activity=Activity::where('disabled',0)->get();
  258. $cycle=1;
  259. foreach($activity as $keys=>$value){
  260. $start=$value->start_time;
  261. if($start>date("Y-m-d 09:00:00",strtotime($start))){
  262. $e_time=date("Y-m-d 09:00:00",strtotime($start.'+ 1 day'));
  263. }else{
  264. $e_time=date("Y-m-d 09:00:00",strtotime($start));
  265. }
  266. $end_time=date("Y-m-d 00:00:00",strtotime($value->end_time.'+ 1 day'));
  267. $n=1;$r=9;$d=1;
  268. for($i=strtotime($e_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  269. if(date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours",strtotime($e_time)))>$end_time){
  270. $end=$end_time;
  271. }else{
  272. $end=date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours",strtotime($e_time)));
  273. }
  274. // $end=date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours", strtotime($e_time)));
  275. $list[$value->title]['第'.$d.'天'.$r.'点']=Ordertest::whereBetween('created_at',[$start,$end])
  276. ->where('is_deleted',0)
  277. ->sum('money');
  278. if($r>=24){
  279. $d++;$r=1;
  280. }else{
  281. $r++;
  282. }
  283. $n++;
  284. }
  285. }
  286. return $this->success($list);
  287. }
  288. //获取销量每小时
  289. public function getGoodsEveryStyleNum(Request $request){
  290. ini_set('memory_limit', '1280M');
  291. $activity=Activity::where('disabled',0)->get();
  292. $input=$request->all();
  293. $cycle=$input['cycle'];
  294. $type=$input['type'];
  295. $cycle=1;//间隔周期
  296. // $type='大卫博士精装版';
  297. foreach($activity as $keys=>$value){
  298. $start=$value->start_time;
  299. if($start>date("Y-m-d 09:00:00",strtotime($start))){
  300. $e_time=date("Y-m-d 09:00:00",strtotime($start.'+ 1 day'));
  301. }else{
  302. $e_time=date("Y-m-d 09:00:00",strtotime($start));
  303. }
  304. $end_time=date("Y-m-d 00:00:00",strtotime($value->end_time.'+ 1 day'));
  305. $n=1;$r=9;$d=1;
  306. for($i=strtotime($e_time);$i<=strtotime($end_time);$i+=$cycle*3600){
  307. if(date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours",strtotime($e_time)))>$end_time){
  308. $end=$end_time;
  309. }else{
  310. $end=date("Y-m-d H:i:s",strtotime("+". $cycle*($n-1). "hours",strtotime($e_time)));
  311. }
  312. // $list[$value->title][$d.'-'.$r]=Orderdetail::whereHas('get_goods',function($query)use($type){
  313. // $query->where('main_attr',$type);
  314. // })
  315. // ->whereHas('order',function($query)use($start,$end){
  316. // $query->where('is_deleted',0)->whereBetween('created_at',[$start,$end]);
  317. // })
  318. // ->sum('num');
  319. $goods_ids=Goodtest::where('main_attr',$type)->pluck('id');
  320. $order_ids=Ordertest::where('is_deleted',0)->whereBetween('created_at',[$start,$end])->pluck('id');
  321. $list[$value->title]['第'.$d.'天'.$r.'点']=Orderdetail::whereIn('goods_id',$goods_ids)->whereIn('order_id',$order_ids)->sum('num');
  322. // $list[$value->title][$d.'-'.$r]=Ordertest::whereBetween('created_at',[$start,$end])
  323. // ->where('is_deleted',0)
  324. // ->select(DB::raw('sum(total) as total'))
  325. // ->get();
  326. if($r>=24){
  327. $d++;$r=1;
  328. }else{
  329. $r++;
  330. }
  331. $n++;
  332. }
  333. }
  334. return $this->success($list);
  335. }
  336. public function getGoodsStyleDetailNum(Request $request){
  337. $input=$request->all();
  338. $activity=Activity::where('is_ing',1)->first();
  339. $start=$activity->start_time;
  340. $end=$activity->end_time;
  341. $type=$input['type'];
  342. if($type=='精装版'){
  343. $name='大卫博士精装版';
  344. $id=Goodattr::where('name','like','%'.$type.'%')->value('id');
  345. $ids=Goodattr::where('pid',$id)->pluck('id');
  346. }elseif($type=='简约版') {
  347. $name='大卫博士简约版';
  348. $id=Goodattr::where('name','like','%'.$type.'%')->value('id');
  349. $ids=Goodattr::where('pid',$id)->pluck('id');
  350. }elseif($type=='老人版'){
  351. $name='大卫博士老人版';
  352. $id=Goodattr::where('name','=',$name)->value('id');
  353. $ids=Goodattr::where('pid',$id)->pluck('id');
  354. }elseif($type=='纯棉老人版'){
  355. $name='大卫博士纯棉老人版';
  356. $id=Goodattr::where('name','like','%'.$type.'%')->value('id');
  357. $ids=Goodattr::where('pid',$id)->pluck('id');
  358. }else{
  359. $ids=[];
  360. }
  361. $list=Orderdetail::whereHas('order',function($query)use($start,$end){
  362. $query->where('is_deleted',0)->whereBetween('created_at',[$start,$end]);
  363. })
  364. ->whereHas('get_goods',function($query)use($ids){
  365. $query->whereIn('attr_id',$ids);
  366. })
  367. ->groupBy('goods_size')
  368. ->select('goods_size',DB::raw('sum(num) as total'))
  369. ->get();
  370. return $this->success($list);
  371. }
  372. public function getProvinceUserInfo(Request $request){
  373. $input=$request->all();
  374. $province=$input['province'];
  375. $activity=Activity::where('is_ing',1)->first();
  376. $start=$activity->start_time;
  377. $end=$activity->end_time;
  378. $phones=UserZ::where('province','like','%'.$province.'%')->where('level_name','代理公司')->pluck('phone');
  379. $users=User::whereIn('mobile',$phones)->select('id','nickname','mobile')->get();
  380. foreach($users as $key=>$val){
  381. $info=Ordertest::leftjoin('order_detail as od','od.order_id','=','order_test.id')
  382. ->leftjoin('goods_test as gt','gt.id','=','od.goods_id')
  383. ->where('order_test.is_deleted',0)
  384. ->whereBetween('order_test.created_at',[$start,$end])
  385. ->where('order_test.user_id',$val->id)
  386. ->groupBy('gt.main_attr')
  387. ->select('gt.main_attr',DB::raw('sum(od.num) as total'))
  388. ->get();
  389. $users[$key]->hard=0;
  390. $users[$key]->simple=0;
  391. $users[$key]->old=0;
  392. $users[$key]->cold=0;
  393. foreach($info as $k=>$v){
  394. switch($v->main_attr){
  395. case '大卫博士精装版':
  396. $users[$key]->hard=$v->total;
  397. break;
  398. case '大卫博士简约版':
  399. $users[$key]->simple=$v->total;
  400. break;
  401. case '大卫博士老人版':
  402. $users[$key]->old=$v->total;
  403. break;
  404. case '大卫博士纯棉老人版':
  405. $users[$key]->cold=$v->total;
  406. break;
  407. }
  408. }
  409. $users[$key]->acc=Ordertest::where('user_id',$val->id)->whereBetween('created_at',[$start,$end])->where('is_deleted',0)->sum('money');
  410. }
  411. return $this->success($users);
  412. }
  413. public function getOtherUserInfo(){
  414. $user_z=UserZ::select('nickname','phone','level_name','created_at','updated_at')->where('level_name','!=','政委')->orderBy('id','desc')->get();
  415. $data=[];
  416. $duu=[];
  417. foreach($user_z as $key=>$val){
  418. $user=User::where('mobile',$val->phone)->first();
  419. if(empty($user)){
  420. continue;
  421. $duu[]=$val;
  422. }
  423. if($user->level=='1'){
  424. // $user_z[$key]->level='销售主管';
  425. if($val->level_name!='销售主管'){
  426. $val->user_level='销售主管';
  427. $val->user_recom=$user->recom_id;
  428. $val->user_agent=$user->agent_id;
  429. $val->user_warea_id=$user->warea_id;
  430. $val->user_id=$user->id;
  431. $val->user_created=$user->created_at;
  432. $val->user_updated=$user->updated_at;
  433. $val->user_nickname=$user->nickname;
  434. $data[]=$val;
  435. }
  436. }elseif($user->level=='2'){
  437. // $user_z[$key]->level='销售经理';
  438. if($val->level_name!='销售经理'){
  439. $val->user_level='销售经理';
  440. $val->user_recom=$user->recom_id;
  441. $val->user_agent=$user->agent_id;
  442. $val->user_warea_id=$user->warea_id;
  443. $val->user_id=$user->id;
  444. $val->user_created=$user->created_at;
  445. $val->user_updated=$user->updated_at;
  446. $val->user_nickname=$user->nickname;
  447. $data[]=$val;
  448. }
  449. }elseif($user->level=='3'){
  450. // $user_z[$key]->level='代理公司';
  451. if($val->level_name!='代理公司'){
  452. $val->user_level='代理公司';
  453. $val->user_recom=$user->recom_id;
  454. $val->user_agent=$user->agent_id;
  455. $val->user_warea_id=$user->warea_id;
  456. $val->user_id=$user->id;
  457. $val->user_created=$user->created_at;
  458. $val->user_updated=$user->updated_at;
  459. $val->user_nickname=$user->nickname;
  460. $data[]=$val;
  461. }
  462. }
  463. }
  464. $count=count($data);
  465. return $this->success_list($data,'',$count);
  466. }
  467. public function index(){
  468. $arr=Express::where('id','>',37)->get();
  469. $arrs=[];
  470. foreach ($arr as $k=>$v){
  471. $arrs[$k]=json_decode($v->notes);
  472. }
  473. dd($arrs);
  474. }
  475. }