StatisticalController.php 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\GoodsSpec;
  4. use Illuminate\Http\Request;
  5. use App\Models\GoodsSku;
  6. use App\Models\User;
  7. use App\Models\OrderGoods;
  8. use App\Models\System;
  9. use App\Models\Store;
  10. use App\Models\Rewards;
  11. use Illuminate\Database\Eloquent\Builder;
  12. use Illuminate\Support\Facades\DB;
  13. use App\Exports\StatisticalExport;
  14. use App\Http\Requests;
  15. use Excel;
  16. class StatisticalController extends Controller
  17. {
  18. public function export(Request $request){
  19. return Excel::download(new StatisticalExport, 'users.csv');
  20. }
  21. //销售额统计(扇形图)
  22. public function SalesStatisticsFan(){
  23. $starttime='2000-01-01 00:00:00';
  24. $endtime='2050-01-01 00:00:00';
  25. $list=$this->getStatisticalList($starttime,$endtime);
  26. return $this->success($list);
  27. }
  28. //销售额统计(柱形图)
  29. public function SalesStatisticsCyl(Request $request){
  30. $time=date("Y-01-01 00:00:00",strtotime($request->get('year').'-01'));
  31. for($i=0;$i<12;$i++){
  32. $start=$time;
  33. $time= date("Y-m-d H:i:s",strtotime("$time +1 month"));
  34. $end=$time;
  35. $list[$i+1]=$this->getStatisticalList($start,$end);
  36. }
  37. $lists=[];
  38. foreach($list as $key=>$val){
  39. foreach($val as $k=>$v){
  40. $lists[$v['goods_id']]['name']=$v['goods']['name'];
  41. $lists[$v['goods_id']]['account'][$key]=$v['account'];
  42. }
  43. }
  44. return $this->success($lists);
  45. }
  46. //销售额统计(折线图)
  47. public function SalesStatisticsLine(Request $request){
  48. $t=date('t', strtotime($request->get('month')));
  49. $time=date("Y-m-01 00:00:00",strtotime($request->get('month')));
  50. for($i=0;$i<$t;$i++){
  51. $start=$time;
  52. $time= date("Y-m-d H:i:s",strtotime("$time +1 days"));
  53. $end=$time;
  54. $list[$i+1]=$this->getStatisticalList($start,$end);
  55. }
  56. $lists=[];
  57. foreach($list as $key=>$val){
  58. foreach($val as $k=>$v){
  59. $lists[$v['goods_id']]['name']=$v['goods']['name'];
  60. $lists[$v['goods_id']]['account'][$key]=$v['account'];
  61. }
  62. }
  63. return $this->success_list($lists,$msg="SUCCESS",$t);
  64. }
  65. public function getStatisticalList($starttime,$endtime){
  66. $time=[$starttime,$endtime];
  67. $list=OrderGoods::
  68. select('goods_id','order_id',DB::raw('SUM(totalprice) as account'))//,DB::raw('SUM(totalprice) as account'),'order_id','sku_id','totalprice'
  69. ->with(['goods:id,name'])
  70. ->whereHas('order', function (Builder $query) use ($time) {
  71. $query->whereBetween('created_at',$time)//'2020-01-01 00:00:00'
  72. ->whereIn('status',[2,3])
  73. ->where('agent_id',1);
  74. })
  75. ->groupBy('goods_id')
  76. ->get();
  77. return $list;
  78. }
  79. //销售量统计(扇形图)
  80. public function SalesStatisticsNumFan(){
  81. $starttime='2000-01-01 00:00:00';
  82. $endtime='2050-01-01 00:00:00';
  83. $list=$this->getStatisticalNumList($starttime,$endtime);
  84. return $this->success($list);
  85. }
  86. //销售量统计(柱形图)
  87. public function SalesStatisticsNumCyl(Request $request){
  88. $time=date("Y-01-01 00:00:00",strtotime($request->get('year').'-01'));
  89. for($i=0;$i<12;$i++){
  90. $start=$time;
  91. $time= date("Y-m-d H:i:s",strtotime("$time +1 month"));
  92. $end=$time;
  93. $list[$i+1]=$this->getStatisticalNumList($start,$end);
  94. }
  95. $lists=[];
  96. foreach($list as $key=>$val){
  97. foreach($val as $k=>$v){
  98. $lists[$v['goods_id']]['name']=$v['goods']['name'];
  99. $lists[$v['goods_id']]['total'][$key]=$v['total'];
  100. }
  101. }
  102. return $this->success($lists);
  103. }
  104. //销售量统计(折线图)
  105. public function SalesStatisticsNumLine(Request $request){
  106. $t=date('t', strtotime($request->get('month')));
  107. $time=date("Y-m-01 00:00:00",strtotime($request->get('month')));
  108. for($i=0;$i<$t;$i++){
  109. $start=$time;
  110. $time= date("Y-m-d H:i:s",strtotime("$time +1 days"));
  111. $end=$time;
  112. $list[$i+1]=$this->getStatisticalNumList($start,$end);
  113. }
  114. $lists=[];
  115. foreach($list as $key=>$val){
  116. foreach($val as $k=>$v){
  117. $lists[$v['goods_id']]['name']=$v['goods']['name'];
  118. $lists[$v['goods_id']]['total'][$key]=$v['total'];
  119. }
  120. }
  121. return $this->success_list($lists,$msg="SUCCESS",$t);
  122. }
  123. public function getStatisticalNumList($starttime,$endtime){
  124. $time=[$starttime,$endtime];
  125. $list=OrderGoods::
  126. select('goods_id','order_id',DB::raw('SUM(num) as total'))//,DB::raw('SUM(totalprice) as account'),'order_id','sku_id','totalprice'
  127. ->with(['goods:id,name'])
  128. ->whereHas('order', function (Builder $query) use ($time) {
  129. $query
  130. ->whereBetween('created_at',$time)//'2020-01-01 00:00:00'
  131. ->whereIn('status',[2,3])
  132. ->where('agent_id',1)
  133. ;
  134. })
  135. ->groupBy('goods_id')
  136. ->get();
  137. return $list;
  138. }
  139. //新增代理统计
  140. public function agentAddNum(Request $request)
  141. {
  142. $input=$request->all();
  143. switch($input['type']){
  144. case '0':
  145. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  146. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  147. break;
  148. case '1':
  149. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  150. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  151. break;
  152. case '2':
  153. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  154. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  155. break;
  156. }
  157. $time = [$starttime, $endtime];
  158. //新增代理统计
  159. $count['all'] = User::whereBetween('created_at', $time)->count();
  160. //新增皇冠代理统计
  161. $count['crow'] = User::whereBetween('created_at', $time)->where('level', 3)->count();
  162. //新增顶级代理统计
  163. $count['top'] = User::whereBetween('created_at', $time)->where('level', 2)->count();
  164. //新增特级代理统计
  165. $count['super'] = User::whereBetween('created_at', $time)->where('level', 1)->count();
  166. return $this->success($count);
  167. }
  168. public function agentAddNumLine(Request $request){
  169. $input=$request->all();
  170. switch($input['type']){
  171. case '0':
  172. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  173. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  174. break;
  175. case '1':
  176. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  177. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  178. break;
  179. case '2':
  180. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  181. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  182. break;
  183. }
  184. $time = [$starttime, $endtime];
  185. //新增代理统计
  186. $count['all'] = User::whereBetween('created_at', $time)
  187. ->selectRaw('DATE(created_at) as date,COUNT(*) as value')
  188. ->groupBy('date')
  189. ->get();
  190. //新增皇冠代理统计
  191. $count['crow'] = User::whereBetween('created_at', $time)
  192. ->where('level', 3)
  193. ->selectRaw('DATE(created_at) as date,COUNT(*) as value')
  194. ->groupBy('date')
  195. ->get();
  196. //新增顶级代理统计
  197. $count['top'] = User::whereBetween('created_at', $time)
  198. ->where('level', 2)
  199. ->selectRaw('DATE(created_at) as date,COUNT(*) as value')
  200. ->groupBy('date')
  201. ->get();
  202. //新增特级代理统计
  203. $count['super'] = User::whereBetween('created_at', $time)
  204. ->where('level', 1)
  205. ->selectRaw('DATE(created_at) as date,COUNT(*) as value')
  206. ->groupBy('date')
  207. ->get();
  208. return $this->success($count);
  209. }
  210. //代理业绩排行榜
  211. public function agentSalesResults(Request $request){
  212. $input=$request->all();
  213. $page_size=$input['page_size'];
  214. $page_index=$input['page_index'];
  215. $num = ($page_index - 1) * $page_size;
  216. $search_name=$input['search_name'];
  217. switch($input['type']){
  218. case '0':
  219. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  220. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  221. break;
  222. case '1':
  223. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  224. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  225. break;
  226. case '2':
  227. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  228. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  229. break;
  230. }
  231. $time = [$starttime, $endtime];
  232. $count=DB::table('users')
  233. ->select('users.nickname','users.level','warea.name as warea','uu.nickname as agent',DB::raw('SUM(order_goods.totalprice) as account'))
  234. ->leftJoin('order','order.user_id','=','users.id')
  235. ->leftJoin('order_goods','order.id','=','order_goods.order_id')
  236. ->leftJoin('warea','warea.id','=','users.warea_id')
  237. ->leftJoin('users as uu','uu.id','=','users.agent_id')
  238. ->whereIn('order.status',[2,3])
  239. ->whereBetween('order.created_at',$time)
  240. ->where('users.nickname', 'like', '%' . $search_name . '%')
  241. ->groupBy('users.id')
  242. ->get()->count();
  243. // $list=User::
  244. // select('goods_id','order_id',DB::raw('SUM(num) as total'))//,DB::raw('SUM(totalprice) as account'),'order_id','sku_id','totalprice'
  245. // ->with(['agent:id,nickname','warea:id,name'])
  246. // ->whereHas('order', function (Builder $query) use ($time) {
  247. // $query
  248. // ->whereBetween('created_at',$time)//'2020-01-01 00:00:00'
  249. // ->whereIn('status',[2,3])
  250. // ->whereHas('user', function (Builder $query1) {
  251. // $query1->where('level',3);
  252. // })
  253. // ;
  254. // })
  255. // ->groupBy('goods_id')
  256. // ->get();
  257. if($count==0){
  258. $this->error('400001','没有数据');
  259. }
  260. $list=DB::table('users')
  261. ->select('users.nickname','users.level','warea.name as warea','uu.nickname as agent',DB::raw('SUM(order_goods.totalprice) as account'))
  262. ->leftJoin('order','order.user_id','=','users.id')
  263. ->leftJoin('order_goods','order.id','=','order_goods.order_id')
  264. ->leftJoin('warea','warea.id','=','users.warea_id')
  265. ->leftJoin('users as uu','uu.id','=','users.agent_id')
  266. ->whereIn('order.status',[2,3])
  267. ->whereBetween('order.created_at',$time)
  268. ->where('users.nickname', 'like', '%' . $search_name . '%')
  269. ->groupBy('users.id')
  270. ->orderBy('account','desc')
  271. ->skip($num)->take($page_size)
  272. ->get();
  273. if($list){
  274. return $this->success_list($list,'SUCCESS',$count);
  275. }else{
  276. return $this->error();
  277. }
  278. }
  279. //战区销售额排行
  280. public function wareaSalesResults(Request $request){
  281. $input=$request->all();
  282. $page_size=$input['page_size'];
  283. $page_index=$input['page_index'];
  284. $num = ($page_index - 1) * $page_size;
  285. switch($input['type']){
  286. case '0':
  287. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  288. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  289. break;
  290. case '1':
  291. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  292. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  293. break;
  294. case '2':
  295. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  296. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  297. break;
  298. }
  299. $time = [$starttime, $endtime];
  300. $count =DB::table('warea')
  301. ->select('warea.name as warea', DB::raw('SUM(order_goods.totalprice) as account'))
  302. ->leftJoin('users', function ($join) {
  303. $join->on('users.warea_id', '=', 'warea.id')
  304. ->where('users.level', '=', 3);
  305. })
  306. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  307. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  308. ->whereIn('order.status',[2,3])
  309. ->whereBetween('order.created_at',$time)
  310. ->groupBy('warea.id')
  311. ->get()->count();
  312. if($count==0){
  313. $this->error('400001','没有数据');
  314. }
  315. $list = DB::table('warea')
  316. ->select('warea.name as warea', DB::raw('SUM(order_goods.totalprice) as account'))
  317. ->leftJoin('users', function ($join) {
  318. $join->on('users.warea_id', '=', 'warea.id')
  319. ->where('users.level', '=', 3);//只计算战区中皇冠的进货总金额
  320. })
  321. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  322. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  323. ->whereIn('order.status',[2,3])
  324. ->whereBetween('order.created_at',$time)
  325. ->groupBy('warea.id')
  326. ->orderBy('account','desc')
  327. ->skip($num)->take($page_size)
  328. ->get();
  329. if ($list) {
  330. return $this->success_list($list,'SUCCESS',$count);
  331. } else {
  332. return $this->error();
  333. }
  334. }
  335. //皇冠代理团队业绩排行
  336. public function crownTeamSalesResults(Request $request){
  337. $input=$request->all();
  338. $page_size=$input['page_size'];
  339. $page_index=$input['page_index'];
  340. $num = ($page_index - 1) * $page_size;
  341. switch($input['type']){
  342. case '0':
  343. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  344. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  345. break;
  346. case '1':
  347. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  348. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  349. break;
  350. case '2':
  351. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  352. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  353. break;
  354. }
  355. $time = [$starttime, $endtime];
  356. $count = DB::table('users')
  357. ->select('users.name as crowteam', DB::raw('SUM(order_goods.totalprice) as account'))
  358. ->leftJoin('users as uu', 'users.id', '=', 'uu.agent_id')
  359. ->leftJoin('order', 'order.user_id', '=', 'uu.id')
  360. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  361. ->whereIn('order.status',[2,3])
  362. ->whereBetween('order.created_at',$time)
  363. ->where('users.level', '=', 3)
  364. ->groupBy('users.id')
  365. ->get()->count();
  366. if($count==0){
  367. $this->error('400001','没有数据');
  368. }
  369. $list = DB::table('users')
  370. ->select('users.nickname as crowteam', DB::raw('SUM(order_goods.totalprice) as account'))
  371. ->leftJoin('users as uu', 'users.id', '=', 'uu.agent_id')
  372. ->leftJoin('order', 'order.user_id', '=', 'uu.id') //皇冠下级进货总量
  373. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  374. ->whereIn('order.status',[2,3])
  375. ->whereBetween('order.created_at',$time)
  376. ->where('users.level', '=', 3)
  377. ->groupBy('users.id')
  378. ->orderBy('account','desc')
  379. ->skip($num)->take($page_size)
  380. ->get();
  381. if ($list) {
  382. return $this->success_list($list,'SUCCESS',$count);
  383. } else {
  384. return $this->error();
  385. }
  386. }
  387. //皇冠团队新增代理人数
  388. public function crownAddAgentNum(Request $request){
  389. $input=$request->all();
  390. $page_size=$input['page_size'];
  391. $page_index=$input['page_index'];
  392. $num = ($page_index - 1) * $page_size;
  393. switch($input['type']){
  394. case '0':
  395. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  396. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  397. break;
  398. case '1':
  399. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  400. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  401. break;
  402. case '2':
  403. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  404. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  405. break;
  406. }
  407. $time = [$starttime, $endtime];
  408. $count = DB::table('users')
  409. ->select('users.nickname as teamName','users.id',DB::raw('COUNT(uu.id) as count'))
  410. ->where('users.level', '=', 3)
  411. ->leftJoin('users as uu', 'users.id', '=', 'uu.crown_id')
  412. ->whereBetween('uu.created_at',$time)
  413. ->groupBy('users.id')
  414. ->get()->count();
  415. if($count==0){
  416. $this->error('400001','没有数据');
  417. }
  418. $list = DB::table('users')
  419. ->select('users.nickname as teamName','users.id',DB::raw('COUNT(uu.id) as count'))
  420. ->where('users.level', '=', 3)
  421. ->leftJoin('users as uu', 'users.id', '=', 'uu.crown_id')
  422. ->whereBetween('uu.created_at',$time)
  423. ->groupBy('users.id')
  424. ->orderBy('count','desc')
  425. ->skip($num)->take($page_size)
  426. ->get();
  427. if ($list) {
  428. return $this->success_list($list,'SUCCESS',$count);
  429. } else {
  430. return $this->error();
  431. }
  432. }
  433. //店铺业绩排行榜
  434. public function storeSalesResults(Request $request){
  435. $input=$request->all();
  436. $page_size=$input['page_size'];
  437. $page_index=$input['page_index'];
  438. $num = ($page_index - 1) * $page_size;
  439. switch($input['type']){
  440. case '0':
  441. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  442. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  443. break;
  444. case '1':
  445. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  446. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  447. break;
  448. case '2':
  449. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  450. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  451. break;
  452. }
  453. $time = [$starttime, $endtime];
  454. $count = DB::table('store')
  455. ->select('store.name as storename', DB::raw('SUM(order_goods.totalprice) as account'))
  456. ->leftJoin('users', function ($join) {
  457. $join->on('users.store_id', '=', 'store.id');
  458. })
  459. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  460. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  461. ->whereIn('order.status',[2,3])
  462. ->whereBetween('order.created_at',$time)
  463. ->groupBy('store.id')
  464. ->get()->count();
  465. if($count==0){
  466. $this->error('400001','没有数据');
  467. }
  468. $list = DB::table('store')
  469. ->select('store.name as storename', DB::raw('SUM(order_goods.totalprice) as account'))
  470. ->leftJoin('users', function ($join) {
  471. $join->on('users.store_id', '=', 'store.id');
  472. })
  473. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  474. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  475. ->whereIn('order.status',[2,3])
  476. ->whereBetween('order.created_at',$time)
  477. ->groupBy('store.id')
  478. ->orderBy('account','desc')
  479. ->skip($num)->take($page_size)
  480. ->get();
  481. if ($list) {
  482. return $this->success_list($list,'SUCCESS',$count);
  483. } else {
  484. return $this->error();
  485. }
  486. }
  487. //流水账单
  488. public function salesWaterBills(Request $request){
  489. $input=$request->all();
  490. $page_size=$input['page_size'];
  491. $page_index=$input['page_index'];
  492. $num = ($page_index - 1) * $page_size;
  493. switch($input['type']){
  494. case '0':
  495. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  496. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  497. break;
  498. case '1':
  499. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  500. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  501. break;
  502. case '2':
  503. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  504. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  505. break;
  506. }
  507. $time = [$starttime, $endtime];
  508. $count=DB::table('order')
  509. ->select('order.id','order.ordersn', DB::raw('SUM(order_goods.totalprice) as account'),DB::raw('SUM(order_goods.num) as total'),'order.created_at')
  510. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  511. ->whereIn('order.status',[2,3])
  512. ->whereBetween('order.created_at',$time)
  513. ->groupBy('order.id')
  514. ->orderBy('account','desc')
  515. ->get()->count();
  516. if($count==0){
  517. $this->error('400001','没有数据');
  518. }
  519. $list=DB::table('order')
  520. ->select('order.id','order.ordersn', DB::raw('SUM(order_goods.totalprice) as account'),DB::raw('SUM(order_goods.num) as total'),'order.created_at')
  521. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  522. ->whereIn('order.status',[2,3])
  523. ->whereBetween('order.created_at',$time)
  524. ->groupBy('order.id')
  525. ->orderBy('account','desc')
  526. ->skip($num)->take($page_size)
  527. ->get();
  528. foreach($list as $key =>$val){
  529. $goodsinfo=DB::table('order_goods')->select('goods.name','order_goods.sku_id','order_goods.price','order_goods.num','order_goods.totalprice')
  530. ->where('order_id',$val->id)
  531. ->leftJoin('goods','goods.id','order_goods.goods_id')
  532. ->get();
  533. foreach($goodsinfo as $k =>$v){
  534. $goodsinfo[$k]->sku=$this->getSku($v->sku_id);
  535. }
  536. $list[$key]->goods=$goodsinfo;
  537. }
  538. if ($list) {
  539. return $this->success_list($list,'SUCCESS',$count);
  540. } else {
  541. return $this->error();
  542. }
  543. }
  544. public function getSku($id){
  545. $goodsSku=GoodsSku::withTrashed()->find($id);
  546. $path=$goodsSku->sku_path;
  547. $arr=explode('/',$path);
  548. $goodsSku=[];
  549. foreach($arr as $k=>$v){
  550. $upSpec=GoodsSpec::withTrashed()->where('id',$v)->first();
  551. $upSpec['uptitle']=GoodsSpec::withTrashed()->where('id',$upSpec->pid)->value('title');
  552. $goodsSku[$upSpec['uptitle']]=$upSpec->title;
  553. }
  554. return $goodsSku;
  555. }
  556. //进货奖励
  557. public function rewardSpending(Request $request){
  558. $input=$request->all();
  559. $page_size=$input['page_size'];
  560. $page_index=$input['page_index'];
  561. $num = ($page_index - 1) * $page_size;
  562. switch($input['type']){
  563. case '0':
  564. $starttime=date("Y-m-d 00:00:00",strtotime($input['time'][0]));
  565. $endtime= date("Y-m-d 00:00:00",strtotime($input['time'][1] ."+1 days"));
  566. break;
  567. case '1':
  568. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  569. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  570. break;
  571. case '2':
  572. $starttime=date("Y-01-01 00:00:00",strtotime($input['time']));
  573. $endtime= date("Y-01-01 00:00:00",strtotime($input['time'] ."+1 year"));
  574. break;
  575. }
  576. $time = [$starttime, $endtime];
  577. $count=DB::table('rewards')
  578. ->select('rewards.id','uu.nickname as agent_name','users.nickname as recom_name','rewards.bonus','rewards.created_at')
  579. // DB::raw('SUM(rewards.bonus) as account')
  580. ->leftJoin('users','users.id','=','rewards.recom_id')
  581. ->leftJoin('users as uu','uu.id','=','rewards.agent_id')
  582. // ->where('rewards.agent_id',0)
  583. ->where('rewards.type', 1)
  584. ->whereBetween('rewards.created_at',$time)
  585. // ->groupBy('rewards.recom_id')
  586. ->get()->count();
  587. if($count==0){
  588. $this->error('400001','没有数据');
  589. }
  590. $list=DB::table('rewards')
  591. ->select('rewards.id','uu.nickname as agent_name','users.nickname as recom_name','rewards.bonus','rewards.created_at')
  592. ->leftJoin('users','users.id','=','rewards.recom_id')
  593. ->leftJoin('users as uu','uu.id','=','rewards.agent_id')
  594. // ->where('rewards.agent_id',0)
  595. ->where('rewards.type',1)
  596. ->whereBetween('rewards.created_at',$time)
  597. // ->groupBy('rewards.recom_id')
  598. ->orderBy('rewards.id','desc')
  599. ->skip($num)->take($page_size)
  600. ->get();
  601. if ($list) {
  602. return $this->success_list($list,'SUCCESS',$count);
  603. } else {
  604. return $this->error();
  605. }
  606. }
  607. //业绩奖励
  608. public function performanceReward(Request $request)
  609. {
  610. $input = $request->all();
  611. $page_size = $input['page_size'];
  612. $page_index = $input['page_index'];
  613. $num = ($page_index - 1) * $page_size;
  614. switch ($input['type']) {
  615. case '0':
  616. $starttime = date("Y-m-d 00:00:00", strtotime($input['time'][0]));
  617. $endtime = date("Y-m-d 00:00:00", strtotime($input['time'][1] . "+1 days"));
  618. break;
  619. case '1':
  620. $starttime = date("Y-m-01 00:00:00", strtotime($input['time']));
  621. $endtime = date("Y-m-01 00:00:00", strtotime($input['time'] . "+1 months"));
  622. break;
  623. case '2':
  624. $starttime = date("Y-01-01 00:00:00", strtotime($input['time']));
  625. $endtime = date("Y-01-01 00:00:00", strtotime($input['time'] . "+1 year"));
  626. break;
  627. }
  628. $time = [$starttime, $endtime];
  629. $count = DB::table('rewards')
  630. ->select('rewards.id','users.nickname', 'rewards.bonus','rewards.month','rewards.created_at')
  631. ->leftJoin('users', 'users.id', '=', 'rewards.recom_id')
  632. // ->where('rewards.agent_id', 0)
  633. ->where('rewards.type', 2)
  634. ->whereBetween('rewards.created_at', $time)
  635. // ->groupBy('rewards.recom_id')
  636. ->get()->count();
  637. if ($count == 0) {
  638. $this->error('400001', '没有数据');
  639. }
  640. $list = DB::table('rewards')
  641. ->select('rewards.id','users.nickname', 'rewards.bonus','rewards.month','rewards.created_at')
  642. ->leftJoin('users', 'users.id', '=', 'rewards.recom_id')
  643. // ->where('rewards.agent_id', 0)
  644. ->where('rewards.type', 2)
  645. ->whereBetween('rewards.created_at', $time)
  646. // ->groupBy('rewards.recom_id')
  647. ->orderBy('rewards.id', 'desc')
  648. ->skip($num)->take($page_size)
  649. ->get();
  650. if ($list) {
  651. return $this->success_list($list, 'SUCCESS', $count);
  652. } else {
  653. return $this->error();
  654. }
  655. }
  656. //店铺奖励
  657. public function storeReward(Request $request)
  658. {
  659. $input = $request->all();
  660. $page_size = $input['page_size'];
  661. $page_index = $input['page_index'];
  662. $num = ($page_index - 1) * $page_size;
  663. switch ($input['type']) {
  664. case '0':
  665. $starttime = date("Y-m-d 00:00:00", strtotime($input['time'][0]));
  666. $endtime = date("Y-m-d 00:00:00", strtotime($input['time'][1] . "+1 days"));
  667. break;
  668. case '1':
  669. $starttime = date("Y-m-01 00:00:00", strtotime($input['time']));
  670. $endtime = date("Y-m-01 00:00:00", strtotime($input['time'] . "+1 months"));
  671. break;
  672. case '2':
  673. $starttime = date("Y-01-01 00:00:00", strtotime($input['time']));
  674. $endtime = date("Y-01-01 00:00:00", strtotime($input['time'] . "+1 year"));
  675. break;
  676. }
  677. $time = [$starttime, $endtime];
  678. $count = DB::table('rewards')
  679. ->select('store.id', 'store.name','goods.name','rewards.*')
  680. ->leftJoin('goods', 'goods.id', '=', 'rewards.goods_id')
  681. ->leftJoin('store', 'store.id', '=', 'rewards.store_id')
  682. // ->where('rewards.agent_id', 0)
  683. ->where('rewards.type', 3)
  684. ->whereBetween('rewards.created_at', $time)
  685. // ->groupBy('store.id')
  686. ->get()->count();
  687. if ($count == 0) {
  688. $this->error('400001', '没有数据');
  689. }
  690. $list = DB::table('rewards')
  691. ->select('store.id', 'store.name','goods.name as goodsname','rewards.*')
  692. ->leftJoin('goods', 'goods.id', '=', 'rewards.goods_id')
  693. ->leftJoin('store', 'store.id', '=', 'rewards.store_id')
  694. // ->where('rewards.agent_id', 0)
  695. ->where('rewards.type', 3)
  696. ->whereBetween('rewards.created_at', $time)
  697. // ->groupBy('store.id')
  698. ->orderBy('rewards.id', 'desc')
  699. ->skip($num)->take($page_size)
  700. ->get();
  701. if ($list) {
  702. return $this->success_list($list, 'SUCCESS', $count);
  703. } else {
  704. return $this->error();
  705. }
  706. }
  707. //店铺奖励详情
  708. public function getStoreRewardDetail(Request $request){
  709. $input = $request->all();
  710. switch ($input['type']) {
  711. case '0':
  712. $starttime = date("Y-m-d 00:00:00", strtotime($input['time'][0]));
  713. $endtime = date("Y-m-d 00:00:00", strtotime($input['time'][1] . "+1 days"));
  714. break;
  715. case '1':
  716. $starttime = date("Y-m-01 00:00:00", strtotime($input['time']));
  717. $endtime = date("Y-m-01 00:00:00", strtotime($input['time'] . "+1 months"));
  718. break;
  719. case '2':
  720. $starttime = date("Y-01-01 00:00:00", strtotime($input['time']));
  721. $endtime = date("Y-01-01 00:00:00", strtotime($input['time'] . "+1 year"));
  722. break;
  723. }
  724. $time = [$starttime, $endtime];
  725. $list = DB::table('users')
  726. ->select('users.id', 'users.nickname', DB::raw('SUM(rewards.bonus) as account'))
  727. ->leftJoin('users', 'users.store_id', '=', 'store.id')
  728. ->leftJoin('rewards', 'users.id', '=', 'rewards.recom_id')
  729. ->where('users.store_id',$input['id'])
  730. ->where('rewards.agent_id', 0)
  731. ->where('rewards.type', 2)
  732. ->whereBetween('rewards.created_at', $time)
  733. ->groupBy('users.id')
  734. ->get();
  735. if ($list) {
  736. return $this->success($list);
  737. } else {
  738. return $this->error();
  739. }
  740. }
  741. //获取代理业绩奖励结算信息
  742. public function getAgentSalesResult(Request $request){
  743. $input=$request->all();
  744. $page_size=$input['page_size'];
  745. $page_index=$input['page_index'];
  746. $num = ($page_index - 1) * $page_size;
  747. $search_name=$input['search_name'];
  748. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  749. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  750. $time = [$starttime, $endtime];
  751. $sales_area_reward_str=System::where('keys','sales_area_reward')->value('values');
  752. $sales_area_reward_arr=explode('/',$sales_area_reward_str);
  753. foreach($sales_area_reward_arr as $key =>$val){
  754. $sales_area_reward[$key]=explode('*',$val);
  755. }
  756. $result = array();
  757. foreach($sales_area_reward as $k=>$v){
  758. $result[$k] = $v[0];
  759. }
  760. $minValue=min($result);
  761. $count=DB::table('users')
  762. ->select('users.id','users.nickname','users.level','warea.name as warea','uu.nickname as agent',DB::raw('SUM(order_goods.totalprice) as account'))
  763. ->leftJoin('order','order.user_id','=','users.id')
  764. ->leftJoin('order_goods','order.id','=','order_goods.order_id')
  765. ->leftJoin('warea','warea.id','=','users.warea_id')
  766. ->leftJoin('users as uu','uu.id','=','users.agent_id')
  767. ->whereIn('order.status',[2,3])
  768. ->whereBetween('order.created_at',$time)
  769. ->where('users.nickname', 'like', '%' . $search_name . '%')
  770. ->groupBy('users.id')
  771. ->having('account','>=',$minValue)
  772. ->get()->count();
  773. if($count==0){
  774. $this->error('400001','没有数据');
  775. }
  776. $list=DB::table('users')
  777. ->select('users.id','users.nickname','users.level','warea.name as warea','uu.nickname as agent',DB::raw('SUM(order_goods.totalprice) as account'))
  778. ->leftJoin('order','order.user_id','=','users.id')
  779. ->leftJoin('order_goods','order.id','=','order_goods.order_id')
  780. ->leftJoin('warea','warea.id','=','users.warea_id')
  781. ->leftJoin('users as uu','uu.id','=','users.agent_id')
  782. ->whereIn('order.status',[2,3])
  783. ->whereBetween('order.created_at',$time)
  784. ->where('users.nickname', 'like', '%' . $search_name . '%')
  785. ->groupBy('users.id')
  786. ->having('account','>=',$minValue)
  787. ->orderBy('account','desc')
  788. ->skip($num)->take($page_size)
  789. ->get();
  790. foreach ($list as $key=>$val){
  791. $rewards=Rewards::where('recom_id',$val->id)->where('type',2)->where('month',$input['time'])->first();
  792. if($rewards){
  793. $list[$key]->finished=1;
  794. }else{
  795. $list[$key]->finished=0;
  796. }
  797. foreach($sales_area_reward as $k=>$v){
  798. if($val->account>=$v[0] && $val->account<$v[1]){
  799. $list[$key]->rewards=round($val->account*$v[2]/100,2);
  800. }
  801. }
  802. $list[$key]->minValue=$minValue;
  803. }
  804. if($list){
  805. return $this->success_list($list,'SUCCESS',$count);
  806. }else{
  807. return $this->error();
  808. }
  809. }
  810. //获取门店业绩奖励货物结算信息
  811. public function getStoreSalesResultGoods(Request $request){
  812. $input=$request->all();
  813. $page_size=$input['page_size'];
  814. $page_index=$input['page_index'];
  815. $num = ($page_index - 1) * $page_size;
  816. $type=$input['type'];
  817. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  818. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  819. $time = [$starttime, $endtime];
  820. if($type==1){
  821. $rate=System::where('keys','store_reward_goods_job')->value('values');
  822. }elseif($type==2){
  823. $rate=System::where('keys','store_reward_goods_enjoy')->value('values');
  824. }
  825. $count = DB::table('store')
  826. ->select('store.name as storename', DB::raw('SUM(order_goods.totalprice) as account'))
  827. ->leftJoin('users', function ($join) {
  828. $join->on('users.store_id', '=', 'store.id');
  829. })
  830. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  831. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  832. ->leftJoin('users as uu','uu.id','=','store.man_id')
  833. ->where('store.type',$type)
  834. ->whereIn('order.status',[2,3])
  835. ->whereBetween('order.created_at',$time)
  836. ->groupBy('store.id')
  837. ->get()->count();
  838. if($count==0){
  839. $this->error('400001','没有数据');
  840. }
  841. $list = DB::table('store')
  842. ->select('store.id','store.name as storename','store.man_id','uu.nickname', DB::raw('SUM(order_goods.totalprice) as account'))
  843. ->leftJoin('users', function ($join) {
  844. $join->on('users.store_id', '=', 'store.id');
  845. })
  846. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  847. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  848. ->leftJoin('users as uu','uu.id','=','store.man_id')
  849. ->where('store.type',$type)
  850. ->whereIn('order.status',[2,3])
  851. ->whereBetween('order.created_at',$time)
  852. ->groupBy('store.id')
  853. ->orderBy('account','desc')
  854. ->skip($num)->take($page_size)
  855. ->get();
  856. foreach($list as $key =>$val){
  857. $rewards=Rewards::where('recom_id',$val->man_id)->where('type',3)->where('month',$input['time'])->first();
  858. if($rewards){
  859. $list[$key]->finished=1;
  860. }else{
  861. $list[$key]->finished=0;
  862. }
  863. $list[$key]->style=2;
  864. $list[$key]->rewards=round($val->account*$rate/100,2);
  865. }
  866. if ($list) {
  867. return $this->success_list($list,'SUCCESS',$count);
  868. } else {
  869. return $this->error();
  870. }
  871. }
  872. //获取门店业绩奖励钱结算信息
  873. public function getStoreSalesResultMoney(Request $request){
  874. $input=$request->all();
  875. $page_size=$input['page_size'];
  876. $page_index=$input['page_index'];
  877. $num = ($page_index - 1) * $page_size;
  878. $type=$input['type'];
  879. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  880. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  881. $time = [$starttime, $endtime];
  882. if($type==2){
  883. $rate=System::where('keys','store_reward_money_enjoy')->value('values');
  884. }elseif($type==3){
  885. $rate=System::where('keys','store_reward_money_experience')->value('values');
  886. }
  887. $rates=explode('/',$rate);
  888. $count=Store::where('type',$type)->with(['user:id,nickname'])->count();
  889. if($count==0){
  890. $this->error('400001','没有数据');
  891. }
  892. $list=Store::where('type',$type)
  893. ->with(['user:id,nickname'])
  894. ->orderBy('id','desc')->skip($num)->take($page_size)->get();
  895. foreach($list as $key=>$val){
  896. $rewards=Rewards::where('recom_id',$val->man_id)->where('type',3)->where('month',$input['time'])->first();
  897. if($rewards){
  898. $list[$key]->finished=1;
  899. }else{
  900. $list[$key]->finished=0;
  901. }
  902. $list[$key]->style=1;
  903. $list[$key]->acount=0;
  904. $info=DB::table('store')
  905. ->select('goods.type', DB::raw('SUM(order_goods.num) as total'))
  906. ->leftJoin('users', function ($join) {
  907. $join->on('users.store_id', '=', 'store.id');
  908. })
  909. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  910. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  911. ->leftJoin('goods', 'goods.id', '=', 'order_goods.goods_id')
  912. ->where('store.id',$val['id'])
  913. ->where('store.type',$type)
  914. ->whereIn('order.status',[2,3])
  915. ->whereBetween('order.created_at',$time)
  916. ->groupBy('store.id','goods.type')
  917. ->get();
  918. foreach($info as $k =>$v){
  919. if($v->type==1){
  920. $info[$k]->price=$rates[0];
  921. $info[$k]->totalprice=$v->total*$rates[0];
  922. $list[$key]->acount+=$v->total*$rates[0];
  923. }
  924. if($v->type==2){
  925. $info[$k]->price=$rates[1];
  926. $info[$k]->totalprice=$v->total*$rates[1];
  927. $list[$key]->acount+=$v->total*$rates[1];
  928. }
  929. if($v->type==3){
  930. $info[$k]->price=$rates[2];
  931. $info[$k]->totalprice=$v->total*$rates[2];
  932. $list[$key]->acount+=$v->total*$rates[2];
  933. }
  934. }
  935. $list[$key]->info=$info;
  936. }
  937. if ($list) {
  938. return $this->success_list($list,'SUCCESS',$count);
  939. } else {
  940. return $this->error();
  941. }
  942. }
  943. //订单统计
  944. public function getOrderGoodsNumList(Request $request){
  945. $input=$request->all();
  946. switch ($input['type']) {
  947. case '0':
  948. $starttime = date("Y-m-d 00:00:00", strtotime($input['time'][0]));
  949. $endtime = date("Y-m-d 00:00:00", strtotime($input['time'][1] . "+1 days"));
  950. break;
  951. case '1':
  952. $starttime = date("Y-m-01 00:00:00", strtotime($input['time']));
  953. $endtime = date("Y-m-01 00:00:00", strtotime($input['time'] . "+1 months"));
  954. break;
  955. case '2':
  956. $starttime = date("Y-01-01 00:00:00", strtotime($input['time']));
  957. $endtime = date("Y-01-01 00:00:00", strtotime($input['time'] . "+1 year"));
  958. break;
  959. }
  960. $time = [$starttime, $endtime];
  961. $list=DB::table('goods')
  962. ->select('goods.id','goods.name', DB::raw('COUNT(distinct order.id) as account'))
  963. ->leftJoin('order_goods','order_goods.goods_id','=','goods.id')
  964. ->leftJoin('order','order.id','=','order_goods.order_id')
  965. ->whereIn('order.status',[2,3])
  966. ->whereBetween('order.created_at', $time)
  967. ->groupBy('goods.id')
  968. ->get();
  969. if ($list) {
  970. return $this->success($list);
  971. } else {
  972. return $this->error();
  973. }
  974. }
  975. }