StorageController.php 38 KB

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