| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <?php
- namespace App\Jobs\Manager\CollectData\Backfill;
- 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\Models\Manager\Process\ViolationProduct as ViolationProductModel;
- use Illuminate\Support\Facades\DB;
- use App\Facades\Servers\Logs\Log;
- /**
- * 禁止挂网商品数据数据清洗-禁止挂网商品数据统计
- * @author: 唐远望
- * @version: 1.0
- * @date: 2026-05-29
- */
- class ViolationProductOnlineStatisticsjobs implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- public $tries = 3; // 限制重试次数
- public $timeout = 600; // 10分钟超时
- 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()
- {
- $ViolationProductModel = new ViolationProductModel();
- $company_id = $this->message_data['company_id'];
- $map_one = [];
- $map_one[] = ['process_violation_product.company_id', '=', $company_id];
- $map_one[] = ['process_violation_product.online_posting_count', '>', 0];
- $map_two = [];
- $map_two[] = ['process_violation_product.company_id', '=', $company_id];
- $map_two[] = ['process_violation_product.continuous_listing_count', '>', 0];
- $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
- $limit = isset($this->message_data['limit']) ? $this->message_data['limit'] : 10;
- DB::beginTransaction();
- try {
- $filed =['process_violation_product.*','scrape_data.collect_config_info'];
- $result = $ViolationProductModel->leftJoin('scrape_data', 'process_violation_product.source_id', '=', 'scrape_data.id')
- ->Orwhere($map_one)->Orwhere($map_two)->orderBy('process_violation_product.scrape_date', 'asc')->paginate($limit,$filed, 'page', $page)->toarray();
- $select_product_datas = $result['data'];
- $last_page = $result['last_page'];
- if (empty($select_product_datas)) {
- return true;
- } else {
- if ($page < $last_page) {
- //继续执行下一页
- $this->message_data['page'] = $page + 1;
- $this->message_data['limit'] = $limit;
- ViolationProductOnlineStatisticsjobs::dispatch($this->message_data);
- }
- foreach ($result['data'] as $key => $product_data) {
- $update_data = [];
- $select_data = $ViolationProductModel->handleCountData($product_data);
- if(isset($select_data['online_posting_count']) && $select_data['online_posting_count'] > 1){
- $update_data['online_posting_count'] = $select_data['online_posting_count']; //累计挂网次数
- }
- if(isset($select_data['continuous_listing_count']) && $select_data['continuous_listing_count'] > 1){
- $update_data['continuous_listing_count'] = $select_data['continuous_listing_count'];//连续挂网次数
- }
- if (!empty($update_data) && count($update_data) > 0) {
- $ViolationProductModel->where('id', $product_data['id'])->update($update_data);
- }
- }
- }
- DB::commit();
- // 成功处理...
- } catch (\Exception $e) {
- DB::rollBack();
- Log::info('job_error', '数据回填-禁止商品挂网统计数据回填队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
- }
- }
- public function failed(\Throwable $exception)
- {
- Log::info('job_error', '数据回填-禁止商品挂网统计数据回填队列完全失败', ['data' => $this->message_data, 'error' => $exception->getMessage()]);
- }
- }
|