From 1723b0383c953dd77aaf0c08a3718abdceaa4cda Mon Sep 17 00:00:00 2001 From: x-zj <1026648644@qq.com> Date: Fri, 28 Apr 2023 17:01:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD:=20?= =?UTF-8?q?=E4=BD=9C=E8=80=85=E5=92=8C=E7=94=9F=E6=88=90=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/ArticleController.php | 216 ++++++++++++++++----------- app/controller/ScriptController.php | 115 ++++++++++++++ app/model/Expert.php | 10 ++ route/app.php | 23 ++- 4 files changed, 271 insertions(+), 93 deletions(-) create mode 100644 app/controller/ScriptController.php create mode 100644 app/model/Expert.php diff --git a/app/controller/ArticleController.php b/app/controller/ArticleController.php index f4e7d2a..69e6c17 100644 --- a/app/controller/ArticleController.php +++ b/app/controller/ArticleController.php @@ -3,136 +3,170 @@ namespace app\controller; use app\BaseController; -use app\model\Article; +use app\model\{Article, Expert}; use think\facade\Db; class ArticleController extends BaseController { - public function sendArticle() - { - try { - $list = Article::where('status', 0)->where('publish_status', 2)->field("*")->select()->toArray(); - foreach ($list as $value) { - $uuid = strtoupper(md5($value['id'])); - - //创建文件夹 - $pathname = 'D:/AAAA_文章/' . $uuid; - if (!is_dir($pathname)) { //若目录不存在则创建之 - mkdir($pathname, 0777, true); - } - - //url图片保存本地 - $this->down_img($pathname, $value['cover']); - $wordname = $pathname . "/a_文章.doc"; - - //html标签类文章转成word - $html = $value['content']; - $this->start(); - echo $html; - $this->save($wordname); - - file_put_contents($pathname . '/c_标题.txt', $value['title']); - file_put_contents($pathname . '/d_账号.txt', $value['account']); - - Article::where('id',$value['id'])->update(['status' => 1]); - } - } catch (\Exception $e) { - dd($e); + + //获取账号集合 + public function expertList($isJson = true){ + $experts = Expert::field(['id', 'name', 'platform_name'])->select()->map(function($expert){ + $expert['showName'] = $expert['name'] . '_' . $expert['platform_name']; + + return $expert; + })->toArray(); + + if($isJson){ + return json([ + 'msg' => 'success', + 'data' => $experts, + 'count' => count($experts), + 'code' => 200 + ], 200); + }else{ + return $experts; } - return json(['msg' => 'success', 'data' => '生成成功!', 'code' => 200], 200); - } - - function start() - { - ob_start(); - echo ''; - } - - function save($path) - { - - echo ""; - $data = ob_get_contents(); - ob_end_clean(); - - $this->wirtefile($path, $data); - } - - function wirtefile($fn, $data) - { - $fp = fopen($fn, "wb"); - fwrite($fp, $data); - fclose($fp); - } - - function down_img($path,$img_url){ - ob_start(); - readfile($img_url); - $img=ob_get_contents(); - ob_end_clean(); - $filename = '/b_封面图.jpg'; - $fp2=@fopen($path.$filename,'a'); - fwrite($fp2,$img); - fclose($fp2); - unset($img,$url); } - + + + //获取文章列表 public function articleList() { $param = request()->param(); $list = Article::where(function ($q) use ($param) { - if(isset($param['publish_status'])){ - $q->where('publish_status',$param['publish_status']); + if(!empty($param['status'])){ + $q->where('status', $param['status']); + } + if(!empty($param['account'])){ + $q->where('FIND_IN_SET(:account, account)', ['account' => $param['account']]); } - if(isset($param['account'])){ - $q->where('account',$param['account']); + if(!empty($param['title'])){ + $q->whereLike('account', '%' . $param['title'] . '%'); } - }) - ->paginate([ - 'list_rows'=> $param["limit"], - 'page' => $param["page"], - ])->toArray(); - return json(['msg' => 'success', 'data' => $list['data'],'count' => $list['total'], 'code' => 200], 200); + })->paginate([ + 'list_rows'=> $param["limit"], + 'page' => $param["page"], + ])->toArray(); + + $list['data'] = $this->getAccountNames($list['data']); + + return json([ + 'msg' => 'success', + 'data' => $list['data'], + 'count' => $list['total'], + 'code' => 200 + ], 200); } + //删除文章 public function deleteArticle() { $param = request()->param(); - $data = Article::where('id',$param['id'])->find(); - if($data['status'] == 1){ - return json(['msg' => 'fail', 'data' => '已发布的文章不能删除', 'code' => 201], 201); + $data = Article::where('id', $param['id'])->find(); + if($data['status'] != 1){ + return json(['msg' => 'fail', 'data' => '只能删除未就绪的文章', 'code' => 201], 201); } + $data->delete(); + return json(['msg' => 'success', 'data' => '删除成功!', 'code' => 200], 200); } - public function editArticle() - { + public function editArticle(){ $param = request()->param(); - $data = Article::where('id',$param['id'])->find(); + + $data = Article::where('id', $param['id'])->find(); if(empty($data)){ return json(['msg' => 'fail', 'data' => '文章不存在', 'code' => 201], 201); } - Article::where('id',$param['id'])->update([ + if(!in_array($data['status'], [1,2])){ + return json(['msg' => 'fail', 'data' => '只能编辑未就绪的文章', 'code' => 201], 201); + } + + $updateData = [ 'account' => $param['account'] ?? $data['account'], 'title' => $param['title'] ?? $data['title'], 'cover' => $param['cover'] ?? $data['cover'], 'des' => $param['des'] ?? $data['des'], 'content' => $param['content'] ?? $data['content'], - 'publish_status' => $param['publish_status'] ?? $data['publish_status'], - ]); + 'status' => $param['status'] ?? $data['status'], + ]; + if(isset($param['status']) && $param['status'] == 2){ + $updateData['check_time'] = date('Y-m-d H:i:s'); + }else{ + $updateData['check_time'] = null; + } + + Article::where('id', $param['id'])->update($updateData); + return json(['msg' => 'success', 'data' => '编辑成功!', 'code' => 200], 200); } - public function detailArticle() - { + public function detailArticle(){ $param = request()->param(); + $data = Article::where('id',$param['id'])->find(); + return json(['msg' => 'success', 'data' => $data, 'code' => 200], 200); } + + + //批量设置就绪 + public function readyArticle(){ + $param = request()->param(); + if(empty($param['id']) || !is_array($param['id'])){ + return json(['msg' => 'fail', 'data' => 'id参数不合法', 'code' => 201], 201); + } + + Article::update([ + 'status' => 2, + 'check_time' => date('Y-m-d H:i:s') + ], [ + 'id' => $param['id'], + 'status' => 1 + ]); + Article::update([ + 'status' => 1, + 'check_time' => null + ], [ + 'id' => $param['id'], + 'status' => 2, + 'account' => null + ]); + + return json(['msg' => 'success', 'data' => '设置成功!', 'code' => 200], 200); + } + + + //---------------------------------| 内置调用通用方法 |---------------------------------// + + //组装账号名称集合 + private function getAccountNames(array $datas) : array{ + //获取账号集合 + $expertsTemp = $this->expertList(false); + $experts = []; + foreach($expertsTemp as $val)$experts[$val['id']] = $val['showName']; + + //组装账号 + foreach($datas as &$item){ + if(!empty($item['account'])){ + $accountIds = explode(',', $item['account']); + $accountNames = []; + foreach($accountIds as $accountId){ + $accountNames[] = $experts[$accountId] ?? ''; + } + + $item['account_names'] = implode(',', $accountNames); + }else{ + $item['account_names'] = ''; + } + } + + return $datas; + } + } \ No newline at end of file diff --git a/app/controller/ScriptController.php b/app/controller/ScriptController.php new file mode 100644 index 0000000..240ea0a --- /dev/null +++ b/app/controller/ScriptController.php @@ -0,0 +1,115 @@ +field("*")->select()->toArray(); + if(empty($list)){ + + } + + //创建待处理目录 + $fileName = date('Y-m-d_H:i:s'); + $pathSrc = getcwd() . '/uploads/' . $fileName; + mkdir($pathSrc, 0777, true); + + foreach ($list as $value) { + if(empty($value['account']))continue; + + $uuid = strtoupper(md5($value['id'])); + + //创建文件夹 + $artSrc = $pathSrc . '/' . $uuid; + if (!is_dir($artSrc)) { //若目录不存在则创建之 + mkdir($artSrc, 0777, true); + } + + //url图片保存本地 + if(empty($value['cover'])){ + copy(getcwd() . '/static/empty.png', $artSrc . '/b_封面图.jpg'); + }else{ + $this->down_img($artSrc, $value['cover']); + } + + //文章内容 + $wordname = $artSrc . "/a_文章.doc"; + + //html标签类文章转成word + $html = $value['content']; + $this->start(); + echo $html; + $this->save($wordname); + + //设置信息 + file_put_contents($artSrc . '/c_信息.txt', $value['id'] . "\r\n" .$value['title']); + + //设置账号 + + file_put_contents($artSrc . '/d_账号.txt', $this->getAccounts($value['account'])); + + //更改状态为已下载 + Article::where('id', $value['id'])->update(['status' => 3]); + } + + + } + + + function start() + { + ob_start(); + echo ''; + } + + function save($path) + { + + echo ""; + $data = ob_get_contents(); + ob_end_clean(); + + $this->wirtefile($path, $data); + } + + function wirtefile($fn, $data) + { + $fp = fopen($fn, "wb"); + fwrite($fp, $data); + fclose($fp); + } + + function down_img($path,$img_url){ + ob_start(); + readfile($img_url); + $img=ob_get_contents(); + ob_end_clean(); + $filename = '/b_封面图.jpg'; + $fp2=@fopen($path . $filename,'a'); + fwrite($fp2,$img); + fclose($fp2); + unset($img,$url); + } + + private function getAccounts($accountIdStr){ + $content = []; + $accountIds = explode(',', $accountIdStr); + $accounts = Expert::where('id', 'in', $accountIds)->field("*")->select()->toArray(); + + foreach($accounts as $item){ + $content[] = $item['platform_code'] . '|' . $item['script_x'] . '|' . $item['script_y']; + } + + return implode("\r\n", $content); + } + +} \ No newline at end of file diff --git a/app/model/Expert.php b/app/model/Expert.php new file mode 100644 index 0000000..86721d7 --- /dev/null +++ b/app/model/Expert.php @@ -0,0 +1,10 @@ +