DischargeTaskCostEntryImport.php 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Imports;
  3. use App\DischargeTask;
  4. use App\Facilitator;
  5. use App\Owner;
  6. use App\Services\DischargeTaskService;
  7. use App\Warehouse;
  8. use Illuminate\Support\Collection;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\Cache;
  11. use Maatwebsite\Excel\Concerns\ToCollection;
  12. use Maatwebsite\Excel\Concerns\WithHeadingRow;
  13. use Maatwebsite\Excel\Imports\HeadingRowFormatter;
  14. HeadingRowFormatter::default('none');
  15. class DischargeTaskCostEntryImport implements ToCollection,WithHeadingRow
  16. {
  17. /**
  18. * @param Collection $collection
  19. */
  20. public function collection(Collection $collection)
  21. {
  22. $exception = [];
  23. $numbers = [];
  24. foreach ($collection as $row => $item) {
  25. $index = $row + 1; // 行数
  26. $message = ''; // 信息
  27. $type = array_search(trim($item['作业名称']), DischargeTask::types);
  28. $created_at = $item['日期'] ?? ''; // 导入的日期为创建时间
  29. $number = $item['入库单号'] ?? '';
  30. $owner_name = $item['客户名称'] ?? '';
  31. $owner = Owner::query()->where('name',$owner_name)->first();
  32. $ware_house = Warehouse::query()->where('name',$item['仓库'])->first();
  33. $facilitator = Facilitator::query()->where('name', $item['服务商'] ?? '')->first();
  34. if ($created_at == '') $message .= '日期为空,';
  35. if ($number == '')$message .= '入库单号为空,';
  36. if ($owner_name =='' || $owner == null) $message .= '货主未找到,';
  37. if ($ware_house == null) $message .= '仓库未找到,';
  38. $expenditure_unit_price = $item['成本单价'];
  39. $expenditure_amount = $item['成本数量'];
  40. $dischargeTask = DischargeTask::query()->where([
  41. 'owner_id' => $owner['id'],
  42. 'numbers' => $number,
  43. 'created_at' => $created_at,
  44. 'type' => $type,
  45. 'warehouse_id' =>$ware_house['id']
  46. ])->first();
  47. $expenditure_unit = '';
  48. if (isset($item['成本单位'])){
  49. $expenditure_unit = array_search(trim($item['成本单位']), DischargeTask::units);
  50. if (trim($expenditure_unit) == 'm3'){
  51. $expenditure_unit= array_search('m³', DischargeTask::types);
  52. }
  53. }else{
  54. $expenditure_unit = $dischargeTask['income_unit'];
  55. }
  56. if ($expenditure_unit_price == 0 || $expenditure_unit_price == null) $message .= '成本单价为空,';
  57. if ($expenditure_unit != 0 && ($expenditure_unit == '' || $expenditure_unit == null ) ) $message .= '成本单位为空,';
  58. if ($expenditure_amount == '' || $expenditure_unit_price == null) $message .= '成本数量为空,';
  59. if ($facilitator == null) $message .= '未指定服务商,';
  60. if (strlen($message) != 0) {
  61. $exception[] = "第{$index}行成本编辑异常:" . $message;
  62. continue;
  63. }
  64. $params = [
  65. 'expenditure_unit_price' => $expenditure_unit_price,
  66. 'expenditure_unit' => $expenditure_unit,
  67. 'expenditure_amount'=>$expenditure_amount,
  68. 'facilitator_id' => $facilitator['id'],
  69. 'status' => array_search('接单',DischargeTask::status),
  70. ];
  71. $params['expenditure_total_cost'] = $expenditure_unit_price * $expenditure_amount;
  72. $dischargeTask->update($params);
  73. $numbers[] = $number;
  74. }
  75. Cache::put('exception', $exception, 86400);
  76. Cache::put('numbers', $numbers, 86400);
  77. }
  78. }