AssetDeviceJob.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace App\Jobs;
  3. use App\Model\Asset;
  4. use App\Service\InOutOptionService;
  5. use Illuminate\Bus\Queueable;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Queue\InteractsWithQueue;
  9. use Illuminate\Queue\SerializesModels;
  10. use Illuminate\Support\Facades\DB;
  11. use Illuminate\Support\Facades\Redis;
  12. use Symfony\Component\Console\Output\ConsoleOutput;
  13. use Symfony\Component\Console\Output\OutputInterface;
  14. class AssetDeviceJob implements ShouldQueue
  15. {
  16. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  17. protected $data;
  18. /**
  19. * Create a new job instance
  20. *
  21. * @return void
  22. */
  23. public function __construct($data)
  24. {
  25. $this->data = $data;
  26. }
  27. /**
  28. * Execute the job.
  29. *
  30. * @return void
  31. */
  32. public function handle()
  33. {
  34. try{
  35. DB::beginTransaction();
  36. $this->settle();
  37. DB::commit();
  38. //输出信息 测试
  39. $this->echoMessage(new ConsoleOutput());
  40. }catch (\Exception $exception){
  41. DB::rollBack();
  42. file_put_contents('record_error.txt',date("Y-m-d H:i:s",time()).json_encode($this->data) . PHP_EOL.$exception->getMessage()."line" . $exception->getLine().PHP_EOL,8);
  43. }
  44. }
  45. public function settle(){
  46. $data = $this->data;
  47. if(empty($data)){
  48. file_put_contents('record_data.txt',date("Y-m-d H:i:s",time())."原数据:".json_encode($data).PHP_EOL,8);
  49. return;
  50. }
  51. if(empty($data['assetOas'])) {
  52. file_put_contents('record_data.txt',date("Y-m-d H:i:s",time())."数据结构错误".PHP_EOL,8);
  53. return;
  54. }
  55. //内存设置
  56. ini_set('memory_limit', -1);
  57. //软删除
  58. $time = time();
  59. Asset::where('del_time',0)->update(['del_time' => $time]);
  60. $batchSize = 100;
  61. $totalAssets = count($data['assetOas']);
  62. for ($i = 0; $i < $totalAssets; $i += $batchSize) {
  63. $batch = array_slice($data['assetOas'], $i, $batchSize);
  64. // 对每个批次的数据进行处理
  65. foreach ($batch as $value) {
  66. if(empty($value['singleCode'])) continue;
  67. // 进行您的操作
  68. Asset::updateOrCreate(
  69. ['singleCode' => $value['singleCode']], //查询条件
  70. [
  71. "assetCode" => $value['assetCode'] ?? "",
  72. "assetNo" => $value['assetNo'] ?? "",
  73. "assetType" => $value['assetType'] ?? "",
  74. "brand" => $value['brand'] ?? "",
  75. "expectedLife" => $value['expectedLife'] ?? "",
  76. "gs1" => $value['gs1'] ?? "",
  77. "isKey" => $value['isKey'] ?? "",
  78. "kind" => $value['kind'] ?? "",
  79. "located" => $value['located'] ?? "",
  80. "name" => $value['name'] ?? "",
  81. "nextCalibrationTime" => $value['nextCalibrationTime'] ?? "",
  82. "originalValue" => $value['originalValue'] ?? "",
  83. "purchaseTime" => $value['purchaseTime'] ?? "",
  84. "remark" => $value['remark'] ?? "",
  85. "singleCode" => $value['singleCode'] ?? "",
  86. "startUseDate" => $value['startUseDate'] ?? "",
  87. "type" => $value['type'] ?? "",
  88. "useDept" => $value['useDept'] ?? "",
  89. "userName" => $value['userName'] ?? "",
  90. "version" => $value['version'] ?? "",
  91. "del_time" => 0
  92. ] //添加或者修改的数据
  93. );
  94. }
  95. // 在处理完每个批次后,进行一些内存清理操作
  96. unset($batch);
  97. }
  98. }
  99. protected function echoMessage(OutputInterface $output)
  100. {
  101. $output->writeln($this->data);
  102. }
  103. }