Browse Source

优化功能: 作者和生成目录优化

master V0.0.6
x-zj 3 years ago
parent
commit
1723b0383c
  1. 216
      app/controller/ArticleController.php
  2. 115
      app/controller/ScriptController.php
  3. 10
      app/model/Expert.php
  4. 23
      route/app.php

216
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 '<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
}
function save($path)
{
echo "</html>";
$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;
}
}

115
app/controller/ScriptController.php

@ -0,0 +1,115 @@
<?php
namespace app\controller;
use app\BaseController;
use app\model\{Article, Expert};
use think\facade\Db;
class ScriptController extends BaseController
{
public function getArticle(){
//获取已就绪文章列表
$list = Article::where('status', 2)->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 '<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
}
function save($path)
{
echo "</html>";
$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);
}
}

10
app/model/Expert.php

@ -0,0 +1,10 @@
<?php
namespace app\model;
use app\model\BaseModel;
class Expert extends BaseModel
{
protected $table ='expert';
}

23
route/app.php

@ -14,8 +14,27 @@ Route::get('think', function () {
return 'hello,ThinkPHP6!';
});
Route::get('sendArticle', 'ArticleController/sendArticle');
//专家列表
Route::get('expertList', 'ArticleController/expertList');
//文章列表
Route::get('articleList', 'ArticleController/articleList');
//文章详情
Route::get('detailArticle', 'ArticleController/detailArticle');
//删除文章
Route::post('deleteArticle', 'ArticleController/deleteArticle');
Route::post('editArticle', 'ArticleController/editArticle');
//编辑文章
Route::post('editArticle', 'ArticleController/editArticle');
//批量就绪
Route::post('readyArticle', 'ArticleController/readyArticle');
//轮询获取文章
Route::get('getArticle', 'ScriptController/getArticle');
//文章已发布
Route::get('publish', 'ScriptController/publish');
Loading…
Cancel
Save