durong 5 years ago
parent
commit
7851c2f4f0

+ 8 - 2
app/Console/Commands/Downloads.php

@@ -8,6 +8,7 @@
 
 
 namespace App\Console\Commands;
 namespace App\Console\Commands;
 
 
+use App\Repositories\Behavior\BehaviorRepository;
 use App\Repositories\Post\PostRepository;
 use App\Repositories\Post\PostRepository;
 use Illuminate\Console\Command;
 use Illuminate\Console\Command;
 use App\Models\Download;
 use App\Models\Download;
@@ -35,11 +36,12 @@ class Downloads extends Command
      *
      *
      * @return void
      * @return void
      */
      */
-    public function __construct(Download $download, PostRepository $postRepository)
+    public function __construct(Download $download, PostRepository $postRepository,BehaviorRepository $behaviorRepository)
     {
     {
         parent::__construct();
         parent::__construct();
         $this->download = $download;
         $this->download = $download;
         $this->postRepository = $postRepository;
         $this->postRepository = $postRepository;
+        $this->behaviorRepository = $behaviorRepository;
     }
     }
 
 
     /**
     /**
@@ -80,7 +82,11 @@ class Downloads extends Command
 
 
         $filePath = $fileDir .$download->username.$fileName;
         $filePath = $fileDir .$download->username.$fileName;
         try {
         try {
-            $this->postRepository->download($filePath, $download->download_type, json_decode($download->params, true));
+            if ($download->download_type == 'post' || $download->download_type == 'post_waste'){
+                $this->postRepository->download($filePath, $download->download_type, json_decode($download->params, true));
+            }else{
+                $this->behaviorRepository->download($filePath, $download->download_type, json_decode($download->params, true));
+            }
             Storage::put($filePath, file_get_contents(public_path($filePath)));
             Storage::put($filePath, file_get_contents(public_path($filePath)));
             $download->url = $filePath;
             $download->url = $filePath;
             $download->download_status = 2;
             $download->download_status = 2;

+ 219 - 1
app/Repositories/Behavior/BehaviorRepository.php

@@ -18,7 +18,7 @@ use Tymon\JWTAuth\Facades\JWTAuth;
 use Dingo\Api\Http\Response;
 use Dingo\Api\Http\Response;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 use Illuminate\Database\QueryException;
 use Illuminate\Database\QueryException;
-
+use League\Csv\Writer;
 /**
 /**
  * Created by PhpStorm.
  * Created by PhpStorm.
  * User: durong
  * User: durong
@@ -429,5 +429,223 @@ class BehaviorRepository
         return $result;
         return $result;
     }
     }
 
 
+    public function download($filePath, $type, $request)
+    {
+        try {
+            set_time_limit(0);
+            if (!ini_get("auto_detect_line_endings")) {
+                ini_set("auto_detect_line_endings", '1');
+            }
+
+            // 文件路径
+            $writer = Writer::createFromPath(public_path($filePath), 'w+');
+
+            // 设置标题
+            if ($type == 'registered_record') {
+                $title = [
+                    '新用户注册', date('Y年m月d日')
+                ];
+            } elseif ($type == 'comment_record') {
+                $title = [
+                    '评论账本', date('Y年m月d日')
+                ];
+            } elseif ($type == 'release_record') {
+                $title = [
+                    '发布账本', date('Y年m月d日')
+                ];
+            } else {
+                $title = [
+                    '唯一/普通行为账本', date('Y年m月d日')
+                ];
+            }
+
+            $title = eval('return ' . iconv('utf-8', 'gbk//IGNORE', var_export($title, true) . ';'));
+            $writer->insertone($title);
+
+            // 内容
+            if ($type == 'registered_record') {
+                $header = [
+                    '账本ID', '触发时间', '用户ID', '消耗体力值', '触发类型', '生成类型',
+                    '绝对级数', '上级用户ID', '发放状态', '生成数量', '发放数量'
+                ];
+            } elseif ($type == 'comment_record') {
+                $header = [
+                    '账本ID', '触发时间', '用户ID', '关联内容ID', '内容作者ID', '上级评论者ID', '消耗体力值', '触发类型', '生成类型', '发放状态', '生成数量', '发放数量'
+                ];
+            } elseif ($type == 'release_record') {
+                $header = [
+                    '账本ID', '触发时间', '用户ID', '关联内容ID', '消耗体力值', '触发类型', '生成类型', '发放状态', '生成数量', '发放数量'
+                ];
+            } else {
+                $header = [
+                    '账本ID', '触发时间', '用户ID', '关联内容ID', '消耗体力值', '触发类型', '生成类型', '发放状态', '生成数量', '发放数量'
+                ];
+            }
+
+            $header = eval('return ' . iconv('utf-8', 'gbk//IGNORE', var_export($header, true) . ';'));
+            $writer->insertone($header);
+
+            $where = [];
+            if (isset($request['id'])) {
+                $where[] = ['id', $request['id']];
+            }
+            if (isset($request['uid'])) {
+                $where[] = ['uid', $request['uid']];
+            }
+            if (isset($request['absolute_progression'])) {
+                $where[] = ['absolute_progression', $request['absolute_progression']];
+            }
+            if (isset($request['trigger_type'])) {
+                $where[] = ['trigger_type', $request['trigger_type']];
+            }
+
+            if ($type == 'registered_record') {
+                $registeredRecord = $this->registeredRecord;
+                $registeredRecord->where($where)
+                    ->where(function ($query) use ($request) {
+                        if (isset($request['created_at'])) {
+                            $time = explode('_', $request['created_at']);
+                            $query->whereBetween('created_at', $time);
+                        }
+                    })
+                    ->orderBy('id', 'desc')
+                    ->chunk(1, function ($registeredRecords) use ($writer, $type) {
+                        $data = [];
+                        foreach ($registeredRecords as $registeredRecord) {
+                            $tmp = [
+                                $registeredRecord->id,
+                                Carbon::parse($registeredRecord->created_at)->toDateTimeString(),
+                                $registeredRecord->uid,
+                                $registeredRecord->physical_exertion,
+                                $registeredRecord->trigger_type == 0 ? '无效触发' : '有效触发',
+                                $registeredRecord->generation_type == 0 ? '' : '彩虹豆',
+                                $registeredRecord->absolute_progression,
+                                $registeredRecord->superior_uid,
+                                $registeredRecord->release_status == 0 ? '异常' : '正常',
+                                $registeredRecord->generation_quantity,
+                                $registeredRecord->quantity_issued
+                            ];
+
+                            foreach ($tmp as $key => $value) {
+                                $tmp[$key] = iconv('utf-8', 'gbk//IGNORE', $value);
+                            }
+                            $data[] = $tmp;
+                        }
+                        $writer->insertAll($data);
+                    });
+            }elseif ($type == 'comment_record'){
+                $commentRecord = $this->commentRecord;
+
+                $commentRecord->where($where)
+                    ->where(function ($query) use ($request) {
+                        if (isset($request['created_at'])) {
+                            $time = explode('_', $request['created_at']);
+                            $query->whereBetween('created_at', $time);
+                        }
+                    })
+                    ->orderBy('id', 'desc')
+                    ->chunk(1, function ($commentRecords) use ($writer, $type) {
+                        $data = [];
+                        foreach ($commentRecords as $commentRecord) {
+                            $tmp = [
+                                $commentRecord->id,
+                                Carbon::parse($commentRecord->created_at)->toDateTimeString(),
+                                $commentRecord->uid,
+                                $commentRecord->related_content_id,
+                                $commentRecord->content_author_id,
+                                $commentRecord->superior_commentator_id,
+                                $commentRecord->physical_exertion,
+                                $commentRecord->trigger_type == 0 ? '无效触发' : '有效触发',
+                                $commentRecord->generation_type == 0 ? '' : '彩虹豆',
+                                $commentRecord->release_status == 0 ? '异常' : '正常',
+                                $commentRecord->generation_quantity,
+                                $commentRecord->quantity_issued
+                            ];
+
+                            foreach ($tmp as $key => $value) {
+                                $tmp[$key] = iconv('utf-8', 'gbk//IGNORE', $value);
+                            }
+                            $data[] = $tmp;
+                        }
+                        $writer->insertAll($data);
+                    });
+            }elseif ($type == 'release_record'){
+                $releaseRecord = $this->releaseRecord;
+
+                $releaseRecord->where($where)
+                    ->where(function ($query) use ($request) {
+                        if (isset($request['created_at'])) {
+                            $time = explode('_', $request['created_at']);
+                            $query->whereBetween('created_at', $time);
+                        }
+                    })
+                    ->orderBy('id', 'desc')
+                    ->chunk(1, function ($releaseRecords) use ($writer, $type) {
+                        $data = [];
+                        foreach ($releaseRecords as $releaseRecord) {
+                            $tmp = [
+                                $releaseRecord->id,
+                                Carbon::parse($releaseRecord->created_at)->toDateTimeString(),
+                                $releaseRecord->uid,
+                                $releaseRecord->related_content_id,
+                                $releaseRecord->physical_exertion,
+                                $releaseRecord->trigger_type == 0 ? '无效触发' : '有效触发',
+                                $releaseRecord->generation_type == 0 ? '' : '彩虹豆',
+                                $releaseRecord->release_status == 0 ? '异常' : '正常',
+                                $releaseRecord->generation_quantity,
+                                $releaseRecord->quantity_issued
+                            ];
+
+                            foreach ($tmp as $key => $value) {
+                                $tmp[$key] = iconv('utf-8', 'gbk//IGNORE', $value);
+                            }
+                            $data[] = $tmp;
+                        }
+                        $writer->insertAll($data);
+                    });
+            }else{
+                $generalRecord = $this->generalRecord;
+
+                $generalRecord->where($where)
+                    ->where(function ($query) use ($request) {
+                        if (isset($request['created_at'])) {
+                            $time = explode('_', $request['created_at']);
+                            $query->whereBetween('created_at', $time);
+                        }
+                    })
+                    ->orderBy('id', 'desc')
+                    ->chunk(1, function ($generalRecords) use ($writer, $type) {
+                        $data = [];
+                        foreach ($generalRecords as $generalRecord) {
+                            $tmp = [
+                                $generalRecord->id,
+                                Carbon::parse($generalRecord->created_at)->toDateTimeString(),
+                                $generalRecord->uid,
+                                $generalRecord->related_content_id,
+                                $generalRecord->content_author_id,
+                                $generalRecord->physical_exertion,
+                                $generalRecord->trigger_type == 0 ? '无效触发' : '有效触发',
+                                $generalRecord->generation_type == 0 ? '' : '彩虹豆',
+                                $generalRecord->release_status == 0 ? '异常' : '正常',
+                                $generalRecord->generation_quantity,
+                                $generalRecord->quantity_issued
+                            ];
+
+                            foreach ($tmp as $key => $value) {
+                                $tmp[$key] = iconv('utf-8', 'gbk//IGNORE', $value);
+                            }
+                            $data[] = $tmp;
+                        }
+                        $writer->insertAll($data);
+                    });
+            }
+            Log::info('账本导出成功!');
+
+        } catch (QueryException $e) {
+            Log::debug('账本导出失败!' . $e->getMessage());
+        }
+
+    }
+
 }
 }