338 lines
12 KiB
C#
338 lines
12 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
||
using Microsoft.AspNetCore.Mvc.Routing;
|
||
using ServiceStationBusinessLogic.MailKitWorker;
|
||
using ServiceStationContracts.BindingModels;
|
||
using ServiceStationContracts.BusinessLogic;
|
||
using ServiceStationContracts.SearchModels;
|
||
using ServiceStationContracts.ViewModels;
|
||
using Newtonsoft.Json;
|
||
using ServiceStationContracts.HelperModels;
|
||
|
||
namespace ServiceStationRestAPI.Controllers
|
||
{
|
||
|
||
[Route("api/[controller]/[action]")]
|
||
[ApiController]
|
||
public class MainController : Controller {
|
||
private readonly ILogger _logger;
|
||
private readonly IClientLogic _clientLogic;
|
||
private readonly IExecutorLogic _executorLogic;
|
||
private readonly IReportLogic _reportLogic;
|
||
private readonly ITaskLogic _taskLogic;
|
||
private readonly IWorkLogic _workLogic;
|
||
private readonly IWorkClientLogic _workClientLogic;
|
||
|
||
private readonly AbstractMailWorker _mailWorker;
|
||
|
||
public MainController(ILogger<MainController> logger, IClientLogic clientLogic, IExecutorLogic executorLogic,
|
||
IReportLogic reportLogic, ITaskLogic taskLogic, IWorkLogic workLogic, IWorkClientLogic workClientLogic,
|
||
AbstractMailWorker mailWorker) {
|
||
_logger = logger;
|
||
_clientLogic = clientLogic;
|
||
_executorLogic = executorLogic;
|
||
_reportLogic = reportLogic;
|
||
_taskLogic = taskLogic;
|
||
_workLogic = workLogic;
|
||
_workClientLogic = workClientLogic;
|
||
_mailWorker = mailWorker;
|
||
}
|
||
|
||
[HttpPost]
|
||
public void Register(ExecutorBindingModel model) {
|
||
try {
|
||
_executorLogic.Create(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка регистрации");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public ExecutorViewModel? Login(string email, string password) {
|
||
try {
|
||
return _executorLogic.ReadElement(new ExecutorSearchModel {
|
||
Email = email,
|
||
Password = password
|
||
});
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка входа в систему");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void UpdateData(ExecutorBindingModel model) {
|
||
try {
|
||
_executorLogic.Update(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка обновления данных");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
public WorkBindingModel Make_New_Record_Work(WorkFromWebBindingModel model) {
|
||
var record = new WorkBindingModel {
|
||
Id = model.Id,
|
||
Date = model.Date,
|
||
Price = model.Price,
|
||
ExecutorId = model.ExecutorId,
|
||
TaskByWorkId = model.TaskId,
|
||
ClientList = new()
|
||
};
|
||
|
||
foreach (int id in model.client_ids) {
|
||
var client = _clientLogic.ReadElement(new ClientSearchModel { Id = id }) ?? throw new Exception("Ошибка получения данных");
|
||
record.ClientList.Add(client.Id, (client));
|
||
}
|
||
return record;
|
||
}
|
||
|
||
[HttpPost]
|
||
public void CreateWork(WorkFromWebBindingModel model) {
|
||
var record = Make_New_Record_Work(model);
|
||
try {
|
||
_workLogic.Create(record);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка создания работы");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void UpdateWork(WorkFromWebBindingModel model) {
|
||
var record = Make_New_Record_Work(model);
|
||
try {
|
||
_workLogic.Update(record);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка обновления работы");
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void DeleteWork(WorkBindingModel model) {
|
||
try {
|
||
_workLogic.Delete(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка удаления работы");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public List<WorkViewModel>? GetWorks(int _executorId) {
|
||
try {
|
||
return _workLogic.ReadList(new WorkSearchModel {
|
||
ExecutorId = _executorId
|
||
});
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка получения работ исполнителя || id = {_executorId}");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public List<WorkViewModel>? GerWorksDate(string _start, string _end) {
|
||
try {
|
||
var data = _workLogic.ReadList(new WorkSearchModel {
|
||
DateFrom = DateTime.Parse(_start),
|
||
DateTo = DateTime.Parse(_end)
|
||
});
|
||
return data;
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка получения данных");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public List<List<string>> GetWork(int _workId) {
|
||
try {
|
||
var list = new List<List<string>>();
|
||
var work_info = _workLogic.ReadElement(new WorkSearchModel { Id = _workId }) ?? throw new Exception("Ошибка получения данных");
|
||
list.Add(new List<string> { work_info.TaskByWorkId.ToString() });
|
||
|
||
List<string> client_list = new();
|
||
foreach (var client in work_info.ClientList) {
|
||
var record = new ClientViewModel {
|
||
Id = client.Key,
|
||
FIO = client.Value.FIO,
|
||
};
|
||
string jsRec = JsonConvert.SerializeObject(record);
|
||
client_list.Add(jsRec);
|
||
}
|
||
list.Add(client_list);
|
||
return list;
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка получения работы || work_id = {_workId}");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public WorkViewModel GetWorkView(int _workId) {
|
||
try {
|
||
var work = _workLogic.ReadElement(new WorkSearchModel { Id = _workId }) ?? throw new Exception("Ошибка получения данных");
|
||
return work;
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка получения работы || work_id = {_workId}");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void CreateTask(TaskBindingModel model) {
|
||
try {
|
||
_taskLogic.Create(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка создания задачи");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public List<TaskViewModel>? GetTasks() {
|
||
try {
|
||
return _taskLogic.ReadList();
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка получения задач");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public TaskViewModel? GetTask (int _taskId) {
|
||
try {
|
||
return _taskLogic.ReadElement(new TaskSearchModel { Id = _taskId });
|
||
}
|
||
catch(Exception ex) {
|
||
_logger.LogError(ex, "Ошибка получения задачи");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void CreateClient(ClientBindingModel model) {
|
||
try {
|
||
_clientLogic.Create(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, $"Ошибка добавление клиента");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
|
||
[HttpGet]
|
||
public List<ClientViewModel>? GetClients() {
|
||
try {
|
||
return _clientLogic.ReadList();
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка получения клиентов");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public List<WorkClientModel>? GetWorkClients(int _clientId) {
|
||
try {
|
||
return _workClientLogic.ReadList(new WorkClientSearchModel {
|
||
client_id = _clientId
|
||
});
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка получения данных");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void AddClientPoints(WorkClientModel model) {
|
||
try {
|
||
_workClientLogic.Add_Points(model);
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка добавления баллов");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
public List<int> Make_Report_Ids(string _ids) {
|
||
var ids = new List<int>();
|
||
foreach (char id in _ids) {
|
||
if (int.TryParse(id.ToString(), out int _id)) {
|
||
ids.Add(_id);
|
||
}
|
||
}
|
||
return ids;
|
||
}
|
||
|
||
[HttpGet]
|
||
public byte[]? CreateWordReport(string _ids) {
|
||
var ids_list = Make_Report_Ids(_ids);
|
||
try {
|
||
var document = _reportLogic.SaveToWordFile(new ReportBindeingModel {
|
||
ids = ids_list
|
||
});
|
||
return document;
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка создания документа");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpGet]
|
||
public byte[]? CreateXlsxReport(string _ids) {
|
||
var ids_list = Make_Report_Ids(_ids);
|
||
try {
|
||
var document = _reportLogic.SaveToExcelFile(new ReportBindeingModel {
|
||
ids = ids_list
|
||
});
|
||
return document;
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка создания документа");
|
||
throw;
|
||
}
|
||
}
|
||
|
||
[HttpPost]
|
||
public void SendReportPdfMail(ReportBindeingModel model) {
|
||
try {
|
||
var _document = _reportLogic.SaveToPdfFile(model);
|
||
|
||
MemoryStream stream = new();
|
||
_document.Save(stream, true);
|
||
byte[] data = stream.ToArray();
|
||
|
||
_mailWorker.MailSendAsync(new() {
|
||
MailAddress = model.EmailAddress,
|
||
Subject = "Отчет",
|
||
Text = $"Отчет по работам с указания назначенных заданий за период с {model.DateFrom.ToLongDateString()} по " +
|
||
$"{model.DateTo.ToShortDateString()}",
|
||
document = data
|
||
});
|
||
}
|
||
catch (Exception ex) {
|
||
_logger.LogError(ex, "Ошибка создания/отправки отчета на почту");
|
||
throw;
|
||
}
|
||
}
|
||
}
|
||
}
|