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 = [];