RejectedExport.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace App\Exports;
  3. use App\RejectedBill;
  4. use App\RejectedBillItem;
  5. use Illuminate\Database\Eloquent\Builder;
  6. use Illuminate\Database\Eloquent\Collection;
  7. use Maatwebsite\Excel\Concerns\FromCollection;
  8. use Maatwebsite\Excel\Concerns\ShouldAutoSize;
  9. use Maatwebsite\Excel\Concerns\WithColumnFormatting;
  10. use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
  11. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  12. class RejectedExport extends \PhpOffice\PhpSpreadsheet\Cell\StringValueBinder implements FromCollection,ShouldAutoSize,WithColumnFormatting
  13. ,WithCustomValueBinder
  14. {
  15. protected $ids;
  16. static public $max=100000;
  17. protected $rejectedBills;
  18. public function setIds(Array $ids)
  19. {
  20. $this->ids=$ids;
  21. }
  22. public function setRejectedBills($rejectedBills)
  23. {
  24. $this->rejectedBills=$rejectedBills;
  25. }
  26. public function collection()
  27. {
  28. if($this->ids){
  29. return $this->getByIds();
  30. }
  31. if($this->rejectedBills){
  32. return $this->getByRejectedBills();
  33. }
  34. return null;
  35. }
  36. private function getByIds(){
  37. $rejectedItems=RejectedBillItem::whereHas('rejectedBill',function(Builder $query){
  38. $query->whereIn('id',$this->ids);
  39. if(count($this->ids)>self::$max){
  40. $query->where('is_finished',false);
  41. }
  42. });
  43. $rejectedItems->get();
  44. $rejecteds = new Collection();
  45. $this->prependFields($rejecteds);
  46. $rejectedItems->each(function(RejectedBillItem $item)use($rejecteds){
  47. $this->injectRecord($rejecteds,$item->rejectedBill,$item);
  48. });
  49. return $rejecteds;
  50. }
  51. private function getByRejectedBills(){
  52. $rejecteds = new Collection();
  53. $this->prependFields($rejecteds);
  54. $this->rejectedBills->each(function(RejectedBill $rejectedBill)use($rejecteds){
  55. $rejectedBill->items()->each(function (RejectedBillItem $item)use($rejecteds,$rejectedBill){
  56. $this->injectRecord($rejecteds,$rejectedBill,$item);
  57. });
  58. });
  59. return $rejecteds;
  60. }
  61. private function prependFields($collection){
  62. $collection->prepend(['日期','审核号','客户名称','订单号','姓名',
  63. '手机','原单单号','退回单号','退回公司','到付费用',
  64. '是否入库','商品条码','商品名称','数量','是否正品',
  65. '批次号','生产日期','效期','备注','退单备注','录入人']);
  66. return $collection;
  67. }
  68. private function injectRecord($collection,$bill,$item){
  69. $collection->push([
  70. $item['created_at'],
  71. $bill['checked_numbers'],$bill['owner_name'],
  72. $bill['order_number'],$bill['sender'],
  73. $bill['mobile_sender'],$bill['logistic_number'],
  74. $bill['logistic_number_return'],$bill['logistic_name'],
  75. $bill['fee_collected'],$bill['is_loaded_str'],
  76. $item['barcode_goods'],$item['name_goods'],$item['amount'],$item['quality_label'],
  77. $item['batch_number'],$item['made_at'],$item['validity_at'],$item['remark'],$bill['remark'],$bill['operator_name']]);
  78. return $collection;
  79. }
  80. /**
  81. * @return array
  82. */
  83. public function columnFormats(): array
  84. {
  85. return [
  86. 'B' => NumberFormat::FORMAT_TEXT,
  87. 'C' => NumberFormat::FORMAT_TEXT,
  88. 'D' => NumberFormat::FORMAT_TEXT,
  89. 'E' => NumberFormat::FORMAT_TEXT,
  90. 'F' => NumberFormat::FORMAT_TEXT,
  91. 'G' => NumberFormat::FORMAT_TEXT,
  92. 'H' => NumberFormat::FORMAT_TEXT,
  93. 'L' => NumberFormat::FORMAT_TEXT,
  94. 'N' => NumberFormat::FORMAT_TEXT,
  95. ];
  96. }
  97. }