17 Commity bdcf5894d8 ... 7434e22f06

Autor SHA1 Wiadomość Data
  public 7434e22f06 [智价云] 导入更新 4 dni temu
  public 3ec9dd2b52 [智价云] 导出更新 4 dni temu
  tangyuanwang 4e2eae37ee [智价云] 下载模板更新 4 dni temu
  tangyuanwang 7eca5ecc46 [智价云] 修复去重更新后超低价标识错误问题 5 dni temu
  tangyuanwang 486ee7c17e [智价云] 违规店铺查询更新 5 dni temu
  tangyuanwang c6117a092b [智价云] 去重规则校验更新 5 dni temu
  tangyuanwang a45b7082be 【智价云】 违规数据处理责任人模糊查询 5 dni temu
  tangyuanwang 7d5d148bd5 [智价云] 店铺&公司关联信息删除更新 5 dni temu
  tangyuanwang edbb416e8c [智价云] 品牌方是否去重开关增加 5 dni temu
  tangyuanwang 6226ec7037 [智价云] 重复清洗检查更新 5 dni temu
  tangyuanwang 644e59c207 [智价云] 导出更新 1 tydzień temu
  tangyuanwang e9f467ea7f [智价云] 责任人回填脚本更新 1 tydzień temu
  tangyuanwang f92495ba40 [智价云] 历史姓名展示更新 1 tydzień temu
  tangyuanwang 3f2d35053c [智价云] 历史姓名展示更新 1 tydzień temu
  tangyuanwang ec908ef3eb Merge branch 'tangyuanwang' into tmp 1 tydzień temu
  tangyuanwang 9eb6a91cdc Merge branch 'tangyuanwang' into tmp 1 tydzień temu
  tangyuanwang 1d79126fb7 【智价云】 金活下载导入 1 tydzień temu

+ 3 - 7
app/Http/Controllers/Manager/AdminHistory.php

@@ -52,17 +52,13 @@ class AdminHistory extends Controller
         }
         $result = $AdminHistoryModel
             ->where($map)
-            ->select(['id', 'admin_uid', 'is_admin', 'module_menu_name', 'notes_type', 'general_description', 'insert_time'])
+            ->select(['id', 'admin_uid', 'is_admin','user_name','module_menu_name', 'notes_type', 'general_description', 'insert_time'])
             ->orderByDesc('id')
             ->paginate($limit)->toarray();
         if (isset($result['data']) && count($result['data']) > 0) {
             foreach ($result['data'] as $key => $value) {
-                $is_admin = $value['is_admin'];
-                if ($is_admin == '1') {
-                    $result['data'][$key]['username'] = $AdminUserModel->where('uid', $value['admin_uid'])->value('username');
-                } else {
-                    $result['data'][$key]['username'] = $EmployeeModel->where('id', $value['admin_uid'])->value('name');
-                }
+                $result['data'][$key]['username'] = $value['user_name'];
+                unset($result['data'][$key]['user_name']);
             }
         }
         // 分配数据

+ 4 - 0
app/Http/Controllers/Manager/External/Company.php

@@ -118,8 +118,10 @@ class Company extends Controller
         $all_data = request()->all();
         $logo_url = request('logo_url', '');
         $snapshot_status = request('snapshot_status', 0);
+        $is_deduplication = request('is_deduplication', 0);
         $all_data['logo_url'] = $logo_url ? $logo_url : '';
         $all_data['snapshot_status'] = $snapshot_status;
+        $all_data['is_deduplication'] = $is_deduplication;
         //查询是否存在
         $map = ['social_credit_code' => $all_data['social_credit_code']];
         $data = $CompanyModel->where($map)->first();
@@ -154,8 +156,10 @@ class Company extends Controller
         $all_data = request()->all();
         $logo_url = request('logo_url', '');
         $snapshot_status = request('snapshot_status', 0);
+        $is_deduplication = request('is_deduplication', 0);
         $all_data['logo_url'] = $logo_url ? $logo_url : '';
         $all_data['snapshot_status'] = $snapshot_status;
+        $all_data['is_deduplication'] = $is_deduplication;
         //查询是否存在
         $map = ['social_credit_code' => $all_data['social_credit_code']];
         $data = $CompanyModel->where($map)->where('id', '!=', $id)->first();

+ 31 - 656
app/Http/Controllers/Manager/Process/CollectData.php

@@ -3,19 +3,10 @@
 namespace App\Http\Controllers\Manager\Process;
 
 use App\Http\Controllers\Controller;
-use Illuminate\Http\Request;
-use App\Models\Manager\Process\LowPriceGoods as LowPriceGoodsModel;
-use App\Models\Manager\Process\ViolationProduct as ViolationProductModel;
-use App\Models\Manager\Process\ViolationStore as ViolationStoreModel;
-use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
-use App\Models\Manager\Personnel\Employee as EmployeeModel;
-use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
-use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
-use App\Models\Manager\Process\ViolationProductMember as ViolationProductMemberModel;
-use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
-use App\Models\Manager\Process\LowPriceGoodsMember as LowPriceGoodsMemberModel;
-use App\Models\Manager\Process\ViolationStoreMember as ViolationStoreMemberModel;
-use Illuminate\Support\Facades\DB;
+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;
 
 /**
  * 清洗后的数据处理
@@ -31,683 +22,67 @@ class CollectData extends Controller
      * 低价商品数据数据清洗-回填责任人
      * @author: 唐远望
      * @version: 1.0
-     * @date: 2026-04-29
+     * @date: 2026-05-22
      */
-    public function low_price_product_collect_data(LowPriceGoodsModel $LowPriceGoodsModel)
+    public function low_price_product_collect_data()
     {
-        //获取非导入的低价商品清洗数据
-        $map = [];
-        $map[] = ['merge_city_id', '!=', '0'];
-        $map[] = ['first_responsible_person', '=', ''];
-        $map[] = ['responsible_person', '=', ''];
-        $map[] = ['source_responsible_person', '=', ''];
-
-        // $map[] = ['online_posting_count', '=', '1'];
-        // $map[] = ['continuous_listing_count', '=', '1'];
-
-        $limit = '100';
-        DB::beginTransaction();
         try {
-            $result = $LowPriceGoodsModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
-            if (!empty($result['data'])) {
-                foreach ($result['data'] as $key => $product_data) {
-                    $specify_responsible_person = $product_data['specify_responsible_person'];
-                    //获取指定人员信息
-                    $insert_product_data = [];
-                    if ($specify_responsible_person == 0) {
-                        $product_data['qualification_number'] = $product_data['social_credit_code'];
-                        $product_data['platform_id'] = $product_data['platform'];
-                        $insert_product_data = $this->get_responsible_person_info($product_data);
-                    }
-                    // $product_data['collect_config_info'] ='{"sampling_cycle": "1,4", "sampling_start_time": 1778688000, "sampling_end_time": 0}';
-                    // $product_data=$LowPriceGoodsModel->handleCountData($product_data);
-                    // //累计挂网次数
-                    // if(isset($product_data['online_posting_count']) && $product_data['online_posting_count'] > 1){
-                    //     $insert_product_data['online_posting_count'] = $product_data['online_posting_count'];
-                    // }
-                    // //连续挂网
-                    // if(isset($product_data['continuous_listing_count']) && $product_data['continuous_listing_count'] > 1){
-                    //     $insert_product_data['continuous_listing_count'] = $product_data['continuous_listing_count'];
-                    // }
-                    $update_data = $insert_product_data;
-                    if (!empty($update_data) && count($update_data) > 0) {
-                        $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
-                        $this->insert_low_product_responsible_person_info($product_data, $insert_product_data);
-                    }
-                }
+            $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' => '1', 'limit' => '50'];
+                LowPriceProductJobs::dispatch($message_data);
             }
-            DB::commit();
-            return        json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
-            // 成功处理...
+            return   json_send(['code' => 'success', 'msg' => '执行成功', 'data' => '']);
         } catch (\Exception $e) {
-            DB::rollBack();
             return   json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
         }
     }
 
-    /**
-     * 写入处理低价商品-责任人信息
-     * @author: 唐远望
-     * @version: 1.0
-     * @date: 2026-05-18
-     */
-    private function insert_low_product_responsible_person_info($product_data, $insert_product_data)
-    {
-        $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
-        // $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
-        $LowPriceGoods_id = $product_data['id'];
-        $data['first_responsible_person'] = isset($insert_product_data['first_responsible_person']) ? $insert_product_data['first_responsible_person'] : '';
-        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
-        $first_responsible_person_data = [];
-        if (count($first_responsible_persons) > 0) {
-            //去除重复的责任人
-            $first_responsible_persons = array_unique($first_responsible_persons);
-            //移除数组内的空值
-            $first_responsible_persons = array_filter($first_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($first_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $first_responsible_person_data[] = [
-                    'lowprice_product_logid' => $LowPriceGoods_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $LowPriceGoodsMemberModel->insert($first_responsible_person_data);
-        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
-        $responsible_person_data = [];
-        if (count($responsible_persons) > 0) {
-            //去除重复的责任人
-            $responsible_persons = array_unique($responsible_persons);
-            //移除数组内的空值
-            $responsible_persons = array_filter($responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $responsible_person_data[] = [
-                    'lowprice_product_logid' => $LowPriceGoods_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $LowPriceGoodsMemberModel->insert($responsible_person_data);
-        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
-        $source_responsible_person_data = [];
-        if (count($source_responsible_persons) > 0) {
-            //去除重复的责任人
-            $source_responsible_persons = array_unique($source_responsible_persons);
-            //移除数组内的空值
-            $source_responsible_persons = array_filter($source_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($source_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $source_responsible_person_data[] = [
-                    'lowprice_product_logid' => $LowPriceGoods_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $LowPriceGoodsMemberModel->insert($source_responsible_person_data);
-    }
-
-    /**
-     * 根据规则获取责任人分配信息
-     * @author: 唐远望
-     * @version: 1.0
-     * @date: 2026-05-18
-     */
-    private function get_responsible_person_info($product_data)
-    {
-        $EmployeeAreaModel = new EmployeeAreaModel();
-        $EmployeePlatformModel = new EmployeePlatformModel();
-        $ViolationCompanyModel = new ViolationCompanyModel();
-        $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
-        $company_id = $product_data['company_id'];
-        //获取指定人员信息
-        $insert_product_data = [];
-        //获取店铺责任人信息
-        $ViolationStoreModel = new ViolationStoreModel();
-        $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
-        if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
-            //查询店铺第一责任人信息
-            $EmployeeModel = new EmployeeModel();
-            $store_where_query = [];
-            $employee_id_store = explode(',', $store_data_info->employee_ids);
-            $store_where_query[] = ['company_id', '=', $company_id];
-            $store_where_query[] = ['status', '=', 0];
-            $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
-            $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
-            $insert_product_data['first_responsible_person'] = $first_responsible_person;
-            //查询店铺责任人信息
-            $EmployeeModel = new EmployeeModel();
-            $store_where_query = [];
-            $employee_id_store = explode(',', $store_data_info->employee_ids);
-            $store_where_query[] = ['company_id', '=', $company_id];
-            $store_where_query[] = ['status', '=', 0];
-            $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
-            $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->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;
-        } else {
-            //获取公司绑定责任人信息
-            $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
-                ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
-                ->where('washconfig_violation_company.company_id', $company_id)
-                ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
-            $employee_id_list = [];
-            if ($company_data) {
-                $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
-                $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
-            }
-            $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('duty_type', 1)
-                            ->where('status', 0);
-                    }
-                })->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('duty_type', 1)
-                            ->where('status', 0);
-                    }
-                })->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('duty_type', 1)
-                            ->where('status', 0);
-                    }
-                });
-            $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
-
-            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
-            if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
-                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
-                if (!empty($employee_id_area)) {
-                    $where_city = [];
-                    $where_city[] = ['company_id', '=', $company_id];
-                    $where_city[] = ['status', '=', 0];
-                    $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
-                    $EmployeeModel = new EmployeeModel();
-                    $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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('duty_type', 2)
-                            ->where('status', 0);
-                    }
-                })->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('duty_type', 2)
-                            ->where('status', 0);
-                    }
-                })->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('duty_type', 2)
-                            ->where('status', 0);
-                    }
-                });
-            $responsible_person = $EmployeeModel->pluck('id')->implode(',');
-
-            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
-            if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
-                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
-                if (!empty($employee_id_area)) {
-                    $where_city = [];
-                    $where_city[] = ['company_id', '=', $company_id];
-                    $where_city[] = ['status', '=', 0];
-                    $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
-                    $EmployeeModel = new EmployeeModel();
-                    $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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;
-        }
-
-        return $insert_product_data;
-    }
-
 
 
     /**
-     * 低价商品清洗数据回填
+     * 禁止商品清洗数据回填-回填责任人
      * @author: 唐远望
      * @version: 1.0
-     * @date: 2026-04-29
+     * @date: 2026-05-22
      */
-    public function low_price_product_collect_collection_time_data(LowPriceGoodsModel $LowPriceGoodsModel)
+    public function violation_product_collect_data()
     {
-        //获取非导入的低价商品清洗数据
-        $map = [];
-        $map[] = ['process_lowprice_product.source_id', '!=', '0'];
-        $map[] = ['process_lowprice_product.collection_time', '==', '0'];
-        $map[] = ['scrape_data.insert_time', '!=', 'null'];
-        $limit = '10000';
-        $result = $LowPriceGoodsModel->leftjoin('scrape_data', 'scrape_data.id', '=', 'process_lowprice_product.source_id')
-            ->where($map)->select(['process_lowprice_product.id', 'scrape_data.insert_time as collect_collection_time'])
-            ->orderByDesc('id')->paginate($limit)->toarray();
-        if (!empty($result['data'])) {
-            foreach ($result['data'] as $key => $value) {
-                if (empty($value['collect_collection_time'])) {
-                    continue;
-                }
-                $update_data['collection_time'] = strtotime($value['collect_collection_time']);
-                $LowPriceGoodsModel->where('id', $value['id'])->update($update_data);
-            }
-        }
-        return        json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
-    }
-    /**
-     * 禁止商品清洗数据回填
-     * @author: 唐远望
-     * @version: 1.0
-     * @date: 2026-04-29
-     */
-    public function violation_product_collect_data(ViolationProductModel $ViolationProductModel)
-    {
-        //获取非导入的低价商品清洗数据
-        $map = [];
-        $map[] = ['merge_city_id', '!=', '0'];
-        $map[] = ['first_responsible_person', '=', ''];
-        $map[] = ['responsible_person', '=', ''];
-        $map[] = ['source_responsible_person', '=', ''];
-        $limit = '100';
-        DB::beginTransaction();
         try {
-            $result = $ViolationProductModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
-            if (!empty($result['data'])) {
-                foreach ($result['data'] as $key => $product_data) {
-                    $specify_responsible_person = $product_data['specify_responsible_person'];
-                    //获取指定人员信息
-                    $insert_product_data = [];
-                    if ($specify_responsible_person == 0) {
-                        $product_data['qualification_number'] = $product_data['social_credit_code'];
-                        $product_data['platform_id'] = $product_data['platform'];
-                        $insert_product_data = $this->get_responsible_person_info($product_data);
-                    }
-                    $update_data = $insert_product_data;
-                    if (!empty($update_data) && count($update_data) > 0) {
-                        $ViolationProductModel->where('id', $product_data['id'])->update($update_data);
-                        $this->insert_violation_product_responsible_person_info($product_data, $insert_product_data);
-                    }
-                }
+            $CompanyModel = new CompanyModel();
+            $company_list = $CompanyModel->select(['id', 'status'])->where('status', 0)->orderByDesc('cleaning_priority')->get()->toarray();
+            foreach ($company_list as $company) {
+                $message_data = ['company_id' => $company['id'], 'page' => '1', 'limit' => '10'];
+                ViolationProductJobs::dispatch($message_data);
             }
-            DB::commit();
-            return        json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
-            // 成功处理...
+            return   json_send(['code' => 'success', 'msg' => '执行成功', 'data' => '']);
         } catch (\Exception $e) {
-            DB::rollBack();
             return   json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
         }
     }
 
-    /**
-     * 写入处理禁止商品-责任人信息
-     * @author: 唐远望
-     * @version: 1.0
-     * @date: 2026-05-19
-     */
-    private function insert_violation_product_responsible_person_info($product_data, $data)
-    {
-        $ViolationProductMemberModel = new ViolationProductMemberModel();
-        $ViolationProduct_id = $product_data['id'];
-        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
-        $first_responsible_person_data = [];
-        if (count($first_responsible_persons) > 0) {
-            //去除重复的责任人
-            $first_responsible_persons = array_unique($first_responsible_persons);
-            //移除数组内的空值
-            $first_responsible_persons = array_filter($first_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($first_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $first_responsible_person_data[] = [
-                    'violation_product_logid' => $ViolationProduct_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationProductMemberModel->insert($first_responsible_person_data);
-        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
-        $responsible_person_data = [];
-        if (count($responsible_persons) > 0) {
-            //去除重复的责任人
-            $responsible_persons = array_unique($responsible_persons);
-            //移除数组内的空值
-            $responsible_persons = array_filter($responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $responsible_person_data[] = [
-                    'violation_product_logid' => $ViolationProduct_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationProductMemberModel->insert($responsible_person_data);
-        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
-        $source_responsible_person_data = [];
-        if (count($source_responsible_persons) > 0) {
-            //去除重复的责任人
-            $source_responsible_persons = array_unique($source_responsible_persons);
-            //移除数组内的空值
-            $source_responsible_persons = array_filter($source_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($source_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $source_responsible_person_data[] = [
-                    'violation_product_logid' => $ViolationProduct_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationProductMemberModel->insert($source_responsible_person_data);
-    }
+
 
 
     /**
-     * 违规店铺清洗数据回填
+     * 违规店铺清洗数据回填-回填责任人
      * @author: 唐远望
      * @version: 1.0
-     * @date: 2026-04-29
+     * @date: 2026-05-22
      */
-    public function violation_store_collect_data(ViolationStoreModel $ViolationStoreModel)
+    public function violation_store_collect_data()
     {
-        //获取非导入的低价商品清洗数据
-        $map = [];
-        $map[] = ['merge_city_id', '!=', '0'];
-        $map[] = ['first_responsible_person', '=', ''];
-        $map[] = ['responsible_person', '=', ''];
-        $map[] = ['source_responsible_person', '=', ''];
-        $limit = '100';
-        DB::beginTransaction();
         try {
-            $result = $ViolationStoreModel->where($map)->orderByDesc('id')->paginate($limit)->toarray();
-            if (!empty($result['data'])) {
-                foreach ($result['data'] as $key => $product_data) {
-                    $specify_responsible_person = $product_data['specify_responsible_person'];
-                    //获取指定人员信息
-                    $insert_product_data = [];
-                    if ($specify_responsible_person == 0) {
-                        $product_data['qualification_number'] = $product_data['social_credit_code'];
-                        $product_data['platform_id'] = $product_data['platform'];
-                        $insert_product_data = $this->get_responsible_person_info($product_data);
-                    }
-                    $update_data = $insert_product_data;
-                    if (!empty($update_data) && count($update_data) > 0) {
-                        $ViolationStoreModel->where('id', $product_data['id'])->update($update_data);
-                        $this->insert_violation_store_responsible_person_info($product_data, $insert_product_data);
-                    }
-                }
+            $CompanyModel = new CompanyModel();
+            $company_list = $CompanyModel->select(['id', 'status'])->where('status', 0)->orderByDesc('cleaning_priority')->get()->toarray();
+            foreach ($company_list as $company) {
+                $message_data = ['company_id' => $company['id'], 'page' => '1', 'limit' => '10'];
+                ViolationStoreJobs::dispatch($message_data);
             }
-            DB::commit();
-            return        json_send(['code' => 'success', 'msg' => '执行成功', 'data' => count($result['data'])]);
-            // 成功处理...
+            return   json_send(['code' => 'success', 'msg' => '执行成功', 'data' => '']);
         } catch (\Exception $e) {
-            DB::rollBack();
             return   json_send(['code' => 'error', 'msg' => '执行失败', 'data' => $e->getMessage()]);
         }
     }
-
-    /**
-     * 写入处理违规店铺-责任人信息
-     * @author: 唐远望
-     * @version: 1.0
-     * @date: 2026-05-19
-     */
-    private function insert_violation_store_responsible_person_info($product_data, $data)
-    {
-        $ViolationStoreMemberModel = new ViolationStoreMemberModel();
-        $ViolationStore_id = $product_data['id'];
-        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
-        $first_responsible_person_data = [];
-        if (count($first_responsible_persons) > 0) {
-            //去除重复的责任人
-            $first_responsible_persons = array_unique($first_responsible_persons);
-            //移除数组内的空值
-            $first_responsible_persons = array_filter($first_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($first_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $first_responsible_person_data[] = [
-                    'violation_store_logid' => $ViolationStore_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationStoreMemberModel->insert($first_responsible_person_data);
-        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
-        $responsible_person_data = [];
-        if (count($responsible_persons) > 0) {
-            //去除重复的责任人
-            $responsible_persons = array_unique($responsible_persons);
-            //移除数组内的空值
-            $responsible_persons = array_filter($responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $responsible_person_data[] = [
-                    'violation_store_logid' => $ViolationStore_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationStoreMemberModel->insert($responsible_person_data);
-        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
-        $source_responsible_person_data = [];
-        if (count($source_responsible_persons) > 0) {
-            //去除重复的责任人
-            $source_responsible_persons = array_unique($source_responsible_persons);
-            //移除数组内的空值
-            $source_responsible_persons = array_filter($source_responsible_persons);
-            $EmployeeModel = new EmployeeModel();
-            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
-            $employee_user_list_name = [];
-            if (!empty($employee_user_list)) {
-                foreach ($employee_user_list as $key => $employee_user_info) {
-                    $employee_id = $employee_user_info['id'];
-                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
-                }
-            }
-            foreach ($source_responsible_persons as $key => $employee_id) {
-                //如果不是数字或者为空,则跳过
-                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
-                $source_responsible_person_data[] = [
-                    'violation_store_logid' => $ViolationStore_id,
-                    'employee_id' => $employee_id,
-                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
-                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
-                ];
-            }
-        }
-        $ViolationStoreMemberModel->insert($source_responsible_person_data);
-    }
 }

+ 217 - 76
app/Http/Controllers/Manager/Process/LowPriceGoods.php

@@ -38,7 +38,7 @@ class LowPriceGoods extends Controller
      * @date      2025-12-08
      * 
      */
-    public function list(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel, LowPriceGoodsMemberModel $LowPriceGoodsMemberModel,CompanyModel $CompanyModel)
+    public function list(Request $request, LowPriceGoodsModel $LowPriceGoodsModel, EmployeeModel $EmployeeModel, LowPriceGoodsMemberModel $LowPriceGoodsMemberModel, CompanyModel $CompanyModel)
     {
         $request->scene('list')->validate();
         $admin_company_id = request('admin_company_id', '0');
@@ -54,7 +54,9 @@ class LowPriceGoods extends Controller
         $product_name = request('product_name', '');
         $product_names = request('product_names', '');
         $first_responsible_person = request('first_responsible_person', '');
+        $first_responsible_person_name = request('first_responsible_person_name', '');
         $responsible_person = request('responsible_person', '');
+        $responsible_person_name = request('responsible_person_name', '');
         $platform = request('platform', '');
         $company_name = request('company_name', '');
         $company_names = request('company_names', '');
@@ -62,6 +64,7 @@ class LowPriceGoods extends Controller
         $anonymous_store_name = request('anonymous_store_name', '');
         $store_names = request('store_names', '');
         $source_responsible_person = request('source_responsible_person', '');
+        $source_responsible_person_name = request('source_responsible_person_name', '');
         $processing_status = request('processing_status', '');
         $product_specs = request('product_specs', '');
         $online_posting_count = request('online_posting_count', '');
@@ -152,6 +155,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -160,6 +170,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 2)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -168,6 +185,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 3)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);
@@ -223,23 +247,23 @@ class LowPriceGoods extends Controller
         }
         // 分配数据
         if (!$result)  json_send(['code' => 'success', 'msg' => '获取成功', 'data' => []]);
-        $snapshot_status = $CompanyModel->where(['id'=> $low_price_goods_where['company_id']])->value('snapshot_status');
+        $snapshot_status = $CompanyModel->where(['id' => $low_price_goods_where['company_id']])->value('snapshot_status');
         if (isset($result['data']) && count($result['data']) > 0) {
             foreach ($result['data'] as $key => $value) {
                 //查询第一责任人名称
                 $first_responsible_person = explode(',', $value['first_responsible_person']);
-                $first_responsible_person_name = $LowPriceGoodsMemberModel->where('lowprice_product_logid',$value['id'])->where('duty_type','1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name;
+                $first_responsible_person_name_string = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $value['id'])->where('duty_type', '1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name_string;
                 //查询责任人名称
                 $responsible_person = explode(',', $value['responsible_person']);
-                $responsible_person_name = $LowPriceGoodsMemberModel->where('lowprice_product_logid',$value['id'])->where('duty_type','2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['responsible_person_name'] = $responsible_person_name;
+                $responsible_person_name_string = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $value['id'])->where('duty_type', '2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['responsible_person_name'] = $responsible_person_name_string;
                 //查询来源责任人名称
                 $source_responsible_person = explode(',', $value['source_responsible_person']);
-                $source_responsible_person_name = $LowPriceGoodsMemberModel->where('lowprice_product_logid',$value['id'])->where('duty_type','3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name;
+                $source_responsible_person_name_string = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $value['id'])->where('duty_type', '3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name_string;
                 //关闭快照不展示数据
-                if(!empty($snapshot_status) && $snapshot_status == 1) $result['data'][$key]['snapshot_url'] = '';
+                if (!empty($snapshot_status) && $snapshot_status == 1) $result['data'][$key]['snapshot_url'] = '';
             }
         }
         // 加载模板
@@ -267,7 +291,9 @@ class LowPriceGoods extends Controller
         $message_data['product_name'] = request('product_name', '');
         $message_data['product_names'] = request('product_names', '');
         $message_data['first_responsible_person'] = request('first_responsible_person', '');
+        $message_data['first_responsible_person_name'] = request('first_responsible_person_name', '');
         $message_data['responsible_person'] = request('responsible_person', '');
+        $message_data['responsible_person_name'] = request('responsible_person_name', '');
         $message_data['platform'] = request('platform', '');
         $message_data['company_name'] = request('company_name', '');
         $message_data['company_names'] = request('company_names', '');
@@ -275,6 +301,7 @@ class LowPriceGoods extends Controller
         $message_data['anonymous_store_name']  = request('anonymous_store_name', '');
         $message_data['store_names'] = request('store_names', '');
         $message_data['source_responsible_person'] = request('source_responsible_person', '');
+        $message_data['source_responsible_person_name'] = request('source_responsible_person_name', '');
         $message_data['processing_status'] = request('processing_status', '');
         $message_data['product_specs'] = request('product_specs', '');
         $message_data['online_posting_count'] = request('online_posting_count', '');
@@ -335,6 +362,9 @@ class LowPriceGoods extends Controller
         $collection_time_end_time = $message_data['collection_time_end_time'] ?? '';
         $merge_city_ids = $message_data['merge_city_ids'] ?? '';
         $merge_province_ids = $message_data['merge_province_ids'] ?? '';
+        $first_responsible_person_name = $message_data['first_responsible_person_name'] ?? '';
+        $responsible_person_name = $message_data['responsible_person_name'] ?? '';
+        $source_responsible_person_name = $message_data['source_responsible_person_name'] ?? '';
         // 时间条件
         if ($collection_time_start_time) $map[] = ['collection_time', '>=', strtotime($collection_time_start_time)];
         if ($collection_time_end_time) $map[] = ['collection_time', '<=', strtotime($collection_time_end_time)];
@@ -407,6 +437,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -415,6 +452,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 2)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -423,6 +467,13 @@ class LowPriceGoods extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$source_responsible_person_name%"]])->where('duty_type', 3)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);
@@ -481,7 +532,7 @@ class LowPriceGoods extends Controller
         $export_data_info = Cache::get($key_name);
         if ($export_data_info) return json_send(['code' => 'error', 'msg' => '导出任务正在执行中,请稍后再试', 'data' => '']);
         //创建缓存
-        Cache::put($key_name, '1',600);
+        Cache::put($key_name, '1', 600);
 
         // 生成唯一文件ID
         $fileId                     = make_snow_flake();
@@ -951,6 +1002,16 @@ class LowPriceGoods extends Controller
      */
     public function download_template()
     {
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        $select_company_id = 0;
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $select_company_id = $company_id;
+        } else {
+            $select_company_id  = $admin_company_id;
+        }
         // 创建一个新的 Spreadsheet 对象
         $spreadsheet = new Spreadsheet();
         $sheet = $spreadsheet->getActiveSheet();
@@ -965,30 +1026,58 @@ class LowPriceGoods extends Controller
         // 然后设置行高以适应两行文本
         $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
         // 设置表头
-        $sheet->setCellValue('A2', '第一责任人姓名');
-        $sheet->setCellValue('B2', '责任人姓名');
-        $sheet->setCellValue('C2', '平台名称*');
-        $sheet->setCellValue('D2', '商品类型');
-        $sheet->setCellValue('E2', '品牌名称');
-        $sheet->setCellValue('F2', '商品名称*');
-        $sheet->setCellValue('G2', '商品规格*');
-        $sheet->setCellValue('H2', '监控价格*');
-        $sheet->setCellValue('I2', '挂网价格*');
-        $sheet->setCellValue('J2', '销量');
-        $sheet->setCellValue('K2', '库存');
-        $sheet->setCellValue('L2', '快照URL');
-        $sheet->setCellValue('M2', '累计挂网次数');
-        $sheet->setCellValue('N2', '连续挂网次数');
-        $sheet->setCellValue('O2', '超低监控价格');
-        $sheet->setCellValue('P2', '链接地址*');
-        $sheet->setCellValue('Q2', '店铺名称*');
-        $sheet->setCellValue('R2', '匿名店铺');
-        $sheet->setCellValue('S2', '公司名称*');
-        $sheet->setCellValue('T2', '商业类型');
-        $sheet->setCellValue('U2', '信用代码');
-        $sheet->setCellValue('V2', '省份');
-        $sheet->setCellValue('W2', '城市');
-        $sheet->setCellValue('X2', '采集时间(Y-m-d H:i:s)*');
+        if ($select_company_id == 5) {
+            $sheet->setCellValue('A2', ' ');
+            $sheet->setCellValue('B2', '责任人姓名');
+            $sheet->setCellValue('C2', '平台名称*');
+            $sheet->setCellValue('D2', ' ');
+            $sheet->setCellValue('E2', '品牌名称');
+            $sheet->setCellValue('F2', '商品名称*');
+            $sheet->setCellValue('G2', '商品规格*');
+            $sheet->setCellValue('H2', '监控价格*');
+            $sheet->setCellValue('I2', '挂网价格*');
+            $sheet->setCellValue('J2', ' ');
+            $sheet->setCellValue('K2', ' ');
+            $sheet->setCellValue('L2', '快照URL');
+            $sheet->setCellValue('M2', ' ');
+            $sheet->setCellValue('N2', '连续挂网次数');
+            $sheet->setCellValue('O2', '超低监控价格');
+            $sheet->setCellValue('P2', '链接地址*');
+            $sheet->setCellValue('Q2', '店铺名称*');
+            $sheet->setCellValue('R2', ' ');
+            $sheet->setCellValue('S2', '公司名称*');
+            $sheet->setCellValue('T2', ' ');
+            $sheet->setCellValue('U2', ' ');
+            $sheet->setCellValue('V2', '省份');
+            $sheet->setCellValue('W2', '城市');
+            $sheet->setCellValue('X2', '采集时间(Y-m-d H:i:s)*');
+        } else {
+            $sheet->setCellValue('A2', '第一责任人姓名');
+            $sheet->setCellValue('B2', '责任人姓名');
+            $sheet->setCellValue('C2', '平台名称*');
+            $sheet->setCellValue('D2', '商品类型');
+            $sheet->setCellValue('E2', '品牌名称');
+            $sheet->setCellValue('F2', '商品名称*');
+            $sheet->setCellValue('G2', '商品规格*');
+            $sheet->setCellValue('H2', '监控价格*');
+            $sheet->setCellValue('I2', '挂网价格*');
+            $sheet->setCellValue('J2', '销量');
+            $sheet->setCellValue('K2', '库存');
+            $sheet->setCellValue('L2', '快照URL');
+            $sheet->setCellValue('M2', '累计挂网次数');
+            $sheet->setCellValue('N2', '连续挂网次数');
+            $sheet->setCellValue('O2', '超低监控价格');
+            $sheet->setCellValue('P2', '链接地址*');
+            $sheet->setCellValue('Q2', '店铺名称*');
+            $sheet->setCellValue('R2', '匿名店铺');
+            $sheet->setCellValue('S2', '公司名称*');
+            $sheet->setCellValue('T2', '商业类型');
+            $sheet->setCellValue('U2', '信用代码');
+            $sheet->setCellValue('V2', '省份');
+            $sheet->setCellValue('W2', '城市');
+            $sheet->setCellValue('X2', '采集时间(Y-m-d H:i:s)*');
+        }
+
         // 生成 Excel 文件
         $writer = new Xlsx($spreadsheet);
 
@@ -1014,6 +1103,13 @@ class LowPriceGoods extends Controller
         $admin_company_id = request('admin_company_id', '0');
         $company_id = request('access_token.company_id', '0');
         $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        $select_company_id = 0;
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $select_company_id = $company_id;
+        } else {
+            $select_company_id  = $admin_company_id;
+        }
         $file = $request->file('file');
         // 加载Excel文件
         $spreadsheet = IOFactory::load($file->getPathname());
@@ -1110,49 +1206,94 @@ class LowPriceGoods extends Controller
                 }
                 $platform_id = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台ID
                 if ($platform_id == 0) return json_send(['code' => 'error', 'msg' => "第{$key_num}行平台信息不正确", 'data' => $item]);
+                if ($select_company_id == 5) {
+                    $insert_product_data['first_responsible_person'] = ''; //第一责任人ID集合
+                    $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
+                    $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
+                    $insert_product_data['category_name'] = ''; // 商品分类
+                    $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
+                    $insert_product_data['product_name'] = $item[5]; // 商品名称
+                    $insert_product_data['product_specs'] = $item[6]; // 商品规格
+                    $insert_product_data['suggested_price'] = $item[7]; // 监控价格
+                    $insert_product_data['online_posting_price'] = $item[8]; // 挂网价格
+                    $insert_product_data['sales'] = 0; // 销量
+                    $insert_product_data['inventory'] = 0; // 库存
+                    $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
+                    $insert_product_data['online_posting_count'] = 1; // 累计挂网次数
+                    $insert_product_data['continuous_listing_count'] = isset($item[13]) ? $item[13] : 1; // 连续挂网次数
+                    $insert_product_data['ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) ? $item[14] : '0'; // 超低监控价格
+                    $insert_product_data['is_ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) && $item[14] < $item[8] ? 1 : 0; // 是否超低价0=否1=是
+                    $insert_product_data['link_url'] = $item[15]; // 链接地址
+                    $insert_product_data['store_name'] = $item[16]; // 店铺名称
+                    $insert_product_data['anonymous_store_name'] = ''; // 匿名店铺名称
+                    $insert_product_data['company_name'] = $item[18]; // 公司名称
+                    $insert_product_data['company_category_name'] = ''; // 公司分类
+                    $insert_product_data['social_credit_code'] = ''; // 信用代码
+                    $insert_product_data['merge_province_name'] = isset($item[21]) ? $item[21] : ''; // 省份
+                    $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
+                    $insert_product_data['merge_city_name'] = isset($item[22]) ? $item[22] : ''; // 城市
+                    $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
+                    $insert_product_data['area_info'] = ''; // 详细地址
+                    $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
+                    $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
+                    $insert_product_data['status'] = 0; //状态0=有效=无效
+                    $insert_product_data['insert_time'] = time();
+                    $insert_product_data['source_id'] = 0; // 原始数据ID
+                    $insert_product_data['collection_time'] = strtotime($item[23]); // 采集时间
+                    $insert_product_data['scrape_date'] = date('Y-m-d', strtotime($item[23])); // 检索采集日期
+                    $insert_product_data['city_id'] = '0'; // 公司城市ID
+                    $insert_product_data['city_name'] = ''; //公司城市名称
+                    $insert_product_data['province_name'] = ''; //公司省份名称
+                    $insert_product_data['province_id'] = '0'; //公司省份ID
+                    $insert_product_data['shipment_province_id'] = '0'; //发货省份ID
+                    $insert_product_data['shipment_province_name'] = ''; //发货省份名称
+                    $insert_product_data['shipment_city_id'] = '0'; //发货城市ID
+                    $insert_product_data['shipment_city_name'] = ''; //发货城市名称
+                } else {
+                    $insert_product_data['first_responsible_person'] = !empty($first_responsible_person_id) ? implode(',', $first_responsible_person_id) : ''; //第一责任人ID集合
+                    $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
+                    $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
+                    $insert_product_data['category_name'] = isset($item[3]) ? $item[3] : ''; // 商品分类
+                    $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
+                    $insert_product_data['product_name'] = $item[5]; // 商品名称
+                    $insert_product_data['product_specs'] = $item[6]; // 商品规格
+                    $insert_product_data['suggested_price'] = $item[7]; // 监控价格
+                    $insert_product_data['online_posting_price'] = $item[8]; // 挂网价格
+                    $insert_product_data['sales'] = isset($item[9]) ? $item[9] : 0; // 销量
+                    $insert_product_data['inventory'] = isset($item[10]) ? $item[10] : 0; // 库存
+                    $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
+                    $insert_product_data['online_posting_count'] = isset($item[12]) ? $item[12] : 1; // 累计挂网次数
+                    $insert_product_data['continuous_listing_count'] = isset($item[13]) ? $item[13] : 1; // 连续挂网次数
+                    $insert_product_data['ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) ? $item[14] : '0'; // 超低监控价格
+                    $insert_product_data['is_ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) && $item[14] < $item[8] ? 1 : 0; // 是否超低价0=否1=是
+                    $insert_product_data['link_url'] = $item[15]; // 链接地址
+                    $insert_product_data['store_name'] = $item[16]; // 店铺名称
+                    $insert_product_data['anonymous_store_name'] = isset($item[17]) ? $item[17] : ''; // 匿名店铺名称
+                    $insert_product_data['company_name'] = $item[18]; // 公司名称
+                    $insert_product_data['company_category_name'] = isset($item[19]) ? $item[19] : ''; // 公司分类
+                    $insert_product_data['social_credit_code'] = isset($item[20]) ? $item[20] : ''; // 信用代码
+                    $insert_product_data['merge_province_name'] = isset($item[21]) ? $item[21] : ''; // 省份
+                    $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
+                    $insert_product_data['merge_city_name'] = isset($item[22]) ? $item[22] : ''; // 城市
+                    $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
+                    $insert_product_data['area_info'] = ''; // 详细地址
+                    $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
+                    $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
+                    $insert_product_data['status'] = 0; //状态0=有效=无效
+                    $insert_product_data['insert_time'] = time();
+                    $insert_product_data['source_id'] = 0; // 原始数据ID
+                    $insert_product_data['collection_time'] = strtotime($item[23]); // 采集时间
+                    $insert_product_data['scrape_date'] = date('Y-m-d', strtotime($item[23])); // 检索采集日期
+                    $insert_product_data['city_id'] = '0'; // 公司城市ID
+                    $insert_product_data['city_name'] = ''; //公司城市名称
+                    $insert_product_data['province_name'] = ''; //公司省份名称
+                    $insert_product_data['province_id'] = '0'; //公司省份ID
+                    $insert_product_data['shipment_province_id'] = '0'; //发货省份ID
+                    $insert_product_data['shipment_province_name'] = ''; //发货省份名称
+                    $insert_product_data['shipment_city_id'] = '0'; //发货城市ID
+                    $insert_product_data['shipment_city_name'] = ''; //发货城市名称
+                }
 
-                $insert_product_data['first_responsible_person'] = !empty($first_responsible_person_id) ? implode(',', $first_responsible_person_id) : ''; //第一责任人ID集合
-                $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
-                $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
-                $insert_product_data['category_name'] = $item[3] ? $item[3] : ''; // 商品分类
-                $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
-                $insert_product_data['product_name'] = $item[5]; // 商品名称
-                $insert_product_data['product_specs'] = $item[6]; // 商品规格
-                $insert_product_data['suggested_price'] = $item[7]; // 监控价格
-                $insert_product_data['online_posting_price'] = $item[8]; // 挂网价格
-                $insert_product_data['sales'] = isset($item[9]) ? $item[9] : 0; // 销量
-                $insert_product_data['inventory'] = isset($item[10]) ? $item[10] : 0; // 库存
-                $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
-                $insert_product_data['online_posting_count'] = isset($item[12]) ? $item[12] : 1; // 累计挂网次数
-                $insert_product_data['continuous_listing_count'] = isset($item[13]) ? $item[13] : 1; // 连续挂网次数
-                $insert_product_data['ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) ? $item[14] : '0'; // 超低监控价格
-                $insert_product_data['is_ultra_low_price'] = isset($item[14]) && is_numeric($item[14]) && $item[14] < $item[8] ? 1 : 0; // 是否超低价0=否1=是
-                $insert_product_data['link_url'] = $item[15]; // 链接地址
-                $insert_product_data['store_name'] = $item[16]; // 店铺名称
-                $insert_product_data['anonymous_store_name'] = isset($item[17]) ? $item[17] : ''; // 匿名店铺名称
-                $insert_product_data['company_name'] = $item[18]; // 公司名称
-                $insert_product_data['company_category_name'] = isset($item[19]) ? $item[19] : ''; // 公司分类
-                $insert_product_data['social_credit_code'] = isset($item[20]) ? $item[20] : ''; // 信用代码
-                $insert_product_data['merge_province_name'] = isset($item[21]) ? $item[21] : ''; // 省份
-                $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
-                $insert_product_data['merge_city_name'] = isset($item[22]) ? $item[22] : ''; // 城市
-                $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
-                $insert_product_data['area_info'] = ''; // 详细地址
-                $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
-                $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
-                $insert_product_data['status'] = 0; //状态0=有效=无效
-                $insert_product_data['insert_time'] = time();
-                $insert_product_data['source_id'] = 0; // 原始数据ID
-                $insert_product_data['collection_time'] = strtotime($item[23]); // 采集时间
-                $insert_product_data['scrape_date'] = date('Y-m-d', strtotime($item[23])); // 检索采集日期
-                $insert_product_data['city_id'] ='0'; // 公司城市ID
-                $insert_product_data['city_name'] ='';//公司城市名称
-                $insert_product_data['province_name'] ='';//公司省份名称
-                $insert_product_data['province_id'] ='0';//公司省份ID
-                $insert_product_data['shipment_province_id'] ='0';//发货省份ID
-                $insert_product_data['shipment_province_name'] ='';//发货省份名称
-                $insert_product_data['shipment_city_id'] ='0';//发货城市ID
-                $insert_product_data['shipment_city_name'] ='';//发货城市名称
                 //插入数据
                 $LowPriceGoodsModel->addLowPriceGoods($insert_product_data, true);
             }

+ 200 - 66
app/Http/Controllers/Manager/Process/ViolationProduct.php

@@ -52,7 +52,9 @@ class ViolationProduct extends Controller
         $product_name = request('product_name', '');
         $product_names = request('product_names', '');
         $first_responsible_person = request('first_responsible_person', '');
+        $first_responsible_person_name = request('first_responsible_person_name', '');
         $responsible_person = request('responsible_person', '');
+        $responsible_person_name = request('responsible_person_name', '');
         $platform = request('platform', '');
         $company_name = request('company_name', '');
         $company_names = request('company_names', '');
@@ -60,6 +62,7 @@ class ViolationProduct extends Controller
         $anonymous_store_name  = request('anonymous_store_name', '');
         $store_names = request('store_names', '');
         $source_responsible_person = request('source_responsible_person', '');
+        $source_responsible_person_name = request('source_responsible_person_name', '');
         $processing_status = request('processing_status', '');
         $product_specs = request('product_specs', '');
         $online_posting_count = request('online_posting_count', '');
@@ -145,6 +148,13 @@ class ViolationProduct extends Controller
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name !=''){
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$first_responsible_person_name%"]])->where('duty_type',1)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -153,6 +163,13 @@ class ViolationProduct extends Controller
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name !=''){
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$responsible_person_name%"]])->where('duty_type',2)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -161,6 +178,13 @@ class ViolationProduct extends Controller
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name !=''){
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$source_responsible_person_name%"]])->where('duty_type',3)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);
@@ -222,16 +246,16 @@ class ViolationProduct extends Controller
             foreach ($result['data'] as $key => $value) {
                 //查询第一责任人名称
                 $first_responsible_person = explode(',', $value['first_responsible_person']);
-                $first_responsible_person_name = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name;
+                $first_responsible_person_name_string = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name_string;
                 //查询责任人名称
                 $responsible_person = explode(',', $value['responsible_person']);
-                $responsible_person_name = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['responsible_person_name'] = $responsible_person_name;
+                $responsible_person_name_string = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['responsible_person_name'] = $responsible_person_name_string;
                 //查询来源责任人名称
                 $source_responsible_person = explode(',', $value['source_responsible_person']);
-                $source_responsible_person_name = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name;
+                $source_responsible_person_name_string = $ViolationProductMemberModel->where('violation_product_logid',$value['id'])->where('duty_type','3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name_string;
                 //关闭快照不展示数据
                 if(!empty($snapshot_status) && $snapshot_status == 1) $result['data'][$key]['snapshot_url'] = '';
             }
@@ -260,7 +284,9 @@ class ViolationProduct extends Controller
         $message_data['product_name'] = request('product_name', '');
         $message_data['product_names'] = request('product_names', '');
         $message_data['first_responsible_person'] = request('first_responsible_person', '');
+        $message_data['first_responsible_person_name'] = request('first_responsible_person_name', '');
         $message_data['responsible_person'] = request('responsible_person', '');
+        $message_data['responsible_person_name'] = request('responsible_person_name', '');
         $message_data['platform'] = request('platform', '');
         $message_data['company_name'] = request('company_name', '');
         $message_data['company_names'] = request('company_names', '');
@@ -268,6 +294,7 @@ class ViolationProduct extends Controller
         $message_data['anonymous_store_name'] = request('anonymous_store_name', '');
         $message_data['store_names'] = request('store_names', '');
         $message_data['source_responsible_person'] = request('source_responsible_person', '');
+        $message_data['source_responsible_person_name'] = request('source_responsible_person_name', '');
         $message_data['processing_status'] = request('processing_status', '');
         $message_data['product_specs'] = request('product_specs', '');
         $message_data['online_posting_count'] = request('online_posting_count', '');
@@ -325,6 +352,9 @@ class ViolationProduct extends Controller
         $collection_time_end_time = $message_data['collection_time_end_time'];
         $merge_province_ids = $message_data['merge_province_ids'];
         $merge_city_ids = $message_data['merge_city_ids'];
+        $first_responsible_person_name = $message_data['first_responsible_person_name'] ?? '';
+        $responsible_person_name = $message_data['responsible_person_name'] ?? '';
+        $source_responsible_person_name = $message_data['source_responsible_person_name'] ?? '';
         // 时间条件
         if ($collection_time_start_time) $map[] = ['collection_time', '>=', strtotime($collection_time_start_time)];
         if ($collection_time_end_time) $map[] = ['collection_time', '<=', strtotime($collection_time_end_time)];
@@ -389,6 +419,13 @@ class ViolationProduct extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name !=''){
+            $subQuery = $ViolationProductModel->where([['employee_name','like',"%$first_responsible_person_name%"]])->where('duty_type',1)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -397,6 +434,13 @@ class ViolationProduct extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name !=''){
+            $subQuery = $ViolationProductModel->where([['employee_name','like',"%$responsible_person_name%"]])->where('duty_type',2)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -405,6 +449,13 @@ class ViolationProduct extends Controller
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name !=''){
+            $subQuery = $ViolationProductModel->where([['employee_name','like',"%$source_responsible_person_name%"]])->where('duty_type',3)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);
@@ -741,6 +792,16 @@ class ViolationProduct extends Controller
      */
     public function download_template()
     {
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        $select_company_id = 0;
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $select_company_id = $company_id;
+        } else {
+            $select_company_id  = $admin_company_id;
+        }
         // 创建一个新的 Spreadsheet 对象
         $spreadsheet = new Spreadsheet();
         $sheet = $spreadsheet->getActiveSheet();
@@ -755,27 +816,52 @@ class ViolationProduct extends Controller
         // 然后设置行高以适应两行文本
         $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
         // 设置表头
-        $sheet->setCellValue('A2', '第一责任人名称');
-        $sheet->setCellValue('B2', '责任人名称');
-        $sheet->setCellValue('C2', '平台名称*');
-        $sheet->setCellValue('D2', '商品分类名称');
-        $sheet->setCellValue('E2', '品牌名称');
-        $sheet->setCellValue('F2', '商品名称*');
-        $sheet->setCellValue('G2', '商品规格*');
-        $sheet->setCellValue('H2', '累计挂网次数');
-        $sheet->setCellValue('I2', '连续挂网次数');
-        $sheet->setCellValue('J2', '销量');
-        $sheet->setCellValue('K2', '库存');
-        $sheet->setCellValue('L2', '快照URL');
-        $sheet->setCellValue('M2', '链接地址*');
-        $sheet->setCellValue('N2', '店铺名称*');
-        $sheet->setCellValue('O2', '匿名店铺名称');
-        $sheet->setCellValue('P2', '公司名称*');
-        $sheet->setCellValue('Q2', '公司分类名称');
-        $sheet->setCellValue('R2', '信用代码');
-        $sheet->setCellValue('S2', '省份');
-        $sheet->setCellValue('T2', '城市');
-        $sheet->setCellValue('U2', '采集时间(Y-m-d H:i:s)*');
+        if ($select_company_id == 5) {
+            $sheet->setCellValue('A2', ' ');
+            $sheet->setCellValue('B2', '责任人名称');
+            $sheet->setCellValue('C2', '平台名称*');
+            $sheet->setCellValue('D2', ' ');
+            $sheet->setCellValue('E2', '品牌名称');
+            $sheet->setCellValue('F2', '商品名称*');
+            $sheet->setCellValue('G2', '商品规格*');
+            $sheet->setCellValue('H2', '');
+            $sheet->setCellValue('I2', '连续挂网次数');
+            $sheet->setCellValue('J2', ' ');
+            $sheet->setCellValue('K2', ' ');
+            $sheet->setCellValue('L2', '快照URL');
+            $sheet->setCellValue('M2', '链接地址*');
+            $sheet->setCellValue('N2', '店铺名称*');
+            $sheet->setCellValue('O2', '匿名店铺名称');
+            $sheet->setCellValue('P2', '公司名称*');
+            $sheet->setCellValue('Q2', ' ');
+            $sheet->setCellValue('R2', ' ');
+            $sheet->setCellValue('S2', '省份');
+            $sheet->setCellValue('T2', '城市');
+            $sheet->setCellValue('U2', '采集时间(Y-m-d H:i:s)*');
+        } else {
+            $sheet->setCellValue('A2', '第一责任人名称');
+            $sheet->setCellValue('B2', '责任人名称');
+            $sheet->setCellValue('C2', '平台名称*');
+            $sheet->setCellValue('D2', '商品类型');
+            $sheet->setCellValue('E2', '品牌名称');
+            $sheet->setCellValue('F2', '商品名称*');
+            $sheet->setCellValue('G2', '商品规格*');
+            $sheet->setCellValue('H2', '累计挂网次数');
+            $sheet->setCellValue('I2', '连续挂网次数');
+            $sheet->setCellValue('J2', '销量');
+            $sheet->setCellValue('K2', '库存');
+            $sheet->setCellValue('L2', '快照URL');
+            $sheet->setCellValue('M2', '链接地址*');
+            $sheet->setCellValue('N2', '店铺名称*');
+            $sheet->setCellValue('O2', '匿名店铺名称');
+            $sheet->setCellValue('P2', '公司名称*');
+            $sheet->setCellValue('Q2', '商业类型');
+            $sheet->setCellValue('R2', '信用代码');
+            $sheet->setCellValue('S2', '省份');
+            $sheet->setCellValue('T2', '城市');
+            $sheet->setCellValue('U2', '采集时间(Y-m-d H:i:s)*');
+        }
+
         // 生成 Excel 文件
         $writer = new Xlsx($spreadsheet);
 
@@ -802,6 +888,13 @@ class ViolationProduct extends Controller
         $admin_company_id = request('admin_company_id', '0');
         $company_id = request('access_token.company_id', '0');
         $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        $select_company_id = 0;
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $select_company_id = $company_id;
+        } else {
+            $select_company_id  = $admin_company_id;
+        }
         $file = $request->file('file');
         // 加载Excel文件
         $spreadsheet = IOFactory::load($file->getPathname());
@@ -897,45 +990,86 @@ class ViolationProduct extends Controller
                 }
                 $platform_id = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台ID
                 if($platform_id == 0) return json_send(['code' => 'error', 'msg' => "第{$key_num}行平台信息不正确", 'data' => $item]);
-
-                $insert_product_data['first_responsible_person'] = !empty($first_responsible_person_id) ? implode(',', $first_responsible_person_id) : ''; //第一责任人ID集合
-                $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
-                $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
-                $insert_product_data['category_name'] = $item[3] ? $item[4] : ''; // 商品分类
-                $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
-                $insert_product_data['product_name'] = $item[5]; // 商品名称
-                $insert_product_data['product_specs'] = $item[6]; // 商品规格
-                $insert_product_data['online_posting_count'] = isset($item[7]) ? $item[7] : 1; // 累计挂网次数
-                $insert_product_data['continuous_listing_count'] = isset($item[7]) ? $item[7] : 1; // 连续挂网次数
-                $insert_product_data['sales'] = isset($item[9]) ? $item[9] : 0; // 销量
-                $insert_product_data['inventory'] = isset($item[10]) ? $item[10] : 0; // 库存
-                $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
-                $insert_product_data['link_url'] = $item[12]; // 链接地址
-                $insert_product_data['store_name'] = $item[13]; // 店铺名称
-                $insert_product_data['anonymous_store_name'] = isset($item[14]) ? $item[14] : ''; // 匿名店铺名称
-                $insert_product_data['company_name'] = $item[15]; // 公司名称
-                $insert_product_data['company_category_name'] = isset($item[16]) ? $item[16] : ''; // 公司分类
-                $insert_product_data['social_credit_code'] = isset($item[17]) ? $item[17] : ''; // 信用代码
-                $insert_product_data['merge_province_name'] = isset($item[18]) ? $item[18]:''; // 省份
-                $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
-                $insert_product_data['merge_city_name'] = isset($item[19]) ? $item[19] : ''; // 城市
-                $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
-                $insert_product_data['area_info'] = ''; // 详细地址
-                $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
-                $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
-                $insert_product_data['status'] = 0; //状态0=有效=无效
-                $insert_product_data['insert_time'] = time();
-                $insert_product_data['source_id'] = 0; // 原始数据ID
-                $insert_product_data['scrape_date'] = date('Y-m-d',strtotime($item[20])); // 检索采集日期
-                $insert_product_data['collection_time'] = strtotime($item[20]); // 采集时间
-                $insert_product_data['city_id'] ='0'; // 公司城市ID
-                $insert_product_data['city_name'] ='';//公司城市名称
-                $insert_product_data['province_name'] ='';//公司省份名称
-                $insert_product_data['province_id'] ='0';//公司省份ID
-                $insert_product_data['shipment_province_id'] ='0';//发货省份ID
-                $insert_product_data['shipment_province_name'] ='';//发货省份名称
-                $insert_product_data['shipment_city_id'] ='0';//发货城市ID
-                $insert_product_data['shipment_city_name'] ='';//发货城市名称
+                if ($select_company_id == 5) {
+                    $insert_product_data['first_responsible_person'] = ''; //第一责任人ID集合
+                    $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
+                    $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
+                    $insert_product_data['category_name'] = ''; // 商品分类
+                    $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
+                    $insert_product_data['product_name'] = $item[5]; // 商品名称
+                    $insert_product_data['product_specs'] = $item[6]; // 商品规格
+                    $insert_product_data['online_posting_count'] =  1; // 累计挂网次数
+                    $insert_product_data['continuous_listing_count'] = isset($item[7]) ? $item[7] : 1; // 连续挂网次数
+                    $insert_product_data['sales'] = 0; // 销量
+                    $insert_product_data['inventory'] = 0; // 库存
+                    $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
+                    $insert_product_data['link_url'] = $item[12]; // 链接地址
+                    $insert_product_data['store_name'] = $item[13]; // 店铺名称
+                    $insert_product_data['anonymous_store_name'] = isset($item[14]) ? $item[14] : ''; // 匿名店铺名称
+                    $insert_product_data['company_name'] = $item[15]; // 公司名称
+                    $insert_product_data['company_category_name'] = ''; // 公司分类
+                    $insert_product_data['social_credit_code'] = ''; // 信用代码
+                    $insert_product_data['merge_province_name'] = isset($item[18]) ? $item[18] : ''; // 省份
+                    $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
+                    $insert_product_data['merge_city_name'] = isset($item[19]) ? $item[19] : ''; // 城市
+                    $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
+                    $insert_product_data['area_info'] = ''; // 详细地址
+                    $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
+                    $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
+                    $insert_product_data['status'] = 0; //状态0=有效=无效
+                    $insert_product_data['insert_time'] = time();
+                    $insert_product_data['source_id'] = 0; // 原始数据ID
+                    $insert_product_data['scrape_date'] = date('Y-m-d', strtotime($item[20])); // 检索采集日期
+                    $insert_product_data['collection_time'] = strtotime($item[20]); // 采集时间
+                    $insert_product_data['city_id'] = '0'; // 公司城市ID
+                    $insert_product_data['city_name'] = ''; //公司城市名称
+                    $insert_product_data['province_name'] = ''; //公司省份名称
+                    $insert_product_data['province_id'] = '0'; //公司省份ID
+                    $insert_product_data['shipment_province_id'] = '0'; //发货省份ID
+                    $insert_product_data['shipment_province_name'] = ''; //发货省份名称
+                    $insert_product_data['shipment_city_id'] = '0'; //发货城市ID
+                    $insert_product_data['shipment_city_name'] = ''; //发货城市名称
+                } else {
+                    $insert_product_data['first_responsible_person'] = !empty($first_responsible_person_id) ? implode(',', $first_responsible_person_id) : ''; //第一责任人ID集合
+                    $insert_product_data['responsible_person'] = !empty($responsible_person_id) ? implode(',', $responsible_person_id) : ''; //责任人ID集合
+                    $insert_product_data['platform'] = isset($platform_data[$item[2]]) ? $platform_data[$item[2]] : '0'; // 平台
+                    $insert_product_data['category_name'] = isset($item[3]) ? $item[3] : ''; // 商品分类
+                    $insert_product_data['product_brand'] = isset($item[4]) ? $item[4] : ''; // 品牌名称
+                    $insert_product_data['product_name'] = $item[5]; // 商品名称
+                    $insert_product_data['product_specs'] = $item[6]; // 商品规格
+                    $insert_product_data['online_posting_count'] = isset($item[7]) ? $item[7] : 1; // 累计挂网次数
+                    $insert_product_data['continuous_listing_count'] = isset($item[7]) ? $item[7] : 1; // 连续挂网次数
+                    $insert_product_data['sales'] = isset($item[9]) ? $item[9] : 0; // 销量
+                    $insert_product_data['inventory'] = isset($item[10]) ? $item[10] : 0; // 库存
+                    $insert_product_data['snapshot_url'] = isset($item[11]) ? $item[11] : ''; // 快照URL
+                    $insert_product_data['link_url'] = $item[12]; // 链接地址
+                    $insert_product_data['store_name'] = $item[13]; // 店铺名称
+                    $insert_product_data['anonymous_store_name'] = isset($item[14]) ? $item[14] : ''; // 匿名店铺名称
+                    $insert_product_data['company_name'] = $item[15]; // 公司名称
+                    $insert_product_data['company_category_name'] = isset($item[16]) ? $item[16] : ''; // 公司分类
+                    $insert_product_data['social_credit_code'] = isset($item[17]) ? $item[17] : ''; // 信用代码
+                    $insert_product_data['merge_province_name'] = isset($item[18]) ? $item[18] : ''; // 省份
+                    $insert_product_data['merge_province_id'] = isset($province_id_data[$province_name]) ? $province_id_data[$province_name]['id'] : 0; // 省份ID
+                    $insert_product_data['merge_city_name'] = isset($item[19]) ? $item[19] : ''; // 城市
+                    $insert_product_data['merge_city_id'] = isset($city_id_data[$city_name]) ? $city_id_data[$city_name]['id'] : 0; // 城市ID
+                    $insert_product_data['area_info'] = ''; // 详细地址
+                    $insert_product_data['source_responsible_person'] = !empty($source_responsible_person_id) ? implode(',', $source_responsible_person_id) : ''; //溯源责任人ID集合
+                    $insert_product_data['processing_status'] = 1; //处理状态1=待处理2=购买中3=已溯源4=回收凭据已上传5=已回收6=拒绝回收7=已下架8=无法处理
+                    $insert_product_data['status'] = 0; //状态0=有效=无效
+                    $insert_product_data['insert_time'] = time();
+                    $insert_product_data['source_id'] = 0; // 原始数据ID
+                    $insert_product_data['scrape_date'] = date('Y-m-d', strtotime($item[20])); // 检索采集日期
+                    $insert_product_data['collection_time'] = strtotime($item[20]); // 采集时间
+                    $insert_product_data['city_id'] = '0'; // 公司城市ID
+                    $insert_product_data['city_name'] = ''; //公司城市名称
+                    $insert_product_data['province_name'] = ''; //公司省份名称
+                    $insert_product_data['province_id'] = '0'; //公司省份ID
+                    $insert_product_data['shipment_province_id'] = '0'; //发货省份ID
+                    $insert_product_data['shipment_province_name'] = ''; //发货省份名称
+                    $insert_product_data['shipment_city_id'] = '0'; //发货城市ID
+                    $insert_product_data['shipment_city_name'] = ''; //发货城市名称
+                }
+                
                 //插入数据
                 $ViolationProductModel->addViolationProduct($insert_product_data, true);
             }

+ 65 - 17
app/Http/Controllers/Manager/Process/ViolationStore.php

@@ -42,13 +42,16 @@ class ViolationStore extends Controller
         $start_time = request('start_time', '');
         $end_time = request('end_time', '');
         $first_responsible_person = request('first_responsible_person', '');
+        $first_responsible_person_name = request('first_responsible_person_name', '');
         $responsible_person = request('responsible_person', '');
+        $responsible_person_name = request('responsible_person_name', '');
         $platform = request('platform', '');
         $company_name = request('company_name', '');
         $company_names = request('company_names', '');
         $store_name = request('store_name', '');
         $store_names = request('store_names', '');
         $source_responsible_person = request('source_responsible_person', '');
+        $source_responsible_person_name = request('source_responsible_person_name', '');
         $processing_status = request('processing_status', '');
         $product_specs = request('product_specs', '');
         $online_posting_count = request('online_posting_count', '');
@@ -115,7 +118,14 @@ class ViolationStore extends Controller
         //多选第一责任人
         if ($first_responsible_person && is_string($first_responsible_person)) {
             $first_responsible_person = explode(',', $first_responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $first_responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $first_responsible_person)->where('duty_type', 1)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -123,7 +133,14 @@ class ViolationStore extends Controller
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $responsible_person)->where('duty_type', 2)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //责任人模糊查询
+        if ($responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 2)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -131,7 +148,14 @@ class ViolationStore extends Controller
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $source_responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $source_responsible_person)->where('duty_type', 3)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$source_responsible_person_name%"]])->where('duty_type', 3)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -160,7 +184,7 @@ class ViolationStore extends Controller
             ->where('personnel_employee.id', $user_id)->select(['personnel_employee.id', 'personnel_roles.identity'])
             ->first();
         //角色身份1=普通2=管理员
-        if(!empty($personnel_roles_info) && $personnel_roles_info->identity == 2){ 
+        if (!empty($personnel_roles_info) && $personnel_roles_info->identity == 2) {
             $is_admin = 1;
         }
         // 查询数据
@@ -187,16 +211,16 @@ class ViolationStore extends Controller
             foreach ($result['data'] as $key => $value) {
                 //查询第一责任人名称
                 $first_responsible_person = explode(',', $value['first_responsible_person']);
-                $first_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name;
+                $first_responsible_person_name_string = $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['first_responsible_person_name'] = $first_responsible_person_name_string;
                 //查询责任人名称
                 $responsible_person = explode(',', $value['responsible_person']);
-                $responsible_person_name =  $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['responsible_person_name'] = $responsible_person_name;
+                $responsible_person_name_string =  $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['responsible_person_name'] = $responsible_person_name_string;
                 //查询来源责任人名称
                 $source_responsible_person = explode(',', $value['source_responsible_person']);
-                $source_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
-                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name;
+                $source_responsible_person_name_string = $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
+                $result['data'][$key]['source_responsible_person_name'] = $source_responsible_person_name_string;
             }
         }
         // 加载模板
@@ -222,12 +246,15 @@ class ViolationStore extends Controller
         $start_time = request('start_time', '');
         $end_time = request('end_time', '');
         $first_responsible_person = request('first_responsible_person', '');
+        $first_responsible_person_name = request('first_responsible_person_name', '');
         $responsible_person = request('responsible_person', '');
+        $responsible_person_name = request('responsible_person_name', '');
         $platform = request('platform', '');
         $company_name = request('company_name', '');
         $store_name = request('store_name', '');
         $store_names = request('store_names', '');
         $source_responsible_person = request('source_responsible_person', '');
+        $source_responsible_person_name = request('source_responsible_person_name', '');
         $processing_status = request('processing_status', '');
         $product_specs = request('product_specs', '');
         $online_posting_count = request('online_posting_count', '');
@@ -289,7 +316,14 @@ class ViolationStore extends Controller
         //多选第一责任人
         if ($first_responsible_person && is_string($first_responsible_person)) {
             $first_responsible_person = explode(',', $first_responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $first_responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $first_responsible_person)->where('duty_type', 1)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -297,7 +331,14 @@ class ViolationStore extends Controller
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $responsible_person)->where('duty_type', 2)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //责任人模糊查询
+        if ($responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 2)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -305,7 +346,14 @@ class ViolationStore extends Controller
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
-            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $source_responsible_person)->distinct('violation_store_logid')->select('violation_store_logid');
+            $subQuery = $ViolationStoreMemberModel->whereIn('employee_id', $source_responsible_person)->where('duty_type', 3)->distinct('violation_store_logid')->select('violation_store_logid');
+            $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name != '') {
+            $subQuery = $ViolationStoreMemberModel->where([['employee_name', 'like', "%$source_responsible_person_name%"]])->where('duty_type', 3)->distinct('violation_store_logid')->select('violation_store_logid');
             $ViolationStoreModel = $ViolationStoreModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('violation_store_logid')->fromSub($subQuery, 'sub1');
             });
@@ -375,15 +423,15 @@ class ViolationStore extends Controller
             foreach ($result as $key => $value) {
                 //查询第一责任人名称
                 $first_responsible_person = explode(',', $value['first_responsible_person']);
-                $first_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->where('duty_type','1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
+                $first_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->where('duty_type', '1')->whereIn('employee_id', $first_responsible_person)->pluck('employee_name')->toarray();
                 $result[$key]['first_responsible_person_name'] = $first_responsible_person_name;
                 //查询责任人名称
                 $responsible_person = explode(',', $value['responsible_person']);
-                $responsible_person_name =  $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->where('duty_type','2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
+                $responsible_person_name =  $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->where('duty_type', '2')->whereIn('employee_id', $responsible_person)->pluck('employee_name')->toarray();
                 $result[$key]['responsible_person_name'] = $responsible_person_name;
                 //查询来源责任人名称
                 $source_responsible_person = explode(',', $value['source_responsible_person']);
-                $source_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid',$value['id'])->where('duty_type','3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
+                $source_responsible_person_name = $ViolationStoreMemberModel->where('violation_store_logid', $value['id'])->where('duty_type', '3')->whereIn('employee_id', $source_responsible_person)->pluck('employee_name')->toarray();
                 $result[$key]['source_responsible_person_name'] = $source_responsible_person_name;
             }
         }
@@ -725,7 +773,7 @@ class ViolationStore extends Controller
         // ViolationStoreJobs::dispatchSync($message_data);
         ViolationCompanyJobs::dispatch($message_data);
         // ViolationCompanyJobs::dispatchSync($message_data);
-        
+
         // 告知结果
         return             json_send(['code' => 'success', 'msg' => '执行成功']);
     }

+ 23 - 6
app/Http/Controllers/Manager/WashConfig/ViolationCompany.php

@@ -10,6 +10,8 @@ use App\Models\Manager\WashConfig\ViolationProductCompany as ViolationProductCom
 use App\Models\Manager\Personnel\Employee as EmployeeModel;
 use App\Models\Manager\WashConfig\CompanyCategory as CompanyCategoryModel;
 use App\Models\Manager\Citys as CitysModel;
+use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
+use Illuminate\Support\Facades\DB;
 
 /**
  * 数据清洗-违规店铺(公司)配置
@@ -319,8 +321,13 @@ class ViolationCompany extends Controller
      * @date      2025-12-03
      * 
      */
-    public function delete(Request $request, ViolationCompanyModel $ViolationCompanyModel, LowPriceGoodsCompanyModel $LowPriceGoodsCompanyModel, ViolationProductCompanyModel $ViolationProductCompanyModel)
-    {
+    public function delete(
+        Request $request,
+        ViolationCompanyModel $ViolationCompanyModel,
+        LowPriceGoodsCompanyModel $LowPriceGoodsCompanyModel,
+        ViolationProductCompanyModel $ViolationProductCompanyModel,
+        ViolationCompanyMemberModel $ViolationCompanyMemberModel
+    ) {
         // 验证参数
         $request->scene('delete')->validate();
         $admin_company_id = request('admin_company_id', '0');
@@ -353,15 +360,25 @@ class ViolationCompany extends Controller
         // 执行删除
         $ViolationCompany = $ViolationCompanyModel->where($where)->first();
         if (!$ViolationCompany) return json_send(['code' => 'error', 'msg' => '记录不存在']);
-        $result = $ViolationCompany->delete();
-        // 提示删除失败
-        if (!$result)    return json_send(['code' => 'error', 'msg' => '删除失败']);
+        DB::beginTransaction();
+        try {
+            //删除绑定关系
+            if ($ViolationCompany->employee_ids != '') {
+                $ViolationCompanyMemberModel->where(['company_logid' => $id])->delete();
+            }
+            $ViolationCompany->delete();
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollback();
+            // 提示删除失败
+            return json_send(['code' => 'error', 'msg' => '删除失败']);
+        }
         // 记录行为
         $admin_id   = request('access_token.uid', 0); //用户ID
         $is_admin   = request('access_token.is_admin'); //是否管理员操作 0=是1=否
         $table_name = $ViolationCompanyModel->getTable();
         $notes_type = 3; //操作类型,1添加,2修改,3=删除
-        $this->addAdminHistory('清洗配置-公司管理',$company_id, $admin_id, $is_admin, $table_name, $notes_type, $ViolationCompany->toarray(), [], '删除了公司' . $ViolationCompany->company_name . '信息');
+        $this->addAdminHistory('清洗配置-公司管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, $ViolationCompany->toarray(), [], '删除了公司' . $ViolationCompany->company_name . '信息');
         // 告知结果
         return             json_send(['code' => 'success', 'msg' => '删除成功']);
     }

+ 17 - 5
app/Http/Controllers/Manager/WashConfig/ViolationStore.php

@@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
 use App\Http\Requests\Manager\WashConfig\ViolationStore as Request;
 use App\Models\Manager\WashConfig\ViolationStore as ViolationStoreModel;
 use App\Models\Manager\Personnel\Employee as EmployeeModel;
+use App\Models\Manager\WashConfig\ViolationStoreMember as ViolationStoreMemberModel;
+use Illuminate\Support\Facades\DB;
 
 /**
  * 数据清洗-违规店铺配置
@@ -340,7 +342,7 @@ class ViolationStore extends Controller
      * @date      2025-12-03
      * 
      */
-    public function delete(Request $request, ViolationStoreModel $ViolationStoreModel)
+    public function delete(Request $request, ViolationStoreModel $ViolationStoreModel, ViolationStoreMemberModel $ViolationStoreMemberModel)
     {
         // 验证参数
         $request->scene('delete')->validate();
@@ -365,15 +367,25 @@ class ViolationStore extends Controller
         // 执行删除
         $ViolationStore = $ViolationStoreModel->where($where)->first();
         if (!$ViolationStore) return json_send(['code' => 'error', 'msg' => '记录不存在']);
-        $result = $ViolationStore->delete();
-        // 提示删除失败
-        if (!$result)    return json_send(['code' => 'error', 'msg' => '删除失败']);
+        DB::beginTransaction();
+        try {
+            //删除绑定关系
+            if ($ViolationStore->employee_ids != '') {
+                $ViolationStoreMemberModel->where(['store_logid' => $id])->delete();
+            }
+            $ViolationStore->delete();
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollback();
+            // 提示删除失败
+            return json_send(['code' => 'error', 'msg' => '删除失败']);
+        }
         // 记录行为
         $admin_id   = request('access_token.uid', 0); //用户ID
         $is_admin   = request('access_token.is_admin'); //是否管理员操作 0=是1=否
         $table_name = $ViolationStoreModel->getTable();
         $notes_type = 3; //操作类型,1添加,2修改,3=删除
-        $this->addAdminHistory('清洗配置-店铺管理',$company_id, $admin_id, $is_admin, $table_name, $notes_type, $ViolationStore->toarray(), [], '删除了店铺' . $ViolationStore->store_name . '信息');
+        $this->addAdminHistory('清洗配置-店铺管理', $company_id, $admin_id, $is_admin, $table_name, $notes_type, $ViolationStore->toarray(), [], '删除了店铺' . $ViolationStore->store_name . '信息');
         // 告知结果
         return             json_send(['code' => 'success', 'msg' => '删除成功']);
     }

+ 438 - 0
app/Jobs/Manager/CollectData/Backfill/LowPriceProductJobs.php

@@ -0,0 +1,438 @@
+<?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 App\Models\Manager\WashConfig\ViolationStore as ViolationStoreModel;
+use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use App\Models\Manager\Personnel\Employee as EmployeeModel;
+use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
+use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
+use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
+use App\Models\Manager\Process\LowPriceGoodsMember as LowPriceGoodsMemberModel;
+use Illuminate\Support\Facades\DB;
+use App\Facades\Servers\Logs\Log;
+
+
+/**
+ * 低价商品数据数据清洗-回填责任人
+ * @author: 唐远望
+ * @version: 1.0
+ * @date: 2026-05-22
+ */
+class LowPriceProductJobs 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 = [];
+        $map[] = ['merge_city_id', '!=', '0'];
+        $map[] = ['first_responsible_person', '=', ''];
+        $map[] = ['responsible_person', '=', ''];
+        $map[] = ['source_responsible_person', '=', ''];
+        $map[] = ['company_id', '=', $company_id];
+        $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 {
+            $result = $LowPriceGoodsModel->where($map)->orderByDesc('id')->paginate($limit, ['*'], '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;
+                    LowPriceProductJobs::dispatch($this->message_data);
+                }
+                foreach ($result['data'] as $key => $product_data) {
+                    $specify_responsible_person = $product_data['specify_responsible_person'];
+                    //获取指定人员信息
+                    $insert_product_data = [];
+                    if ($specify_responsible_person == 0) {
+                        $product_data['qualification_number'] = $product_data['social_credit_code'];
+                        $product_data['platform_id'] = $product_data['platform'];
+                        $insert_product_data = $this->get_responsible_person_info($product_data);
+                    }
+                    $update_data = $insert_product_data;
+                    if (!empty($update_data) && count($update_data) > 0) {
+                        $product_data['first_responsible_person'] = isset($update_data['first_responsible_person']) ? $update_data['first_responsible_person'] : $product_data['first_responsible_person'];
+                        $product_data['responsible_person'] = isset($update_data['responsible_person']) ? $update_data['responsible_person'] : $product_data['responsible_person'];
+                        $product_data['source_responsible_person'] = isset($update_data['source_responsible_person']) ? $update_data['source_responsible_person'] : $product_data['source_responsible_person'];
+                        $LowPriceGoodsModel->where('id', $product_data['id'])->update($update_data);
+                    }
+                    $insert_product_data['first_responsible_person'] = $product_data['first_responsible_person'];
+                    $insert_product_data['responsible_person'] = $product_data['responsible_person'];
+                    $insert_product_data['source_responsible_person'] = $product_data['source_responsible_person'];
+                    $this->insert_low_product_responsible_person_info($product_data, $insert_product_data);
+                }
+            }
+            DB::commit();
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::info('job_error', '数据回填-低价商品责任人数据回填队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
+        }
+    }
+
+    /**
+     * 写入处理低价商品-责任人信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-18
+     */
+    private function insert_low_product_responsible_person_info($data, $insert_product_data)
+    {
+        $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
+        $LowPriceGoods_id = $data['id'];
+        $data['first_responsible_person'] = isset($insert_product_data['first_responsible_person']) ? $insert_product_data['first_responsible_person'] : '';
+        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
+        $first_responsible_person_data = [];
+        if (count($first_responsible_persons) > 0) {
+            //去除重复的责任人
+            $first_responsible_persons = array_unique($first_responsible_persons);
+            //移除数组内的空值
+            $first_responsible_persons = array_filter($first_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($first_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $LowPriceGoods_id)->where('employee_id', $employee_id)->where('duty_type', 1)->count();
+                if ($member_info > 0) continue;
+                $first_responsible_person_data[] = [
+                    'lowprice_product_logid' => $LowPriceGoods_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if (!empty($first_responsible_person_data)) {
+            $LowPriceGoodsMemberModel->insert($first_responsible_person_data);
+        }
+        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
+        $responsible_person_data = [];
+        if (count($responsible_persons) > 0) {
+            //去除重复的责任人
+            $responsible_persons = array_unique($responsible_persons);
+            //移除数组内的空值
+            $responsible_persons = array_filter($responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $LowPriceGoods_id)->where('employee_id', $employee_id)->where('duty_type', 2)->count();
+                if ($member_info > 0) continue;
+                $responsible_person_data[] = [
+                    'lowprice_product_logid' => $LowPriceGoods_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if (!empty($responsible_person_data)) {
+            $LowPriceGoodsMemberModel->insert($responsible_person_data);
+        }
+        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
+        $source_responsible_person_data = [];
+        if (count($source_responsible_persons) > 0) {
+            //去除重复的责任人
+            $source_responsible_persons = array_unique($source_responsible_persons);
+            //移除数组内的空值
+            $source_responsible_persons = array_filter($source_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($source_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $LowPriceGoodsMemberModel->where('lowprice_product_logid', $LowPriceGoods_id)->where('employee_id', $employee_id)->where('duty_type', 3)->count();
+                if ($member_info > 0) continue;
+                $source_responsible_person_data[] = [
+                    'lowprice_product_logid' => $LowPriceGoods_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if (!empty($source_responsible_person_data)) {
+            $LowPriceGoodsMemberModel->insert($source_responsible_person_data);
+        }
+    }
+
+    /**
+     * 根据规则获取责任人分配信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-18
+     */
+    private function get_responsible_person_info($product_data)
+    {
+        $EmployeeAreaModel = new EmployeeAreaModel();
+        $EmployeePlatformModel = new EmployeePlatformModel();
+        $ViolationCompanyModel = new ViolationCompanyModel();
+        $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
+        $company_id = $product_data['company_id'];
+        //获取店铺责任人信息
+        $ViolationStoreModel = new ViolationStoreModel();
+        $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
+        if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
+            //查询店铺第一责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+            $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
+            $insert_product_data['first_responsible_person'] = $first_responsible_person;
+            //查询店铺责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+            $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->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;
+        } else {
+            //获取公司绑定责任人信息
+            $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
+                ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
+                ->where('washconfig_violation_company.company_id', $company_id)
+                ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
+            $employee_id_list = [];
+            if ($company_data) {
+                $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
+                $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
+            }
+            $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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                });
+            $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                });
+            $responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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;
+        }
+
+        return $insert_product_data;
+    }
+
+
+    public function failed(\Throwable $exception)
+    {
+        Log::info('job_error', '数据回填-低价商品责任人数据回填队列完全失败', ['data' => $this->message_data, 'error' => $exception->getMessage()]);
+    }
+}

+ 436 - 0
app/Jobs/Manager/CollectData/Backfill/ViolationProductJobs.php

@@ -0,0 +1,436 @@
+<?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 App\Models\Manager\WashConfig\ViolationStore as ViolationStoreModel;
+use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use App\Models\Manager\Personnel\Employee as EmployeeModel;
+use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
+use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
+use App\Models\Manager\Process\ViolationProductMember as ViolationProductMemberModel;
+use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
+use Illuminate\Support\Facades\DB;
+use App\Facades\Servers\Logs\Log;
+
+
+/**
+ * 禁止商品数据数据清洗-回填责任人
+ * @author: 唐远望
+ * @version: 1.0
+ * @date: 2026-05-22
+ */
+class ViolationProductJobs 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 = [];
+        $map[] = ['merge_city_id', '!=', '0'];
+        $map[] = ['first_responsible_person', '=', ''];
+        $map[] = ['responsible_person', '=', ''];
+        $map[] = ['source_responsible_person', '=', ''];
+        $map[] = ['company_id', '=', $company_id];
+        $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 {
+            $result = $ViolationProductModel->where($map)->orderByDesc('id')->orderByDesc('id')->paginate($limit, ['*'], '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;
+                    ViolationProductJobs::dispatch($this->message_data);
+                }
+                foreach ($result['data'] as $key => $product_data) {
+                    $specify_responsible_person = $product_data['specify_responsible_person'];
+                    //获取指定人员信息
+                    $insert_product_data = [];
+                    if ($specify_responsible_person == 0) {
+                        $product_data['qualification_number'] = $product_data['social_credit_code'];
+                        $product_data['platform_id'] = $product_data['platform'];
+                        $insert_product_data = $this->get_responsible_person_info($product_data);
+                    }
+                    $update_data = $insert_product_data;
+                    if (!empty($update_data) && count($update_data) > 0) {
+                        $product_data['first_responsible_person'] = isset($update_data['first_responsible_person']) ? $update_data['first_responsible_person'] : $product_data['first_responsible_person'];
+                        $product_data['responsible_person'] = isset($update_data['responsible_person']) ? $update_data['responsible_person'] : $product_data['responsible_person'];
+                        $product_data['source_responsible_person'] = isset($update_data['source_responsible_person']) ? $update_data['source_responsible_person'] : $product_data['source_responsible_person'];
+                        $ViolationProductModel->where('id', $product_data['id'])->update($update_data);
+                    }
+                    $insert_product_data['first_responsible_person'] = $product_data['first_responsible_person'];
+                    $insert_product_data['responsible_person'] = $product_data['responsible_person'];
+                    $insert_product_data['source_responsible_person'] = $product_data['source_responsible_person'];
+                    $this->insert_violation_product_responsible_person_info($product_data, $insert_product_data);
+                }
+            }
+            DB::commit();
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::info('job_error', '数据回填-禁止商品责任人数据回填队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
+        }
+    }
+
+    /**
+     * 写入处理禁止商品-责任人信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-19
+     */
+    private function insert_violation_product_responsible_person_info($product_data, $data)
+    {
+        $ViolationProductMemberModel = new ViolationProductMemberModel();
+        $ViolationProduct_id = $product_data['id'];
+        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
+        $first_responsible_person_data = [];
+        if (count($first_responsible_persons) > 0) {
+            //去除重复的责任人
+            $first_responsible_persons = array_unique($first_responsible_persons);
+            //移除数组内的空值
+            $first_responsible_persons = array_filter($first_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($first_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationProductMemberModel->where('violation_product_logid', $ViolationProduct_id)->where('employee_id', $employee_id)->where('duty_type', 1)->count();
+                if ($member_info > 0) continue;
+                $first_responsible_person_data[] = [
+                    'violation_product_logid' => $ViolationProduct_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if (!empty($first_responsible_person_data)) {
+            $ViolationProductMemberModel->insert($first_responsible_person_data);
+        }
+        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
+        $responsible_person_data = [];
+        if (count($responsible_persons) > 0) {
+            //去除重复的责任人
+            $responsible_persons = array_unique($responsible_persons);
+            //移除数组内的空值
+            $responsible_persons = array_filter($responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationProductMemberModel->where('violation_product_logid', $ViolationProduct_id)->where('employee_id', $employee_id)->where('duty_type', 2)->count();
+                if ($member_info > 0) continue;
+                $responsible_person_data[] = [
+                    'violation_product_logid' => $ViolationProduct_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if ($responsible_person_data) {
+            $ViolationProductMemberModel->insert($responsible_person_data);
+        }
+        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
+        $source_responsible_person_data = [];
+        if (count($source_responsible_persons) > 0) {
+            //去除重复的责任人
+            $source_responsible_persons = array_unique($source_responsible_persons);
+            //移除数组内的空值
+            $source_responsible_persons = array_filter($source_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($source_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationProductMemberModel->where('violation_product_logid', $ViolationProduct_id)->where('employee_id', $employee_id)->where('duty_type', 3)->count();
+                if ($member_info > 0) continue;
+                $source_responsible_person_data[] = [
+                    'violation_product_logid' => $ViolationProduct_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if ($source_responsible_person_data) {
+            $ViolationProductMemberModel->insert($source_responsible_person_data);
+        }
+    }
+
+    /**
+     * 根据规则获取责任人分配信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-18
+     */
+    private function get_responsible_person_info($product_data)
+    {
+        $EmployeeAreaModel = new EmployeeAreaModel();
+        $EmployeePlatformModel = new EmployeePlatformModel();
+        $ViolationCompanyModel = new ViolationCompanyModel();
+        $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
+        $company_id = $product_data['company_id'];
+        //获取店铺责任人信息
+        $ViolationStoreModel = new ViolationStoreModel();
+        $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
+        if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
+            //查询店铺第一责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+            $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
+            $insert_product_data['first_responsible_person'] = $first_responsible_person;
+            //查询店铺责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+            $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->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;
+        } else {
+            //获取公司绑定责任人信息
+            $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
+                ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
+                ->where('washconfig_violation_company.company_id', $company_id)
+                ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
+            $employee_id_list = [];
+            if ($company_data) {
+                $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
+                $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
+            }
+            $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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                });
+            $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                });
+            $responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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;
+        }
+
+        return $insert_product_data;
+    }
+
+    public function failed(\Throwable $exception)
+    {
+        Log::info('job_error', '数据回填-禁止商品责任人数据回填队列完全失败', ['data' => $this->message_data, 'error' => $exception->getMessage()]);
+    }
+}

+ 436 - 0
app/Jobs/Manager/CollectData/Backfill/ViolationStoreJobs.php

@@ -0,0 +1,436 @@
+<?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\WashConfig\ViolationStore as ViolationStoreModel;
+use App\Models\Manager\Process\ViolationStore as ProcessViolationStoreModel;
+use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use App\Models\Manager\Personnel\Employee as EmployeeModel;
+use App\Models\Manager\WashConfig\ViolationCompany as ViolationCompanyModel;
+use App\Models\Manager\WashConfig\ViolationCompanyMember as ViolationCompanyMemberModel;
+use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
+use App\Models\Manager\Process\ViolationStoreMember as ViolationStoreMemberModel;
+use Illuminate\Support\Facades\DB;
+use App\Facades\Servers\Logs\Log;
+
+/**
+ * 禁止店铺商品数据数据清洗-回填责任人
+ * @author: 唐远望
+ * @version: 1.0
+ * @date: 2026-05-22
+ */
+class ViolationStoreJobs 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()
+    {
+        $ProcessViolationStoreModel = new ProcessViolationStoreModel();
+        //获取非导入的低价商品清洗数据
+        $company_id = $this->message_data['company_id'];
+        $map = [];
+        $map[] = ['merge_city_id', '!=', '0'];
+        $map[] = ['first_responsible_person', '=', ''];
+        $map[] = ['responsible_person', '=', ''];
+        $map[] = ['source_responsible_person', '=', ''];
+        $map[] = ['company_id', '=', $company_id];
+        $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 {
+            $result = $ProcessViolationStoreModel->where($map)->orderByDesc('id')->orderByDesc('id')->paginate($limit, ['*'], '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;
+                    ViolationStoreJobs::dispatch($this->message_data);
+                }
+                foreach ($result['data'] as $key => $product_data) {
+                    $specify_responsible_person = $product_data['specify_responsible_person'];
+                    //获取指定人员信息
+                    $insert_product_data = [];
+                    if ($specify_responsible_person == 0) {
+                        $product_data['qualification_number'] = $product_data['social_credit_code'];
+                        $product_data['platform_id'] = $product_data['platform'];
+                        $insert_product_data = $this->get_responsible_person_info($product_data);
+                    }
+                    $update_data = $insert_product_data;
+                    if (!empty($update_data) && count($update_data) > 0) {
+                        $product_data['first_responsible_person'] = isset($update_data['first_responsible_person']) ? $update_data['first_responsible_person'] : $product_data['first_responsible_person'];
+                        $product_data['responsible_person'] = isset($update_data['responsible_person']) ? $update_data['responsible_person'] : $product_data['responsible_person'];
+                        $product_data['source_responsible_person'] = isset($update_data['source_responsible_person']) ? $update_data['source_responsible_person'] : $product_data['source_responsible_person'];
+                        $ProcessViolationStoreModel->where('id', $product_data['id'])->update($update_data);
+                    }
+                    $insert_product_data['first_responsible_person'] = $product_data['first_responsible_person'];
+                    $insert_product_data['responsible_person'] = $product_data['responsible_person'];
+                    $insert_product_data['source_responsible_person'] = $product_data['source_responsible_person'];
+                    $this->insert_violation_store_responsible_person_info($product_data, $insert_product_data);
+                }
+            }
+            DB::commit();
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::info('job_error', '数据回填-禁止店铺责任人数据回填队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
+        }
+    }
+
+    /**
+     * 写入处理违规店铺-责任人信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-19
+     */
+    private function insert_violation_store_responsible_person_info($product_data, $data)
+    {
+        $ViolationStoreMemberModel = new ViolationStoreMemberModel();
+        $ViolationStore_id = $product_data['id'];
+        $first_responsible_persons = $data['first_responsible_person'] != '' ? explode(',', $data['first_responsible_person']) : [];
+        $first_responsible_person_data = [];
+        if (count($first_responsible_persons) > 0) {
+            //去除重复的责任人
+            $first_responsible_persons = array_unique($first_responsible_persons);
+            //移除数组内的空值
+            $first_responsible_persons = array_filter($first_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $first_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($first_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 1)->count();
+                if ($member_info > 0) continue;
+                $first_responsible_person_data[] = [
+                    'violation_store_logid' => $ViolationStore_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 1, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if ($first_responsible_person_data) {
+            $ViolationStoreMemberModel->insert($first_responsible_person_data);
+        }
+        $responsible_persons = $data['responsible_person'] != '' ? explode(',', $data['responsible_person']) : [];
+        $responsible_person_data = [];
+        if (count($responsible_persons) > 0) {
+            //去除重复的责任人
+            $responsible_persons = array_unique($responsible_persons);
+            //移除数组内的空值
+            $responsible_persons = array_filter($responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 2)->count();
+                if ($member_info > 0) continue;
+                $responsible_person_data[] = [
+                    'violation_store_logid' => $ViolationStore_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 2, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if ($responsible_person_data) {
+            $ViolationStoreMemberModel->insert($responsible_person_data);
+        }
+        $source_responsible_persons = $data['source_responsible_person'] != '' ? explode(',', $data['source_responsible_person']) : [];
+        $source_responsible_person_data = [];
+        if (count($source_responsible_persons) > 0) {
+            //去除重复的责任人
+            $source_responsible_persons = array_unique($source_responsible_persons);
+            //移除数组内的空值
+            $source_responsible_persons = array_filter($source_responsible_persons);
+            $EmployeeModel = new EmployeeModel();
+            $employee_user_list = $EmployeeModel->whereIn('id', $source_responsible_persons)->select(['id', 'name'])->get()->toarray();
+            $employee_user_list_name = [];
+            if (!empty($employee_user_list)) {
+                foreach ($employee_user_list as $key => $employee_user_info) {
+                    $employee_id = $employee_user_info['id'];
+                    $employee_user_list_name[$employee_id] = $employee_user_info['name'];
+                }
+            }
+            foreach ($source_responsible_persons as $key => $employee_id) {
+                //如果不是数字或者为空,则跳过
+                if ($employee_id == '' || is_null($employee_id) || !is_numeric($employee_id))  continue;
+                $member_info = $ViolationStoreMemberModel->where('violation_product_logid', $ViolationStore_id)->where('employee_id', $employee_id)->where('duty_type', 3)->count();
+                if ($member_info > 0) continue;
+                $source_responsible_person_data[] = [
+                    'violation_store_logid' => $ViolationStore_id,
+                    'employee_id' => $employee_id,
+                    'employee_name' => isset($employee_user_list_name[$employee_id]) ? $employee_user_list_name[$employee_id] : '',
+                    'duty_type'    => 3, //责任类型1=第一责任人,2=责任人,3=溯源责任人
+                ];
+            }
+        }
+        if ($source_responsible_person_data) {
+            $ViolationStoreMemberModel->insert($source_responsible_person_data);
+        }
+    }
+
+    /**
+     * 根据规则获取责任人分配信息
+     * @author: 唐远望
+     * @version: 1.0
+     * @date: 2026-05-18
+     */
+    private function get_responsible_person_info($product_data)
+    {
+        $EmployeeAreaModel = new EmployeeAreaModel();
+        $EmployeePlatformModel = new EmployeePlatformModel();
+        $ViolationCompanyModel = new ViolationCompanyModel();
+        $ViolationCompanyMemberModel = new ViolationCompanyMemberModel();
+        $company_id = $product_data['company_id'];
+        //获取店铺责任人信息
+        $ViolationStoreModel = new ViolationStoreModel();
+        $store_data_info = $ViolationStoreModel->where('company_id', $company_id)->where('store_name', $product_data['store_name'])->where('status', '0')->first();
+        if (!empty($store_data_info) && trim($store_data_info->employee_ids) != '') {
+            //查询店铺第一责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+            $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->pluck('id')->implode(',');
+            $insert_product_data['first_responsible_person'] = $first_responsible_person;
+            //查询店铺责任人信息
+            $EmployeeModel = new EmployeeModel();
+            $store_where_query = [];
+            $employee_id_store = explode(',', $store_data_info->employee_ids);
+            $store_where_query[] = ['company_id', '=', $company_id];
+            $store_where_query[] = ['status', '=', 0];
+            $store_where_query[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+            $responsible_person = $EmployeeModel->whereIn('id', $employee_id_store)->where($store_where_query)->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;
+        } else {
+            //获取公司绑定责任人信息
+            $company_data = $ViolationCompanyModel->leftjoin('washconfig_company_category', 'washconfig_company_category.id', '=', 'washconfig_violation_company.category_id')
+                ->where('washconfig_violation_company.social_credit_code', $product_data['qualification_number'])
+                ->where('washconfig_violation_company.company_id', $company_id)
+                ->select(['washconfig_violation_company.id', 'washconfig_company_category.name as category_name'])->first();
+            $employee_id_list = [];
+            if ($company_data) {
+                $employee_id_list = $ViolationCompanyMemberModel->where('company_logid', $company_data->id)->pluck('employee_id')->toarray();
+                $insert_product_data['company_category_name'] = $company_data->category_name ? $company_data->category_name : '';
+            }
+            $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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 1)
+                            ->where('status', 0);
+                    }
+                });
+            $first_responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($first_responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 1]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $first_responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                })->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('duty_type', 2)
+                            ->where('status', 0);
+                    }
+                });
+            $responsible_person = $EmployeeModel->pluck('id')->implode(',');
+
+            //当以上规则匹配不到责任人时,则去查询发货地区信息关联责任人
+            if (trim($responsible_person) == '' && trim($product_data['shipment_city_id']) != '') {
+                $employee_id_area = $EmployeeAreaModel->where('company_id', $company_id)->where('city_id', $product_data['shipment_city_id'])->pluck('employee_id')->toarray();
+                if (!empty($employee_id_area)) {
+                    $where_city = [];
+                    $where_city[] = ['company_id', '=', $company_id];
+                    $where_city[] = ['status', '=', 0];
+                    $where_city[] = ['duty_type', '=', 2]; //责任类型1=第一责任人,2=责任人
+                    $EmployeeModel = new EmployeeModel();
+                    $responsible_person = $EmployeeModel->whereIn('id', $employee_id_area)->where($where_city)->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;
+        }
+
+        return $insert_product_data;
+    }
+
+    public function failed(\Throwable $exception)
+    {
+        Log::info('job_error', '数据回填-禁止店铺责任人数据回填队列完全失败', ['data' => $this->message_data, 'error' => $exception->getMessage()]);
+    }
+}

+ 26 - 1
app/Jobs/Manager/Other/ExportLowPriceGoodsJobs.php

@@ -134,8 +134,12 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
         $is_ultra_low_price = $message_data['is_ultra_low_price'] ?? '';
         $merge_city_ids = $message_data['merge_city_ids'] ?? '';
         $merge_province_ids = $message_data['merge_province_ids'] ?? '';
-        if ($product_specs)   $map[] = ['product_specs', 'like', "%$product_specs%"];
+        $first_responsible_person_name = $message_data['first_responsible_person_name'] ?? '';
+        $responsible_person_name = $message_data['responsible_person_name'] ?? '';
+        $source_responsible_person_name = $message_data['source_responsible_person_name'] ?? '';
+
 
+        if ($product_specs)   $map[] = ['product_specs', 'like', "%$product_specs%"];
         // 时间条件
         if ($collection_time_start_time) $map[] = ['collection_time', '>=', strtotime($collection_time_start_time)];
         if ($collection_time_end_time) $map[] = ['collection_time', '<=', strtotime($collection_time_end_time)];
@@ -202,6 +206,13 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name !=''){
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -210,6 +221,13 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$responsible_person_name%"]])->where('duty_type', 2)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -218,6 +236,13 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
                 $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //溯源责任人模糊查询
+        if ($source_responsible_person_name != '') {
+            $subQuery = $LowPriceGoodsMemberModel->where([['employee_name', 'like', "%$source_responsible_person_name%"]])->where('duty_type', 3)->distinct('lowprice_product_logid')->select('lowprice_product_logid');
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);

+ 25 - 1
app/Jobs/Manager/Other/ExportViolationProductJobs.php

@@ -133,6 +133,9 @@ class ExportViolationProductJobs implements ShouldQueue
         $collection_time_end_time = $message_data['collection_time_end_time'] ?? '';
         $merge_province_ids = $message_data['merge_province_ids'] ?? '';
         $merge_city_ids = $message_data['merge_city_ids'] ?? '';
+        $first_responsible_person_name = $message_data['first_responsible_person_name'] ?? '';
+        $responsible_person_name = $message_data['responsible_person_name'] ?? '';
+        $source_responsible_person_name = $message_data['source_responsible_person_name'] ?? '';
         // 时间条件
         if ($collection_time_start_time) $map[] = ['collection_time', '>=', strtotime($collection_time_start_time)];
         if ($collection_time_end_time) $map[] = ['collection_time', '<=', strtotime($collection_time_end_time)];
@@ -197,6 +200,13 @@ class ExportViolationProductJobs implements ShouldQueue
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //第一责任人模糊查询
+        if ($first_responsible_person_name !='') {
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$first_responsible_person_name%"]])->where('duty_type', 1)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
@@ -205,6 +215,13 @@ class ExportViolationProductJobs implements ShouldQueue
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //责任人模糊查询
+        if ($responsible_person_name !='') {
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$responsible_person_name%"]])->where('duty_type', 2)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+           });
+        }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
@@ -213,6 +230,13 @@ class ExportViolationProductJobs implements ShouldQueue
                 $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
+        //来源责任人模糊查询
+        if ($source_responsible_person_name !='') {
+            $subQuery = $ViolationProductMemberModel->where([['employee_name','like',"%$source_responsible_person_name%"]])->where('duty_type', 3)->distinct('violation_product_logid')->select('violation_product_logid');
+            $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
+            });
+        }
         //多选省份
         if ($province_ids && is_string($province_ids)) {
             $province_ids = explode(',', $province_ids);
@@ -414,7 +438,7 @@ class ExportViolationProductJobs implements ShouldQueue
             $sheet->setCellValue('H2', '销量');
             $sheet->setCellValue('I2', '快照URL');
             $sheet->setCellValue('J2', '商品规格');
-            $sheet->setCellValue('K2', ' ');
+            $sheet->setCellValue('K2', '累计挂网次数');
             $sheet->setCellValue('L2', '连续挂网次数');
             $sheet->setCellValue('M2', '链接地址');
             $sheet->setCellValue('N2', '店铺名称');

+ 2 - 0
app/Models/Manager/External/Company.php

@@ -60,6 +60,7 @@ class Company extends Model
                 'company_name' => $data['company_name'],
                 'social_credit_code' => $data['social_credit_code'],
                 'snapshot_status' => $data['snapshot_status'],
+                'is_deduplication' => $data['is_deduplication'],
                 'insert_time' => time(),
             ];
             $Company_id = $this->insertGetId($insert_data);
@@ -90,6 +91,7 @@ class Company extends Model
             $Company->company_name = $data['company_name'];
             $Company->social_credit_code = $data['social_credit_code'];
             $Company->snapshot_status = $data['snapshot_status'];
+            $Company->is_deduplication = $data['is_deduplication'];
             $Company->update_time = time();
             $Company->save();
             DB::commit();

+ 29 - 11
app/Models/Manager/Process/LowPriceGoods.php

@@ -122,20 +122,38 @@ class LowPriceGoods extends Model
     public function addLowPriceGoods($data, $is_import = false)
     {
         if ($is_import == false) {
-            //去重规则:品牌方公司ID+店铺公司名称+店铺名称+品牌名称+商品名称+规格+盒数(针对采集)
-            $source_where[] = ['company_id', '=', $data['company_id']]; //品牌方公司ID
-            $source_where[] = ['platform', '=', $data['platform']]; //平台
-            $source_where[] = ['company_name', '=', $data['company_name']]; //店铺公司名称
-            $source_where[] = ['store_name', '=', $data['store_name']]; //店铺名称
-            $source_where[] = ['product_brand', '=', $data['product_brand']]; //品牌名称
-            $source_where[] = ['product_name', '=', $data['product_name']]; //商品名称
-            $source_where[] = ['product_specs', '=', $data['product_specs']]; //规格
-            $source_where[] = ['scrape_date', '=', $data['scrape_date']]; //采集日期
+            //检查是否重复清洗
+            $source_data_log = $this->where([['company_id','=', $data['company_id']],['source_id','=', $data['source_id']]])->count();
+            if(!empty($source_data_log) && $source_data_log > 0) return true;
+            // 如果是美团跟拼多多链接为动态
+            if (in_array($data['platform'], ['3', '4'])) {
+                //去重规则:品牌方公司ID+平台ID+公司名称+店铺名称+品牌名称+商品名称+规格+采集日期(针对采集)
+                $source_where[] = ['company_id', '=', $data['company_id']]; //品牌方公司ID
+                $source_where[] = ['platform', '=', $data['platform']]; //平台ID
+                $source_where[] = ['company_name', '=', $data['company_name']]; //公司名称
+                $source_where[] = ['store_name', '=', $data['store_name']]; //店铺名称
+                $source_where[] = ['product_brand', '=', $data['product_brand']]; //品牌名称
+                $source_where[] = ['product_name', '=', $data['product_name']]; //商品名称
+                $source_where[] = ['product_specs', '=', $data['product_specs']]; //规格
+                $source_where[] = ['scrape_date', '=', $data['scrape_date']]; //采集日期
+            } else {
+                $source_where[] = ['link_url', '=', $data['link_url']]; //链接地址
+            }
             $source_id_log = $this->where($source_where)->select(['id', 'online_posting_price'])->first();
             if (!empty($source_id_log)) {
                 if ($source_id_log->online_posting_price > $data['online_posting_price']) {
-                    $snapshot_url= isset($data['snapshot_url']) ? $data['snapshot_url'] : ''; // 商品快照地址
-                    $this->where('id', $source_id_log->id)->update(['online_posting_price' => $data['online_posting_price'], 'source_id' => $data['source_id'],'snapshot_url' => $snapshot_url,'update_time'=>time()]);
+                    $is_ultra_low_price = 0; //是否超低价0=否1=是
+                    if ($data['ultra_low_price'] > 0 && $data['online_posting_price']  <= $data['ultra_low_price']) {
+                        $is_ultra_low_price = 1;
+                    }
+                    $snapshot_url = isset($data['snapshot_url']) ? $data['snapshot_url'] : ''; // 商品快照地址
+                    $this->where('id', $source_id_log->id)->update([
+                        'online_posting_price' => $data['online_posting_price'],
+                        'is_ultra_low_price' => $is_ultra_low_price,
+                        'source_id' => $data['source_id'],
+                        'snapshot_url' => $snapshot_url,
+                        'update_time' => time()
+                    ]);
                 }
                 return true;
             }

+ 17 - 9
app/Models/Manager/Process/ViolationProduct.php

@@ -116,15 +116,23 @@ class ViolationProduct extends Model
     public function addViolationProduct($data, $is_import = false)
     {
         if ($is_import == false) {
-            //去重规则:品牌方公司ID+店铺公司名称+店铺名称+品牌名称+商品名称+规格+盒数(针对采集)
-            $source_where[] = ['company_id', '=', $data['company_id']]; //品牌方公司ID
-            $source_where[] = ['platform', '=', $data['platform']]; //平台
-            $source_where[] = ['company_name', '=', $data['company_name']]; //店铺公司名称
-            $source_where[] = ['store_name', '=', $data['store_name']]; //店铺名称
-            $source_where[] = ['product_brand', '=', $data['product_brand']]; //品牌名称
-            $source_where[] = ['product_name', '=', $data['product_name']]; //商品名称
-            $source_where[] = ['product_specs', '=', $data['product_specs']]; //规格
-            $source_where[] = ['scrape_date', '=', $data['scrape_date']]; //采集日期
+            //检查是否重复清洗
+            $source_data_log = $this->where([['company_id','=', $data['company_id']],['source_id','=', $data['source_id']]])->count();
+            if(!empty($source_data_log) && $source_data_log > 0) return true;
+            // 如果是美团跟拼多多链接为动态
+            if (in_array($data['platform'], ['3', '4'])) {
+                //去重规则:品牌方公司ID+店铺公司名称+店铺名称+品牌名称+商品名称+规格+盒数(针对采集)
+                $source_where[] = ['company_id', '=', $data['company_id']]; //品牌方公司ID
+                $source_where[] = ['platform', '=', $data['platform']]; //平台ID
+                $source_where[] = ['company_name', '=', $data['company_name']]; //店铺名称
+                $source_where[] = ['store_name', '=', $data['store_name']]; //店铺名称
+                $source_where[] = ['product_brand', '=', $data['product_brand']]; //品牌名称
+                $source_where[] = ['product_name', '=', $data['product_name']]; //商品名称
+                $source_where[] = ['product_specs', '=', $data['product_specs']]; //规格
+                $source_where[] = ['scrape_date', '=', $data['scrape_date']]; //采集日期
+            } else {
+                $source_where[] = ['link_url', '=', $data['link_url']]; //链接地址
+            }
             $source_id_log = $this->where($source_where)->count();
             if ($source_id_log > 0) {
                 return true;

+ 4 - 1
app/Models/Manager/Process/ViolationStore.php

@@ -79,6 +79,9 @@ class ViolationStore extends Model
      */
     public function addViolationStore($data)
     {
+        //检查是否重复清洗
+        $source_data_log = $this->where('source_id', $data['source_id'])->count();
+        if (!empty($source_data_log) && $source_data_log > 0) return true;
         $source_where[] = ['company_id', '=', $data['company_id']];
         $source_where[] = ['store_name', '=', $data['store_name']];
         $source_where[] = ['social_credit_code', '=', $data['social_credit_code']];
@@ -88,7 +91,7 @@ class ViolationStore extends Model
         }
         DB::beginTransaction();
         try {
-           
+
             $insert_data = [
                 'company_id' => $data['company_id'],
                 'source_id' => $data['source_id'],