CsvExportHelper.php.bak 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * @Desc:导出
  4. * @Author: hua
  5. * @DateTime: 2021/10/11 10:56
  6. * @Copyright: copyright (c) 2021 广东七件事集团
  7. */
  8. namespace common\helpers\csv;
  9. use common\components\export\CsvTool;
  10. use common\enums\DownloadEnum;
  11. use common\enums\RabbitMqEnum;
  12. use common\helpers\TaskHelper;
  13. use common\helpers\UploadHelper;
  14. use common\models\common\Download;
  15. use Exception;
  16. use PhpAmqpLib\Message\AMQPMessage;
  17. use Yii;
  18. class CsvExportHelper
  19. {
  20. /**
  21. *
  22. * @Author bing
  23. * @DateTime 2021-10-23 16:22:58
  24. * @return boolean
  25. */
  26. /**
  27. * @copyright: Copyright (c) 2020 广东七件事集团
  28. * @msg: 导出数据到下载中心
  29. * @param {int} $mall_id 商城 ID
  30. * @param {string} $filename 导出文件文件名
  31. * @param {string} $type 导出数据的分类
  32. * @param {string} $query 用于查询导出数据的查询对象,该对象内保持精简,不要带 asArray子句,where条件在 params 参数传入,如果有需要一起导出其他的表数据,使用关联查询并且先处理好各个查询字段
  33. * @param {array} $headers 导出的字段,键值对形式,格式如:[['key'=> 'id', 'value' => '订单id'],['key'=> 'mall_id', 'value' => '商城ID'], ... ]
  34. * @param {array} $params 用于查询导出数据的查询条件,格式参照使用 listPage 方法时的写法
  35. * @param {string} $handler_class 用于过滤/处理导出数据的类
  36. * @param {string} $method 用于过滤/处理导出数据的类中的方法
  37. * @return {*}
  38. */
  39. public static function exportDownLoadCenter(int $mall_id, string $filename, int $type, object $query, array $headers, array $params = [], string $handler_class = '', string $method = '')
  40. {
  41. try {
  42. $name = $filename;
  43. $header_list = json_encode($headers, JSON_UNESCAPED_UNICODE);
  44. $query = serialize($query);
  45. $model = Download::setData(compact('mall_id', 'name', 'type', 'query', 'params', 'header_list', 'handler_class', 'method'));
  46. if ($model === false) throw new Exception(Download::getStaticError());
  47. $data['download_id'] = $model->id;
  48. // 添加异步队列
  49. TaskHelper::pushTaskQueue(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $data, CsvTool::class, 'makeDownloadFile', function (AMQPMessage $message) {
  50. // 生产错误
  51. Yii::error('异步生成下载任务失败');
  52. });
  53. return true;
  54. } catch (Exception $e) {
  55. Yii::error('添加任务到下载中心失败:' . $e->getMessage());
  56. return false;
  57. }
  58. }
  59. /**
  60. * @name:
  61. * @msg: 重新生成数据文件
  62. * @param {int} $download_id 下载中心任务 ID
  63. * @return {boolean}
  64. */
  65. public static function regenerateDownloadFile(int $download_id)
  66. {
  67. try {
  68. // 添加异步队列
  69. TaskHelper::pushTaskQueue(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, ['download_id' => $download_id], CsvTool::class, 'makeDownloadFile', function (AMQPMessage $message) {
  70. // 生产错误
  71. Yii::error('异步生成下载任务失败');
  72. });
  73. return true;
  74. } catch (Exception $e) {
  75. Yii::error('生成下载任务失败:' . $e->getMessage());
  76. return false;
  77. }
  78. }
  79. }