ExitController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exports\Export;
  4. use App\OracleBasCustomer;
  5. use App\OracleDOCOrderHeader;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Gate;
  8. use Maatwebsite\Excel\Facades\Excel;
  9. class ExitController extends Controller
  10. {
  11. public function conditionQuery(Request $request,$orders){
  12. $ordertime_start=$request->input('ordertime_start');
  13. $ordertime_end=$request->input('ordertime_end');
  14. $customerid=$request->input('customerid');
  15. $soreference1=$request->input('soreference1');
  16. $soreference5=$request->input('soreference5');
  17. if ($ordertime_start){
  18. $ordertime_start=$ordertime_start." 00:00:00";
  19. $orders=$orders->where('ordertime','>=',$ordertime_start);
  20. }
  21. if ($ordertime_end){
  22. $ordertime_end=$ordertime_end." 23:59:59";
  23. $orders=$orders->where('ordertime','<=',$ordertime_end);
  24. }
  25. if ($customerid)$orders=$orders->where('customerid',$customerid);
  26. if ($soreference1)$orders=$orders->where('orderno','like',$soreference1."%");
  27. if ($soreference5){
  28. $arr=array_filter(preg_split('/[,, ]+/is', $soreference5));
  29. $orders=$orders->whereIn('soreference5',$arr);
  30. }
  31. return $orders;
  32. }
  33. public function forwarding(Request $request){
  34. if(!Gate::allows('订单管理-发运')){ return redirect(url('/')); }
  35. $orders=OracleDOCOrderHeader::with(['oracleDOCOrderDetails'=>function($query){
  36. return $query->select('DOC_Order_Details.orderno','DOC_Order_Details.CustomerID',
  37. 'DOC_Order_Details.SKU','DOC_Order_Details.QtyOrdered','DOC_Order_Details.OrderLineNo',
  38. 'BAS_SKU.Alternate_SKU1','BAS_SKU.Descr_C')
  39. ->leftJoin('BAS_SKU',function ($join){
  40. $join->on('DOC_Order_Details.CustomerID','=','BAS_SKU.CustomerID')
  41. ->on('DOC_Order_Details.SKU','=','BAS_SKU.SKU');
  42. })->orderBy('OrderLineNo');
  43. }])->select('OrderNo','SOStatus','WAREHOUSEID','CustomerID'
  44. ,'ConsigneeID','ConsigneeName','C_Tel1','CarrierName','IssuePartyName','WaveNo','SOReference1'
  45. ,'soreference5','EDISENDFLAG2','EDISendTime2','Notes','ERPCANCELFLAG','Picking_Print_Flag','EDISENDFLAG'
  46. ,'ReleaseStatus','C_Address1','OrderTime');
  47. if ($request->input('checkData')){
  48. $checkData=explode(',',$request->input('checkData'));
  49. $orders=$orders->whereIn('orderno',$checkData)->get();
  50. return $this->export($orders);
  51. }
  52. if ($request->input('export')){
  53. $orders=$this->conditionQuery($request,$orders);
  54. return $this->export($orders->get());
  55. }
  56. if ($request->input())$orders=$this->conditionQuery($request,$orders);
  57. $orders=$orders->paginate($request->input('paginate')??50);
  58. $customers=OracleBasCustomer::select('customerid','descr_c')->where('customer_type','OW')->where('active_flag','Y')->get();
  59. $request=$request->input();
  60. return view('exit/index/forwarding',compact('orders','customers','request'));
  61. }
  62. public function batchComments(Request $request){
  63. if(!Gate::allows('订单管理-批量备注')){ return redirect(url('/')); }
  64. $checkData=$request->input('checkData');
  65. $content=$request->input('content');
  66. $ordersNotNull=OracleDOCOrderHeader::select('OrderNo','Notes')->whereIn('orderno',$checkData)
  67. ->whereNotNull('notes')->get();
  68. OracleDOCOrderHeader::select('OrderNo','Notes')->whereIn('orderno',$checkData)
  69. ->whereNull('notes')->update(['notes'=>$content]);
  70. $ordersNotNullArr=array_column($ordersNotNull->toArray(),'orderno');
  71. $ordersNullArr=array_diff($checkData,$ordersNotNullArr);
  72. $data=[];
  73. foreach ($ordersNotNull as $order){
  74. OracleDOCOrderHeader::where('orderno',$order->orderno)->update(["notes"=>($order->notes).",".$content]);
  75. $order->notes=($order->notes).",".$content;
  76. array_push($data,$order);
  77. }
  78. foreach ($ordersNullArr as $order){
  79. array_push($data,["orderno"=>$order,'notes'=>$content]);
  80. }
  81. return $data;
  82. }
  83. function export($orders){
  84. if(!Gate::allows('订单管理')){ return redirect(url('/')); }
  85. ini_set('max_execution_time',3500);
  86. ini_set('memory_limit','3526M');
  87. $row=[[
  88. 'orderno'=>'编号',
  89. 'sostatus'=>'订单状态',
  90. 'warehouseid'=>'仓库',
  91. 'oracleBASCustomer_descr_c'=>'客户',
  92. 'consigneeid'=>'收货人',
  93. 'consigneename'=>'收货人名称',
  94. 'c_tel1'=>'收货人电话',
  95. 'carriername'=>'承运人',
  96. 'issuepartyname'=>'下单方名称',
  97. 'waveno'=>'波次编号',
  98. 'soreference1'=>'客户订单号',
  99. 'soreference5'=>'快递单号',
  100. 'edisendflag2'=>'快递获取标记',
  101. 'edisendtime2'=>'快递获取时间',
  102. 'sku'=>'产品代码',
  103. 'alternate_sku1'=>'产品条码',
  104. 'descr_c'=>'产品名称',
  105. 'qtyordered'=>'订单数量',
  106. 'notes'=>'备注',
  107. 'erpcancelflag'=>'接口取消标记',
  108. 'picking_print_flag'=>'拣货单打印标记',
  109. 'edisendflag'=>'接口回传标记',
  110. 'releasestatus'=>'订单冻结标记',
  111. 'c_address1'=>'收货人地址',
  112. ]];
  113. $list=[];
  114. $sign=[];
  115. $mergeCell=[];
  116. foreach ($orders as $order){
  117. $data=[
  118. 'orderno'=>$order->orderno,
  119. 'sostatus'=>$order->oracleBASCode_codename_c,
  120. 'warehouseid'=>$order->warehouseid,
  121. 'oracleBASCustomer_descr_c'=>$order->oracleBASCustomer_descr_c,
  122. 'consigneeid'=>$order->consigneeid,
  123. 'consigneename'=>$order->consigneename,
  124. 'c_tel1'=>$order->c_tel1,
  125. 'carriername'=>$order->carriername,
  126. 'issuepartyname'=>$order->issuepartyname,
  127. 'waveno'=>$order->waveno,
  128. 'soreference1'=>$order->soreference1,
  129. 'soreference5'=>$order->soreference5,
  130. 'edisendflag2'=>$order->edisendflag2,
  131. 'edisendtime2'=>$order->edisendtime2,
  132. 'notes'=>$order->notes,
  133. 'erpcancelflag'=>$order->erpcancelflag,
  134. 'picking_print_flag'=>$order->picking_print_flag,
  135. 'edisendflag'=>$order->edisendflag,
  136. 'releasestatus'=>$order->releasestatus,
  137. 'c_address1'=>$order->c_address1,
  138. ];
  139. if (count($order->oracleDOCOrderDetails)<1){
  140. $data['sku']='';
  141. $data['alternate_sku1']='';
  142. $data['descr_c']='';
  143. $data['qtyordered']='';
  144. array_push($list,$data);
  145. continue;
  146. }
  147. foreach ($order->oracleDOCOrderDetails as $oracleDOCOrderDetail){
  148. $data['sku']=$oracleDOCOrderDetail->sku;
  149. $data['alternate_sku1']=$oracleDOCOrderDetail->alternate_sku1;
  150. $data['descr_c']=$oracleDOCOrderDetail->descr_c;
  151. $data['qtyordered']=$oracleDOCOrderDetail->qtyordered;
  152. if (isset($sign[$order->orderno])){
  153. $data['orderno']='';$data['sostatus']='';$data['warehouseid']='';$data['oracleBASCustomer_descr_c']='';$data['consigneeid']='';$data['consigneename']='';
  154. $data['c_tel1']='';$data['carriername']='';$data['issuepartyname']='';$data['waveno']='';$data['soreference1']='';$data['soreference5']='';
  155. $data['edisendflag2']='';$data['edisendtime2']='';$data['notes']='';$data['erpcancelflag']='';$data['picking_print_flag']='';$data['edisendflag']='';
  156. $data['releasestatus']='';$data['c_address1']='';
  157. array_push($list,$data);
  158. continue;
  159. }
  160. array_push($list,$data);
  161. $sign[$order->orderno]=count($list)+1;
  162. }
  163. if (count($order->oracleDOCOrderDetails)>1){
  164. $mergeCell[$sign[$order->orderno]]=$sign[$order->orderno]+(count($order->oracleDOCOrderDetails)-1);
  165. }
  166. }
  167. $columnName=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","S","T","U","V","W","X"];
  168. return Excel::download(new Export($row,$list,$mergeCell,$columnName),date('YmdHis', time()).'-出库发运单.xlsx');
  169. }
  170. }