Sfoglia il codice sorgente

[智价云] 清洗功能补充

tangyuanwang 1 giorno fa
parent
commit
1ede689da3

+ 7 - 7
app/Console/Commands/DailyTask.php

@@ -6,7 +6,7 @@ use Illuminate\Console\Command;
 use Illuminate\Support\Facades\Log;
 use App\Jobs\Manager\Process\LowPriceGoodsJobs;
 use App\Jobs\Manager\Process\ViolationProductJobs;
-use App\Jobs\Manager\Process\ViolationStoreJobs;
+use App\Jobs\Manager\Process\ViolationCompanyJobs;
 use App\Models\Manager\External\Company as CompanyModel;
 
 /**
@@ -50,16 +50,16 @@ class DailyTask extends Command
                 LowPriceGoodsJobs::dispatch($message_data);
                 //执行违规商品数据清洗任务
                 ViolationProductJobs::dispatch($message_data);
-                //执行违规门店数据清洗任务
-                ViolationStoreJobs::dispatch($message_data);
+                //执行违规公司数据清洗任务
+                ViolationCompanyJobs::dispatch($message_data);
             }
             // $message_data = ['page' => '1', 'limit' => '50'];
-            // //执行低价挂网商品数据清洗任务
+            // 执行低价挂网商品数据清洗任务
             // LowPriceGoodsJobs::dispatch($message_data);
-            // //执行违规商品数据清洗任务
+            // 执行违规商品数据清洗任务
             // ViolationProductJobs::dispatch($message_data);
-            // //执行违规门店数据清洗任务
-            // ViolationStoreJobs::dispatch($message_data);
+            // 执行违规公司数据清洗任务
+            // ViolationCompanyJobs::dispatch($message_data);
             // 示例:记录日志
             $this->info('每日任务执行完成!');
             return Command::SUCCESS;

+ 451 - 0
app/Jobs/Manager/Process/ViolationCompanyDataJobs.php

@@ -0,0 +1,451 @@
+<?php
+
+namespace App\Jobs\Manager\Process;
+
+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\Process\ViolationStore as ViolationStoreModel;
+use App\Models\Manager\Personnel\Employee as EmployeeModel;
+use App\Models\Api\Process\ExecuteLog as ExecuteLogModel;
+use App\Models\Manager\Process\ScrapeData as ScrapeDataModel;
+use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
+use App\Models\Manager\Citys as CitysModel;
+use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
+use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Carbon;
+
+/**
+ * 数据清洗-违规公司店铺清洗数据队列
+ * @author  唐远望
+ * @version 1.0
+ * @date  2025-12-11
+ */
+class ViolationCompanyDataJobs 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()
+    {
+        try {
+            $this->getViolationStoreData($this->message_data);
+        } catch (\Exception $e) {
+            Log::info('job_error', '数据清洗-违规公司店铺清洗数据队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
+        }
+    }
+
+
+    /**
+     * 采集商品数据清洗
+     * @author  唐远望
+     * @version 1.0
+     * @date  2025-12-11
+     */
+    public function getViolationStoreData($message_data)
+    {
+        $CitysModel = new CitysModel();
+        $EmployeeModel = new EmployeeModel();
+        $ViolationStoreModel = new ViolationStoreModel();
+        $ScrapeDataModel = new ScrapeDataModel();
+        $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
+        $EmployeePlatformModel = new EmployeePlatformModel();
+        $EmployeeAreaModel = new EmployeeAreaModel();
+        $platform = $message_data['platform']; //多个平台配置
+        $company_name = $message_data['company_name']; //公司名称
+        $social_credit_code = $message_data['social_credit_code']; //社会信用代码
+        $company_type = $message_data['company_type']; //公司类型:1=黑名单2=白名单
+        $executeLog_id = $message_data['executeLog_id'];
+        $company_category_name = $message_data['company_category_name']; //公司类别名称
+        $specify_responsible_person = $message_data['specify_responsible_person']; //指派责任人 0=开启 1=关闭
+        $limit = isset($message_data['limit']) ? $message_data['limit'] : 50;
+        $page = isset($message_data['page']) ? $message_data['page'] : 1;
+        $company_id = isset($message_data['company_id']) ? $message_data['company_id'] : 0; //品牌方公司ID
+        $item_totle_page = $message_data['item_totle_page']; //清洗店铺总页数
+        $item_now_page = $message_data['item_now_page']; //清洗店铺当前页
+
+        // $yesterdayStart = Carbon::today()->subDays(6)->startOfDay()->getTimestamp(); // 最近7天开始时间 00:00:00
+        $yesterdayStart = Carbon::yesterday()->startOfDay()->getTimestamp(); // 昨天开始时间 00:00:00
+        $yesterdayEnd = Carbon::yesterday()->endOfDay()->getTimestamp(); // 昨天结束时间 23:59:59
+        $yesterdayStart = date('Y-m-d', $yesterdayStart);
+        $yesterdayEnd = date('Y-m-d', $yesterdayEnd);
+        $where_map[] = ['scrape_date', '>=', $yesterdayStart];
+        $where_map[] = ['scrape_date', '<=', $yesterdayEnd];
+
+        if ($platform != '0' && !empty($platform)) {
+            $platform = explode(',', $platform);
+            $ScrapeDataModel = $ScrapeDataModel->where('qualification_number', $social_credit_code)->where($where_map)->whereIn('platform_id', $platform);
+        } else {
+            $ScrapeDataModel = $ScrapeDataModel->where('qualification_number', $social_credit_code)->where($where_map);
+        }
+        $product_data_info = $ScrapeDataModel->paginate($limit, ['*'], 'page', $page)->toarray();
+        $product_datas = $product_data_info['data'];
+        if (empty($product_datas)) {
+            if ($executeLog_id && $item_now_page >= $item_totle_page) {
+                (new ExecuteLogModel())->where('id', $executeLog_id)->update(['status' => 0, 'update_time' => time()]);
+            }
+            return true;
+        }
+        foreach ($product_datas as $product_data) {
+            //-------------------------------------- 处理营业执照地区信息(开始) --------------------------------------
+            $province_name = $product_data['province_name'];
+            $city_name = $product_data['city_name'];
+            //特殊地区1级移除市
+            if ($province_name && in_array($province_name, ['北京市', '天津市', '上海市', '重庆市'])) {
+                //移除市这个字符
+                $province_name = trim(str_replace('市', '', $province_name));
+            } else if ($province_name && in_array($province_name, ['北京', '天津', '上海', '重庆'])) {
+            } else if ($province_name && in_array($province_name, ['内蒙古', '广西', '西藏', '新疆', '宁夏'])) {
+                switch ($province_name) {
+                    case '内蒙古':
+                        $province_name = '内蒙古自治区';
+                        break;
+                    case '广西':
+                        $province_name = '广西壮族自治区';
+                        break;
+                    case '西藏':
+                        $province_name = '西藏自治区';
+                        break;
+                    case '新疆':
+                        $province_name = '新疆维吾尔自治区';
+                        break;
+                    case '宁夏':
+                        $province_name = '宁夏回族自治区';
+                        break;
+                }
+            } else if ($province_name && in_array($province_name, ['内蒙古自治区', '广西壮族自治区', '西藏自治区', '新疆维吾尔自治区', '宁夏回族自治区'])) {
+                //完整匹配不做处理
+            } else if (trim($province_name) != '' && strpos($province_name, '省') === false) {
+                //是否存在市省,如果不存在则补全
+                $province_name = $province_name . '省';
+            }
+            if (trim($province_name) != '') {
+                //根据最新处理后的省份名称获取省份ID
+                $db_province_id = $CitysModel->where([['name', '=', $province_name], ['level', '=', '1']])->value('id');
+                if (!empty($db_province_id)) {
+                    $product_data['province_id'] = $db_province_id;
+                }
+            } else {
+                //尝试从地区详情里面匹配省份名称
+                $db_province_name_list = $CitysModel->where([['level', '=', '1']])->pluck('name')->toarray();
+                foreach ($db_province_name_list as $db_province_name) {
+                    if (strpos($product_data['area_info'], $db_province_name) !== false) {
+                        $province_name = $db_province_name;
+                        break;
+                    }
+                }
+            }
+            if (trim($city_name) != '') {
+                //校验是否存在县这个字眼
+                if (strpos($city_name, '县') !== false) {
+                    $db_city_id = $CitysModel->where([['name', '=', $city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_city_id)) {
+                        $product_data['city_id'] = $db_city_id;
+                    }
+                } elseif (trim($city_name) != '' && strpos($city_name, '市') === false) {
+                    //是否存在市
+                    $city_name = $city_name . '市';
+                    //根据最新处理后的市名称获取市ID
+                    $db_city_id = $CitysModel->where([['name', '=', $city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_city_id)) {
+                        $product_data['city_id'] = $db_city_id;
+                    }
+                } else {
+                    $db_city_id = $CitysModel->where([['name', '=', $city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_city_id)) {
+                        $product_data['city_id'] = $db_city_id;
+                    }
+                }
+            } else {
+                //尝试从地区详情里面匹配市名称
+                $db_city_name_list = $CitysModel->where([['level', '=', '2']])->pluck('name')->toarray();
+                foreach ($db_city_name_list as $db_city_name) {
+                    if (strpos($product_data['area_info'], $db_city_name) !== false) {
+                        $db_city_id = $CitysModel->where([['name', '=', $db_city_name], ['level', '=', '2']])->value('id');
+                        $product_data['city_id'] = $db_city_id;
+                        $product_data['city_name'] = $db_city_name;
+                        $city_name = $db_city_name;
+                        break;
+                    }
+                }
+            }
+            //如果存在市区city_id 则逆推省份ID以及名称
+            if (!empty($product_data['city_id']) && empty($product_data['province_id'])) {
+                $db_province_id = $CitysModel->where([['id', '=', $product_data['city_id']], ['level', '=', '2']])->value('pid');
+                $db_province_name = $CitysModel->where([['id', '=', $db_province_id], ['level', '=', '1']])->value('name');
+                $product_data['province_id'] = $db_province_id;
+                $product_data['province_name'] = $db_province_name;
+                $province_name = $db_province_name;
+            }
+            if (trim($product_data['area_info']) == '' && trim($city_name) != '' && trim($province_name) != '') {
+                $product_data['area_info'] = $province_name . $city_name;
+            }
+            //-------------------------------------- 处理营业执照地区信息(结束) --------------------------------------
+
+            //-------------------------------------- 处理发货省份地区信息(开始) --------------------------------------
+            $shipment_province_name = $product_data['shipment_province_name'];
+            $shipment_city_name = $product_data['shipment_city_name'];
+            //特殊地区1级移除市
+            if ($shipment_province_name && in_array($shipment_province_name, ['北京市', '天津市', '上海市', '重庆市'])) {
+                //移除市这个字符
+                $shipment_province_name = trim(str_replace('市', '', $shipment_province_name));
+            } else if ($shipment_province_name && in_array($shipment_province_name, ['北京', '天津', '上海', '重庆'])) {
+            } else if ($shipment_province_name && in_array($shipment_province_name, ['内蒙古', '广西', '西藏', '新疆', '宁夏'])) {
+                switch ($shipment_province_name) {
+                    case '内蒙古':
+                        $shipment_province_name = '内蒙古自治区';
+                        break;
+                    case '广西':
+                        $shipment_province_name = '广西壮族自治区';
+                        break;
+                    case '西藏':
+                        $shipment_province_name = '西藏自治区';
+                        break;
+                    case '新疆':
+                        $shipment_province_name = '新疆维吾尔自治区';
+                        break;
+                    case '宁夏':
+                        $shipment_province_name = '宁夏回族自治区';
+                        break;
+                }
+            } else if ($shipment_province_name && in_array($shipment_province_name, ['内蒙古自治区', '广西壮族自治区', '西藏自治区', '新疆维吾尔自治区', '宁夏回族自治区'])) {
+                //完整匹配不做处理
+            } else if (trim($shipment_province_name) != '' && strpos($shipment_province_name, '省') === false) {
+                //是否存在市省,如果不存在则补全
+                $shipment_province_name = $shipment_province_name . '省';
+            }
+            if (trim($shipment_province_name) != '') {
+                //根据最新处理后的省份名称获取省份ID
+                $db_shipment_province_id = $CitysModel->where([['name', '=', $shipment_province_name], ['level', '=', '1']])->value('id');
+                if (!empty($db_shipment_province_id)) {
+                    $product_data['shipment_province_id'] = $db_shipment_province_id;
+                }
+            }
+            if (trim($shipment_city_name) != '') {
+                //校验是否存在县这个字眼
+                if (strpos($shipment_city_name, '县') !== false) {
+                    $db_shipment_city_id = $CitysModel->where([['name', '=', $shipment_city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_shipment_city_id)) {
+                        $product_data['shipment_city_id'] = $db_shipment_city_id;
+                    }
+                } elseif (trim($shipment_city_name) != '' && strpos($shipment_city_name, '市') === false) {
+                    //是否存在市
+                    $shipment_city_name = $shipment_city_name . '市';
+                    //根据最新处理后的市名称获取市ID
+                    $db_shipment_city_id = $CitysModel->where([['name', '=', $shipment_city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_shipment_city_id)) {
+                        $product_data['shipment_city_id'] = $db_shipment_city_id;
+                    }
+                } else {
+                    $db_shipment_city_id = $CitysModel->where([['name', '=', $shipment_city_name], ['level', '=', '2']])->value('id');
+                    if (!empty($db_shipment_city_id)) {
+                        $product_data['shipment_city_id'] = $db_shipment_city_id;
+                    }
+                }
+            }
+            //如果存在市区shipment_city_id 则逆推省份ID以及名称
+            if (!empty($product_data['shipment_city_id']) && empty($product_data['shipment_province_id'])) {
+                $db_shipment_province_id = $CitysModel->where([['id', '=', $product_data['shipment_city_id']], ['level', '=', '2']])->value('pid');
+                $db_shipment_province_name = $CitysModel->where([['id', '=', $db_shipment_province_id], ['level', '=', '1']])->value('name');
+                $product_data['shipment_province_id'] = $db_shipment_province_id;
+                $product_data['shipment_province_name'] = $db_shipment_province_name;
+            }
+            //-------------------------------------- 处理发货省份地区信息(结束) --------------------------------------
+            //处理链接信息
+            preg_match('/https?:\/\/[^\s\'"<>]+/i', $product_data['link_url'], $matches);
+            if (!empty($matches)) {
+                $product_data['link_url'] = $matches[0];
+            }
+            $store_name = $product_data['store_name'];
+            $anonymous_store_name = $product_data['anonymous_store_name'];
+            if ($anonymous_store_name != '') {
+                $store_name = $anonymous_store_name;
+            }
+            $insert_product_data = [
+                'company_id' => $company_id,
+                'source_id' => $product_data['id'],
+                'platform'    => $product_data['platform_id'],
+                'company_name'    => $product_data['company_name'],
+                'link_url'    => $product_data['link_url'],
+                'store_name'    => $store_name,
+                'social_credit_code' => $social_credit_code,
+                'province_id'    => $product_data['province_id'],
+                'province_name' => $province_name,
+                'city_id' => $product_data['city_id'],
+                'city_name' => $city_name,
+                'area_info' => $product_data['area_info'],
+                'company_category_name' => $company_category_name,
+                'first_responsible_person' => '',
+                'responsible_person' => '',
+                'source_responsible_person' => '',
+                'scrape_date' => $product_data['scrape_date'],
+                'collection_time' => strtotime($product_data['insert_time']),
+            ];
+            //获取公司绑定责任人信息
+            $company_data = $ViolationStoreModel->where('social_credit_code', $product_data['qualification_number'])
+                ->where('process_violation_store.company_id', $company_id)->first();
+            $employee_id_list = [];
+            if ($company_data) {
+                $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
+            }
+            //获取指定人员信息
+            if ($specify_responsible_person == 0) {
+                $where_query1 = [];
+                $where_query2 = [];
+                $where_query3 = [];
+                //查询指定公司第一责任人
+                if (!empty($employee_id_list)) {
+                    $where_query1[] = ['company_id', '=', $company_id];
+                    $where_query1[] = ['id', 'in', $employee_id_list];
+                    $where_query1[] = ['status', '=', 0];
+                    $where_query1[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                }
+                //查询地区配置的第一责任人
+                $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_query2[] = ['company_id', '=', $company_id];
+                    $where_query2[] = ['id', 'in', $employee_id_area];
+                    $where_query2[] = ['status', '=', 0];
+                    $where_query2[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                }
+                //查询平台配置的第一责任人
+                $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_platform)) {
+                    $where_query3[] = ['company_id', '=', $company_id];
+                    $where_query3[] = ['id', 'in', $employee_id_platform];
+                    $where_query3[] = ['status', '=', 0];
+                    $where_query3[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                }
+                //并行查询第一责任人
+                $EmployeeModel = new EmployeeModel();
+                $EmployeeModel = $EmployeeModel
+                    ->orWhere(function ($q) use ($employee_id_list, $company_id) {
+                        if (!empty($employee_id_list)) {
+                            $q->where('company_id', $company_id)
+                                ->orWhereIn('id', $employee_id_list)
+                                ->where('status', 0)
+                                ->where('duty_type', 1);
+                        }
+                    })->orWhere(function ($q) use ($employee_id_area, $company_id) {
+                        if (!empty($employee_id_area)) {
+                            $q->where('company_id', $company_id)
+                                ->whereIn('id', $employee_id_area)
+                                ->where('status', 0)
+                                ->where('duty_type', 1);
+                        }
+                    })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
+                        if (!empty($employee_id_platform)) {
+                            $q->where('company_id', $company_id)
+                                ->whereIn('id', $employee_id_platform)
+                                ->where('status', 0)
+                                ->where('duty_type', 1);
+                        }
+                    });
+                $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
+                //调试记录查询条件
+                $insert_product_data['first_responsible_person'] = $first_responsible_person;
+                //查询责任人
+                $where_query1 = [];
+                $where_query2 = [];
+                $where_query3 = [];
+                //查询指定公司责任人
+                if (!empty($employee_id_list)) {
+                    $where_query1[] = ['company_id', '=', $company_id];
+                    $where_query1[] = ['id', 'in', $employee_id_list];
+                    $where_query1[] = ['status', '=', 0];
+                    $where_query1[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                }
+                //查询地区配置的员工
+                $employee_id_area = $EmployeeAreaModel->where('city_id', $product_data['city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_query2[] = ['company_id', '=', $company_id];
+                    $where_query2[] = ['id', 'in', $employee_id_area];
+                    $where_query2[] = ['status', '=', 0];
+                    $where_query2[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                }
+                //查询平台配置的员工
+                $employee_id_platform = $EmployeePlatformModel->where('platform_id', $product_data['platform_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_platform)) {
+                    $where_query3[] = ['company_id', '=', $company_id];
+                    $where_query3[] = ['id', 'in', $employee_id_platform];
+                    $where_query3[] = ['status', '=', 0];
+                    $where_query3[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                }
+                //并行查询责任人
+                $EmployeeModel = new EmployeeModel();
+                $EmployeeModel = $EmployeeModel
+                    ->orWhere(function ($q) use ($employee_id_list, $company_id) {
+                        if (!empty($employee_id_list)) {
+                            $q->where('company_id', $company_id)
+                                ->orWhereIn('id', $employee_id_list)
+                                ->where('status', 0)
+                                ->where('duty_type', 2); //责任类型1=第一责任人,2=责任人
+                        }
+                    })->orWhere(function ($q) use ($employee_id_area, $company_id) {
+                        if (!empty($employee_id_area)) {
+                            $q->where('company_id', $company_id)
+                                ->whereIn('id', $employee_id_area)
+                                ->where('status', 0)
+                                ->where('duty_type', 2); //责任类型1=第一责任人,2=责任人
+                        }
+                    })->orWhere(function ($q) use ($employee_id_platform, $company_id) {
+                        if (!empty($employee_id_platform)) {
+                            $q->where('company_id', $company_id)
+                                ->whereIn('id', $employee_id_platform)
+                                ->where('status', 0)
+                                ->where('duty_type', 2); //责任类型1=第一责任人,2=责任人
+                        }
+                    });
+                $responsible_person = $EmployeeModel->pluck('id')->implode(',');
+                $insert_product_data['responsible_person'] = $responsible_person;
+
+                //溯源责任人
+                $source_responsible_person = '';
+                if ($first_responsible_person && $responsible_person) {
+                    //转换成数组,合并后在去重
+                    $first_responsible_person = explode(',', $first_responsible_person);
+                    $responsible_person = explode(',', $responsible_person);
+                    $source_responsible_person = array_unique(array_merge($first_responsible_person, $responsible_person));
+                    $source_responsible_person = ',' . implode(',', $source_responsible_person) . ',';
+                } else if ($first_responsible_person) {
+                    $source_responsible_person = $first_responsible_person;
+                } else if ($responsible_person) {
+                    $source_responsible_person = $responsible_person;
+                }
+                $insert_product_data['source_responsible_person'] = $source_responsible_person;
+            }
+
+            //插入数据
+            $ViolationStoreModel->addViolationStore($insert_product_data);
+        }
+        //继续执行下一页
+        $message_data['page'] = $page + 1;
+        $message_data['limit'] = $limit;
+        ViolationCompanyDataJobs::dispatch($message_data);
+    }
+
+
+    public function failed(\Throwable $exception)
+    {
+        Log::info('job_error', '数据清洗-违规公司店铺清洗数据队列完全失败', ['data' => $this->message_data, 'error' => $exception]);
+    }
+}

+ 104 - 0
app/Jobs/Manager/Process/ViolationCompanyJobs.php

@@ -0,0 +1,104 @@
+<?php
+
+namespace App\Jobs\Manager\Process;
+
+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\WashConfig\ViolationCompany as ViolationCompanyModel;
+use App\Models\Manager\Process\ExecuteLog as ExecuteLogModel;
+use App\Jobs\Manager\Process\ViolationCompanyDataJobs;
+
+/**
+ * 数据清洗-违规挂网公司配置队列
+ * @author  唐远望
+ * @version 1.0
+ * @date  2025-12-11
+ */
+class ViolationCompanyJobs 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()
+    {
+        try {
+            $ViolationCompanyModel = new ViolationCompanyModel();
+            $limit = isset($this->message_data['limit']) ? $this->message_data['limit'] : 50;
+            $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
+            $executeLog_id = isset($this->message_data['executeLog_id']) ? $this->message_data['executeLog_id'] : 0;
+            $admin_id = isset($this->message_data['admin_id']) ? $this->message_data['admin_id'] : 0;
+            $is_admin = isset($this->message_data['is_admin']) ? $this->message_data['is_admin'] : 0;
+            $company_id = isset($this->message_data['company_id']) ? $this->message_data['company_id'] : 0;
+            if($page == 1){
+                $ExecuteLogModel = new ExecuteLogModel();
+                $insert_data =['company_id'=>$company_id,'name' =>'违规挂网公司店铺', 'code' => 'ViolationCompanyJobs', 'admin_id' => $admin_id,'is_admin' => $is_admin];
+                $executeLog_id=$ExecuteLogModel->addExecuteLog_content($insert_data);
+            }
+            $ViolationCompanyModel = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
+                ->where('washconfig_violation_company.status', 0)->where('company_type', 1)->select(['washconfig_violation_company.*','washconfig_company_category.name as category_name']);
+            if($company_id){
+                $ViolationCompanyModel = $ViolationCompanyModel->where('washconfig_violation_company.company_id', $company_id);
+            }
+            $totle_page = 0;
+            $list_config_data = $ViolationCompanyModel->paginate($limit, ['*'], 'page', $page)->toarray();
+            if (!$list_config_data || empty($list_config_data['data'])) {
+                if($page == 1 && $executeLog_id){
+                    $ExecuteLogModel->where('id', $executeLog_id)->update(['status' => 0,'update_time'=> time()]);
+                }
+                return true;
+            }
+            $totle_page = $list_config_data['last_page'];
+            $list_data = $list_config_data['data'];
+            foreach ($list_data as $key => $value) {
+                $message_data = [
+                    'company_id' => $value['company_id'],
+                    'id' => $value['id'],
+                    'platform' => $value['platform'],
+                    'company_type' => $value['company_type'],
+                    'company_name' => $value['company_name'],
+                    'social_credit_code' => $value['social_credit_code'],
+                    'executeLog_id' => $executeLog_id,
+                    'company_category_name' => $value['category_name'],
+                    'specify_responsible_person' => $value['specify_responsible_person'],
+                    'item_totle_page' => $totle_page,
+                    'item_now_page' => $page,
+                ];
+                ViolationCompanyDataJobs::dispatch($message_data);
+                // ViolationCompanyDataJobs::dispatchSync($message_data);
+            }
+            $now_message_data = [
+                'limit' => $limit,
+                'page' => $page + 1,
+                'executeLog_id' => $executeLog_id,
+            ];
+            ViolationCompanyJobs::dispatch($now_message_data);
+        } catch (\Exception $e) {
+            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]);
+    }
+}

+ 10 - 16
app/Jobs/Manager/Process/ViolationStoreDataJobs.php

@@ -71,11 +71,8 @@ class ViolationStoreDataJobs implements ShouldQueue
         $EmployeePlatformModel = new EmployeePlatformModel();
         $EmployeeAreaModel = new EmployeeAreaModel();
         $platform = $message_data['platform']; //多个平台配置
-        $company_name = $message_data['company_name']; //公司名称
-        $social_credit_code = $message_data['social_credit_code']; //社会信用代码
-        $company_type = $message_data['company_type']; //公司类型:1=黑名单2=白名单
         $executeLog_id = $message_data['executeLog_id'];
-        $company_category_name = $message_data['company_category_name']; //公司类别名称
+        $store_name = $message_data['store_name']; //店铺名称
         $specify_responsible_person = $message_data['specify_responsible_person']; //指派责任人 0=开启 1=关闭
         $limit = isset($message_data['limit']) ? $message_data['limit'] : 50;
         $page = isset($message_data['page']) ? $message_data['page'] : 1;
@@ -93,9 +90,9 @@ class ViolationStoreDataJobs implements ShouldQueue
 
         if ($platform != '0' && !empty($platform)) {
             $platform = explode(',', $platform);
-            $ScrapeDataModel = $ScrapeDataModel->where('qualification_number', $social_credit_code)->where($where_map)->whereIn('platform_id', $platform);
+            $ScrapeDataModel = $ScrapeDataModel->where('store_name', $store_name)->where($where_map)->whereIn('platform_id', $platform);
         } else {
-            $ScrapeDataModel = $ScrapeDataModel->where('qualification_number', $social_credit_code)->where($where_map);
+            $ScrapeDataModel = $ScrapeDataModel->where('store_name', $store_name)->where($where_map);
         }
         $product_data_info = $ScrapeDataModel->paginate($limit, ['*'], 'page', $page)->toarray();
         $product_datas = $product_data_info['data'];
@@ -106,7 +103,7 @@ class ViolationStoreDataJobs implements ShouldQueue
             return true;
         }
         foreach ($product_datas as $product_data) {
-             //-------------------------------------- 处理营业执照地区信息(开始) --------------------------------------
+            //-------------------------------------- 处理营业执照地区信息(开始) --------------------------------------
             $province_name = $product_data['province_name'];
             $city_name = $product_data['city_name'];
             //特殊地区1级移除市
@@ -161,7 +158,7 @@ class ViolationStoreDataJobs implements ShouldQueue
                     if (!empty($db_city_id)) {
                         $product_data['city_id'] = $db_city_id;
                     }
-                }elseif (trim($city_name) != '' && strpos($city_name, '市') === false) {
+                } elseif (trim($city_name) != '' && strpos($city_name, '市') === false) {
                     //是否存在市
                     $city_name = $city_name . '市';
                     //根据最新处理后的市名称获取市ID
@@ -196,7 +193,7 @@ class ViolationStoreDataJobs implements ShouldQueue
                 $product_data['province_name'] = $db_province_name;
                 $province_name = $db_province_name;
             }
-            if(trim($product_data['area_info']) == '' && trim($city_name) != '' && trim($province_name) != ''){
+            if (trim($product_data['area_info']) == '' && trim($city_name) != '' && trim($province_name) != '') {
                 $product_data['area_info'] = $province_name . $city_name;
             }
             //-------------------------------------- 处理营业执照地区信息(结束) --------------------------------------
@@ -247,7 +244,7 @@ class ViolationStoreDataJobs implements ShouldQueue
                     if (!empty($db_shipment_city_id)) {
                         $product_data['shipment_city_id'] = $db_shipment_city_id;
                     }
-                }elseif (trim($shipment_city_name) != '' && strpos($shipment_city_name, '市') === false) {
+                } elseif (trim($shipment_city_name) != '' && strpos($shipment_city_name, '市') === false) {
                     //是否存在市
                     $shipment_city_name = $shipment_city_name . '市';
                     //根据最新处理后的市名称获取市ID
@@ -272,12 +269,9 @@ class ViolationStoreDataJobs implements ShouldQueue
             //-------------------------------------- 处理发货省份地区信息(结束) --------------------------------------
             //处理链接信息
             preg_match('/https?:\/\/[^\s\'"<>]+/i', $product_data['link_url'], $matches);
-            if(!empty($matches)){
+            if (!empty($matches)) {
                 $product_data['link_url'] = $matches[0];
             }
-            if (trim($product_data['link_url']) == '') continue;
-
-            //穿透匿名店铺处理
             $store_name = $product_data['store_name'];
             $anonymous_store_name = $product_data['anonymous_store_name'];
             if ($anonymous_store_name != '') {
@@ -290,13 +284,13 @@ class ViolationStoreDataJobs implements ShouldQueue
                 'company_name'    => $product_data['company_name'],
                 'link_url'    => $product_data['link_url'],
                 'store_name'    => $store_name,
-                'social_credit_code' => $social_credit_code,
+                'social_credit_code' => $product_data['qualification_number'],
                 'province_id'    => $product_data['province_id'],
                 'province_name' => $province_name,
                 'city_id' => $product_data['city_id'],
                 'city_name' => $city_name,
                 'area_info' => $product_data['area_info'],
-                'company_category_name' => $company_category_name,
+                'company_category_name' => '',
                 'first_responsible_person' => '',
                 'responsible_person' => '',
                 'source_responsible_person' => '',

+ 8 - 10
app/Jobs/Manager/Process/ViolationStoreJobs.php

@@ -9,7 +9,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use App\Facades\Servers\Logs\Log;
-use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
+use App\Models\Manager\WashConfig\ViolationStore as ViolationStoreModel;
 use App\Models\Manager\Process\ExecuteLog as ExecuteLogModel;
 use App\Jobs\Manager\Process\ViolationStoreDataJobs;
 
@@ -41,7 +41,7 @@ class ViolationStoreJobs implements ShouldQueue
     public function handle()
     {
         try {
-            $ViolationCompanyModel = new ViolationCompanyModel();
+            $ViolationStoreModel = new ViolationStoreModel();
             $limit = isset($this->message_data['limit']) ? $this->message_data['limit'] : 50;
             $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
             $executeLog_id = isset($this->message_data['executeLog_id']) ? $this->message_data['executeLog_id'] : 0;
@@ -53,13 +53,13 @@ class ViolationStoreJobs implements ShouldQueue
                 $insert_data =['company_id'=>$company_id,'name' =>'违规挂网店铺', 'code' => 'ViolationStoreJobs', 'admin_id' => $admin_id,'is_admin' => $is_admin];
                 $executeLog_id=$ExecuteLogModel->addExecuteLog_content($insert_data);
             }
-            $ViolationCompanyModel = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
-                ->where('washconfig_violation_company.status', 0)->where('company_type', 1)->select(['washconfig_violation_company.*','washconfig_company_category.name as category_name']);
+            $ViolationStoreModel = $ViolationStoreModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
+                ->where('washconfig_violation_company.status', 0)->where('store_type', 1)->select(['washconfig_violation_company.*','washconfig_company_category.name as category_name']);
             if($company_id){
-                $ViolationCompanyModel = $ViolationCompanyModel->where('washconfig_violation_company.company_id', $company_id);
+                $ViolationStoreModel = $ViolationStoreModel->where('washconfig_violation_company.company_id', $company_id);
             }
             $totle_page = 0;
-            $list_config_data = $ViolationCompanyModel->paginate($limit, ['*'], 'page', $page)->toarray();
+            $list_config_data = $ViolationStoreModel->paginate($limit, ['*'], 'page', $page)->toarray();
             if (!$list_config_data || empty($list_config_data['data'])) {
                 if($page == 1 && $executeLog_id){
                     $ExecuteLogModel->where('id', $executeLog_id)->update(['status' => 0,'update_time'=> time()]);
@@ -73,11 +73,9 @@ class ViolationStoreJobs implements ShouldQueue
                     'company_id' => $value['company_id'],
                     'id' => $value['id'],
                     'platform' => $value['platform'],
-                    'company_type' => $value['company_type'],
-                    'company_name' => $value['company_name'],
-                    'social_credit_code' => $value['social_credit_code'],
+                    'store_type' => $value['store_type'],
+                    'store_name' => $value['store_name'],
                     'executeLog_id' => $executeLog_id,
-                    'company_category_name' => $value['category_name'],
                     'specify_responsible_person' => $value['specify_responsible_person'],
                     'item_totle_page' => $totle_page,
                     'item_now_page' => $page,