StorageController.php 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Express;
  4. use App\Models\ExpressStorage;
  5. use App\Models\Goodtest;
  6. use App\Models\Ordertest;
  7. use App\Models\StorageLog;
  8. use App\Models\StoragePutLog;
  9. use App\Models\UserStorage;
  10. use Carbon\Carbon;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\DB;
  14. class StorageController extends Controller{
  15. /**查看货物**/
  16. public function look_good(Request $request){
  17. $id=$request->id;
  18. $ids=Auth::user()->id;
  19. // $ids=39516;
  20. $re=Express::where('order_id',$id)->with(['get_express'=>function($q)use($id){
  21. $q->where('order_id',$id);
  22. },'get_order'])->orderByDesc('number')->groupBy('number')->get();
  23. $data=[];
  24. foreach ($re as $k=>$v){
  25. $data[$k]=$v;
  26. if ($ids==$v->get_order->good_user_id){
  27. $data[$k]['is_per']=true;
  28. }else{
  29. $data[$k]['is_per']=false;
  30. }
  31. }
  32. return $this->success_list($data);
  33. }
  34. /*
  35. * 货物详情
  36. * **/
  37. public function good_detail(Request $request){
  38. $re=ExpressStorage::where('express_id',$request->id)->groupBy('type')->get();
  39. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  40. foreach ($datas as $k=>$v){
  41. $r[$v->main_attr]=$v->main_img;
  42. }
  43. $data=[
  44. 'hard'=>['spec'=>[],'imgurl'=>$r['精装版'],'name'=>'精装版'],
  45. 'simple'=>['spec'=>[],'imgurl'=>$r['简约版'],'name'=>'简约版'],
  46. 'old'=>['spec'=>[],'imgurl'=>$r['老人版'],'name'=>'老人版'],
  47. 'new_old'=>['spec'=>[],'imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版'],
  48. ];
  49. foreach ($re as $k=>$v){
  50. $res=ExpressStorage::where('express_id',$request->id)->where('type',$v->type)->select('size','sex','type','num')->get()->toArray();
  51. if ($v->type==0){
  52. $data['hard']['spec']=$res;
  53. }elseif ($v->type==1){
  54. $data['simple']['spec']=$res;
  55. }elseif ($v->type==2){
  56. $data['old']['spec']=$res;
  57. }elseif(($v->type==3)){
  58. $data['new_old']['spec']=$res;
  59. }
  60. }
  61. return $this->success($data);
  62. }
  63. /*
  64. * 我的库存
  65. * **/
  66. public function my_storage(){
  67. $id=Auth::user()->id;
  68. // $id=39516;
  69. $re=UserStorage::where('user_id',$id)->groupBy('type')->select(DB::raw('sum(num) as total'),'type')->get();
  70. $res=UserStorage::where('user_id',$id)->first();
  71. $data=['hard'=>0,'simple'=>0,'old'=>0,'new_old'=>0];
  72. foreach ($re as $k=>$v){
  73. if ($v->type==0){
  74. $data['hard']=$v->total;
  75. }elseif ($v->type==1){
  76. $data['simple']=$v->total;
  77. }elseif ($v->type==2){
  78. $data['old']=$v->total;
  79. }elseif($v->type==3){
  80. $data['new_old']=$v->total;
  81. }
  82. }
  83. if ($res){
  84. $data['status']=false;
  85. }else{
  86. $data['status']=true;
  87. }
  88. return $this->success($data);
  89. }
  90. /*
  91. *库存详情
  92. * **/
  93. public function storage_detail(Request $request){
  94. $id=Auth::user()->id;
  95. // $id=39516;
  96. $re=UserStorage::where('user_id',$id)->groupBy('type')->get();
  97. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  98. foreach ($datas as $k=>$v){
  99. $r[$v->main_attr]=$v->main_img;
  100. }
  101. $data=[
  102. 'hard'=>['spec'=>[],'imgurl'=>$r['精装版'],'name'=>'精装版'],
  103. 'simple'=>['spec'=>[],'imgurl'=>$r['简约版'],'name'=>'简约版'],
  104. 'old'=>['spec'=>[],'imgurl'=>$r['老人版'],'name'=>'老人版'],
  105. 'new_old'=>['spec'=>[],'imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版'],
  106. ];
  107. foreach ($re as $k=>$v){
  108. $res=UserStorage::where('user_id',$id)->where('type',$v->type)->select('size','sex','type','num')->get();
  109. if ($v->type==0){
  110. $data['hard']['spec']=$res;
  111. }elseif ($v->type==1){
  112. $data['simple']['spec']=$res;
  113. }elseif ($v->type==2){
  114. $data['old']['spec']=$res;
  115. }elseif($v->type==3){
  116. $data['new_old']['spec']=$res;
  117. }
  118. }
  119. return $this->success($data);
  120. }
  121. /*
  122. * 待入库
  123. * ***/
  124. public function put_storage(Request $request){
  125. $input=$request->all();
  126. $id=Auth::user()->id;
  127. // $id=39516;
  128. $page_index=$input['page_index'];
  129. $data=Ordertest::where('user_id',$id)->where('good_user_id',$id)
  130. ->where('track_status','<>',0)
  131. ->where('created_at','>','2020-01-01 00:00:00')
  132. ->where('put_status',0)->select('id as order_id','created_at','number','order_num');
  133. $count=$data->count();
  134. $data=$data->take(20)->skip(($page_index-1)*20)->get();
  135. return $this->success_list($data,'',$count);
  136. }
  137. /*
  138. * 入库记录
  139. * ***/
  140. public function put_storage_group(Request $request){
  141. $input=$request->all();
  142. $id=Auth::user()->id;
  143. // $id=39516;
  144. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  145. foreach ($datas as $k=>$v){
  146. $r[$v->main_attr]=$v->main_img;
  147. }
  148. $data=[
  149. 'hard'=>['imgurl'=>$r['精装版'],'name'=>'精装版','woman'=>0,'man'=>0],
  150. 'simple'=>['imgurl'=>$r['简约版'],'name'=>'简约版','woman'=>0,'man'=>0],
  151. 'old'=>['imgurl'=>$r['老人版'],'name'=>'老人版','woman'=>0,'man'=>0],
  152. 'new_old'=>['imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版','woman'=>0,'man'=>0],
  153. ];
  154. $where_type=[];
  155. $type=$input['record_type'];
  156. $status=$input['status'];
  157. if ($type){
  158. if ($type==1){
  159. if ($status==-1){
  160. $where_type=function ($q)use($type,$status){
  161. $q->where('storage_type',$type);
  162. };
  163. }else{
  164. $where_type=function ($q)use($type,$status){
  165. $q->where('storage_type',$type)->where('out_type',$status);
  166. };
  167. }
  168. }else{
  169. $where_type=function ($q)use($type,$status){
  170. $q->where('storage_type',$type);
  171. };
  172. }
  173. }
  174. $express=ExpressStorage::where('user_id',$id)->where($where_type);
  175. $where_start=[];
  176. $start=$input['start_time'];
  177. if ($start){
  178. $where_start=function ($q)use($start){
  179. $q->where('created_at','>=',$start);
  180. };
  181. }
  182. $where_end=[];
  183. $end=$input['end_time'];
  184. if ($end){
  185. $where_end=function ($q)use($end){
  186. $q->where('created_at','<=',$end);
  187. };
  188. }
  189. $re=$express->where($where_start)->where($where_end)->groupBy('type')->get();
  190. foreach ($re as $k=>$v){
  191. $woman=0;
  192. $man=0;
  193. if ($type==1){
  194. $res=ExpressStorage::where('user_id',$id)->where('type',$v->type)->where('storage_type',$type)->where($where_start)->where($where_end);
  195. if ($input['status']==-1){
  196. $res=$res->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  197. }else{
  198. $res=$res->where('out_type',$input['status'])->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  199. }
  200. foreach ($res as $ke=>$va){
  201. if ($va['sex']==0){
  202. $woman=$va['total'];
  203. }else{
  204. $man=$va['total'];
  205. }
  206. }
  207. }else{
  208. $res=ExpressStorage::where('user_id',$id)->where('type',$v->type)->where('storage_type',$type)->where($where_start)->where($where_end)->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  209. foreach ($res as $ke=>$va){
  210. if ($va['sex']==0){
  211. $woman=$va['total'];
  212. }else{
  213. $man=$va['total'];
  214. }
  215. }
  216. }
  217. if ($v->type==0){
  218. $data['hard']['man']=$man;
  219. $data['hard']['woman']=$woman;
  220. }elseif ($v->type==1){
  221. $data['simple']['man']=$man;
  222. $data['simple']['woman']=$woman;
  223. }elseif ($v->type==2){
  224. $data['old']['man']=$man;
  225. $data['old']['woman']=$woman;
  226. }elseif($v->type==3){
  227. $data['new_old']['man']=$man;
  228. $data['new_old']['woman']=$woman;
  229. }
  230. }
  231. return $this->success($data);
  232. }
  233. public function put_storage_detail(Request $request){
  234. $input=$request->all();
  235. $id=Auth::user()->id;
  236. // $id=39516;
  237. $where_type=[];
  238. $status=$input['status'];
  239. if ($input['record_type']){
  240. $type=$input['record_type'];
  241. if ($type==1){
  242. if ($status!=-1){
  243. $where_type=function ($q)use($type,$status){
  244. $q->where('storage_type',$type)->where('out_type',$status);
  245. };
  246. }else{
  247. $where_type=function ($q)use($type,$status){
  248. $q->where('storage_type',$type);
  249. };
  250. }
  251. }else{
  252. $where_type=function ($q)use($type,$status){
  253. $q->where('storage_type',$type);
  254. };
  255. }
  256. }
  257. $express=ExpressStorage::where('user_id',$id)->where($where_type)->where('type',$input['type']);
  258. $where_start=[];
  259. $start=$input['start_time'];
  260. if ($start){
  261. if ($input['record_type']==1){
  262. $where_start=function ($q)use($start){
  263. $q->where('out_time','>=',$start);
  264. };
  265. }else{
  266. $where_start=function ($q)use($start){
  267. $q->where('created_at','>=',$start);
  268. };
  269. }
  270. }
  271. $where_end=[];
  272. $end=$input['end_time'];
  273. if ($end){
  274. if ($input['record_type']==1){
  275. $where_end=function ($q)use($end){
  276. $q->where('out_time','<=',$end);
  277. };
  278. }else{
  279. $where_end=function ($q)use($end){
  280. $q->where('created_at','<=',$end);
  281. };
  282. }
  283. }
  284. $re=$express->where($where_start)->where($where_end);
  285. $count=$re->count();
  286. $data=$re->take(20)->skip(($input['page_index']-1)*20)->get();
  287. return $this->success_list($data,'',$count);
  288. }
  289. public function put_good_storage(Request $request){
  290. // return $this->error(50026,'','入库操作暂停使用!如有疑问请联系政委!');
  291. $input=$request->all();
  292. $id=Auth::user()->id;
  293. // $id=39516;
  294. $d=UserStorage::where('user_id',$id)->first();
  295. if (!$d){
  296. return $this->error(50026,'','请盘库!');
  297. }
  298. $express=Express::find($input['id']);
  299. if ($express->put_status==1){
  300. return $this->error(50026,'','该货物已经入库,请退出刷新');
  301. }
  302. DB::beginTransaction();
  303. try{
  304. //查找这一箱的货物量
  305. $re=ExpressStorage::where('express_id',$input['id'])->select('sex','size','type','num')->get();
  306. //查找这一箱的信息
  307. foreach ($re as $k=>$v){
  308. //查找库存中有没有这个商品的记录
  309. $res=UserStorage::where('user_id',$id)->where('sex',$v->sex)->where('size',$v->size)->where('type',$v->type)->first();
  310. //有则加
  311. if ($res){
  312. if ($v->type==1||$v->type==2){
  313. $num=$v->num*4;
  314. }elseif ($v->type==3){
  315. $num=$v->num*6;
  316. }else{
  317. $num=$v->num;
  318. }
  319. $res->num+=$num;
  320. if (!$res->save()){
  321. throw new \Exception(1);
  322. }
  323. }else{
  324. //没有则新建
  325. $storage=new UserStorage();
  326. if ($v->type==1||$v->type==2){
  327. $storage->num=$v->num*4;
  328. }elseif ($v->type==3){
  329. $storage->num=$v->num*6;
  330. }else{
  331. $storage->num=$v->num;
  332. }
  333. $storage->size=$v->size;
  334. $storage->user_id=$id;
  335. $storage->sex=$v->sex;
  336. $storage->type=$v->type;
  337. if (!$storage->save()){
  338. throw new \Exception('1');
  339. }
  340. }
  341. $log=new StoragePutLog();
  342. $log->size=$id;
  343. $log->sex=$v->sex;
  344. $log->type=$v->type;;
  345. $log->user_id=$id;
  346. if ($v->type==1||$v->type==2){
  347. $log->num=$v->num*4;
  348. }elseif ($v->type==3){
  349. $log->num=$v->num*6;
  350. }else{
  351. $log->num=$v->num;
  352. }
  353. if (!$log->save()){
  354. throw new \Exception(1);
  355. }
  356. }
  357. //更改这一箱的状态为入库
  358. ExpressStorage::where('express_id',$input['id'])->select('sex','size','type','num')->update(['sure_time'=>Carbon::now(),'storage_type'=>2]);
  359. //更改这一样的装填为已完成
  360. $express->put_status=1;
  361. $express->put_time=Carbon::now();
  362. if (!$express->save()){
  363. throw new \Exception('1');
  364. }
  365. //查找订单
  366. $order=Ordertest::find($express->order_id);
  367. if ($order->track_status==2){
  368. //查看一下这个订单是不是都已经入库
  369. $count=Express::where('order_id',$order->id)->where('put_status',0)->count();
  370. if ($count==0){
  371. //全部入库后更改 订单状态为已完成的状态
  372. $order->put_status=1;
  373. if (!$order->save()){
  374. throw new \Exception(1);
  375. }
  376. }
  377. }
  378. DB::commit();
  379. return $this->success([]);
  380. }catch (\Exception $exception){
  381. DB::rollBack();
  382. return $this->error(50021,'','入库出错:'.$exception);
  383. }
  384. }
  385. /*
  386. * 判断是不是第一次盘库
  387. * ***/
  388. public function get_goodimg(){
  389. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  390. foreach ($datas as $k=>$v){
  391. $r[$v->main_attr]=$v->main_img;
  392. }
  393. $data=[
  394. 'hard'=>['imgurl'=>$r['精装版'],'name'=>'精装版'],
  395. 'simple'=>['imgurl'=>$r['简约版'],'name'=>'简约版'],
  396. 'old'=>['imgurl'=>$r['老人版'],'name'=>'老人版'],
  397. 'new_old'=>['imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版'],
  398. ];
  399. return $this->success($data);
  400. }
  401. /**一次性盘库**/
  402. public function one_sure_storage(Request $request){
  403. $id=Auth::user()->id;
  404. $re=UserStorage::where('user_id',$id)->first();
  405. if ($re){
  406. return $this->error(50024,'','该用户不能使用一次性盘货功能');
  407. }
  408. $input=$request->all();
  409. DB::beginTransaction();
  410. try{
  411. foreach ($input as $k=>$v){
  412. if($k=='hard'){
  413. $type=0;
  414. }elseif ($k=='simple'){
  415. $type=1;
  416. }elseif ($k=='old'){
  417. $type=2;
  418. }else{
  419. $type=3;
  420. }
  421. foreach ($v as $ke=>$va){
  422. $storage=new UserStorage();
  423. $storage->user_id=$id;
  424. $storage->type=$type;
  425. $storage->size=$va['size'];
  426. $storage->num=$va['num'];
  427. $storage->sex=$va['sex'];
  428. $st_log=new StorageLog();
  429. $st_log->user_id=$id;
  430. $st_log->type=$type;
  431. $st_log->size=$va['size'];
  432. $st_log->num=$va['num'];
  433. $st_log->sex=$va['sex'];
  434. $st_log->number=1;
  435. $st_log->old_num=0;
  436. if (!$st_log->save()){
  437. throw new \Exception('1');
  438. }
  439. if (!$storage->save()){
  440. throw new \Exception('1');
  441. }
  442. }
  443. }
  444. DB::commit();
  445. return $this->success([]);
  446. }catch (\Exception $exception){
  447. DB::rollBack();
  448. return $this->error(50021,'',$exception);
  449. }
  450. }
  451. /*
  452. * 获取库存信息
  453. * ***/
  454. public function get_storage(Request $request){
  455. // $id=39516;
  456. $id=Auth::user()->id;
  457. $re=UserStorage::where('user_id',$id)->with(['get_storage'=>function($q)use($id){
  458. $q->where('user_id',$id)->select('sex','size','type','num');
  459. }])->groupBy('type')->get();
  460. $data=[
  461. 'hard'=>[],
  462. 'simple'=>[],
  463. 'old'=>[],
  464. 'new_old'=>[],
  465. ];
  466. foreach ($re as $k=>$v){
  467. if ($v->type==0){
  468. $data['hard']=$v->get_storage;
  469. }elseif ($v->type==1){
  470. $data['simple']=$v->get_storage;
  471. }elseif ($v->type==2){
  472. $data['old']=$v->get_storage;
  473. }else{
  474. $data['new_old']=$v->get_storage;
  475. }
  476. }
  477. return $this->success($data);
  478. }
  479. /**一次性盘库**/
  480. public function sure_storage(Request $request){
  481. $id=Auth::user()->id;
  482. $re=UserStorage::where('user_id',$id)->first();
  483. if (!$re){
  484. return $this->error(50024,'','该用户需要使用一次性盘货功能');
  485. }
  486. $number=StorageLog::where('user_id',$id)->max('number');
  487. $input=$request->all();
  488. DB::beginTransaction();
  489. try{
  490. foreach ($input as $k=>$v){
  491. if($k=='hard'){
  492. $type=0;
  493. }elseif ($k=='simple'){
  494. $type=1;
  495. }elseif ($k=='old'){
  496. $type=2;
  497. }else{
  498. $type=3;
  499. }
  500. foreach ($v as $ke=>$va){
  501. $storage=UserStorage::where('type',$type)->where('user_id',$id)->where('size',$va['size'])->where('sex',$va['sex'])->first();
  502. $st_log=new StorageLog();
  503. $st_log->number=$number+1;
  504. $st_log->sure_time=Carbon::now()->toDateTimeString();
  505. if ($storage){
  506. $st_log->old_num=$storage->num;
  507. if ($va['num']>$storage->num){
  508. $put_st=new StoragePutLog();
  509. $put_st->user_id=$id;
  510. $put_st->type=$type;
  511. $put_st->size=$va['size'];
  512. $put_st->num=$va['num']-$storage->num;
  513. $put_st->sex=$va['sex'];
  514. $put_st->storage_type=0;
  515. if (!$put_st->save()){
  516. throw new \Exception('1');
  517. }
  518. }elseif ($va['num']<$storage->num){
  519. $out_st=new ExpressStorage();
  520. $out_st->user_id=$id;
  521. $out_st->type=$type;
  522. $out_st->size=$va['size'];
  523. $out_st->num=$storage->num-$va['num'];
  524. $out_st->sex=$va['sex'];
  525. $out_st->storage_type=1;
  526. $out_st->out_time=Carbon::now();
  527. if (!$out_st->save()){
  528. throw new \Exception('1');
  529. }
  530. }
  531. $storage->num=$va['num'];
  532. }else{
  533. $storage=new UserStorage();
  534. $storage->user_id=$id;
  535. $storage->type=$type;
  536. $storage->size=$va['size'];
  537. $storage->num=$va['num'];
  538. $storage->sex=$va['sex'];
  539. $st_log->old_num=0;
  540. }
  541. $st_log->user_id=$id;
  542. $st_log->type=$type;
  543. $st_log->size=$va['size'];
  544. $st_log->num=$va['num'];
  545. $st_log->sex=$va['sex'];
  546. if (!$storage->save()){
  547. throw new \Exception('1');
  548. }
  549. if (!$st_log->save()){
  550. throw new \Exception('1');
  551. }
  552. }
  553. }
  554. DB::commit();
  555. return $this->success([]);
  556. }catch (\Exception $exception){
  557. DB::rollBack();
  558. return $this->error(50021,'',$exception);
  559. }
  560. }
  561. /***出库**/
  562. public function out_storage(Request $request){
  563. $id=Auth::user()->id;
  564. $re=UserStorage::where('user_id',$id)->first();
  565. if (!$re){
  566. return $this->error(50024,'','该用户需要使用一次性盘货功能');
  567. }
  568. $input=$request->all();
  569. DB::beginTransaction();
  570. try{
  571. foreach ($input['arr'] as $k=>$v){
  572. if($k=='hard'){
  573. $type=0;
  574. }elseif ($k=='simple'){
  575. $type=1;
  576. }elseif ($k=='old'){
  577. $type=2;
  578. }else{
  579. $type=3;
  580. }
  581. foreach ($v as $ke=>$va){
  582. if ($va['num']!=0){
  583. $storage=UserStorage::where('type',$type)->where('user_id',$id)->where('size',$va['size'])->where('sex',$va['sex'])->first();
  584. if (!$storage){
  585. return $this->error(50023,'','没有该商品的库存,请先使用盘库功能');
  586. }
  587. if ($storage->num<$va['num']){
  588. return $this->error(50023,'','该商品的出库量大于库存量,请先使用盘库修改库存');
  589. }
  590. $storage->num-=$va['num'];
  591. if (!$storage->save()){
  592. throw new \Exception('1');
  593. }
  594. $eStorage=new ExpressStorage();
  595. $eStorage->num=$va['num'];
  596. $eStorage->user_id=$id;
  597. $eStorage->out_type=$input['type'];
  598. $eStorage->size=$va['size'];
  599. $eStorage->sex=$va['sex'];
  600. $eStorage->type=$type;
  601. $eStorage->storage_type=1;
  602. $eStorage->out_time=Carbon::now();
  603. if (!$eStorage->save()){
  604. throw new \Exception('1');
  605. }
  606. }
  607. }
  608. }
  609. DB::commit();
  610. return $this->success([]);
  611. }catch (\Exception $exception){
  612. DB::rollBack();
  613. return $this->error(50021,'',$exception);
  614. }
  615. }
  616. /*
  617. * 盘库记录
  618. **/
  619. public function sure_storage_group(Request $request){
  620. $input=$request->all();
  621. $id=Auth::user()->id;
  622. // $id=39516;
  623. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  624. foreach ($datas as $k=>$v){
  625. $r[$v->main_attr]=$v->main_img;
  626. }
  627. $data=[
  628. 'hard'=>['imgurl'=>$r['精装版'],'name'=>'精装版','woman'=>0,'man'=>0],
  629. 'simple'=>['imgurl'=>$r['简约版'],'name'=>'简约版','woman'=>0,'man'=>0],
  630. 'old'=>['imgurl'=>$r['老人版'],'name'=>'老人版','woman'=>0,'man'=>0],
  631. 'new_old'=>['imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版','woman'=>0,'man'=>0],
  632. ];
  633. $storage_log=StorageLog::where('user_id',$id);
  634. $where_start=[];
  635. $start=$input['start_time'];
  636. if ($start){
  637. $where_start=function ($q)use($start){
  638. $q->where('created_at','>=',$start);
  639. };
  640. }
  641. $where_end=[];
  642. $end=$input['end_time'];
  643. if ($end){
  644. $where_end=function ($q)use($end){
  645. $q->where('created_at','<=',$end);
  646. };
  647. }
  648. $re=$storage_log->where($where_start)->where($where_end)->groupBy('type')->get();
  649. foreach ($re as $k=>$v){
  650. $woman=0;
  651. $man=0;
  652. $res=StorageLog::where('user_id',$id)->where('type',$v->type)->where($where_start)->where($where_end)->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  653. foreach ($res as $ke=>$va){
  654. if ($va['sex']==0){
  655. $woman=$va['total'];
  656. }else{
  657. $man=$va['total'];
  658. }
  659. }
  660. if ($v->type==0){
  661. $data['hard']['man']=$man;
  662. $data['hard']['woman']=$woman;
  663. }elseif ($v->type==1){
  664. $data['simple']['man']=$man;
  665. $data['simple']['woman']=$woman;
  666. }elseif ($v->type==2){
  667. $data['old']['man']=$man;
  668. $data['old']['woman']=$woman;
  669. }else{
  670. $data['new_old']['man']=$man;
  671. $data['new_old']['woman']=$woman;
  672. }
  673. }
  674. return $this->success($data);
  675. }
  676. public function sure_storage_detail(Request $request){
  677. $input=$request->all();
  678. $id=Auth::user()->id;
  679. // $id=39516;
  680. $express=StorageLog::where('user_id',$id)->where('type',$input['type']);
  681. $where_start=[];
  682. $start=$input['start_time'];
  683. if ($start){
  684. $where_start=function ($q)use($start){
  685. $q->where('created_at','>=',$start);
  686. };
  687. }
  688. $where_end=[];
  689. $end=$input['end_time'];
  690. if ($end){
  691. $where_end=function ($q)use($end){
  692. $q->where('created_at','<=',$end);
  693. };
  694. }
  695. $re=$express->where($where_start)->where($where_end);
  696. $count=$re->count();
  697. $data=$re->take(20)->skip(($input['page_index']-1)*20)->get();
  698. return $this->success_list($data,'',$count);
  699. }
  700. /*
  701. *订货入库和退货入库
  702. ***/
  703. public function put_storages(Request $request){
  704. $id=Auth::user()->id;
  705. $re=UserStorage::where('user_id',$id)->first();
  706. if (!$re){
  707. return $this->error(50024,'','该用户需要使用一次性盘货功能');
  708. }
  709. $input=$request->all();
  710. $data=$input['data'];
  711. // $put_type=0;
  712. $put_type=$input['put_type'];
  713. DB::beginTransaction();
  714. try{
  715. foreach ($data as $k=>$v){
  716. if($k=='hard'){
  717. $type=0;
  718. }elseif ($k=='simple'){
  719. $type=1;
  720. }elseif ($k=='old'){
  721. $type=2;
  722. }else{
  723. $type=3;
  724. }
  725. foreach ($v as $ke=>$va){
  726. if ($va['num']!=0){
  727. $st_log=new StoragePutLog();
  728. $storage=UserStorage::where('type',$type)->where('user_id',$id)->where('size',$va['size'])->where('sex',$va['sex'])->first();
  729. if ($put_type==0){
  730. if ($type==2||$type==1){
  731. $va['num']=$va['num']*4;
  732. }elseif ($type==3){
  733. $va['num']=$va['num']*6;
  734. }
  735. }
  736. if ($storage){
  737. $storage->num+=$va['num'];
  738. }else{
  739. $storage=new UserStorage();
  740. $storage->user_id=$id;
  741. $storage->type=$type;
  742. $storage->size=$va['size'];
  743. $storage->num=$va['num'];
  744. $storage->sex=$va['sex'];
  745. }
  746. $st_log->user_id=$id;
  747. $st_log->type=$type;
  748. $st_log->size=$va['size'];
  749. $st_log->num=$va['num'];
  750. $st_log->sex=$va['sex'];
  751. $st_log->put_type=$put_type;
  752. $st_log->storage_type=0;
  753. if (!$storage->save()){
  754. throw new \Exception('1');
  755. }
  756. if (!$st_log->save()){
  757. throw new \Exception('1');
  758. }
  759. }
  760. }
  761. }
  762. DB::commit();
  763. return $this->success([]);
  764. }catch (\Exception $exception){
  765. DB::rollBack();
  766. return $this->error(50021,'',$exception);
  767. }
  768. }
  769. /*
  770. * 入库记录
  771. * ***/
  772. public function put_storage_groups(Request $request){
  773. $input=$request->all();
  774. $id=Auth::user()->id;
  775. // $id=39516;
  776. $datas=Goodtest::where('is_deleted',0)->where('id','>',57)->groupBy('main_attr')->get();
  777. foreach ($datas as $k=>$v){
  778. $r[$v->main_attr]=$v->main_img;
  779. }
  780. $data=[
  781. 'hard'=>['imgurl'=>$r['精装版'],'name'=>'精装版','woman'=>0,'man'=>0],
  782. 'simple'=>['imgurl'=>$r['简约版'],'name'=>'简约版','woman'=>0,'man'=>0],
  783. 'old'=>['imgurl'=>$r['老人版'],'name'=>'老人版','woman'=>0,'man'=>0],
  784. 'new_old'=>['imgurl'=>$r['纯棉老人版'],'name'=>'纯棉老人版','woman'=>0,'man'=>0],
  785. ];
  786. $where_type=[];
  787. $type=$input['record_type'];
  788. if ($type){
  789. if ($type==1){
  790. $where_type=function ($q)use($type){
  791. $q->where('storage_type',$type);
  792. };
  793. }else{
  794. $where_type=function ($q)use($type){
  795. $q->where('storage_type',$type);
  796. };
  797. }
  798. }
  799. $express=StoragePutLog::where('user_id',$id)->where($where_type);
  800. $where_start=[];
  801. $start=$input['start_time'];
  802. if ($start){
  803. $where_start=function ($q)use($start){
  804. $q->where('created_at','>=',$start);
  805. };
  806. }
  807. $where_end=[];
  808. $end=$input['end_time'];
  809. if ($end){
  810. $where_end=function ($q)use($end){
  811. $q->where('created_at','<=',$end);
  812. };
  813. }
  814. $re=$express->where($where_start)->where($where_end)->groupBy('type')->get();
  815. foreach ($re as $k=>$v){
  816. $woman=0;
  817. $man=0;
  818. if ($type==1){
  819. $res=StoragePutLog::where('user_id',$id)->where('type',$v->type)->where('storage_type',$type)->where($where_start)->where($where_end);
  820. if ($input['status']==-1){
  821. $res=$res->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  822. }else{
  823. $res=$res->where('out_type',$input['status'])->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  824. }
  825. foreach ($res as $ke=>$va){
  826. if ($va['sex']==0){
  827. $woman=$va['total'];
  828. }else{
  829. $man=$va['total'];
  830. }
  831. }
  832. }else{
  833. $res=StoragePutLog::where('user_id',$id)->where('type',$v->type)->where('storage_type',$type)->where($where_start)->where($where_end)->groupBy('sex')->select(DB::raw('sum(num) as total'),'sex')->get()->toArray();
  834. foreach ($res as $ke=>$va){
  835. if ($va['sex']==0){
  836. $woman=$va['total'];
  837. }else{
  838. $man=$va['total'];
  839. }
  840. }
  841. }
  842. if ($v->type==0){
  843. $data['hard']['man']=$man;
  844. $data['hard']['woman']=$woman;
  845. }elseif ($v->type==1){
  846. $data['simple']['man']=$man;
  847. $data['simple']['woman']=$woman;
  848. }elseif ($v->type==2){
  849. $data['old']['man']=$man;
  850. $data['old']['woman']=$woman;
  851. }else{
  852. $data['new_old']['man']=$man;
  853. $data['new_old']['woman']=$woman;
  854. }
  855. }
  856. return $this->success($data);
  857. }
  858. public function put_storage_details(Request $request){
  859. $input=$request->all();
  860. $id=Auth::user()->id;
  861. // $id=39516;
  862. $where_type=[];
  863. if ($input['record_type']){
  864. $type=$input['record_type'];
  865. $where_type=function ($q)use($type){
  866. $q->where('storage_type',$type);
  867. };
  868. }
  869. $express=StoragePutLog::where('user_id',$id)->where($where_type)->where('type',$input['type']);
  870. $where_start=[];
  871. $start=$input['start_time'];
  872. if ($start){
  873. $where_start=function ($q)use($start){
  874. $q->where('created_at','>=',$start);
  875. };
  876. }
  877. $where_end=[];
  878. $end=$input['end_time'];
  879. if ($end){
  880. $where_end=function ($q)use($end){
  881. $q->where('created_at','<=',$end);
  882. };
  883. }
  884. $re=$express->where($where_start)->where($where_end);
  885. $count=$re->count();
  886. $data=$re->take(20)->skip(($input['page_index']-1)*20)->get();
  887. return $this->success_list($data,'',$count);
  888. }
  889. /*
  890. * 按照时间分组
  891. * ***/
  892. public function get_group(Request $request){
  893. // $data=DB::select('SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate)');
  894. $id=Auth::user()->id;
  895. $data=Express::where('user_id',$id)->selectRaw('DATE_FORMAT(created_at,"%Y-%m-%d") as date')
  896. ->groupBy('date')->orderByDesc('date');
  897. $count=$data->get()->count();
  898. $data=$data->take($request->page_size)->skip(($request->page_index-1)*$request->page_size)->get();
  899. $arr=[];
  900. foreach ($data as $k=>$v){
  901. $start_time=date('Y-m-d H:i:s',strtotime($v->date));
  902. $end_time=Carbon::parse($start_time)->endOfDay();
  903. $counts=Express::where('user_id',$id)->whereBetween('created_at',[$start_time,$end_time])->groupBy('order_id')->get()->count();
  904. $arr[$k]=$v;
  905. $arr[$k]['count']=$counts;
  906. }
  907. return $this->success_list($arr,'',$count);
  908. }
  909. public function get_detail(Request $request){
  910. $time=$request->time;
  911. $start_time=date('Y-m-d H:i:s',strtotime($time));
  912. $end_time=Carbon::parse($start_time)->endOfDay();
  913. $id=Auth::user()->id;
  914. $data=Express::where('user_id',$id)->whereBetween('created_at',[$start_time,$end_time])->with(['get_order'=>function($q)use($start_time,$end_time,$id){
  915. $q->with(['get_express'=>function($qu)use($start_time,$end_time){
  916. $qu->whereBetween('created_at',[$start_time,$end_time])->select('id','express_com','order_id','express_number','put_status','is_gift','notes','remark');
  917. },'address'])->where('user_id',$id)->select('order_num','put_status','id','address_id','user_id','good_user_id','track_status');
  918. }])->select('order_id','user_id','created_at')->groupBy('order_id')->get();
  919. $arr=[];
  920. foreach ($data as $k=>$v){
  921. $arr[$k]=$v;
  922. if ($v['get_order']){
  923. foreach ($v['get_order']['get_express'] as $ke=>$va){
  924. $arrs[$ke]=$va;
  925. $arrs[$ke]['user_id']=$v['get_order']['user_id'];
  926. $arrs[$ke]['good_user_id']=$v['get_order']['good_user_id'];
  927. if ($va['is_gift']!=1){
  928. $arrs[$ke]['notes']=null;
  929. }
  930. if (!$va['put_status']){
  931. $arrs[$ke]['put_status']=0;
  932. }
  933. }
  934. $arr[$k]['get_order']['get_express']=$arrs;
  935. }
  936. }
  937. return $this->success_list($arr);
  938. }
  939. }