Pārlūkot izejas kodu

[智价云] 责任人回填脚本更新

tangyuanwang 1 nedēļu atpakaļ
vecāks
revīzija
e9f467ea7f

+ 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);
-    }
 }

+ 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()]);
+    }
+}