From f2f703972c0240b78e7367f56035a927b154a9fc Mon Sep 17 00:00:00 2001 From: Alex Tri Date: Thu, 14 Mar 2019 12:18:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D1=8E=D1=87=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87:=20=D0=BC=D0=B8=D1=82=D0=B8=D0=BD=D0=B3=20=D0=B8=20?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D1=82=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JiraTimeBotForm/Job.cs | 72 +++++++++++++++++++ .../TasksProcessors/ITasksProcessor.cs | 12 ++++ .../TasksProcessors/MeetingProcessor.cs | 33 +++++++++ .../TasksProcessors/WorkLogTasksProcessor.cs | 31 ++++++++ 4 files changed, 148 insertions(+) create mode 100644 JiraTimeBotForm/Job.cs create mode 100644 JiraTimeBotForm/TasksProcessors/ITasksProcessor.cs create mode 100644 JiraTimeBotForm/TasksProcessors/MeetingProcessor.cs create mode 100644 JiraTimeBotForm/TasksProcessors/WorkLogTasksProcessor.cs diff --git a/JiraTimeBotForm/Job.cs b/JiraTimeBotForm/Job.cs new file mode 100644 index 0000000..cf79d88 --- /dev/null +++ b/JiraTimeBotForm/Job.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using JiraTimeBotForm.Configuration; +using JiraTimeBotForm.TaskProcessors; +using JiraTimeBotForm.TaskTime; + +namespace JiraTimeBotForm +{ + class Job + { + private readonly ILog _log; + + public Job(ILog log) + { + _log = log; + } + + public Task DoTheJob(Settings settings, ITasksProcessor tasksProcessor, CancellationToken cancellationToken) + { + _log.Info("Начинаем работу"); + + return Task.Run(() => DoTheJobImpl(settings, tasksProcessor, cancellationToken), cancellationToken); + } + + private void DoTheJobImpl(Settings settings, ITasksProcessor tasksProcessor, CancellationToken cancellationToken) + { + var taskDiscoverer = new TaskTimeDiscoverer(_log); + + int daysDiff = 0; + + while (true) + { + DateTime date = DateTime.Now.Date.AddDays(daysDiff); + + List taskTimes = taskDiscoverer.GetTaskTimes(settings, date, cancellationToken); + + if (cancellationToken.IsCancellationRequested) + { + return; + } + + if (!taskTimes.Any()) + { + _log.Warn($"{date:dd.MM.yyyy} вы не сделали ничего полезного =) Использую предыдущий день."); + daysDiff--; + if (daysDiff < -7) + { + _log.Error("Не нашли ни одного коммита за предыдущие 7 дней. Возможно вы в отпуске? Выхожу."); + return; + } + + continue; + } + + _log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:"); + foreach (var taskTime in taskTimes) + { + _log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}"); + } + + tasksProcessor.Process(date, taskTimes, settings); + + _log.Info("Готово."); + return; + } + } + + } +} diff --git a/JiraTimeBotForm/TasksProcessors/ITasksProcessor.cs b/JiraTimeBotForm/TasksProcessors/ITasksProcessor.cs new file mode 100644 index 0000000..4916793 --- /dev/null +++ b/JiraTimeBotForm/TasksProcessors/ITasksProcessor.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using JiraTimeBotForm.Configuration; +using JiraTimeBotForm.TaskTime; + +namespace JiraTimeBotForm.TaskProcessors +{ + interface ITasksProcessor + { + void Process(DateTime date, List taskTimes, Settings settings); + } +} diff --git a/JiraTimeBotForm/TasksProcessors/MeetingProcessor.cs b/JiraTimeBotForm/TasksProcessors/MeetingProcessor.cs new file mode 100644 index 0000000..b337f2d --- /dev/null +++ b/JiraTimeBotForm/TasksProcessors/MeetingProcessor.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JiraTimeBotForm.Configuration; +using JiraTimeBotForm.JiraIntegration; +using JiraTimeBotForm.TaskProcessors; +using JiraTimeBotForm.TaskTime; + +namespace JiraTimeBotForm.TasksProcessors +{ + class MeetingProcessor : ITasksProcessor + { + private readonly ILog _log; + + public MeetingProcessor(ILog log) + { + _log = log; + } + + public void Process(DateTime date, List taskTimes, Settings settings) + { + var jira = new JiraApi(settings, _log); + + _log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:"); + + foreach (var taskTime in taskTimes.OrderByDescending(f => f.Time)) + { + var taskName = jira.GetTaskName(taskTime.Branch); + _log.Trace($" - [{taskTime.Branch}, коммитов {taskTime.Commits}]: {taskName} - {taskTime.Time}"); + } + } + } +} diff --git a/JiraTimeBotForm/TasksProcessors/WorkLogTasksProcessor.cs b/JiraTimeBotForm/TasksProcessors/WorkLogTasksProcessor.cs new file mode 100644 index 0000000..2c317f9 --- /dev/null +++ b/JiraTimeBotForm/TasksProcessors/WorkLogTasksProcessor.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using JiraTimeBotForm.Configuration; +using JiraTimeBotForm.JiraIntegration; +using JiraTimeBotForm.TaskProcessors; +using JiraTimeBotForm.TaskTime; + +namespace JiraTimeBotForm.TasksProcessors +{ + class WorkLogTasksProcessor : ITasksProcessor + { + private readonly ILog _log; + + public WorkLogTasksProcessor(ILog log) + { + _log = log; + } + + public void Process(DateTime date, List taskTimes, Settings settings) + { + _log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:"); + foreach (var taskTime in taskTimes) + { + _log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}"); + } + + var jira = new JiraApi(settings, _log); + jira.SetTodayWorklog(taskTimes, dummy: settings.DummyMode); + } + } +}