diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php
index 9e4091492..d33b11c75 100755
--- a/app/Http/Controllers/Api/ProjectController.php
+++ b/app/Http/Controllers/Api/ProjectController.php
@@ -1183,7 +1183,10 @@ class ProjectController extends AbstractController
//
$task = ProjectTask::userTask($task_id, null);
//
- return Base::retSuccess('success', $task->content ?: json_decode('{}'));
+ if (empty($task->content)) {
+ return Base::retSuccess('success', json_decode('{}'));
+ }
+ return Base::retSuccess('success', $task->content->getContentInfo());
}
/**
diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php
index dc201d7ad..c1d2a5348 100644
--- a/app/Models/ProjectTask.php
+++ b/app/Models/ProjectTask.php
@@ -235,7 +235,7 @@ class ProjectTask extends AbstractModel
*/
public function content(): \Illuminate\Database\Eloquent\Relations\HasOne
{
- return $this->hasOne(ProjectTaskContent::class, 'task_id', 'id');
+ return $this->hasOne(ProjectTaskContent::class, 'task_id', 'id')->orderByDesc('id');
}
/**
@@ -467,7 +467,9 @@ class ProjectTask extends AbstractModel
ProjectTaskContent::createInstance([
'project_id' => $task->project_id,
'task_id' => $task->id,
- 'content' => $content,
+ 'content' => [
+ 'url' => ProjectTaskContent::saveContent($task->id, $content)
+ ],
])->save();
}
if ($task->parent_id == 0 && $subtasks && is_array($subtasks)) {
@@ -797,12 +799,13 @@ class ProjectTask extends AbstractModel
}
// 内容
if (Arr::exists($data, 'content')) {
- ProjectTaskContent::updateInsert([
+ ProjectTaskContent::createInstance([
'project_id' => $this->project_id,
'task_id' => $this->id,
- ], [
- 'content' => $data['content'],
- ]);
+ 'content' => [
+ 'url' => ProjectTaskContent::saveContent($this->id, $data['content'])
+ ],
+ ])->save();
$this->desc = Base::getHtml($data['content'], 100);
$this->addLog("修改{任务}详细描述");
$updateMarking['is_update_content'] = true;
diff --git a/app/Models/ProjectTaskContent.php b/app/Models/ProjectTaskContent.php
index 3b6bdb1c3..97ab0a176 100644
--- a/app/Models/ProjectTaskContent.php
+++ b/app/Models/ProjectTaskContent.php
@@ -2,6 +2,8 @@
namespace App\Models;
+use App\Module\Base;
+
/**
* App\Models\ProjectTaskContent
*
@@ -28,4 +30,54 @@ class ProjectTaskContent extends AbstractModel
'created_at',
'updated_at',
];
+
+ /**
+ * 获取内容详情
+ * @return array
+ */
+ public function getContentInfo()
+ {
+ $content = Base::json2array($this->content);
+ if (isset($content['url'])) {
+ $filePath = public_path($content['url']);
+ $array = $this->toArray();
+ $array['content'] = file_get_contents($filePath) ?: '';
+ if ($array['content']) {
+ $replace = Base::fillUrl('uploads/task');
+ $array['content'] = str_replace('{{RemoteURL}}uploads/task', $replace, $array['content']);
+ }
+ return $array;
+ }
+ return $this->toArray();
+ }
+
+ /**
+ * 保存任务详情至文件并返回文件路径
+ * @param $task_id
+ * @param $content
+ * @return string
+ */
+ public static function saveContent($task_id, $content)
+ {
+ $path = 'uploads/task/content/' . date("Ym") . '/' . $task_id . '/';
+ //
+ preg_match_all("/
$text) {
+ $tmpPath = $path . 'attached/';
+ Base::makeDir(public_path($tmpPath));
+ $tmpPath .= md5($text) . "." . $matchs[1][$key];
+ if (file_put_contents(public_path($tmpPath), base64_decode($text))) {
+ $content = str_replace($matchs[0][$key], '
chunk(100, function($items) {
+ /** @var ProjectTaskContent $item */
+ foreach ($items as $item) {
+ $content = Base::json2array($item->content);
+ if (!isset($content['url'])) {
+ $item->content = Base::array2json([
+ 'url' => ProjectTaskContent::saveContent($item->task_id, $item->content)
+ ]);
+ $item->save();
+ }
+ }
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ // ... 退回去意义不大,文件内容不做回滚操作
+ }
+}
diff --git a/database/seeders/ProjectTaskContentsTableSeeder.php b/database/seeders/ProjectTaskContentsTableSeeder.php
index 4b222d865..bea223275 100644
--- a/database/seeders/ProjectTaskContentsTableSeeder.php
+++ b/database/seeders/ProjectTaskContentsTableSeeder.php
@@ -2,6 +2,8 @@
namespace Database\Seeders;
+use App\Models\ProjectTaskContent;
+use App\Module\Base;
use Illuminate\Database\Seeder;
class ProjectTaskContentsTableSeeder extends Seeder
@@ -302,6 +304,17 @@ class ProjectTaskContentsTableSeeder extends Seeder
),
));
-
+ ProjectTaskContent::orderBy('id')->chunk(100, function($items) {
+ /** @var ProjectTaskContent $item */
+ foreach ($items as $item) {
+ $content = Base::json2array($item->content);
+ if (!isset($content['url'])) {
+ $item->content = Base::array2json([
+ 'url' => ProjectTaskContent::saveContent($item->task_id, $item->content)
+ ]);
+ $item->save();
+ }
+ }
+ });
}
}