diff --git a/application/common/Model/ProjectVersion.php b/application/common/Model/ProjectVersion.php
index e5343b0..20f57e5 100644
--- a/application/common/Model/ProjectVersion.php
+++ b/application/common/Model/ProjectVersion.php
@@ -2,6 +2,7 @@
namespace app\common\Model;
+use PDOStatement;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\Exception;
@@ -95,6 +96,68 @@ class ProjectVersion extends CommonModel
return true;
}
+ public function addVersionTask($taskCode, $versionCode)
+ {
+ $task = Task::where(['code' => $taskCode])->field('id,version_code,name')->find();
+ if (!$task) {
+ return error(1, '该任务已被失效');
+ }
+ if ($task['version_code']) {
+ return error(1, '该任务已被关联');
+ }
+ $version = ProjectVersion::where(['code' => $versionCode])->find();
+ if (!$version) {
+ return error(1, '该版本已被失效');
+ }
+ $task->version_code = $versionCode;
+ $task->features_code = $version['features_code'];
+ $task->save();
+ self::updateSchedule($versionCode);
+ return $task;
+ }
+
+ /**
+ * 移除发布内容
+ * @param $taskCode
+ * @return array|PDOStatement|string|\think\Model|null
+ * @throws DataNotFoundException
+ * @throws DbException
+ * @throws ModelNotFoundException
+ */
+ public function removeVersionTask($taskCode)
+ {
+ $task = Task::where(['code' => $taskCode])->field('id,version_code,name')->find();
+ if (!$task) {
+ return error(1, '该任务已被失效');
+ }
+ $versionCode = $task['version_code'];
+ if ($versionCode) {
+ $task->version_code = '';
+ $task->features_code = '';
+ $task->save();
+ ProjectVersion::versionHook(getCurrentMember()['code'], $versionCode, 'removeVersionTask', '', '', $task['name']);
+ self::updateSchedule($versionCode);
+ }
+ return $task;
+ }
+
+ public static function updateSchedule($versionCode)
+ {
+ $version = ProjectVersion::where(['code' => $versionCode])->find();
+ $taskList = Task::where(['version_code' => $versionCode, 'deleted' => 0])->field('id', true)->select();
+ $doneTotal = 0;
+ if ($taskList) {
+ foreach ($taskList as $task) {
+ if ($task['done']) {
+ $doneTotal++;
+ }
+ }
+ $schedule = intval($doneTotal / count($taskList) * 100);
+ $version->schedule = $schedule;
+ $version->save();
+ }
+ }
+
public function getStatusTextAttr($value, $data)
{
//状态。0:未开始,1:进行中,2:延期发布,3:已发布
diff --git a/application/project/behavior/Task.php b/application/project/behavior/Task.php
index e2859f6..0caf143 100644
--- a/application/project/behavior/Task.php
+++ b/application/project/behavior/Task.php
@@ -12,6 +12,7 @@ namespace app\project\behavior;
use app\common\Model\CommonModel;
use app\common\Model\Member;
use app\common\Model\ProjectLog;
+use app\common\Model\ProjectVersion;
use app\common\Model\TaskMember;
use app\common\Model\TaskStages;
use service\MessageService;
@@ -68,10 +69,16 @@ class Task
case 'done':
$icon = 'check';
$remark = '完成了任务 ';
+ if ($task['version_code']) {
+ ProjectVersion::updateSchedule($task['version_code']);
+ }
break;
case 'redo':
$icon = 'border';
$remark = '重做了任务 ';
+ if ($task['version_code']) {
+ ProjectVersion::updateSchedule($task['version_code']);
+ }
break;
case 'createChild':
$icon = 'bars';
diff --git a/application/project/behavior/Version.php b/application/project/behavior/Version.php
index 57085e9..c704e36 100644
--- a/application/project/behavior/Version.php
+++ b/application/project/behavior/Version.php
@@ -34,7 +34,7 @@ class Version
*/
public function run($data)
{
- Log::init(['path' => 'log/task']);
+ Log::init(['path' => 'log/version']);
$logData = ['member_code' => $data['memberCode'], 'source_code' => $data['versionCode'], 'remark' => $data['remark'], 'type' => $data['type'], 'content' => $data['content'], 'create_time' => nowTime(), 'code' => createUniqueCode('projectVersionLog')];
$version = ProjectVersion::where(['code' => $data['versionCode']])->find();
$logData['features_code'] = $version['features_code'];
@@ -88,16 +88,16 @@ class Version
$icon = 'delete';
$remark = '删除了版本 ';
break;
- case 'linkFile':
+ case 'addVersionTask':
+ $count = count($data['data']);
$icon = 'link';
- $remark = ' 添加了 2 项发布内容 ';
- $content = "{$data['data']['title']}";
-
+ $remark = "添加了 $count 项发布内容 ";
+ $content = implode(',', $data['data']);
break;
- case 'unlinkFile':
+ case 'removeVersionTask':
$icon = 'disconnect';
$remark = '移除了发布内容';
- $content = "{$data['data']['title']}";
+ $content = $data['data'];
break;
default:
$icon = 'plus';
diff --git a/application/project/controller/ProjectVersion.php b/application/project/controller/ProjectVersion.php
index 83dec29..610f97e 100644
--- a/application/project/controller/ProjectVersion.php
+++ b/application/project/controller/ProjectVersion.php
@@ -151,14 +151,15 @@ class ProjectVersion extends BasicApi
$code = Request::post('versionCode');
$version = $this->model->where(['code' => $code])->field('id', true)->find();
if ($version) {
- $version['featureName'] = \app\common\Model\ProjectFeatures::where(['code' => $version['features_code']])->find();
- $version['featureName'] && $version['featureName'] = $version['featureName']['name'];
+ $feature = \app\common\Model\ProjectFeatures::where(['code' => $version['features_code']])->find();
+ $feature && $version['featureName'] = $feature['name'];
+ $version['projectCode'] = $feature['project_code'];
}
$this->success('', $version);
}
/**
- * 关联任务
+ * 关联任务列表
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
@@ -166,28 +167,62 @@ class ProjectVersion extends BasicApi
public function _getVersionTask()
{
$code = Request::post('versionCode');
- $taskList = \app\common\Model\Task::where(['version_code' => $code, 'deleted' => 0])->field('id', true)->select();
+ $taskList = \app\common\Model\Task::where(['version_code' => $code, 'deleted' => 0])->order('id desc')->field('id', true)->select();
+ if ($taskList) {
+ foreach ($taskList as &$task) {
+ $task['executor'] = Member::where(['code' => $task['assign_to']])->field('name,avatar')->find();
+ }
+ }
$this->success('', $taskList);
}
/**
+ * 关联任务
+ */
+ public function addVersionTask()
+ {
+ $taskCodeList = Request::post('taskCodeList');
+ $versionCode = Request::post('versionCode');
+ $taskCodeList && $taskCodeList = json_decode($taskCodeList);
+ $successTotal = 0;
+ $successTaskList = [];
+ if ($taskCodeList) {
+ foreach ($taskCodeList as $taskCode) {
+ $result = $this->model->addVersionTask($taskCode, $versionCode);
+ if (!isError($result)) {
+ $successTotal++;
+ $successTaskList[] = $result['name'];
+ }
+ }
+ }
+ if ($successTotal) {
+ \app\common\Model\ProjectVersion::versionHook(getCurrentMember()['code'], $versionCode, 'addVersionTask', '', '', $successTaskList);
+
+ }
+ $this->success('', ['successTotal' => $successTotal]);
+ }
+
+ /**
+ * 移除发布内容
+ */
+ public function removeVersionTask()
+ {
+ $taskCode = Request::post('taskCode');
+ $result = $this->model->removeVersionTask($taskCode);
+ if (isError($result)) {
+ $this->error($result['msg'], $result['errno']);
+ }
+ $this->success();
+ }
+
+ /**
+ * 版本日志
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function _getVersionLog()
{
-// $code = Request::post('versionCode');
-// $logList = ProjectVersionLog::where(['source_code' => $code])->field('id', true)->select();
-// if ($logList) {
-// foreach ($logList as &$item) {
-// $member = Member::where(['code' => $item['member_code']])->field('id,name,avatar,code')->find();
-// !$member && $member = [];
-// $item['member'] = $member;
-// }
-// }
-// $this->success('', $logList);
-
$code = Request::post('versionCode');
$showAll = Request::post('all', 0);
$where = [];