|
@@ -34,7 +34,7 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
|
|
|
|
|
public $tries = 3; // 限制重试次数
|
|
public $tries = 3; // 限制重试次数
|
|
|
public $timeout = 1800; // 超时30分钟
|
|
public $timeout = 1800; // 超时30分钟
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Create a new job instance.
|
|
* Create a new job instance.
|
|
|
*
|
|
*
|
|
@@ -53,26 +53,35 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
public function handle()
|
|
public function handle()
|
|
|
{
|
|
{
|
|
|
try {
|
|
try {
|
|
|
|
|
+ $page = isset($this->message_data['page']) ? $this->message_data['page'] : 1;
|
|
|
$fileId = $this->message_data['file_id'];
|
|
$fileId = $this->message_data['file_id'];
|
|
|
$company_id = $this->message_data['company_id'];
|
|
$company_id = $this->message_data['company_id'];
|
|
|
$user_id = $this->message_data['user_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);
|
|
$this->export_excel($this->message_data);
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
Log::info('job_error', '违规数据-导出禁止挂网数据处理队列失败', ['data' => $this->message_data, 'error' => $e->getMessage()]);
|
|
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)) {
|
|
if ($first_responsible_person && is_string($first_responsible_person)) {
|
|
|
$first_responsible_person = explode(',', $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) {
|
|
$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)) {
|
|
if ($responsible_person && is_string($responsible_person)) {
|
|
|
$responsible_person = explode(',', $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) {
|
|
$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)) {
|
|
if ($source_responsible_person && is_string($source_responsible_person)) {
|
|
|
$source_responsible_person = explode(',', $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) {
|
|
$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);
|
|
$ViolationProductModel = $ViolationProductModel->whereIn('merge_city_id', $merge_city_ids);
|
|
|
}
|
|
}
|
|
|
$this->company_id = $violation_product_where['company_id'];
|
|
$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')
|
|
$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'])
|
|
->where('personnel_employee.id', $user_id)->select(['personnel_employee.id', 'personnel_roles.identity'])
|
|
|
->first();
|
|
->first();
|
|
|
//角色身份1=普通2=管理员
|
|
//角色身份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;
|
|
$is_admin = 1;
|
|
|
}
|
|
}
|
|
|
$query = $ViolationProductModel->where($map);
|
|
$query = $ViolationProductModel->where($map);
|
|
@@ -253,39 +259,43 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
->orWhere('source_responsible_person', 'like', "%,$user_id,%");
|
|
->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
|
|
* @version 1.0
|
|
|
* @date 2025-06-17
|
|
* @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 对象
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$spreadsheet = new Spreadsheet();
|
|
@@ -364,7 +374,7 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
// 然后设置行高以适应两行文本
|
|
// 然后设置行高以适应两行文本
|
|
|
$sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
|
|
$sheet->getRowDimension(1)->setRowHeight(40); // 设置行高,单位是磅(point)
|
|
|
// 设置表头
|
|
// 设置表头
|
|
|
- if($company_id == 5){
|
|
|
|
|
|
|
+ if ($company_id == 5) {
|
|
|
$sheet->setCellValue('A2', ' ');
|
|
$sheet->setCellValue('A2', ' ');
|
|
|
$sheet->setCellValue('B2', '责任人');
|
|
$sheet->setCellValue('B2', '责任人');
|
|
|
$sheet->setCellValue('C2', '平台');
|
|
$sheet->setCellValue('C2', '平台');
|
|
@@ -388,7 +398,7 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
$sheet->setCellValue('U2', '处理状态');
|
|
$sheet->setCellValue('U2', '处理状态');
|
|
|
$sheet->setCellValue('V2', '采集时间');
|
|
$sheet->setCellValue('V2', '采集时间');
|
|
|
$sheet->setCellValue('W2', '清洗时间');
|
|
$sheet->setCellValue('W2', '清洗时间');
|
|
|
- }else{
|
|
|
|
|
|
|
+ } else {
|
|
|
$sheet->setCellValue('A2', '第一责任人');
|
|
$sheet->setCellValue('A2', '第一责任人');
|
|
|
$sheet->setCellValue('B2', '责任人');
|
|
$sheet->setCellValue('B2', '责任人');
|
|
|
$sheet->setCellValue('C2', '平台');
|
|
$sheet->setCellValue('C2', '平台');
|
|
@@ -442,11 +452,8 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
foreach ($data as $item) {
|
|
foreach ($data as $item) {
|
|
|
//关闭快照不展示数据
|
|
//关闭快照不展示数据
|
|
|
if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
|
|
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('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('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
|
|
|
$sheet->setCellValue('D' . $row, '');
|
|
$sheet->setCellValue('D' . $row, '');
|
|
|
$sheet->setCellValue('E' . $row, $item['product_brand']);
|
|
$sheet->setCellValue('E' . $row, $item['product_brand']);
|
|
@@ -474,11 +481,8 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
foreach ($data as $item) {
|
|
foreach ($data as $item) {
|
|
|
//关闭快照不展示数据
|
|
//关闭快照不展示数据
|
|
|
if (!empty($snapshot_status) && $snapshot_status == 1) $item['snapshot_url'] = '';
|
|
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('C' . $row, isset($platform_data[$item['platform']]) ? $platform_data[$item['platform']] : '');
|
|
|
$sheet->setCellValue('D' . $row, $item['category_name']);
|
|
$sheet->setCellValue('D' . $row, $item['category_name']);
|
|
|
$sheet->setCellValue('E' . $row, $item['product_brand']);
|
|
$sheet->setCellValue('E' . $row, $item['product_brand']);
|
|
@@ -503,7 +507,7 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
$row++;
|
|
$row++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
foreach (range('A', 'W') as $column) {
|
|
foreach (range('A', 'W') as $column) {
|
|
|
$sheet->getColumnDimension($column)->setAutoSize(true);
|
|
$sheet->getColumnDimension($column)->setAutoSize(true);
|
|
|
}
|
|
}
|
|
@@ -519,8 +523,9 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
// 清理
|
|
// 清理
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
$spreadsheet->disconnectWorksheets();
|
|
|
unset($spreadsheet, $writer);
|
|
unset($spreadsheet, $writer);
|
|
|
- //释放redis缓存
|
|
|
|
|
|
|
+ // //释放redis缓存
|
|
|
Cache::forget('ExportViolationProductJobs_' . $company_id);
|
|
Cache::forget('ExportViolationProductJobs_' . $company_id);
|
|
|
|
|
+ Cache::forget('ExportViolationProductJobs_task' . $company_id);
|
|
|
$Oss = new Oss();
|
|
$Oss = new Oss();
|
|
|
$oss_url = $Oss->uploadFile($filename, $fullPath);
|
|
$oss_url = $Oss->uploadFile($filename, $fullPath);
|
|
|
if ($oss_url) @unlink($fullPath);
|
|
if ($oss_url) @unlink($fullPath);
|
|
@@ -539,9 +544,11 @@ class ExportViolationProductJobs implements ShouldQueue
|
|
|
public function failed(\Throwable $exception)
|
|
public function failed(\Throwable $exception)
|
|
|
{
|
|
{
|
|
|
Log::info('job_error', '违规数据-导出违规商品数据队列完全失败', ['data' => $this->message_data, 'error' => $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);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|