From 3fd91ba2bb1f44cc9dbc35a491cca1df0bd4223b Mon Sep 17 00:00:00 2001 From: vilson <545522390@qq.com> Date: Wed, 26 Jun 2019 17:46:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96=E6=B5=81=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: vilson <545522390@qq.com> --- application/common/Model/TaskMember.php | 12 ++-- application/common/Model/TaskWorkflow.php | 13 ++++ application/common/Model/TaskWorkflowRule.php | 66 +++++++++++++++++++ application/project/behavior/Task.php | 37 ++++++++++- application/project/controller/Task.php | 4 ++ 5 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 application/common/Model/TaskWorkflow.php create mode 100644 application/common/Model/TaskWorkflowRule.php diff --git a/application/common/Model/TaskMember.php b/application/common/Model/TaskMember.php index a8b4ec0..8fefef4 100644 --- a/application/common/Model/TaskMember.php +++ b/application/common/Model/TaskMember.php @@ -19,12 +19,14 @@ class TaskMember extends CommonModel * @param $taskCode * @param int $isExecutor * @param int $isOwner + * @param bool $fromCreate + * @param bool $isRobot 是否机器人 * @return TaskMember|bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ - public static function inviteMember($memberCode, $taskCode, $isExecutor = 0, $isOwner = 0, $fromCreate = false) + public static function inviteMember($memberCode, $taskCode, $isExecutor = 0, $isOwner = 0, $fromCreate = false, $isRobot = false) { !$memberCode && $memberCode = ''; $task = Task::where(['code' => $taskCode, 'deleted' => 0])->find(); @@ -47,7 +49,7 @@ class TaskMember extends CommonModel if ($memberCode == $currentMember['code']) { $logType = 'claim'; } - Task::taskHook($currentMember['code'], $taskCode, $logType, $memberCode); + Task::taskHook($currentMember['code'], $taskCode, $logType, $memberCode, 0, '', '', '', ['is_robot' => $isRobot]); // throw new \Exception('该成员已参与任务', 2); return true; } @@ -57,7 +59,7 @@ class TaskMember extends CommonModel Task::update(['assign_to' => $memberCode], ['code' => $taskCode]); if (!$fromCreate) { if ($taskExecutor) { - Task::taskHook($currentMember['code'], $taskCode, 'removeExecutor', $taskExecutor['member_code']); + Task::taskHook($currentMember['code'], $taskCode, 'removeExecutor', $taskExecutor['member_code'], 0, '', '', '', ['is_robot' => $isRobot]); } } return true; @@ -75,9 +77,9 @@ class TaskMember extends CommonModel if ($isExecutor) { Task::update(['assign_to' => $memberCode], ['code' => $taskCode]); if ($memberCode == $currentMember['code']) { - Task::taskHook($currentMember['code'], $taskCode, 'claim'); + Task::taskHook($currentMember['code'], $taskCode, 'claim','',0, '', '', '', ['is_robot' => $isRobot]); } else { - Task::taskHook($currentMember['code'], $taskCode, 'assign', $memberCode); + Task::taskHook($currentMember['code'], $taskCode, 'assign', $memberCode,0, '', '', '', ['is_robot' => $isRobot]); } } if ($memberCode) { diff --git a/application/common/Model/TaskWorkflow.php b/application/common/Model/TaskWorkflow.php new file mode 100644 index 0000000..be3f692 --- /dev/null +++ b/application/common/Model/TaskWorkflow.php @@ -0,0 +1,13 @@ +stage_code; + $toStageCode = $do['object_code']; + $task->stage_code = $toStageCode; + $task->save(); + if ($oldStageCode != $toStageCode) { + $stage = TaskStages::where(['code' => $toStageCode])->find(); + Task::taskHook(getCurrentMember()['code'], $task['code'], 'move', '', '', '', '', '', ['stageName' => $stage['name'], 'is_robot' => true]); + } + } elseif ($do['action'] == 1) { + //指派给 + try { + TaskMember::inviteMember($do['object_code'], $task['code'], 1, 0, false, true); + } catch (\Exception $exception) { + } + } + $next = self::where(['workflow_code' => $do['workflow_code'], 'sort' => $do['sort'] + 1])->find(); + if ($next) { + return self::doAction($task, $next); + } + return true; + } +} diff --git a/application/project/behavior/Task.php b/application/project/behavior/Task.php index 6d53aed..e62d103 100644 --- a/application/project/behavior/Task.php +++ b/application/project/behavior/Task.php @@ -16,6 +16,7 @@ use app\common\Model\ProjectLog; use app\common\Model\ProjectVersion; use app\common\Model\TaskMember; use app\common\Model\TaskStages; +use app\common\Model\TaskWorkflowRule; use message\DingTalk; use service\MessageService; use think\db\exception\DataNotFoundException; @@ -35,7 +36,10 @@ class Task public function run($data) { Log::init(['path' => 'log/task']); - $logData = ['member_code' => $data['memberCode'], 'source_code' => $data['taskCode'], 'remark' => $data['remark'], 'type' => $data['type'], 'content' => $data['content'], 'is_comment' => $data['isComment'], 'to_member_code' => $data['toMemberCode'], 'create_time' => nowTime(), 'code' => createUniqueCode('projectLog'), 'action_type' => 'task']; + $isRobot = (isset($data['data']) && isset($data['data']['is_robot']) && $data['data']['is_robot']) ? 1 : 0; + logRecord($isRobot,'robot'); + $logData = ['member_code' => $data['memberCode'], 'source_code' => $data['taskCode'], 'remark' => $data['remark'], 'type' => $data['type'], 'content' => $data['content'], 'is_comment' => $data['isComment'], 'to_member_code' => $data['toMemberCode'], 'create_time' => nowTime(), 'code' => createUniqueCode('projectLog'), 'action_type' => 'task', 'is_robot' => $isRobot]; + logRecord($data); $task = \app\common\Model\Task::where(['code' => $data['taskCode']])->find(); $logData['project_code'] = $task['project_code']; $toMember = []; @@ -172,6 +176,9 @@ class Task break; } $logData['icon'] = $icon; + if ($logData['is_robot']) { + $logData['icon'] = 'alert'; + } if (!$data['remark']) { $logData['remark'] = $remark; } @@ -179,6 +186,34 @@ class Task $logData['content'] = $content; } ProjectLog::create($logData); + //工作流事件 + $workflowActions = ['create', 'move', 'done', 'redo', 'assign', 'setEndTime', 'pri']; + if (in_array($data['type'], $workflowActions)) { + $taskStageCode = $task['stage_code']; + $action = TaskWorkflowRule::getActionByTaskType($data['type']); + $taskWorkflowRule = TaskWorkflowRule::where(['object_code' => $taskStageCode, 'sort' => 1])->order('id asc')->find(); + if ($taskWorkflowRule) { + $taskWorkflowRuleList = TaskWorkflowRule::where(['workflow_code' => $taskWorkflowRule['workflow_code']])->order('sort asc')->select(); + if ($taskWorkflowRuleList) { + $condition = $taskWorkflowRuleList[1]; + if ($condition['action'] == $action) { + $goon = true; + if ($action == 3) { + //设置执行人 + $toMemberCode = $toMember['code']; + if ($toMemberCode != $condition['object_code']) { + $goon = false; + } + } + if ($goon) { + $do = $taskWorkflowRuleList[2]; + TaskWorkflowRule::doAction($task, $do); + } + } + } + + } + } //触发推送的事件 $notifyActions = ['done', 'redo', 'assign']; if (in_array($data['type'], $notifyActions)) { diff --git a/application/project/controller/Task.php b/application/project/controller/Task.php index f918b4d..a6c8f93 100644 --- a/application/project/controller/Task.php +++ b/application/project/controller/Task.php @@ -451,6 +451,10 @@ class Task extends BasicApi } if ($list['list']) { foreach ($list['list'] as &$item) { + if ($item['is_robot'] && $item['type'] != 'claim') { + $item['member'] = ['name' => 'PP Robot']; + continue; + } $member = Member::where(['code' => $item['member_code']])->field('id,name,avatar,code')->find(); !$member && $member = []; $item['member'] = $member;