StoreController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Depository;
  4. use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
  5. use App\Owner;
  6. use App\Store;
  7. use App\StoreItems;
  8. use App\Warehouse;
  9. use App\WMSReflectReceive;
  10. use Illuminate\Contracts\Foundation\Application;
  11. use Illuminate\Contracts\View\Factory;
  12. use Illuminate\Http\RedirectResponse;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Http\Response;
  15. use Illuminate\Routing\Redirector;
  16. use Illuminate\Support\Facades\Gate;
  17. use Illuminate\Support\Facades\Validator;
  18. use Illuminate\View\View;
  19. class StoreController extends Controller
  20. {
  21. /**
  22. * Display a listing of the resource.
  23. *
  24. * @return Application|Factory|Response|View
  25. */
  26. public function index()
  27. {
  28. if(!Gate::allows('入库管理-快速入库-查询')){ return redirect(url('/')); }
  29. $stores=Store::orderBy('id','DESC')->paginate(50);
  30. return view('store.fast.index',['stores'=>$stores]);
  31. }
  32. /**
  33. * Show the form for creating a new resource.
  34. *
  35. * @return Application|Factory|Response|View
  36. */
  37. public function create()
  38. {
  39. if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/')); }
  40. return view('store.fast.create');
  41. }
  42. /**
  43. * Store a newly created resource in storage.
  44. *
  45. * @param Request $request
  46. * @return RedirectResponse|Response|Redirector
  47. */
  48. public function store(Request $request)
  49. {
  50. if(!Gate::allows('入库管理-快速入库-录入')){ return redirect(url('/')); }
  51. $this->validator($request);
  52. $result = $this->quickStorage($request->input('asn_code'),$request->input('quality'),$request->input('depository_code'));
  53. $response = redirect('store/fast/create');
  54. if ($result['success'])return redirect('store/fast/create')->with('successTip',$result['data']);
  55. else return $response->with('successError',$result['data']);
  56. }
  57. public function quickStorage($asn,$quality,$depository_code){
  58. $WMSReflectReceive=WMSReflectReceive::with('skus')->where('ASNNO',$asn)->first();
  59. if (!$WMSReflectReceive)return ['success'=>false, 'data'=>"ASN编号不存在!"];
  60. $warehouse=Warehouse::query()->where('code',$WMSReflectReceive->WAREHOUSEID)->first();
  61. if (!$warehouse&&$WMSReflectReceive->WAREHOUSEID){
  62. $warehouse=new Warehouse([
  63. 'name'=>$WMSReflectReceive->WAREHOUSEID,
  64. 'code'=>$WMSReflectReceive->WAREHOUSEID
  65. ]);
  66. $warehouse->save();
  67. }
  68. $owner=Owner::query()->where('code',$WMSReflectReceive->CUSTOMERID)->first();
  69. if (!$owner&&$WMSReflectReceive->CUSTOMERID){
  70. $owner=new Warehouse([
  71. 'name'=>$WMSReflectReceive->CUSTOMERID,
  72. 'code'=>$WMSReflectReceive->CUSTOMERID
  73. ]);
  74. $owner->save();
  75. }
  76. $store=Store::query()->where('asn_code',$WMSReflectReceive->ASNNO)->first();
  77. if(!$store){
  78. $store=new Store([
  79. 'asn_code'=>$WMSReflectReceive->ASNNO,
  80. 'warehouse_id'=>$warehouse->id,
  81. 'owner_id'=>$owner->id,
  82. 'stored_method'=>'快速入库',
  83. 'status'=>'未入库',
  84. 'remark'=>$WMSReflectReceive->NOTES,
  85. ]);
  86. $store->save();
  87. $customDepository=(function()use($depository_code){
  88. $customDepository=Depository::query()->where('code',$depository_code)->first();
  89. if($depository_code){
  90. if (!$customDepository){
  91. $depository=new Depository([
  92. 'name'=>$depository_code,
  93. 'code'=>$depository_code
  94. ]);
  95. $depository->save();
  96. }
  97. }
  98. return $customDepository;
  99. })();
  100. if ($WMSReflectReceive->skus){
  101. foreach ($WMSReflectReceive->skus as $sku){
  102. $depository=(function()use($sku,$customDepository){
  103. if($customDepository)return $customDepository;
  104. $depository=Depository::query()->where('code',$sku->LOTATT05)->first();
  105. if (!$depository){
  106. if (!$sku->LOTATT05)return $depository;
  107. $depository=new Depository([
  108. 'name'=>$sku->LOTATT05,
  109. 'code'=>$sku->LOTATT05
  110. ]);
  111. $depository->save();
  112. }
  113. return $depository;
  114. })();
  115. $storeItem=new StoreItems([
  116. 'store_id'=>$store->id,
  117. 'asn_line_code'=>$sku->ASNLINENO,
  118. 'name'=>$sku->SKUDESCRC,
  119. 'sku'=>$sku->SKU,
  120. 'barcode'=>$sku->ALTERNATE_SKU1,
  121. 'quality'=>$quality,
  122. 'status'=>'未入库',
  123. ]);
  124. if ($depository)$storeItem->depository_id=$depository->id;
  125. $storeItem->save();
  126. }
  127. }
  128. }
  129. /** @var Store $store */
  130. $store=Store::with('storeItems')->where('asn_code',$asn)->first();
  131. $storeApi=new FStoreController();
  132. $result=$storeApi->accomplishToWMS($store,[
  133. 'quality'=>$quality,
  134. 'depository_code'=>$depository_code,
  135. 'follow_code'=>$store['id'],
  136. ]);
  137. if ($result){
  138. $store->status='已入库';
  139. $store->save();
  140. if ($store->storeItems){
  141. $store->storeItems->each(function ($storeItem)use($quality){
  142. $storeItem->status='已入库';
  143. $storeItem->quality=$quality;
  144. $storeItem->save();
  145. });
  146. }
  147. return ['success'=>true, 'data'=>"成功!"];
  148. }
  149. return ['success'=>false, 'data'=>"失败!请检查错误日志"];
  150. }
  151. public function validator(Request $request){
  152. $validator=Validator::make($request->input(),[
  153. 'asn_code'=>['required'],
  154. 'quality'=>['required'],
  155. 'depository_code'=>['nullable','string'],
  156. ],[
  157. 'required'=>':attribute 为必填项',
  158. 'unique'=>':attribute 已存在',
  159. ],[
  160. 'asn_code'=>'ASN编号',
  161. 'quality'=>'货物类型'
  162. ])->validate();
  163. return $validator;
  164. }
  165. }