Преглед изворни кода

[智价云] 导出优化更新

tangyuanwang пре 6 часа
родитељ
комит
45423b9ff0

+ 7 - 7
app/Http/Controllers/Manager/Process/LowPriceGoods.php

@@ -474,14 +474,14 @@ class LowPriceGoods extends Controller
                 ->count();
         }
 
-        if ($result_count == 0) return json_send(['code' => 'fail', 'msg' => '没有查询到数据', 'data' => '']);
-        if ($result_count > 150000) return json_send(['code' => 'fail', 'msg' => '导出数据超过15万条,请缩小导出范围后再试', 'data' => '']);
+        if ($result_count == 0) return json_send(['code' => 'error', 'msg' => '没有查询到数据', 'data' => '']);
+        if ($result_count > 150000) return json_send(['code' => 'error', 'msg' => '导出数据超过15万条,请缩小导出范围后再试', 'data' => '']);
 
-        $key_name = 'ExportLowPriceGoodsJobs_' . $low_price_goods_where['company_id'];
+        $key_name = 'ExportLowPriceGoodsJobs_task' . $low_price_goods_where['company_id'];
         $export_data_info = Cache::get($key_name);
-        if ($export_data_info) return json_send(['code' => 'fail', 'msg' => '导出任务正在执行中,请稍后再试', 'data' => '']);
+        if ($export_data_info) return json_send(['code' => 'error', 'msg' => '导出任务正在执行中,请稍后再试', 'data' => '']);
         //创建缓存
-        Cache::put($key_name, '1', 60 * 60 * 3);
+        Cache::put($key_name, '1',600);
 
         // 生成唯一文件ID
         $fileId                     = make_snow_flake();
@@ -489,8 +489,8 @@ class LowPriceGoods extends Controller
         $fileName = '低价挂网商品数据' . $fileId . '.xlsx';
         $message_data['company_id']    = $low_price_goods_where['company_id'];
         $message_data['user_id']    = $message_data['user_id'];
-        ExportLowPriceGoodsJobs::dispatch($message_data);
-        // ExportLowPriceGoodsJobs::dispatchSync($message_data);
+        // ExportLowPriceGoodsJobs::dispatch($message_data);
+        ExportLowPriceGoodsJobs::dispatchSync($message_data);
         return json_send(['code' => 'success', 'msg' => '导出任务添加成功', 'data' => ['file_id' => $fileId, 'file_name' => $fileName]]);
     }
 

+ 5 - 5
app/Http/Controllers/Manager/Process/ViolationProduct.php

@@ -456,14 +456,14 @@ class ViolationProduct extends Controller
                 ->where($map)
                 ->count();
         }
-        if ($result_count == 0) return json_send(['code' => 'fail', 'msg' => '没有查询到数据', 'data' => '']);
-        if ($result_count > 150000) return json_send(['code' => 'fail', 'msg' => '导出数据超过15万条,请缩小导出范围后再试', 'data' => '']);
+        if ($result_count == 0) return json_send(['code' => 'error', 'msg' => '没有查询到数据', 'data' => '']);
+        if ($result_count > 150000) return json_send(['code' => 'error', 'msg' => '导出数据超过15万条,请缩小导出范围后再试', 'data' => '']);
 
-        $key_name = 'ExportViolationProductJobs_' . $violation_product_where['company_id'];
+        $key_name = 'ExportViolationProductJobs_task' . $violation_product_where['company_id'];
         $export_data_info = Cache::get($key_name);
-        if ($export_data_info) return json_send(['code' => 'fail', 'msg' => '导出任务正在执行中,请稍后再试', 'data' => '']);
+        if ($export_data_info) return json_send(['code' => 'error', 'msg' => '导出任务正在执行中,请稍后再试', 'data' => '']);
         //创建缓存
-        Cache::put($key_name,'1', 60 * 60 * 3);
+        Cache::put($key_name,'1', 600);
 
         // 生成唯一文件ID
         $fileId                     = make_snow_flake();

+ 62 - 58
app/Jobs/Manager/Other/ExportLowPriceGoodsJobs.php

@@ -54,26 +54,34 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
     public function handle()
     {
         try {
+            $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
             $fileId = $this->message_data['file_id'];
             $company_id = $this->message_data['company_id'];
             $user_id = $this->message_data['user_id'];
-            $DownloadTaskModel = new DownloadTaskModel();
-            $fileName = '低价挂网商品数据' . $fileId . '.xlsx';
-            $downloadLog                 = [
-                'insert_time' => time(),
-                'company_id' => $company_id,
-                'operator_userid' => $user_id,
-                'file_name' => $fileName,
-                'file_id' => $fileId,
-                'url' => '',
-            ];
-            // 写入数据表
-            $DownloadTaskModel->insertGetId($downloadLog);
+            if ($page == 1) {
+                $key_name = 'ExportLowPriceGoodsJobs_' . $company_id;
+                Cache::put($key_name, [], 600); //缓存10分钟
+                $key_task_name = 'ExportLowPriceGoodsJobs_task' . $company_id;
+                Cache::put($key_task_name,'1', 600); //缓存10分钟
+                $DownloadTaskModel = new DownloadTaskModel();
+                $fileName = '低价挂网商品数据' . $fileId . '.xlsx';
+                $downloadLog                 = [
+                    'insert_time' => time(),
+                    'company_id' => $company_id,
+                    'operator_userid' => $user_id,
+                    'file_name' => $fileName,
+                    'file_id' => $fileId,
+                    'url' => '',
+                ];
+                // 写入数据表
+                $DownloadTaskModel->insertGetId($downloadLog);
+            }
             $this->export_excel($this->message_data);
         } catch (\Exception $e) {
             Log::info('job_error', '违规数据-导出低价挂网数据处理队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
             //失败后清除缓存
             Cache::forget('ExportLowPriceGoodsJobs_' . $this->company_id);
+            Cache::forget('ExportLowPriceGoodsJobs_task' . $this->company_id);
         }
     }
 
@@ -97,8 +105,6 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
         $file_id = $message_data['file_id'];
         // 查询条件
         $map  = [];
-        $job_page = isset($message_data['job_page']) ? $message_data['job_page'] : 1;
-        $limit = 1000; //每次处理1000条
         $status    = $message_data['status'] ?? '';
         $start_time = $message_data['start_time'] ?? '';
         $end_time = $message_data['end_time'] ?? '';
@@ -242,9 +248,6 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
             $merge_city_ids = explode(',', $merge_city_ids);
             $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('merge_city_id', $merge_city_ids);
         }
-        $key_name = 'ExportLowPriceGoodsJobs_' . $low_price_goods_where['company_id'];
-        //创建缓存
-        Cache::put($key_name, [], 60 * 60 * 24);
         $personnel_roles_info = $EmployeeModel->leftjoin('personnel_roles', 'personnel_roles.id', '=', 'personnel_employee.role_id')
             ->where('personnel_employee.id', $user_id)->select(['personnel_employee.id', 'personnel_roles.identity'])
             ->first();
@@ -261,38 +264,42 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
             });
         }
         $snapshot_status = $CompanyModel->where(['id' => $low_price_goods_where['company_id']])->value('snapshot_status');
-        
-        //去重获取所有员工信息
-        $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
-        $subQuery = $query->select('id');
-        $member_list_data = $LowPriceGoodsMemberModel->whereIn('lowprice_product_logid', function ($query1) use ($subQuery) {
-            $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
-        })->select(['employee_id','employee_name'])->get()->toArray();
-        $member_list =[];
-        if(!empty($member_list_data)){
-            foreach ($member_list_data as $key => $value) {
-                $member_list[$value['employee_id']] = $value['employee_name'];
+        $key_name = 'ExportLowPriceGoodsJobs_' . $company_id;
+        $key_task_name = 'ExportLowPriceGoodsJobs_task' . $company_id;
+        $cache_product_datas = Cache::get($key_name) ?? [];
+        $page = isset($message_data['page']) ? $message_data['page'] : 1;
+        $limit = isset($message_data['limit']) ? $message_data['limit'] : 1000;
+        $product_data_info = $query->select('*')->orderbyDesc('id')->paginate($limit, ['*'], 'page', $page)->toarray();
+        $select_product_datas = $product_data_info['data'];
+        $last_page = $product_data_info['last_page'];
+        if (empty($select_product_datas)) {
+            return true;
+        } else {
+            //去重获取所有员工信息
+            $LowPriceGoodsMemberModel = new LowPriceGoodsMemberModel();
+            $lowprice_product_logid = array_column($select_product_datas, 'id');
+            $member_list_data = $LowPriceGoodsMemberModel->whereIn('lowprice_product_logid', $lowprice_product_logid)->select(['employee_id', 'employee_name'])->get()->toArray();
+            $member_list = [];
+            if (!empty($member_list_data)) {
+                foreach ($member_list_data as $key => $value) {
+                    $member_list[$value['employee_id']] = $value['employee_name'];
+                }
             }
-        }
-
-        $query->chunkById($limit, function ($rows) use ($key_name,$member_list) {
-            $result_data = $rows->toArray();
-            if (empty($result_data)) {
-                return true;
+            //处理责任人展示信息
+            $select_product_datas = $this->processing_responsible_person($select_product_datas, $member_list);
+            //如果查询完毕了,则直接处理//合并数据
+            $product_datas = array_merge($select_product_datas, $cache_product_datas);
+            Cache::put($key_name, $product_datas, 600); //缓存10分钟
+            Cache::put($key_task_name,'1', 600); //缓存10分钟
+            if ($page < $last_page) {
+                //继续执行下一页
+                $message_data['page'] = $page + 1;
+                $message_data['limit'] = $limit;
+                ExportLowPriceGoodsJobs::dispatch($message_data);
+            } else if ($page == $last_page) {
+                $this->export_download($product_datas, $low_price_goods_where['company_id'], $file_id, $snapshot_status);
             }
-            $list_data = $this->processing_responsible_person($result_data,$member_list);
-            $list_data_info = Cache::get($key_name) ?: [];
-            $list_new_data = !empty($list_data_info) ? array_merge($list_data_info, $list_data) : $list_data;
-            Cache::put($key_name, $list_new_data, 60 * 60 * 24);
-            // 每处理完一个块,释放内存
-            unset($result_data);
-            gc_collect_cycles();
-            return true;
-        });
-
-        $export_data_info = Cache::get($key_name) ?: [];
-        $this->export_download($export_data_info, $low_price_goods_where['company_id'], $file_id, $snapshot_status);
-        return;
+        }
     }
 
     /**
@@ -457,11 +464,8 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
             foreach ($data as $item) {
                 //关闭快照不展示数据
                 if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
-                $first_responsible_person_name = !empty($item['first_responsible_person_name']) ? implode(',', $item['first_responsible_person_name']) : '';
-                $responsible_person_name = !empty($item['responsible_person_name']) ? implode(',', $item['responsible_person_name']) : '';
-                $source_responsible_person_name = !empty($item['source_responsible_person_name']) ? implode(',', $item['source_responsible_person_name']) : '';
                 $sheet->setCellValue('A' . $row, '');
-                $sheet->setCellValue('B' . $row, $responsible_person_name);
+                $sheet->setCellValue('B' . $row, $item['responsible_person_name']);
                 $sheet->setCellValue('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
                 $sheet->setCellValue('D' . $row, '');
                 $sheet->setCellValue('E' . $row, $item['product_brand']);
@@ -493,11 +497,8 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
             foreach ($data as $item) {
                 //关闭快照不展示数据
                 if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
-                $first_responsible_person_name = !empty($item['first_responsible_person_name']) ? implode(',', $item['first_responsible_person_name']) : '';
-                $responsible_person_name = !empty($item['responsible_person_name']) ? implode(',', $item['responsible_person_name']) : '';
-                $source_responsible_person_name = !empty($item['source_responsible_person_name']) ? implode(',', $item['source_responsible_person_name']) : '';
-                $sheet->setCellValue('A' . $row, $first_responsible_person_name);
-                $sheet->setCellValue('B' . $row, $responsible_person_name);
+                $sheet->setCellValue('A' . $row, $item['first_responsible_person_name']);
+                $sheet->setCellValue('B' . $row, $item['responsible_person_name']);
                 $sheet->setCellValue('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
                 $sheet->setCellValue('D' . $row, $item['category_name']);
                 $sheet->setCellValue('E' . $row, $item['product_brand']);
@@ -544,6 +545,7 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
         unset($spreadsheet, $writer);
         //释放redis缓存
         Cache::forget('ExportLowPriceGoodsJobs_' . $company_id);
+        Cache::forget('ExportLowPriceGoodsJobs_task' . $company_id);
         $Oss                = new Oss();
         $oss_url                = $Oss->uploadFile($filename, $fullPath);
         if ($oss_url)           @unlink($fullPath);
@@ -563,9 +565,11 @@ class ExportLowPriceGoodsJobs implements ShouldQueue
     public function failed(\Throwable $exception)
     {
         Log::info('job_error', '违规数据-导出低价挂网数据队列完全失败', ['data' => $this->message_data, 'error' => $exception]);
-        if ($this->company_id) {
+        $company_id = isset($this->message_data['company_id']) ? $this->message_data['company_id'] : 0;
+        if ($company_id) {
             //失败后清除缓存
-            Cache::forget('ExportLowPriceGoodsJobs_' . $this->company_id);
+            Cache::forget('ExportLowPriceGoodsJobs_' . $company_id);
+            Cache::forget('ExportLowPriceGoodsJobs_task' . $company_id);
         }
     }
 }

+ 78 - 71
app/Jobs/Manager/Other/ExportViolationProductJobs.php

@@ -34,7 +34,7 @@ class ExportViolationProductJobs implements ShouldQueue
 
     public $tries = 3; // 限制重试次数
     public $timeout = 1800; // 超时30分钟
-    
+
     /**
      * Create a new job instance.
      *
@@ -53,26 +53,35 @@ class ExportViolationProductJobs implements ShouldQueue
     public function handle()
     {
         try {
+            $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
             $fileId = $this->message_data['file_id'];
             $company_id = $this->message_data['company_id'];
             $user_id = $this->message_data['user_id'];
-            $DownloadTaskModel = new DownloadTaskModel();
-            $fileName = '禁止挂网商品数据' . $fileId . '.xlsx';
-            $downloadLog                 = [
-                'insert_time' => time(),
-                'company_id' => $company_id,
-                'operator_userid' => $user_id,
-                'file_name' => $fileName,
-                'file_id' => $fileId,
-                'url' => '',
-            ];
-            // 写入数据表
-            $DownloadTaskModel->insertGetId($downloadLog);
+            if ($page == 1) {
+                $key_name = 'ExportViolationProductJobs_' . $company_id;
+                Cache::put($key_name, [], 600); //缓存10分钟
+                $key_task_name = 'ExportViolationProductJobs_task' . $company_id;
+                Cache::put($key_task_name,'1', 600); //缓存10分钟
+                $DownloadTaskModel = new DownloadTaskModel();
+                $fileName = '禁止挂网商品数据' . $fileId . '.xlsx';
+                $downloadLog                 = [
+                    'insert_time' => time(),
+                    'company_id' => $company_id,
+                    'operator_userid' => $user_id,
+                    'file_name' => $fileName,
+                    'file_id' => $fileId,
+                    'url' => '',
+                ];
+                // 写入数据表
+                $DownloadTaskModel->insertGetId($downloadLog);
+            }
+
             $this->export_excel($this->message_data);
         } catch (\Exception $e) {
             Log::info('job_error', '违规数据-导出禁止挂网数据处理队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
             //失败后清除缓存
-            Cache::forget('export_violation_product_job_'. $this->company_id);
+            Cache::forget('ExportViolationProductJobs_' . $this->company_id);
+            Cache::forget('ExportViolationProductJobs_task' . $this->company_id);
         }
     }
 
@@ -183,25 +192,25 @@ class ExportViolationProductJobs implements ShouldQueue
         //多选第一责任人
         if ($first_responsible_person && is_string($first_responsible_person)) {
             $first_responsible_person = explode(',', $first_responsible_person);
-            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $first_responsible_person)->where('duty_type',1)->distinct('violation_product_logid')->select('violation_product_logid');
+            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $first_responsible_person)->where('duty_type', 1)->distinct('violation_product_logid')->select('violation_product_logid');
             $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
-                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
         //多选责任人
         if ($responsible_person && is_string($responsible_person)) {
             $responsible_person = explode(',', $responsible_person);
-            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $responsible_person)->where('duty_type',2)->distinct('violation_product_logid')->select('violation_product_logid');
+            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $responsible_person)->where('duty_type', 2)->distinct('violation_product_logid')->select('violation_product_logid');
             $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
-                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
         //多选溯源责任人
         if ($source_responsible_person && is_string($source_responsible_person)) {
             $source_responsible_person = explode(',', $source_responsible_person);
-            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $source_responsible_person)->where('duty_type',3)->distinct('violation_product_logid')->select('violation_product_logid');
+            $subQuery = $ViolationProductMemberModel->whereIn('employee_id', $source_responsible_person)->where('duty_type', 3)->distinct('violation_product_logid')->select('violation_product_logid');
             $ViolationProductModel = $ViolationProductModel->whereIn('id', function ($query1) use ($subQuery) {
-                $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
+                $query1->select('violation_product_logid')->fromSub($subQuery, 'sub1');
             });
         }
         //多选省份
@@ -235,14 +244,11 @@ class ExportViolationProductJobs implements ShouldQueue
             $ViolationProductModel = $ViolationProductModel->whereIn('merge_city_id', $merge_city_ids);
         }
         $this->company_id = $violation_product_where['company_id'];
-        $key_name = 'ExportViolationProductJobs_' . $violation_product_where['company_id'];
-        //创建缓存
-        Cache::put($key_name, [], 60 * 60 * 24);
         $personnel_roles_info = $EmployeeModel->leftjoin('personnel_roles', 'personnel_roles.id', '=', 'personnel_employee.role_id')
             ->where('personnel_employee.id', $user_id)->select(['personnel_employee.id', 'personnel_roles.identity'])
             ->first();
         //角色身份1=普通2=管理员
-        if(!empty($personnel_roles_info) && $personnel_roles_info->identity == 2){ 
+        if (!empty($personnel_roles_info) && $personnel_roles_info->identity == 2) {
             $is_admin = 1;
         }
         $query = $ViolationProductModel->where($map);
@@ -253,39 +259,43 @@ class ExportViolationProductJobs implements ShouldQueue
                     ->orWhere('source_responsible_person', 'like', "%,$user_id,%");
             });
         }
-        //去重获取所有员工信息
-        $ViolationProductMemberModel = new ViolationProductMemberModel();
-        $subQuery = $query->select('id');
-        $member_list_data = $ViolationProductMemberModel->whereIn('lowprice_product_logid', function ($query1) use ($subQuery) {
-            $query1->select('lowprice_product_logid')->fromSub($subQuery, 'sub1');
-        })->select(['employee_id','employee_name'])->get()->toArray();
-        $member_list =[];
-        if(!empty($member_list_data)){
-            foreach ($member_list_data as $key => $value) {
-                $member_list[$value['employee_id']] = $value['employee_name'];
+        $snapshot_status = $CompanyModel->where(['id' => $violation_product_where['company_id']])->value('snapshot_status');
+        $key_name = 'ExportViolationProductJobs_' . $company_id;
+        $key_task_name = 'ExportViolationProductJobs_task' . $company_id;
+        $cache_product_datas = Cache::get($key_name) ?? [];
+        $page = isset($message_data['page']) ? $message_data['page'] : 1;
+        $limit = isset($message_data['limit']) ? $message_data['limit'] : 1000;
+        $product_data_info = $query->select('*')->orderbyDesc('id')->paginate($limit, ['*'], 'page', $page)->toarray();
+        $select_product_datas = $product_data_info['data'];
+        $last_page = $product_data_info['last_page'];
+        if (empty($select_product_datas)) {
+            return true;
+        } else {
+            //去重获取所有员工信息
+            $ViolationProductMemberModel = new ViolationProductMemberModel();
+            $violation_product_logid = array_column($select_product_datas, 'id');
+            $member_list_data = $ViolationProductMemberModel->whereIn('violation_product_logid', $violation_product_logid)->select(['employee_id', 'employee_name'])->get()->toArray();
+            $member_list = [];
+            if (!empty($member_list_data)) {
+                foreach ($member_list_data as $key => $value) {
+                    $member_list[$value['employee_id']] = $value['employee_name'];
+                }
+            }
+            //处理责任人展示信息
+            $select_product_datas = $this->processing_responsible_person($select_product_datas, $member_list);
+            //如果查询完毕了,则直接处理//合并数据
+            $product_datas = array_merge($select_product_datas, $cache_product_datas);
+            Cache::put($key_name, $product_datas, 600); //缓存10分钟
+            Cache::put($key_task_name,'1', 600); //缓存10分钟
+            if ($page < $last_page) {
+                //继续执行下一页
+                $message_data['page'] = $page + 1;
+                $message_data['limit'] = $limit;
+                ExportViolationProductJobs::dispatch($message_data);
+            } else if ($page == $last_page) {
+                $this->export_download($product_datas, $violation_product_where['company_id'], $file_id, $snapshot_status);
             }
         }
-
-        $snapshot_status = $CompanyModel->where(['id'=> $violation_product_where['company_id']])->value('snapshot_status');
-        $query->chunkById($limit, function ($rows) use ($key_name,$member_list) {
-                $result_data = $rows->toArray();
-                if (empty($result_data)) {
-                    return true;
-                }
-
-                $list_data = $this->processing_responsible_person($result_data,$member_list);
-                $list_data_info = Cache::get($key_name) ?: [];
-                $list_new_data = !empty($list_data_info) ? array_merge($list_data_info, $list_data) : $list_data;
-                Cache::put($key_name, $list_new_data, 60 * 60 * 24);
-                // 每处理完一个块,释放内存
-                unset($result_data);
-                gc_collect_cycles();
-                return true;
-            });
-
-        $export_data_info = Cache::get($key_name) ?: [];
-        $this->export_download($export_data_info, $violation_product_where['company_id'], $file_id,$snapshot_status);
-        return;
     }
 
 
@@ -348,7 +358,7 @@ class ExportViolationProductJobs implements ShouldQueue
      * @version 1.0
      * @date 2025-06-17
      */
-    public function export_download($data, $company_id, $file_id,$snapshot_status)
+    public function export_download($data, $company_id, $file_id, $snapshot_status)
     {
         // 创建一个新的 Spreadsheet 对象
         $spreadsheet = new Spreadsheet();
@@ -364,7 +374,7 @@ class ExportViolationProductJobs implements ShouldQueue
         // 然后设置行高以适应两行文本
         $sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
         // 设置表头
-        if($company_id == 5){
+        if ($company_id == 5) {
             $sheet->setCellValue('A2', ' ');
             $sheet->setCellValue('B2', '责任人');
             $sheet->setCellValue('C2', '平台');
@@ -388,7 +398,7 @@ class ExportViolationProductJobs implements ShouldQueue
             $sheet->setCellValue('U2', '处理状态');
             $sheet->setCellValue('V2', '采集时间');
             $sheet->setCellValue('W2', '清洗时间');
-        }else{
+        } else {
             $sheet->setCellValue('A2', '第一责任人');
             $sheet->setCellValue('B2', '责任人');
             $sheet->setCellValue('C2', '平台');
@@ -442,11 +452,8 @@ class ExportViolationProductJobs implements ShouldQueue
             foreach ($data as $item) {
                 //关闭快照不展示数据
                 if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
-                $first_responsible_person_name = !empty($item['first_responsible_person_name']) ? implode(',', $item['first_responsible_person_name']) : '';
-                $responsible_person_name = !empty($item['responsible_person_name']) ? implode(',', $item['responsible_person_name']) : '';
-                $source_responsible_person_name = !empty($item['source_responsible_person_name']) ? implode(',', $item['source_responsible_person_name']) : '';
                 $sheet->setCellValue('A' . $row, '');
-                $sheet->setCellValue('B' . $row, $responsible_person_name);
+                $sheet->setCellValue('B' . $row, $item['responsible_person_name']);
                 $sheet->setCellValue('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
                 $sheet->setCellValue('D' . $row, '');
                 $sheet->setCellValue('E' . $row, $item['product_brand']);
@@ -474,11 +481,8 @@ class ExportViolationProductJobs implements ShouldQueue
             foreach ($data as $item) {
                 //关闭快照不展示数据
                 if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
-                $first_responsible_person_name = !empty($item['first_responsible_person_name']) ? implode(',', $item['first_responsible_person_name']) : '';
-                $responsible_person_name = !empty($item['responsible_person_name']) ? implode(',', $item['responsible_person_name']) : '';
-                $source_responsible_person_name = !empty($item['source_responsible_person_name']) ? implode(',', $item['source_responsible_person_name']) : '';
-                $sheet->setCellValue('A' . $row, $first_responsible_person_name);
-                $sheet->setCellValue('B' . $row, $responsible_person_name);
+                $sheet->setCellValue('A' . $row, $item['first_responsible_person_name']);
+                $sheet->setCellValue('B' . $row, $item['responsible_person_name']);
                 $sheet->setCellValue('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
                 $sheet->setCellValue('D' . $row, $item['category_name']);
                 $sheet->setCellValue('E' . $row, $item['product_brand']);
@@ -503,7 +507,7 @@ class ExportViolationProductJobs implements ShouldQueue
                 $row++;
             }
         }
-        
+
         foreach (range('A', 'W') as $column) {
             $sheet->getColumnDimension($column)->setAutoSize(true);
         }
@@ -519,8 +523,9 @@ class ExportViolationProductJobs implements ShouldQueue
         // 清理
         $spreadsheet->disconnectWorksheets();
         unset($spreadsheet, $writer);
-        //释放redis缓存
+        // //释放redis缓存
         Cache::forget('ExportViolationProductJobs_' . $company_id);
+        Cache::forget('ExportViolationProductJobs_task' . $company_id);
         $Oss                = new Oss();
         $oss_url                = $Oss->uploadFile($filename, $fullPath);
         if ($oss_url)           @unlink($fullPath);
@@ -539,9 +544,11 @@ class ExportViolationProductJobs implements ShouldQueue
     public function failed(\Throwable $exception)
     {
         Log::info('job_error', '违规数据-导出违规商品数据队列完全失败', ['data' => $this->message_data, 'error' => $exception]);
-        if($this->company_id) {
+        $company_id = isset($this->message_data['company_id']) ? $this->message_data['company_id'] : 0;
+        if ($company_id) {
             //失败后清除缓存
-            Cache::forget('export_violation_product_job_'. $this->company_id);
+            Cache::forget('ExportViolationProductJobs_' . $company_id);
+            Cache::forget('ExportViolationProductJobs_task' . $company_id);
         }
     }
 }