RentOrderExport.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Exports;
  3. use App\Models\OrderDevice;
  4. use App\Order;
  5. use Maatwebsite\Excel\Concerns\FromCollection;
  6. use Maatwebsite\Excel\Concerns\WithMapping;
  7. use Maatwebsite\Excel\Concerns\WithHeadings;
  8. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  9. use Maatwebsite\Excel\Concerns\WithColumnFormatting;
  10. class RentOrderExport implements FromCollection, WithMapping,WithHeadings,WithColumnFormatting
  11. {
  12. /**
  13. * @return \Illuminate\Support\Collection
  14. */
  15. public function collection(){
  16. $request = request();
  17. $order = new OrderDevice();
  18. $items = $order->orderBy('created_at', 'desc');
  19. $items = $items->whereNull('inner_device_id');
  20. if($request->input('work_point_id')){
  21. $items->whereHas('inner_device',function ($query) use ($request) {
  22. $query->whereHas('work_point_id',$request->input('work_point_id'));
  23. });
  24. }
  25. if ($request->input('number'))
  26. {
  27. $items->whereHas('inner_device',function ($query){
  28. $query->where('number','like','%'.request('number').'%');
  29. });
  30. }
  31. if ($request->input('spec_id'))
  32. {
  33. $items->where('spec_id',$request->input('spec_id'));
  34. }
  35. if ($request->input('device_id'))
  36. {
  37. $items->where('device_id',$request->input('device_id'));
  38. }
  39. if ($request->input('project_id'))
  40. {
  41. $items->whereHas('project',function ($query){
  42. $query->where('id','=',request('project_id'));
  43. });
  44. }
  45. if ($request->input('device_name_id'))
  46. {
  47. $items->where('device_name_id',$request->input('device_name_id'));
  48. // $items->whereHas('inner_device',function ($query) use ($request) {
  49. // $query->whereHas('device_name_id',$request->input('device_name_id'));
  50. // });
  51. }
  52. // array:6 [▼
  53. // "device_id" => "1"
  54. // "device_name_id" => "1"
  55. // "project_id" => null
  56. // "spec_id" => "1"
  57. // "type" => "rent"
  58. // "work_point_id" => null
  59. //]
  60. $items = $items->get();
  61. foreach ($items as $item) {
  62. $item->user_name = $item->user ? $item->user->name : '';
  63. $item->project_name = $item->project ? $item->project->name : '';
  64. $item->work_point_name = $item->order ? ($item->order->workPoint ? $item->order->workPoint->name : '') : '';
  65. $item->money = ($item->price * $item->quantity) / 100;
  66. $item->device_type_name = $item->device ? $item->device->name : '';
  67. $item->device_name_name = $item->device_name ? $item->device_name->name : '';
  68. $item->order_number = $item->order ? "\t".$item->order->order_number : '';
  69. $item->spec_name = $item->spec ? $item->spec->name : '';
  70. $item->rent_type_name = $item->rent_type ? $item->rent_type->name : '';
  71. $item->price = $item->price / 100;
  72. }
  73. return $items;
  74. }
  75. public function map($row): array
  76. {
  77. return [
  78. $row->order_id,
  79. $row->order_number,
  80. $row->project_name,
  81. $row->work_point_name,
  82. $row->device_type_name,
  83. $row->device_name_name,
  84. $row->spec_name,
  85. $row->rent_type_name,
  86. $row->price,
  87. $row->quantity,
  88. $row->start_date,
  89. $row->end_date,
  90. $row->money,
  91. ];
  92. }
  93. public function headings(): array
  94. {
  95. return [
  96. '订单ID',
  97. '订单编号',
  98. '在用项目',
  99. '工点',
  100. '租赁设备类型',
  101. '租赁设备名称',
  102. '设备规格型号',
  103. '租赁方式',
  104. '租赁单价',
  105. '租赁计数',
  106. '租赁开始时间',
  107. '租赁结束时间',
  108. '租赁总金额',
  109. ];
  110. }
  111. /**
  112. * @return array
  113. */
  114. public function columnFormats(): array
  115. {
  116. return [
  117. 'B' => NumberFormat::FORMAT_TEXT,
  118. ];
  119. }
  120. }