OrderIssueImport.php 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Imports;
  3. use App\OracleDOCOrderHeader;
  4. use App\Order;
  5. use App\OrderIssue;
  6. use App\OrderIssueProcessLog;
  7. use App\OrderIssueType;
  8. use App\Services\OrderService;
  9. use App\Services\RejectedService;
  10. use Doctrine\DBAL\Connection;
  11. use Illuminate\Support\Collection;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\Cache;
  14. use Maatwebsite\Excel\Concerns\ToCollection;
  15. use Maatwebsite\Excel\Concerns\WithHeadingRow;
  16. use Maatwebsite\Excel\Concerns\WithMultipleSheets;
  17. use Maatwebsite\Excel\Imports\HeadingRowFormatter;
  18. HeadingRowFormatter::default('none');
  19. class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleSheets
  20. {
  21. public function Collection(Collection $collection)
  22. {
  23. $endIS = false;
  24. if (!isset($collection->toArray()[0]['原始运单号']) || !isset($collection->toArray()[0]['情况说明']) || !isset($collection->toArray()[0]['问题类别'])) {
  25. Cache::put('error', '请检查您第一行标题是否存在原始运单号,情况说明,问题类别');
  26. } else {
  27. $endIS = true;
  28. }
  29. $exception = [];
  30. $sum = 2;
  31. $orderService = app('orderService');
  32. $rejectedService = new RejectedService();
  33. if ($endIS) {
  34. foreach ($collection as $row) {
  35. $client_no = trim($row['原始运单号'], ' ');
  36. if (!$row['原始运单号']) {
  37. array_push($exception, ['第' . $sum . '行数据运单号为空!']);
  38. $sum++;
  39. continue;
  40. } else if (!$row['情况说明']) {
  41. array_push($exception, ['第' . $sum . '行问题说明为空!']);
  42. $sum++;
  43. continue;
  44. } else if (!$row['问题类别']) {
  45. array_push($exception, ['第' . $sum . '行问题类别为空!']);
  46. $sum++;
  47. continue;
  48. }
  49. $count = OracleDOCOrderHeader::where('SOReference1', $client_no)->count();
  50. if (!$count) {
  51. array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的WMS运单不存在']);
  52. $sum++;
  53. continue;
  54. }
  55. $order = $orderService->findOrCreateByClientCode($client_no);
  56. $orderIssue = OrderIssue::where('order_id', $order['id'])->first();
  57. $rejectedBill = $rejectedService->getRejectedByClientNo($client_no);
  58. if ($orderIssue) {
  59. array_push($exception, ['原始运单号' . $row['原始运单号'] . '对应的问题件已存在']);
  60. $sum++;
  61. continue;
  62. }
  63. $arr = ['order_id' => $order['id'],];
  64. // $arr['result_explain'] = $row['情况说明'];
  65. if ($rejectedBill) {
  66. $arr['rejected_bill_id'] = $rejectedBill['id'];
  67. }
  68. $orderIssue = OrderIssue::create($arr);
  69. if ($orderIssue) {
  70. array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建成功!']);
  71. OrderIssueProcessLog::create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => $row['情况说明'], 'type' => '创建']);
  72. } else {
  73. array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建失败']);
  74. }
  75. $sum++;
  76. }
  77. }
  78. Cache::put('exception', $exception, 86400);
  79. }
  80. /**
  81. * 该方法是实现上传文件只选中 第一个表
  82. * ExcelImprot 默认是有多少个分表就执行多少次的分表
  83. * @return OrderIssueImport[]|array
  84. */
  85. public function sheets(): array
  86. {
  87. return [0 => new OrderIssueImport()];
  88. }
  89. }