InventoryController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\OracleBasCustomer;
  4. use App\Owner;
  5. use App\Services\AllInventoryService;
  6. use App\Services\InventoryDailyLogService;
  7. use App\Services\InventoryService;
  8. use App\Services\OwnerService;
  9. use Exception;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Gate;
  12. use Illuminate\Support\Facades\Http;
  13. class InventoryController extends Controller
  14. {
  15. public function __construct()
  16. {
  17. app()->singleton('inventoryService',InventoryService::class);
  18. app()->singleton('AllInventoryService',AllInventoryService::class);
  19. }
  20. //动库报表
  21. public function changeInventory(Request $request){
  22. if(!Gate::allows("库存管理-库存")){ return redirect(url('/')); }
  23. $oracleActTransactingLogs=app('inventoryService')->paginate($request->input());
  24. $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
  25. // $owners=OracleBasCustomer::query()->select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
  26. $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
  27. $isTotalStock=false;
  28. $page = $request->page ?? 1;
  29. return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','owners','isTotalStock'));
  30. }
  31. //全部库存
  32. public function allInventory(Request $request){
  33. if(!Gate::allows("库存管理-库存")){ return redirect(url('/')); }
  34. /** @var AllInventoryService $service */
  35. $service = app('AllInventoryService');
  36. $oracleActTransactingLogs= $service->paginate($request->input());
  37. $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
  38. // $owners=OracleBasCustomer::query()->select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
  39. $owners=Owner::filterAuthorities()->select(['code', 'name'])->get();
  40. $isTotalStock=true;
  41. $page = $request->page ?? 1;
  42. return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','owners','isTotalStock'));
  43. }
  44. public function exportData(Request $request){
  45. if(!Gate::allows("库存管理-库存")){ return redirect(url('/')); }
  46. if ($request->checkAllSign){
  47. $params = $request->input();
  48. unset($params['checkAllSign']);
  49. $sql=app('inventoryService')->getSql($request->input());
  50. $post = Http::post(config('go.export.url'),['type'=>'inventory','sql'=>$sql]);
  51. }else {
  52. $post = Http::post(config('go.export.url'), ['type' => 'inventory', 'data' => $request->data]);
  53. }
  54. if ($post->status() == 500){
  55. throw new \Exception($post->header("Msg"));
  56. }
  57. return response($post, 200, [
  58. "Content-type" => "application/octet-stream",
  59. "Content-Disposition" => "attachment; filename=库存记录-" . date('ymdHis') . '.xlsx',
  60. ]);
  61. }
  62. public function exportAllInventory(Request $request){
  63. if(!Gate::allows("库存管理-库存")){ return redirect(url('/')); }
  64. if ($request->checkAllSign){
  65. $params = $request->input();
  66. unset($params['checkAllSign']);
  67. $sql=app('AllInventoryService')->getSql($request->input());
  68. $post = Http::post(config('go.export.url'),['type'=>'allInventory','sql'=>$sql]);
  69. }else{
  70. $post = Http::post(config('go.export.url'),['type'=>'allInventory','data'=>$request->data]);
  71. }
  72. if ($post->status() == 500){
  73. throw new Exception($post->header("Msg"));
  74. }
  75. return response($post,200, [
  76. "Content-type"=>"application/octet-stream",
  77. "Content-Disposition"=>"attachment; filename=全部库存-".date('ymdHis').'.xlsx',
  78. ]);
  79. }
  80. /*
  81. * 库存体积
  82. */
  83. function dailyLog(Request $request,OwnerService $ownerService){
  84. if (!Gate::allows('库存管理-库存体积')){return redirect(url('/')); }
  85. /** @var InventoryDailyLogService*/
  86. $inventoryDailyLogs = app('InventoryDailyLogService')->paginate($request->input());
  87. $owners = $ownerService->getIntersectPermitting();
  88. $param = $request->input();
  89. return view('inventory.statement.dailyLog',compact('inventoryDailyLogs','owners','param'));
  90. }
  91. //获取记录监听货主
  92. function getLoggingOwner(){
  93. $loggingOwners = app('InventoryDailyLogService')->getInventoryDailyLoggingOwner('owner_id');
  94. return array_column($loggingOwners->toArray(),'owner_id');
  95. }
  96. //添加记录监听货主
  97. function addLoggingOwner(Request $request){
  98. if (!Gate::allows('库存管理-库存体积-管理监听货主')){return redirect(url('/')); }
  99. $owner_id = $request->owner_id;
  100. if (!$owner_id || !is_numeric($owner_id))return ['success'=>false,'data'=>'传递参数错误!'];
  101. $loggingOwner = app('InventoryDailyLogService')->firstOrCreate(['owner_id'=>$owner_id]);
  102. if (!$loggingOwner)return ['success'=>false,'data'=>'录入失败!'];
  103. return ['success'=>true,'data'=>$loggingOwner->owner_id];
  104. }
  105. //导出库存体积记录
  106. public function exportDailyLog(Request $request){
  107. if (!Gate::allows('库存管理-库存体积')){return redirect(url('/')); }
  108. if ($request->checkAllSign){
  109. $params = $request->input();
  110. unset($params['checkAllSign']);
  111. $sql=app('InventoryDailyLogService')->getSql($params);
  112. }else $sql=app('InventoryDailyLogService')->getSql(['id'=>$request->data]);
  113. $row = ["货主","日期","商品名称","商品编码","商品条码","属性仓","在库数量","长","宽","高","体积","总占用体积","总毛重"];
  114. $column = ["owner_name", "created_at", "commodity_name", "commodity_sku", "commodity_barcode_code","depository_name",
  115. "amount", "commodity_length", "commodity_width", "commodity_height", "commodity_volumn", "volumn_occupied", "gross_weight"];
  116. $rule = ["created_at"=> "mysqlDate"];
  117. $post = Http::post(config('go.export.url'),['type'=>'unify','sql'=>$sql, 'connection'=>'mysql',
  118. 'row'=>json_encode($row,JSON_UNESCAPED_UNICODE), 'column'=>json_encode($column), 'rule'=>json_encode($rule)]);
  119. if ($post->status() == 500){
  120. throw new Exception($post->header("Msg"));
  121. }
  122. return response($post,200, [
  123. "Content-type"=>"application/octet-stream",
  124. "Content-Disposition"=>"attachment; filename=库存体积记录-".date('ymdHis').'.xlsx',
  125. ]);
  126. }
  127. }