IndexController.php 17 KB

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