StorageController.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\ExpressStorage;
  4. use App\Models\StorageLog;
  5. use App\Models\StoragePutLog;
  6. use App\Models\System;
  7. use App\Models\TagRemind;
  8. use App\Models\User;
  9. use App\Models\UserStorage;
  10. use App\Models\Warea;
  11. use Carbon\Carbon;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\DB;
  15. class StorageController extends Controller
  16. {
  17. public function GetCrownStorage(Request $request){
  18. $input=$request->all();
  19. $page_index=$input['page_index'];
  20. $page_size=$input['page_size'];
  21. $search_content=$input['search_content'];
  22. $user=User::where('level',3)->whereNull('deleted_at');
  23. if ($search_content){
  24. $ids=User::where('mobile','like','%'.$search_content.'%')->orwhere('nickname','like','%'.$search_content.'%')
  25. ->where('level',3)->whereNull('deleted_at')->pluck('id');
  26. $user->whereIn('id',$ids);
  27. }
  28. $count=$user->count();
  29. $data=$user->with(['get_storage','get_storage_detail'=>function($q){
  30. $q->where('storage_type',2)->orderByDesc('created_at')->limit(1);
  31. },'get_storage_details'=>function($q){
  32. $q->where('storage_type',1)->orderByDesc('created_at')->limit(1);
  33. },'warea'])->select('id','nickname','mobile','realname')->take($page_size)->skip(($page_index-1)*$page_size)->get();
  34. foreach ($data as $k=>$v){
  35. $num=0;
  36. foreach ($v->get_storage as $ke=>$va){
  37. $num+=$va->num;
  38. }
  39. if ($v->get_storage->isEmpty()){
  40. $data[$k]->sure_storage=false;
  41. }else{
  42. $data[$k]->sure_storage=true;
  43. }
  44. if (!$v->get_storage_details->isEmpty()){
  45. $data[$k]->out_time=$v->get_storage_details[0]->created_at->toDateTimeString();;
  46. }else{
  47. $data[$k]->out_time='';
  48. }
  49. if (!$v->get_storage_detail->isEmpty()){
  50. $data[$k]->put_time=$v->get_storage_detail[0]->created_at->toDateTimeString();
  51. }else{
  52. $data[$k]->put_time='';
  53. }
  54. $data[$k]->storage_total=$num;
  55. }
  56. return $this->success_list($data,'',$count);
  57. }
  58. /*
  59. * 超过一个星期
  60. *
  61. * 一个月没出货的代理公司
  62. * ***/
  63. public function GetCrownTime(Request $request){
  64. $input=$request->all();
  65. $page_index=$input['page_index'];
  66. $page_size=$input['page_size'];
  67. $search_content=$input['search_time'];
  68. $now=Carbon::now()->timestamp;
  69. $time=date('Y-m-d H:i:s',$now-$search_content);
  70. $user_ids=ExpressStorage::where('storage_type',1)->where('created_at','>=',$time)->pluck('user_id')->toArray();
  71. $user=User::where('level',3)->whereNull('deleted_at')->whereNotIn('id',$user_ids);
  72. $count=$user->count();
  73. $data=$user->with(['get_storage','get_storage_detail'=>function($q){
  74. $q->where('storage_type',2)->orderByDesc('created_at')->limit(1);
  75. },'get_storage_details'=>function($q){
  76. $q->where('storage_type',1)->orderByDesc('created_at')->limit(1);
  77. }])->select('id','nickname','mobile','realname')->take($page_size)->skip(($page_index-1)*$page_size)->get();
  78. foreach ($data as $k=>$v){
  79. $num=0;
  80. foreach ($v->get_storage as $ke=>$va){
  81. $num+=$va->num;
  82. }
  83. if ($v->get_storage->isEmpty()){
  84. $data[$k]->sure_storage=false;
  85. }else{
  86. $data[$k]->sure_storage=true;
  87. }
  88. if (!$v->get_storage_details->isEmpty()){
  89. $data[$k]->out_time=$v->get_storage_details[0]->created_at->toDateTimeString();;
  90. }else{
  91. $data[$k]->out_time='';
  92. }
  93. if (!$v->get_storage_detail->isEmpty()){
  94. $data[$k]->put_time=$v->get_storage_detail[0]->created_at->toDateTimeString();
  95. }else{
  96. $data[$k]->put_time='';
  97. }
  98. $data[$k]->storage_total=$num;
  99. }
  100. return $this->success_list($data,'',$count);
  101. }
  102. public function GetStorageNum(Request $request){
  103. $input=$request->all();
  104. $start_time=$input['start_time'];
  105. $end_time=$input['end_time'];
  106. $re=User::where('users.level',3);
  107. // ->leftJoin('storage_put_log',function ($q)use($start_time,$end_time){
  108. // $q->on('users.id','=','storage_put_log.user_id')
  109. // ->where('storage_put_log.storage_type',0)
  110. // ->whereBetween('storage_put_log.created_at',[$start_time,$end_time])->select(DB::raw("ifnull(sum(storage_put_log.num) ,0) as put_total"),'user_id');
  111. // })
  112. // ->leftJoin('express_storage',function ($q)use($start_time,$end_time){
  113. // $q->on('users.id','=','express_storage.user_id')
  114. // ->where('express_storage.storage_type',0)
  115. // ->whereBetween('express_storage.out_time',[$start_time,$end_time]);
  116. // })
  117. // ->leftJoin('storage_put_log',function ($q){
  118. // $q->on('users.id','=','storage_put_log.user_id')->where('storage_put_log.storage_type',0);
  119. // })
  120. // ->rightJoin('express_storage','users.id','=','express_storage.user_id')
  121. // ->leftJoin('user_storage','users.id','=','user_storage.user_id')
  122. // ->where('storage_put_log.storage_type',0)
  123. // ->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(storage_put_log.num) ,0) as put_total"))
  124. // ->groupBy('users.id')->get()->toArray();
  125. // dd($re);
  126. // ->where('express_storage.storage_type',1);
  127. $search_content=$input['search_content'];
  128. if ($search_content){
  129. $ids=User::where('mobile','like','%'.$search_content.'%')->orwhere('nickname','like','%'.$search_content.'%')
  130. ->where('level',3)->whereNull('deleted_at')->pluck('id');
  131. $re=$re->whereIn('users.id',$ids);
  132. }
  133. if ($input['status']=='all'){
  134. }elseif ($input['status']==0){
  135. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  136. $re=$re->whereIn('users.id',$user_ids);
  137. }else{
  138. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  139. $re=$re->whereNotIn('users.id',$user_ids);
  140. }
  141. if ($input['sort_type']==0){
  142. if ($start_time){
  143. $re=$re->with(['get_put_storage'=>function($q)use($start_time,$end_time){
  144. $q->where('storage_type',0)->whereBetween('created_at',[$start_time,$end_time]);
  145. },'get_out_storage'=>function($q)use($start_time,$end_time){
  146. $q->where('storage_type',1);
  147. }])->leftJoin('user_storage','users.id','=','user_storage.user_id')->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(user_storage.num) ,0) as total"));
  148. }else{
  149. $re=$re->with(['get_put_storage'=>function($q){
  150. $q->where('storage_type',0);
  151. },'get_out_storage'=>function($q){
  152. $q->where('storage_type',1);
  153. }])->leftJoin('user_storage','users.id','=','user_storage.user_id')->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(user_storage.num) ,0) as total"));
  154. }
  155. if ($input['sort']==0){
  156. $re=$re->OrderByDesc('total');
  157. }else{
  158. $re=$re->OrderBy('total');
  159. }
  160. }elseif ($input['sort_type']==1) {
  161. if ($start_time){
  162. $re=$re->with(['get_out_storage'=>function($q)use($start_time,$end_time){
  163. $q->where('storage_type',1)->whereBetween('created_at',[$start_time,$end_time]);
  164. }])->leftJoin('storage_put_log',function ($q)use($start_time,$end_time){
  165. $q->on('users.id','=','storage_put_log.user_id')->where('storage_put_log.storage_type',0)->whereBetween('storage_put_log.created_at',[$start_time,$end_time]);
  166. })->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(storage_put_log.num) ,0) as put_total"));
  167. }else{
  168. $re=$re->with(['get_out_storage'=>function($q){
  169. $q->where('storage_type',1);
  170. }])->leftJoin('storage_put_log',function ($q)use($start_time,$end_time){
  171. $q->on('users.id','=','storage_put_log.user_id')->where('storage_put_log.storage_type',0);
  172. })->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(storage_put_log.num) ,0) as put_total"));
  173. }
  174. if ($input['sort']==0){
  175. $re=$re->OrderByDesc('put_total');
  176. }else{
  177. $re=$re->OrderBy('put_total');
  178. }
  179. }else{
  180. if ($start_time){
  181. $re=$re->with(['get_put_storage'=>function($q)use($start_time,$end_time){
  182. $q->where('storage_type',0)->whereBetween('out_time',[$start_time,$end_time]);
  183. }])->leftJoin('express_storage',function ($q)use($start_time,$end_time){
  184. $q->on('users.id','=','express_storage.user_id')->where('express_storage.storage_type',1)->whereBetween('out_time',[$start_time,$end_time]);
  185. })->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(express_storage.num) ,0) as out_total"));
  186. }else{
  187. $re=$re->with(['get_put_storage'=>function($q){
  188. $q->where('storage_type',0);
  189. }])->leftJoin('express_storage',function ($q)use($start_time,$end_time){
  190. $q->on('users.id','=','express_storage.user_id')->where('express_storage.storage_type',1);
  191. })->select('users.id','users.nickname','users.mobile','users.warea_id','users.realname',DB::raw("ifnull(sum(express_storage.num) ,0) as out_total"));
  192. }
  193. if ($input['sort']==0){
  194. $re=$re->OrderByDesc('out_total');
  195. }else{
  196. $re=$re->OrderBy('out_total');
  197. }
  198. }
  199. $re=$re->with(['get_storage','warea'])->groupBy('users.id');
  200. $count=$re->get()->count();
  201. $re=$re->take($input['page_size'])->skip(($input['page_index']-1)*$input['page_size'])->get()->toArray();
  202. $data=[];
  203. foreach ($re as $k=>$v){
  204. $total=0;
  205. $put_total=0;
  206. $out_total=0;
  207. $hard=0;
  208. $simple=0;
  209. $old=0;
  210. $new_old=0;
  211. if ($v['get_storage']){
  212. foreach ($v['get_storage'] as $ke=>$va){
  213. if ($va['type']==0){
  214. $hard+=$va['num'];
  215. }elseif ($va['type']==1){
  216. $simple+=$va['num'];
  217. }elseif ($va['type']==2){
  218. $old+=$va['num'];
  219. }else{
  220. $new_old+=$va['num'];
  221. }
  222. $total+=$va['num'];
  223. }
  224. }
  225. $data[$k]=$v;
  226. if (!$v['get_storage']){
  227. $data[$k]['sure_storage']=false;
  228. }else{
  229. $data[$k]['sure_storage']=true;
  230. }
  231. $data[$k]['hard']=$hard;
  232. $data[$k]['simple']=$simple;
  233. $data[$k]['old']=$old;
  234. $data[$k]['new_old']=$new_old;
  235. $data[$k]['GetStorageLog']=StorageLog::where('user_id',$v['id'])->orderByDesc('created_at')->limit(1)->select('id','created_at','user_id')->first();
  236. if($input['sort_type']==0) {
  237. if ($v['get_out_storage']){
  238. foreach ($v['get_out_storage'] as $ke=>$va){
  239. $out_total+=$va['num'];
  240. }
  241. }
  242. if ($v['get_put_storage']){
  243. foreach ($v['get_put_storage'] as $ke=>$va){
  244. $put_total+=$va['num'];
  245. }
  246. }
  247. $data[$k]['out_total']=$out_total;
  248. $data[$k]['put_total']=$put_total;
  249. }elseif ($input['sort_type']==1){
  250. if ($v['get_out_storage']){
  251. foreach ($v['get_out_storage'] as $ke=>$va){
  252. $out_total+=$va['num'];
  253. }
  254. }
  255. $data[$k]['out_total']=$out_total;
  256. $data[$k]['total']=$total;
  257. }else{
  258. if ($v['get_put_storage']){
  259. foreach ($v['get_put_storage'] as $ke=>$va){
  260. $put_total+=$va['num'];
  261. }
  262. }
  263. $data[$k]['total']=$total;
  264. $data[$k]['put_total']=$put_total;
  265. }
  266. }
  267. return $this->success_list($data,'',$count);
  268. }
  269. public function exportData(Request $request){
  270. $input=$request->all();
  271. $re=User::leftJoin('user_storage','users.id','=','user_storage.user_id')
  272. ->where('users.level',3);
  273. $search_content=$input['search_content'];
  274. if ($search_content){
  275. $ids=User::where('mobile','like','%'.$search_content.'%')->orwhere('nickname','like','%'.$search_content.'%')
  276. ->where('level',3)->whereNull('deleted_at')->pluck('id');
  277. $re=$re->whereIn('users.id',$ids);
  278. }
  279. if ($input['status']=='all'){
  280. }elseif ($input['status']==0){
  281. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  282. $re=$re->whereIn('users.id',$user_ids);
  283. }else{
  284. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  285. $re=$re->whereNotIn('users.id',$user_ids);
  286. }
  287. $re=$re->with(['get_storage','warea'])->select('users.id','users.nickname','users.mobile','users.realname',DB::raw("ifnull(sum(num) ,0) as total"))->groupBy('users.id')->orderByDesc('total')->get()->toArray();
  288. $data=[];
  289. foreach ($re as $k=>$v){
  290. $hard=0;
  291. $simple=0;
  292. $old=0;
  293. $new_old=0;
  294. if ($v['get_storage']){
  295. foreach ($v['get_storage'] as $ke=>$va){
  296. if ($va['type']==0){
  297. $hard+=$va['num'];
  298. }elseif ($va['type']==1){
  299. $simple+=$va['num'];
  300. }elseif ($va['type']==2){
  301. $old+=$va['num'];
  302. }else{
  303. $new_old+=$va['num'];
  304. }
  305. }
  306. }
  307. $data[$k]=$v;
  308. if (!$v['get_storage']){
  309. $data[$k]['sure_storage']=false;
  310. }else{
  311. $data[$k]['sure_storage']=true;
  312. }
  313. $data[$k]['hard']=$hard;
  314. $data[$k]['simple']=$simple;
  315. $data[$k]['old']=$old;
  316. $data[$k]['new_old']=$new_old;
  317. }
  318. return $this->success_list($data);
  319. }
  320. public function ExportStorageDetail(Request $request){
  321. $input=$request->all();
  322. $re=User::leftJoin('user_storage','users.id','=','user_storage.user_id')
  323. ->where('users.level',3);
  324. if ($input['status']=='all'){
  325. }elseif ($input['status']==0){
  326. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  327. $re=$re->whereIn('users.id',$user_ids);
  328. }else{
  329. $user_ids=UserStorage::groupBy('user_id')->pluck('user_id')->toArray();
  330. $re=$re->whereNotIn('users.id',$user_ids);
  331. }
  332. $search_content=$input['search_content'];
  333. if ($search_content){
  334. $ids=User::where('mobile','like','%'.$search_content.'%')->orwhere('nickname','like','%'.$search_content.'%')
  335. ->where('level',3)->whereNull('deleted_at')->pluck('id');
  336. $re=$re->whereIn('user.id',$ids);
  337. }
  338. $re=$re->with(['get_storage','warea'])->select('users.id','users.nickname','users.warea_id','users.mobile','users.realname',DB::raw("ifnull(sum(num) ,0) as total"))->groupBy('users.id')->orderByDesc('total')->get()->toArray();
  339. $data_all=[];
  340. $i=0;
  341. foreach ($re as $k=>$v){
  342. if ($v['get_storage']){
  343. foreach ($v['get_storage'] as $ke=>$va){
  344. $data_all[$i]=$va;
  345. $data_all[$i]['sure_storage']=true;
  346. $data_all[$i]['warea']=$v['warea'];
  347. $data_all[$i]['nickname']=$v['nickname'];
  348. $data_all[$i]['mobile']=$v['mobile'];
  349. $data_all[$i]['realname']=$v['realname'];
  350. $i++;
  351. }
  352. }else{
  353. $data_all[$i]=[];
  354. $data_all[$i]['warea']=$v['warea'];
  355. $data_all[$i]['sure_storage']=false;
  356. $data_all[$i]['nickname']=$v['nickname'];
  357. $data_all[$i]['mobile']=$v['mobile'];
  358. $data_all[$i]['realname']=$v['realname'];
  359. $i++;
  360. }
  361. }
  362. return $this->success_list($data_all);
  363. }
  364. public function GetPutOutDetail(Request $request){
  365. $input=$request->all();
  366. $id=$input['id'];
  367. $start_time=$input['start_time'];
  368. $end_time=$input['end_time'];
  369. $where=[];
  370. if ($input['type']==0){
  371. if ($start_time){
  372. $where=function ($q)use($start_time,$end_time){
  373. $q->whereBetween('creaetd_at',[$start_time,$end_time]);
  374. };
  375. }
  376. $storage_log=StoragePutLog::where('user_id',$id)->where('storage_type',0)->where($where)->get();
  377. }else{
  378. if ($start_time){
  379. $where=function ($q)use($start_time,$end_time){
  380. $q->whereBetween('out_time',[$start_time,$end_time]);
  381. };
  382. }
  383. $storage_log=ExpressStorage::where('user_id',$id)->where('storage_type',1)->where($where)->get();
  384. }
  385. return $this->success_list($storage_log);
  386. }
  387. /*
  388. * 库存数量统计变化图
  389. * ***/
  390. public function StorageStatistical(Request $request){
  391. $input=$request->all();
  392. $start_time=$input['start_time'];
  393. $end_time=$input['end_time'];
  394. $t=strtotime($end_time)-strtotime($start_time);
  395. if ($t>31*3600*24){
  396. return $this->error(50021,'时间周期最多为30天','');
  397. }
  398. $arr=[];
  399. $m=ceil($t/(24*3600));
  400. for ($i=0;$i<$m;$i++){
  401. $re=StoragePutLog::where('created_at','>=',date('Y-m-d H:i:s',strtotime($start_time)+3600*24*$i))
  402. ->where('created_at','<',date('Y-m-d H:i:s',strtotime($start_time)+3600*24*($i+1)))->sum('num');
  403. $res=ExpressStorage::where('out_time','>=',date('Y-m-d H:i:s',strtotime($start_time)+3600*24*$i))
  404. ->where('out_time','<',date('Y-m-d H:i:s',strtotime($start_time)+3600*24*($i+1)))->sum('num');
  405. $arr[$i]['date']=date('Y-m-d',strtotime($start_time)+3600*24*$i);
  406. $arr[$i]['out_num']=$res;
  407. $arr[$i]['put_num']=$re;
  408. }
  409. return $this->success($arr);
  410. }
  411. /*
  412. * 某个时间段的入库汇总
  413. * **/
  414. public function StoragePutStatistical(Request $request){
  415. $input=$request->all();
  416. $start=$input['start_time'];
  417. $end=$input['end_time'];
  418. $page_index=$input['page_index'];
  419. $page_size=$input['page_size'];
  420. $search_content=$input['search_content'];
  421. $re=StoragePutLog::where('storage_type',0)->whereBetween('created_at',[$start,$end])
  422. ->select(DB::raw('sum(num) as total'),'type')
  423. ->groupBy('type')->get();
  424. $arrs=[
  425. 'hard'=>['hard_total'=>0,'hard_money'=>0],
  426. 'simple'=>['simple_total'=>0,'simple_money'=>0],
  427. 'old'=>['old_total'=>0,'old_money'=>0],
  428. 'newold'=>['newold_total'=>0,'newold_money'=>0],
  429. ];
  430. foreach ($re as $k=>$v){
  431. if ($v->type==0){
  432. $arrs['hard']['hard_total']=$v->total;
  433. $arrs['hard']['hard_money']=$v->total*149;
  434. }
  435. if ($v->type==1){
  436. $arrs['simple']['simple_total']=$v->total;
  437. $arrs['simple']['simple_money']=$v->total*79;
  438. }
  439. if ($v->type==2){
  440. $arrs['old']['old_total']=$v->total;
  441. $arrs['old']['old_money']=$v->total*89;
  442. }if ($v->type==3){
  443. $arrs['newold']['newold_total']=$v->total;
  444. $arrs['newold']['newold_money']=$v->total*47;
  445. }
  446. }
  447. $user=User::where('users.level',3);
  448. $users=clone $user;
  449. if ($search_content){
  450. $user_ids=User::where('level',3)->where('nickname','like','%'.$search_content.'%')->orwhere('mobile','like','%'.$search_content.'%')->pluck('id');
  451. $user=$user->whereIn('id',$user_ids);
  452. $users=$users->whereIn('id',$user_ids);
  453. }
  454. $count=$users->count();
  455. $user=$user->leftJoin('storage_put_log',function ($q)use($start,$end){
  456. $q->on('storage_put_log.user_id','users.id')->where('storage_put_log.storage_type',0)->whereBetween('storage_put_log.created_at',[$start,$end]);
  457. })->with(['get_put_storage'=>function($q)use($start,$end){
  458. $q->whereBetween('created_at',[$start,$end])->select('type','sex','num','size','created_at','user_id');
  459. }])->select('users.id','users.nickname','users.realname','users.mobile',DB::raw('ifnull(sum(storage_put_log.num),0) as total'))
  460. ->orderByDesc('total')->orderByDesc('users.id')->groupBy('users.id')->take($page_size)->skip($page_size*($page_index-1))->get();
  461. $arr=[];
  462. foreach ($user as $k=>$v){
  463. $hard_total=0;
  464. $simple_total=0;
  465. $old_total=0;
  466. $newold_total=0;
  467. if ($v->get_put_storage){
  468. foreach ($v->get_put_storage as $ke=>$va){
  469. if ($va->type==0){
  470. $hard_total+=$va->num;
  471. }elseif ($va->type==1){
  472. $simple_total+=$va->num;
  473. }elseif ($va->type==2){
  474. $old_total+=$va->num;
  475. }else{
  476. $newold_total+=$va->num;
  477. }
  478. }
  479. }
  480. $arr[$k]=$v;
  481. $arr[$k]->get_put_storage=[];
  482. $arr[$k]['hard_total']=$hard_total;
  483. $arr[$k]['simple_total']=$simple_total;
  484. $arr[$k]['old_total']=$old_total;
  485. $arr[$k]['newold_total']=$newold_total;
  486. $arr[$k]['money']=$hard_total*149+$simple_total*79+$old_total*49+$newold_total*47;
  487. $arr[$k]['total']=$hard_total+$simple_total+$old_total+$newold_total;
  488. }
  489. $data=[
  490. 'all_total'=>$arrs,
  491. 'count'=>$count,
  492. 'list'=>$arr
  493. ];
  494. return $this->success($data);
  495. }
  496. /*
  497. * 某个时间段的入库汇总
  498. * **/
  499. public function StorageOutStatistical(Request $request){
  500. $input=$request->all();
  501. $start=$input['start_time'];
  502. $end=$input['end_time'];
  503. $page_index=$input['page_index'];
  504. $page_size=$input['page_size'];
  505. $search_content=$input['search_content'];
  506. $re=ExpressStorage::where('storage_type',1)->whereBetween('express_storage.out_time',[$start,$end])
  507. ->select(DB::raw('sum(num) as total'),'type')
  508. ->groupBy('type')->get();
  509. $arrs=[
  510. 'hard'=>['hard_total'=>0,'hard_money'=>0],
  511. 'simple'=>['simple_total'=>0,'simple_money'=>0],
  512. 'old'=>['old_total'=>0,'old_money'=>0],
  513. 'newold'=>['newold_total'=>0,'newold_money'=>0],
  514. ];
  515. foreach ($re as $k=>$v){
  516. if ($v->type==0){
  517. $arrs['hard']['hard_total']=$v->total;
  518. $arrs['hard']['hard_money']=$v->total*149;
  519. }
  520. if ($v->type==1){
  521. $arrs['simple']['simple_total']=$v->total;
  522. $arrs['simple']['simple_money']=$v->total*79;
  523. }
  524. if ($v->type==2){
  525. $arrs['old']['old_total']=$v->total;
  526. $arrs['old']['old_money']=$v->total*89;
  527. }if ($v->type==3){
  528. $arrs['newold']['newold_total']=$v->total;
  529. $arrs['newold']['newold_money']=$v->total*47;
  530. }
  531. }
  532. $user=User::where('users.level',3);
  533. $users=clone $user;
  534. if ($search_content){
  535. $user_ids=User::where('level',3)->where('nickname','like','%'.$search_content.'%')->orwhere('mobile','like','%'.$search_content.'%')->pluck('id');
  536. $user=$user->whereIn('id',$user_ids);
  537. $users=$users->whereIn('id',$user_ids);
  538. }
  539. $count=$users->count();
  540. $user=$user->leftJoin('express_storage',function ($q)use($start,$end){
  541. $q->on('express_storage.user_id','users.id')->where('express_storage.storage_type',1)->whereBetween('express_storage.out_time',[$start,$end]);
  542. })->with(['get_out_storage'=>function($q)use($start,$end){
  543. $q->whereBetween('out_time',[$start,$end])->select('type','sex','num','size','created_at','user_id');
  544. }])->select('users.id','users.nickname','users.realname','users.mobile',DB::raw('ifnull(sum(express_storage.num),0) as total'))
  545. ->orderByDesc('total')->orderByDesc('users.id')->groupBy('users.id')->take($page_size)->skip($page_size*($page_index-1))->get();
  546. $arr=[];
  547. foreach ($user as $k=>$v){
  548. $hard_total=0;
  549. $simple_total=0;
  550. $old_total=0;
  551. $newold_total=0;
  552. if ($v->get_out_storage){
  553. foreach ($v->get_out_storage as $ke=>$va){
  554. if ($va->type==0){
  555. $hard_total+=$va->num;
  556. }elseif ($va->type==1){
  557. $simple_total+=$va->num;
  558. }elseif ($va->type==2){
  559. $old_total+=$va->num;
  560. }else{
  561. $newold_total+=$va->num;
  562. }
  563. }
  564. }
  565. $arr[$k]=$v;
  566. $arr[$k]['hard_total']=$hard_total;
  567. $arr[$k]['simple_total']=$simple_total;
  568. $arr[$k]['old_total']=$old_total;
  569. $arr[$k]['newold_total']=$newold_total;
  570. $arr[$k]['money']=$hard_total*149+$simple_total*79+$old_total*49+$newold_total*47;
  571. $arr[$k]['total']=$hard_total+$simple_total+$old_total+$newold_total;
  572. }
  573. $data=[
  574. 'all_total'=>$arrs,
  575. 'count'=>$count,
  576. 'list'=>$arr
  577. ];
  578. return $this->success($data);
  579. }
  580. /*
  581. *
  582. * 某个时间点的库存情况
  583. * **/
  584. public function GetStorageDetailDate(Request $request){
  585. $input=$request->all();
  586. $page_size=$input['page_size'];
  587. $page_index=$input['page_index'];
  588. $search_content=$input['search_content'];
  589. $time=$input['time'];
  590. $user=User::where('level',3)->with(['get_storage']);
  591. if ($search_content){
  592. $user_ids=User::where('level',3)->where('nickname','like','%'.$search_content.'%')->orwhere('mobile','like','%'.$search_content.'%')->pluck('id');
  593. $user=$user->whereIn('id',$user_ids);
  594. }
  595. $all_total_hard=UserStorage::where('type',0)->sum('num');
  596. $all_total_simple=UserStorage::where('type',1)->sum('num');
  597. $all_total_old=UserStorage::where('type',2)->sum('num');
  598. $all_total_newold=UserStorage::where('type',3)->sum('num');
  599. $out_total_hard=ExpressStorage::where('storage_type',1)->where('out_time','>=',$time)->where('type',0)->sum('num');
  600. $out_total_simple=ExpressStorage::where('storage_type',1)->where('out_time','>=',$time)->where('type',1)->sum('num');
  601. $out_total_old=ExpressStorage::where('storage_type',1)->where('out_time','>=',$time)->where('type',2)->sum('num');
  602. $out_total_newold=ExpressStorage::where('storage_type',1)->where('out_time','>=',$time)->where('type',3)->sum('num');
  603. $put_total_hard=StoragePutLog::where('storage_type',0)->where('created_at','>=',$time)->where('type',0)->sum('num');
  604. $put_total_simple=StoragePutLog::where('storage_type',0)->where('created_at','>=',$time)->where('type',0)->sum('num');
  605. $put_total_old=StoragePutLog::where('storage_type',0)->where('created_at','>=',$time)->where('type',0)->sum('num');
  606. $put_total_newold=StoragePutLog::where('storage_type',0)->where('created_at','>=',$time)->where('type',0)->sum('num');
  607. $total_hard=$all_total_hard-$put_total_hard+$out_total_hard;
  608. $total_simple=$all_total_simple-$put_total_simple+$out_total_simple;
  609. $total_old=$all_total_old-$put_total_old+$out_total_old;
  610. $total_newold=$all_total_newold-$put_total_newold+$out_total_newold;
  611. if ($total_hard<0){
  612. $total_hard=0;
  613. }
  614. if ($total_simple<0){
  615. $total_simple=0;
  616. }
  617. if ($total_old<0){
  618. $total_old=0;
  619. }
  620. if ($total_newold<0){
  621. $total_newold=0;
  622. }
  623. $total=[
  624. 'hard'=>$total_hard,
  625. 'simple'=>$total_simple,
  626. 'old'=>$total_old,
  627. 'new_old'=>$total_newold,
  628. 'total'=>$total_hard+$total_simple+$total_old+$total_newold
  629. ];
  630. $count=$user->count();
  631. $user=$user->select('nickname','id','realname','mobile')->take($page_size)->skip(($page_index-1)*$page_size)->get();
  632. $arr=[];
  633. foreach ($user as $k=>$v){
  634. $hard=0;
  635. $simple=0;
  636. $old=0;
  637. $new_old=0;
  638. foreach ($v->get_storage as $ke=>$va){
  639. if ($va->type==0){
  640. $hard+=$va->num;
  641. }
  642. if ($va->type==1){
  643. $simple+=$va->num;
  644. }
  645. if ($va->type==2){
  646. $old+=$va->num;
  647. }
  648. if ($va->type==3){
  649. $new_old+=$va->num;
  650. }
  651. }
  652. $num1=ExpressStorage::where('user_id',$v->id)->where('storage_type',1)->where('out_time','>=',$time)->where('type',0)->sum('num');
  653. $num2=ExpressStorage::where('user_id',$v->id)->where('storage_type',1)->where('out_time','>=',$time)->where('type',1)->sum('num');
  654. $num3=ExpressStorage::where('user_id',$v->id)->where('storage_type',1)->where('out_time','>=',$time)->where('type',2)->sum('num');
  655. $num4=ExpressStorage::where('user_id',$v->id)->where('storage_type',1)->where('out_time','>=',$time)->where('type',3)->sum('num');
  656. $num5=StoragePutLog::where('user_id',$v->id)->where('storage_type',0)->where('created_at','>=',$time)->where('type',0)->sum('num');
  657. $num6=StoragePutLog::where('user_id',$v->id)->where('storage_type',0)->where('created_at','>=',$time)->where('type',1)->sum('num');
  658. $num7=StoragePutLog::where('user_id',$v->id)->where('storage_type',0)->where('created_at','>=',$time)->where('type',2)->sum('num');
  659. $num8=StoragePutLog::where('user_id',$v->id)->where('storage_type',0)->where('created_at','>=',$time)->where('type',3)->sum('num');
  660. $hard=$hard+$num1-$num5;
  661. $simple=$simple+$num2-$num6;
  662. $old=$old+$num3-$num7;
  663. $new_old=$new_old+$num4-$num8;
  664. $arr[$k]=$v;
  665. $arr[$k]['hard']=$hard<0?0:$hard;
  666. $arr[$k]['simple']=$simple<0?0:$simple;
  667. $arr[$k]['old']=$old<0?0:$old;
  668. $arr[$k]['new_old']=$new_old<0?0:$new_old;
  669. $arr[$k]['total']= $arr[$k]['hard']+$arr[$k]['simple']+$arr[$k]['old']+$arr[$k]['new_old'];
  670. }
  671. $data=[
  672. 'total'=>$count,
  673. 'list'=>$arr,
  674. 'all_total'=>$total
  675. ];
  676. return $this->success($data);
  677. }
  678. public function GetUserStorageDateDetail(Request $request){
  679. $input=$request->all();
  680. $time=$input['time'];
  681. $id=$input['id'];
  682. $storage=UserStorage::where('user_id',$id)->get();
  683. $arr=[];
  684. foreach ($storage as $k=>$v){
  685. $out_num=ExpressStorage::where('user_id',$v->id)->where('storage_type',1)->where('sex',$v->sex)->where('size',$v->size)->where('out_time','>=',$time)->where('type',$v->type)->sum('num');
  686. $put_num=StoragePutLog::where('user_id',$v->id)->where('storage_type',1)->where('sex',$v->sex)->where('size',$v->size)->where('created_at','>=',$time)->where('type',$v->type)->sum('num');
  687. $total=$v->num-$put_num+$out_num;
  688. if ($total<0){
  689. $total=0;
  690. }
  691. $arr[$k]['num']=$total;
  692. $arr[$k]['sex']=$v->sex;
  693. $arr[$k]['type']=$v->type;
  694. $arr[$k]['size']=$v->size;
  695. }
  696. return $this->success_list($arr);
  697. }
  698. /*
  699. * 库存提醒
  700. * ***/
  701. public function StorageRemind(Request $request){
  702. $input=$request->all();
  703. $page_size=$input['page_size'];
  704. $page_index=$input['page_index'];
  705. $index=$page_index;
  706. $search_content=$input['search_content'];
  707. $time=Carbon::now()->addDays(-3);
  708. $out_ids=ExpressStorage::where('storage_type',1)->where('out_time','>',$time)->groupBy('user_id')->pluck('user_id');
  709. $tag_ids=TagRemind::where('tag_time','>',$time)->pluck('user_id');
  710. $user=User::where('users.level',3)->with(['warea']);
  711. $admin_user=Auth::user();
  712. $status=false;
  713. if ($admin_user->role_id!=23){
  714. $status=true;
  715. }
  716. $warea_id=Warea::where('admin_id',$admin_user->id)->value('id');
  717. if (!$status){
  718. $user=$user->where('users.warea_id',$warea_id);
  719. }
  720. if ($request->search_content){
  721. $user_ids=User::where('level',3)->where('nickname','like','%'.$search_content.'%')->orwhere('mobile','like','%'.$search_content.'%')->pluck('id');
  722. $user=$user->whereIn('users.id',$user_ids);
  723. }
  724. $user=$user->Join('tag_remind_storage', 'tag_remind_storage.user_id','users.id')
  725. ->whereNotIn('tag_remind_storage.user_id',$tag_ids)
  726. ->whereNotIn('users.id',$out_ids)
  727. ->with(['get_out_storage'=>function($q){
  728. $q->where('storage_type',1)->orderByDesc('out_time')->limit(1)->select('user_id','out_time');
  729. }])
  730. ->groupBy('users.id')->select('users.id','users.nickname','users.mobile','users.realname','users.warea_id')->paginate($page_size);
  731. $total=$user->total();
  732. return $this->success_list($user->items(),'',$total);
  733. }
  734. /*
  735. * 取消提醒
  736. * ***/
  737. public function CancelRemind(Request $request){
  738. $result=TagRemind::where('user_id',$request->user_id)->first();
  739. if ($result){
  740. $result=new TagRemind();
  741. $result->user_id=$request->user_id;
  742. $request->status=0;
  743. }
  744. $result->tag_time=Carbon::now();
  745. $result->save();
  746. return $this->success([]);
  747. }
  748. public function ExportOutPutRecord(Request $request){
  749. $input=$request->all();
  750. $start_time=$input['start_time'];
  751. $end_time=$input['end_time'];
  752. if (!$input['type']){
  753. $data=StoragePutLog::where('user_id',$input['user_id'])
  754. ->where('storage_type',$input['type'])
  755. ->whereBetween('created_at',[$start_time,$end_time])
  756. ->select('num','type','size','sex','created_at as time')
  757. ->orderByDesc('created_at')
  758. ->get();
  759. }else{
  760. $data=ExpressStorage::where('user_id',$input['user_id'])
  761. ->where('storage_type',$input['type'])
  762. ->whereBetween('out_time',[$start_time,$end_time])
  763. ->select('num','type','size','sex','out_time as time')
  764. ->orderByDesc('out_time')
  765. ->get();
  766. }
  767. return $this->success_list($data);
  768. }
  769. public function SetSmsTime(Request $request){
  770. $input=$request->all();
  771. $time=$input['time'];
  772. $cycle=$input['time_cycle'];
  773. $re=System::where('keys','sms_storage_time')->first();
  774. $re->values=$time;
  775. $re->save();
  776. $res=System::where('keys','sms_remind_cycle')->first();
  777. $res->values=$cycle;
  778. $res->save();
  779. return $this->success([]);
  780. }
  781. public function GetSmsTime(Request $request){
  782. $re=System::where('keys','sms_storage_time')->first();
  783. $res=System::where('keys','sms_remind_cycle')->first();
  784. return $this->success(['sms_storage_time'=>$re->values,'sms_remind_cycle'=>$res->values]);
  785. }
  786. }