| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- namespace App\Jobs;
- use App\Model\Asset;
- use App\Service\InOutOptionService;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use Symfony\Component\Console\Output\ConsoleOutput;
- use Symfony\Component\Console\Output\OutputInterface;
- class AssetDeviceJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $data;
- /**
- * Create a new job instance
- *
- * @return void
- */
- public function __construct($data)
- {
- $this->data = $data;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- try{
- DB::beginTransaction();
- $this->settle();
- DB::commit();
- //输出信息 测试
- $this->echoMessage(new ConsoleOutput());
- }catch (\Exception $exception){
- DB::rollBack();
- 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);
- }
- }
- public function settle(){
- $data = $this->data;
- if(empty($data)){
- file_put_contents('record_data.txt',date("Y-m-d H:i:s",time())."原数据:".json_encode($data).PHP_EOL,8);
- return;
- }
- if(empty($data['assetOas'])) {
- file_put_contents('record_data.txt',date("Y-m-d H:i:s",time())."数据结构错误".PHP_EOL,8);
- return;
- }
- //内存设置
- ini_set('memory_limit', -1);
- //软删除
- $time = time();
- Asset::where('del_time',0)->update(['del_time' => $time]);
- $batchSize = 100;
- $totalAssets = count($data['assetOas']);
- for ($i = 0; $i < $totalAssets; $i += $batchSize) {
- $batch = array_slice($data['assetOas'], $i, $batchSize);
- // 对每个批次的数据进行处理
- foreach ($batch as $value) {
- if(empty($value['singleCode'])) continue;
- // 进行您的操作
- Asset::updateOrCreate(
- ['singleCode' => $value['singleCode']], //查询条件
- [
- "assetCode" => $value['assetCode'] ?? "",
- "assetNo" => $value['assetNo'] ?? "",
- "assetType" => $value['assetType'] ?? "",
- "brand" => $value['brand'] ?? "",
- "expectedLife" => $value['expectedLife'] ?? "",
- "gs1" => $value['gs1'] ?? "",
- "isKey" => $value['isKey'] ?? "",
- "kind" => $value['kind'] ?? "",
- "located" => $value['located'] ?? "",
- "name" => $value['name'] ?? "",
- "nextCalibrationTime" => $value['nextCalibrationTime'] ?? "",
- "originalValue" => $value['originalValue'] ?? "",
- "purchaseTime" => $value['purchaseTime'] ?? "",
- "remark" => $value['remark'] ?? "",
- "singleCode" => $value['singleCode'] ?? "",
- "startUseDate" => $value['startUseDate'] ?? "",
- "type" => $value['type'] ?? "",
- "useDept" => $value['useDept'] ?? "",
- "userName" => $value['userName'] ?? "",
- "version" => $value['version'] ?? "",
- "del_time" => 0
- ] //添加或者修改的数据
- );
- }
- // 在处理完每个批次后,进行一些内存清理操作
- unset($batch);
- }
- }
- protected function echoMessage(OutputInterface $output)
- {
- $output->writeln($this->data);
- }
- }
|