Jelajahi Sumber

[智价云] 累计挂网&连续挂网更新

tangyuanwang 1 hari lalu
induk
melakukan
d2ed2a8fdd

+ 28 - 1
app/Http/Controllers/Manager/Process/CollectData.php

@@ -7,6 +7,8 @@ use App\Models\Manager\External\Company as CompanyModel;
 use App\Jobs\Manager\CollectData\Backfill\LowPriceProductJobs;
 use App\Jobs\Manager\CollectData\Backfill\ViolationProductJobs;
 use App\Jobs\Manager\CollectData\Backfill\ViolationStoreJobs;
+use App\Jobs\Manager\CollectData\Backfill\LowPriceOnlineStatisticsjobs;
+use App\Jobs\Manager\CollectData\Backfill\ViolationProductOnlineStatisticsjobs;
 
 /**
  * 清洗后的数据处理
@@ -28,7 +30,7 @@ class CollectData extends Controller
     {
         try {
             $CompanyModel = new CompanyModel();
-            $company_list = $CompanyModel->select(['id', 'status'])->where('id','5')->where('status', 0)->orderByDesc('cleaning_priority')->get()->toarray();
+            $company_list = $CompanyModel->select(['id', 'status'])->where('id', '5')->where('status', 0)->orderByDesc('cleaning_priority')->get()->toarray();
             foreach ($company_list as $company) {
                 $message_data = ['company_id' => $company['id'], 'page' => '1', 'limit' => '50'];
                 LowPriceProductJobs::dispatch($message_data);
@@ -39,6 +41,31 @@ class CollectData extends Controller
         }
     }
 
+    /**
+     * 商品数据数据清洗-更新累计挂网&连续挂网
+     * @author: 唐远望
+    
+     * @version: 1.0
+     * @date: 2026-05-29
+     */
+    public function update_collect_data()
+    {
+        try {
+            $CompanyModel = new CompanyModel();
+            $company_list = $CompanyModel->select(['id', 'status'])->where([['id','!=','5']])->where('status', 0)->orderByDesc('cleaning_priority')->get()->toarray();
+            foreach ($company_list as $company) {
+                $message_data = ['company_id' => $company['id'], 'page' => '2', 'limit' => '10'];
+                LowPriceOnlineStatisticsjobs::dispatch($message_data);
+                // LowPriceOnlineStatisticsjobs::dispatchSync($message_data);
+                ViolationProductOnlineStatisticsjobs::dispatch($message_data);
+                // ViolationProductOnlineStatisticsjobs::dispatchSync($message_data);
+            }
+            return   json_send(['code' => 'success', 'msg' => '执行成功', 'data' => '']);
+        } catch (\Exception $e) {
+            return   json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
+        }
+    }
+
 
 
     /**

+ 106 - 0
app/Jobs/Manager/CollectData/Backfill/LowPriceOnlineStatisticsjobs.php

@@ -0,0 +1,106 @@
+<?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\LowPriceGoods as LowPriceGoodsModel;
+use Illuminate\Support\Facades\DB;
+use App\Facades\Servers\Logs\Log;
+
+
+/**
+ * 低价商品数据数据清洗-低价挂网数据统计
+ * @author: 唐远望
+ * @version: 1.0
+ * @date: 2026-05-29
+ */
+class LowPriceOnlineStatisticsjobs 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()
+    {
+        $LowPriceGoodsModel = new LowPriceGoodsModel();
+        $company_id = $this->message_data['company_id'];
+        $map_one = [];
+        $map_one[] = ['process_lowprice_product.company_id', '=', $company_id];
+        $map_one[] = ['process_lowprice_product.online_posting_count', '>', 0];
+        $map_two = [];
+        $map_two[] = ['process_lowprice_product.company_id', '=', $company_id];
+        $map_two[] = ['process_lowprice_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_lowprice_product.*','scrape_data.collect_config_info'];
+            $result = $LowPriceGoodsModel->leftJoin('scrape_data', 'process_lowprice_product.source_id', '=', 'scrape_data.id')
+            ->Orwhere($map_one)->Orwhere($map_two)->orderBy('process_lowprice_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;
+                    LowPriceOnlineStatisticsjobs::dispatch($this->message_data);
+                }
+                foreach ($result['data'] as $key => $product_data) {
+                    $update_data = [
+                        'online_posting_count' =>'1',
+                        'continuous_listing_count' =>'1',
+                    ];
+                    $select_data = $LowPriceGoodsModel->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) {
+                        $LowPriceGoodsModel->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()]);
+    }
+}

+ 103 - 0
app/Jobs/Manager/CollectData/Backfill/ViolationProductOnlineStatisticsjobs.php

@@ -0,0 +1,103 @@
+<?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()]);
+    }
+}

+ 46 - 41
app/Models/Manager/Process/LowPriceGoods.php

@@ -345,9 +345,28 @@ class LowPriceGoods extends Model
      */
     public function handleCountData($product_data_info)
     {
+        //查询当前商品上次连续挂网次数
+        if (in_array($product_data_info['platform'], ['3', '4'])) {
+            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+            $source_last_time_where[] = ['scrape_date', '<', $product_data_info['scrape_date']]; //采集日期
+        } else {
+            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+            $source_last_time_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+            $source_last_time_where[] = ['scrape_date', '<', $product_data_info['scrape_date']]; //采集日期
+        }
+        $online_posting_count = $this->where($source_last_time_where)->count();
+        $product_data_info['online_posting_count'] = $online_posting_count + 1; //累计挂网次数+1
+        //连续挂网默认值为1
+        $product_data_info['continuous_listing_count'] = 1;
         $collect_config_info = isset($product_data_info['collect_config_info']) ? $product_data_info['collect_config_info'] : ''; //采集配置信息
         if (trim($collect_config_info) == '') return $product_data_info;
-        $collect_config_info = json_decode($collect_config_info, true); //{"sampling_cycle": "", "sampling_start_time": "", "sampling_end_time": ""}
+        $collect_config_info = json_decode($collect_config_info, true);
         //采集周期
         $sampling_cycle = isset($collect_config_info['sampling_cycle']) ? explode(',', $collect_config_info['sampling_cycle']) : '';
         //采集开始时间
@@ -375,30 +394,23 @@ class LowPriceGoods extends Model
             //查询当前商品是否在上一个周期采集中过
             $up_scrape_date_time = $current_time -  $days_to_subtract * 24 * 3600; //查询上周这个时间点
             $up_scrape_date = date('Y-m-d', $up_scrape_date_time);
-            $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            if (in_array($product_data_info['platform'], ['3', '4'])) {
+                $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+                $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+                $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+                $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+                $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+                $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+                $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            } else {
+                $source_last_week_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }
             $source_last_week_log = $this->where($source_last_week_where)->count();
             if ($source_last_week_log > 0) {
                 $product_data_info['continuous_listing_count'] = $product_data_info['continuous_listing_count'] + 1; //连续挂网次数+1
             }
-            //查询当前商品上次连续挂网次数
-            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_time_log = $this->where($source_last_time_where)->orderbyDesc('scrape_date')->first();
-            if (!empty($source_last_time_log)) {
-                $product_data_info['online_posting_count'] = $source_last_time_log->online_posting_count + 1; //累计挂网次数+1
-            }
         } else if ($sampling_start_time != '' && $sampling_end_time == '0' && $current_time >= $sampling_start_time) {
             //如果当前时间在采集开始时间结束时间未设置,则进行连续挂网和累计挂网统计
             // 获取采集时间是星期几
@@ -419,30 +431,23 @@ class LowPriceGoods extends Model
             $up_scrape_date_time = $collection_time - $days_to_subtract * 24 * 3600; //查询上周这个时间点
             //查询当前商品上次采集记录
             $up_scrape_date = date('Y-m-d', $up_scrape_date_time);
-            $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            if (in_array($product_data_info['platform'], ['3', '4'])) {
+                $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+                $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+                $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+                $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+                $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+                $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+                $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }else{
+                $source_last_week_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }
             $source_last_week_log = $this->where($source_last_week_where)->count();
             if ($source_last_week_log > 0) {
                 $product_data_info['continuous_listing_count'] = $product_data_info['continuous_listing_count'] + 1; //连续挂网次数+1
             }
-            //查询当前商品上次连续挂网次数
-            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_time_log = $this->where($source_last_time_where)->orderbyDesc('scrape_date')->first();
-            if (!empty($source_last_time_log)) {
-                $product_data_info['online_posting_count'] = $source_last_time_log->online_posting_count + 1; //累计挂网次数+1
-            }
         }
         return $product_data_info;
     }

+ 59 - 48
app/Models/Manager/Process/ViolationProduct.php

@@ -318,9 +318,28 @@ class ViolationProduct extends Model
      */
     public function handleCountData($product_data_info)
     {
+        //查询当前商品上次连续挂网次数
+        if (in_array($product_data_info['platform'], ['3', '4'])) {
+            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+            $source_last_time_where[] = ['scrape_date', '<', $product_data_info['scrape_date']]; //采集日期
+        } else {
+            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+            $source_last_time_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+            $source_last_time_where[] = ['scrape_date', '<', $product_data_info['scrape_date']]; //采集日期
+        }
+        $online_posting_count = $this->where($source_last_time_where)->count();
+        $product_data_info['online_posting_count'] = $online_posting_count + 1; //累计挂网次数+1
+        //连续挂网默认值为1
+        $product_data_info['continuous_listing_count'] = 1;
         $collect_config_info = isset($product_data_info['collect_config_info']) ? $product_data_info['collect_config_info'] : ''; //采集配置信息
         if (trim($collect_config_info) == '') return $product_data_info;
-        $collect_config_info = json_decode($collect_config_info, true); //{"sampling_cycle": "", "sampling_start_time": "", "sampling_end_time": ""}
+        $collect_config_info = json_decode($collect_config_info, true);
         //采集周期
         $sampling_cycle = isset($collect_config_info['sampling_cycle']) ? explode(',', $collect_config_info['sampling_cycle']) : '';
         //采集开始时间
@@ -328,12 +347,11 @@ class ViolationProduct extends Model
         //采集结束时间
         $sampling_end_time = isset($collect_config_info['sampling_end_time']) ? $collect_config_info['sampling_end_time'] : '';
         if (!is_array($sampling_cycle)) return $product_data_info;
-        $current_time = time();
+        $current_time = $product_data_info['collection_time'];
         //如果当前时间在采集开始时间结束时间范围内,则进行连续挂网和累计挂网统计
         if ($sampling_start_time != '' && $sampling_end_time != '' && $current_time >= $sampling_start_time && $current_time <= $sampling_end_time) {
             // 获取采集时间是星期几
-            $collection_time = strtotime($product_data_info['collection_time']);
-            $now_week = date('w', $collection_time);
+            $now_week = date('w', $current_time);
             if ($now_week == 0) {
                 $now_week = 7;
             }
@@ -345,34 +363,28 @@ class ViolationProduct extends Model
             // 使用
             $result = $this->getLastSamplingInfo($now_week, $sampling_cycle);
             $days_to_subtract = isset($result['days_to_subtract']) ? $result['days_to_subtract'] : 0;
+            // echo "往前推 {$result['days_to_subtract']} 天";
             //查询当前商品是否在上一个周期采集中过
-            $up_scrape_date_time = $collection_time - $days_to_subtract * 24 * 3600; //查询上周这个时间点
+            $up_scrape_date_time = $current_time -  $days_to_subtract * 24 * 3600; //查询上周这个时间点
             $up_scrape_date = date('Y-m-d', $up_scrape_date_time);
-            $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            if (in_array($product_data_info['platform'], ['3', '4'])) {
+                $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+                $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+                $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+                $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+                $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+                $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+                $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            } else {
+                $source_last_week_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }
             $source_last_week_log = $this->where($source_last_week_where)->count();
             if ($source_last_week_log > 0) {
                 $product_data_info['continuous_listing_count'] = $product_data_info['continuous_listing_count'] + 1; //连续挂网次数+1
             }
-            //查询当前商品上次连续挂网次数
-            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_time_log = $this->where($source_last_time_where)->orderbyDesc('scrape_date')->first();
-            if (!empty($source_last_time_log)) {
-                $product_data_info['online_posting_count'] = $source_last_time_log->online_posting_count + 1; //累计挂网次数+1
-            }
-        } else if ($sampling_start_time != '' && $sampling_end_time == '' && $current_time >= $sampling_start_time) {
+        } else if ($sampling_start_time != '' && $sampling_end_time == '0' && $current_time >= $sampling_start_time) {
             //如果当前时间在采集开始时间结束时间未设置,则进行连续挂网和累计挂网统计
             // 获取采集时间是星期几
             $collection_time = strtotime($product_data_info['collection_time']);
@@ -383,38 +395,37 @@ class ViolationProduct extends Model
             if (!in_array($now_week, $sampling_cycle)) {
                 return $product_data_info;
             }
-            //查询当前商品是否在上一个周期采集中过
-            $up_scrape_date_time = $collection_time - 7 * 24 * 3600; //查询上周这个时间点
+            //排序$sampling_cycle从小到大
+            sort($sampling_cycle);
+            // 使用
+            $result = $this->getLastSamplingInfo($now_week, $sampling_cycle);
+            $days_to_subtract = isset($result['days_to_subtract']) ? $result['days_to_subtract'] : 0;
+
+            $up_scrape_date_time = $collection_time - $days_to_subtract * 24 * 3600; //查询上周这个时间点
             //查询当前商品上次采集记录
             $up_scrape_date = date('Y-m-d', $up_scrape_date_time);
-            $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            if (in_array($product_data_info['platform'], ['3', '4'])) {
+                $source_last_week_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
+                $source_last_week_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
+                $source_last_week_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
+                $source_last_week_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
+                $source_last_week_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
+                $source_last_week_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
+                $source_last_week_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }else{
+                $source_last_week_where[] = ['link_url', '=', $product_data_info['link_url']]; //链接地址
+                $source_last_week_where[] = ['scrape_date', '=', $up_scrape_date]; //上个周期采集日期
+            }
             $source_last_week_log = $this->where($source_last_week_where)->count();
             if ($source_last_week_log > 0) {
                 $product_data_info['continuous_listing_count'] = $product_data_info['continuous_listing_count'] + 1; //连续挂网次数+1
             }
-            //查询当前商品上次连续挂网次数
-            $source_last_time_where[] = ['company_id', '=', $product_data_info['company_id']]; //品牌方公司ID
-            $source_last_time_where[] = ['platform', '=', $product_data_info['platform']]; //挂网平台ID
-            $source_last_time_where[] = ['company_name', '=', $product_data_info['company_name']]; //店铺公司名称
-            $source_last_time_where[] = ['store_name', '=', $product_data_info['store_name']]; //店铺名称
-            $source_last_time_where[] = ['product_brand', '=', $product_data_info['product_brand']]; //品牌名称
-            $source_last_time_where[] = ['product_name', '=', $product_data_info['product_name']]; //商品名称
-            $source_last_time_where[] = ['product_specs', '=', $product_data_info['product_specs']]; //规格
-            $source_last_time_log = $this->where($source_last_time_where)->orderbyDesc('scrape_date')->first();
-            if (!empty($source_last_time_log)) {
-                $product_data_info['online_posting_count'] = $source_last_time_log->online_posting_count + 1; //累计挂网次数+1
-            }
         }
         return $product_data_info;
     }
 
+
     /**
      * 处理通知消息
      * @author 唐远望

+ 3 - 1
routes/manager.php

@@ -441,4 +441,6 @@ Route::any('process/Collect_data/low_price_product_collect_data',[\App\Http\Cont
 //清洗后的数据处理-违规商品清洗数据回填
 Route::any('process/Collect_data/violation_product_collect_data',[\App\Http\Controllers\Manager\Process\CollectData::class,'violation_product_collect_data']);
 //清洗后的数据处理-违规店铺清洗数据回填
-Route::any('process/Collect_data/violation_store_collect_data',[\App\Http\Controllers\Manager\Process\CollectData::class,'violation_store_collect_data']);
+Route::any('process/Collect_data/violation_store_collect_data',[\App\Http\Controllers\Manager\Process\CollectData::class,'violation_store_collect_data']);
+//清洗后的数据处理-更新累计挂网&连续挂网
+Route::any('process/Collect_data/update_collect_data',[\App\Http\Controllers\Manager\Process\CollectData::class,'update_collect_data']);