| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- namespace App\Jobs\Manager\CollectData\Ysbang;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldBeUnique;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use App\Facades\Servers\Logs\Log;
- use App\Models\Manager\CollectData\Ysbang\Product as YsbangProductModel;
- use App\Jobs\Manager\CollectData\Ysbang\YsbangStoreJobs;
- /**
- * 采集数据-药师帮数据同步
- * @author 唐远望
- * @version 1.0
- * @date 2026-02-05
- */
- class YsbangProductJobs implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $message_data;
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct(array $message_data)
- {
- $this->message_data = $message_data;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
- $limit = isset($this->message_data['limit']) ? $this->message_data['limit'] : 50;
- $field = [
- 'id', //ID
- 'manufacturer', //公司名称
- 'drugname', //药品名称
- 'specification', //规格
- 'approval', //批准文号
- 'provider_id', //供应商(店铺)ID
- 'provider_name', //供应商(店铺)名称
- 'minPrice', //最低价
- 'real_crawler_time', //真实采集时间
- 'url', //药品详情页url
- ];
- try {
- $YsbangProductModel = new YsbangProductModel();
- //获取分页数据,多个字段进行分组去重
- $list_config_data = $YsbangProductModel->where([['real_crawler_time', '<', time() - 86400]])
- ->orderby('id', 'desc')->paginate($limit, $field, 'page', $page)->toarray();
- if (!$list_config_data || empty($list_config_data['data'])) {
- $totle_data = isset($this->message_data['total']) ? $this->message_data['total'] : 0;
- Log::info('job_info', '采集数据-药师帮数据同步队列,执行完毕', ['data' => ['page' => $page, 'limit' => $limit, 'totle' => $totle_data], 'message' => '没有数据可同步']);
- return true;
- }
- $list_data = $list_config_data['data'];
- $total = $list_config_data['total'];
- YsbangStoreJobs::dispatch($list_data);
- // YsbangStoreJobs::dispatchSync($list_data);
- Log::info('job_info', '采集数据-药师帮数据同步队列日志', ['data' => ['page' => $page, 'limit' => $limit, 'totle' => $total]]);
- //继续执行下一页
- $message_data['page'] = $page + 1;
- $message_data['limit'] = $limit;
- $message_data['total'] = $total;
- $this->dispatch($message_data);
- } catch (\Exception $e) {
- Log::info('job_error', '采集数据-药师帮数据同步队列失败', ['error' => $e->getMessage()]);
- }
- }
- }
|