Merge branch 'main' of https://git.is.ulstu.ru/DavidMakarov/PIbd-21_Makarov_Razubaev_CourseWork
This commit is contained in:
commit
6a38f7046c
@ -36,6 +36,7 @@ namespace FactoryBusinessLogic.BusinessLogics
|
|||||||
}
|
}
|
||||||
return products;
|
return products;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveWorkpiecesToPdfFile(ClientSearchModel client, ReportBindingModel model)
|
public void SaveWorkpiecesToPdfFile(ClientSearchModel client, ReportBindingModel model)
|
||||||
{
|
{
|
||||||
_saveToPdf.CreateWorkerDoc(new WorkerPdfInfo
|
_saveToPdf.CreateWorkerDoc(new WorkerPdfInfo
|
||||||
|
@ -18,8 +18,4 @@
|
|||||||
<ProjectReference Include="..\FactoryContracts\FactoryContracts.csproj" />
|
<ProjectReference Include="..\FactoryContracts\FactoryContracts.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="MailWorker\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
using FactoryContracts.BindingModels;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace FactoryBuisinessLogic.MailWorker
|
||||||
|
{
|
||||||
|
public abstract class AbstractMailWorker
|
||||||
|
{
|
||||||
|
protected string _mailLogin = string.Empty;
|
||||||
|
protected string _mailPassword = string.Empty;
|
||||||
|
protected string _smtpClientHost = string.Empty;
|
||||||
|
protected int _smtpClientPort;
|
||||||
|
protected string _popHost = string.Empty;
|
||||||
|
protected int _popPort;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
public AbstractMailWorker(ILogger<AbstractMailWorker> logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MailConfig(MailConfigBindingModel config)
|
||||||
|
{
|
||||||
|
_mailLogin = config.MailLogin;
|
||||||
|
_mailPassword = config.MailPassword;
|
||||||
|
_smtpClientHost = config.SmtpClientHost;
|
||||||
|
_smtpClientPort = config.SmtpClientPort;
|
||||||
|
_popHost = config.PopHost;
|
||||||
|
_popPort = config.PopPort;
|
||||||
|
_logger.LogDebug("Config: {login}, {password}, {clientHost}, {clientPOrt}, {popHost}, {popPort}", _mailLogin, _mailPassword, _smtpClientHost, _smtpClientPort, _popHost, _popPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void MailSendAsync(MailSendInfoBindingModel info)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_mailLogin) || string.IsNullOrEmpty(_mailPassword))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(_smtpClientHost) || _smtpClientPort == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(info.MailAddress) || string.IsNullOrEmpty(info.Subject) || string.IsNullOrEmpty(info.Text))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogDebug("Send Mail: {To}, {Subject}", info.MailAddress, info.Subject);
|
||||||
|
|
||||||
|
await SendMailAsync(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Task SendMailAsync(MailSendInfoBindingModel info);
|
||||||
|
}
|
||||||
|
}
|
43
Factory/FactoryBuisinessLogic/MailWorker/MailKitWorker.cs
Normal file
43
Factory/FactoryBuisinessLogic/MailWorker/MailKitWorker.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using FactoryContracts.BindingModels;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System.Net.Mail;
|
||||||
|
using System.Net.Mime;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace FactoryBuisinessLogic.MailWorker
|
||||||
|
{
|
||||||
|
public class MailKitWorker : AbstractMailWorker
|
||||||
|
{
|
||||||
|
public MailKitWorker(ILogger<MailKitWorker> logger) : base(logger) { }
|
||||||
|
|
||||||
|
protected override async Task SendMailAsync(MailSendInfoBindingModel info)
|
||||||
|
{
|
||||||
|
using var objMailMessage = new MailMessage();
|
||||||
|
using var objSmtpClient = new SmtpClient(_smtpClientHost, _smtpClientPort);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
objMailMessage.From = new MailAddress(_mailLogin);
|
||||||
|
objMailMessage.To.Add(new MailAddress(info.MailAddress));
|
||||||
|
objMailMessage.Subject = info.Subject;
|
||||||
|
objMailMessage.Body = info.Text;
|
||||||
|
objMailMessage.SubjectEncoding = Encoding.UTF8;
|
||||||
|
objMailMessage.BodyEncoding = Encoding.UTF8;
|
||||||
|
Attachment attachment = new Attachment("D:\\temp\\report.pdf", new ContentType(MediaTypeNames.Application.Pdf));
|
||||||
|
objMailMessage.Attachments.Add(attachment);
|
||||||
|
|
||||||
|
objSmtpClient.UseDefaultCredentials = false;
|
||||||
|
objSmtpClient.EnableSsl = true;
|
||||||
|
objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
|
||||||
|
objSmtpClient.Credentials = new NetworkCredential(_mailLogin, _mailPassword);
|
||||||
|
|
||||||
|
await Task.Run(() => objSmtpClient.Send(objMailMessage));
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
namespace FactoryContracts.BindingModels
|
||||||
|
{
|
||||||
|
public class MailConfigBindingModel
|
||||||
|
{
|
||||||
|
public string MailLogin { get; set; } = string.Empty;
|
||||||
|
public string MailPassword { get; set; } = string.Empty;
|
||||||
|
public string SmtpClientHost { get; set; } = string.Empty;
|
||||||
|
public int SmtpClientPort { get; set; }
|
||||||
|
public string PopHost { get; set; } = string.Empty;
|
||||||
|
public int PopPort { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
namespace FactoryContracts.BindingModels
|
||||||
|
{
|
||||||
|
public class MailSendInfoBindingModel
|
||||||
|
{
|
||||||
|
public string MailAddress { get; set; } = string.Empty;
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
public string Text { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
public class WorkpieceTimeReportViewModel
|
public class WorkpieceTimeReportViewModel
|
||||||
{
|
{
|
||||||
public string WorkpieceName { get; set; } = string.Empty;
|
public string WorkpieceName { get; set; } = string.Empty;
|
||||||
public List<string> ExecutionPhases { get; set; } = new();
|
public List<ExecutionPhaseViewModel> ExecutionPhases { get; set; } = new();
|
||||||
public List<string> Machines { get; set; } = new();
|
public List<MachineViewModel> Machines { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,5 +103,31 @@ namespace FactoryDatabaseImplement.Implements
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<WorkpieceTimeReportViewModel> GetTimeReport(ClientSearchModel client, ReportBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new FactoryDatabase();
|
||||||
|
return context.Workpieces
|
||||||
|
.Include(x => x.Client)
|
||||||
|
.Include(x => x.PlanProductions)
|
||||||
|
.ThenInclude(x => x.PlanProduction)
|
||||||
|
.Select(x => new WorkpieceTimeReportViewModel
|
||||||
|
{
|
||||||
|
WorkpieceName = x.WorkpieceName,
|
||||||
|
Machines = context.PlanProductionWorkpieces
|
||||||
|
.Include(x => x.PlanProduction)
|
||||||
|
.Where(ppw => ppw.WorkpieceId == x.Id)
|
||||||
|
.Select(ppw => ppw.PlanProduction.Machines
|
||||||
|
.Where(m => m.PlanProductionId == ppw.PlanProductionId)
|
||||||
|
.Select(m => m.Machine.GetViewModel).ToList()).FirstOrDefault()!,
|
||||||
|
ExecutionPhases = context.ExecutionPhases
|
||||||
|
.Where(ep => ep.PlanProductionId.HasValue)
|
||||||
|
.Include(ep => ep.PlanProduction)
|
||||||
|
.Where(ep => ep.PlanProduction.Workpieces
|
||||||
|
.FirstOrDefault(y => y.WorkpieceId == x.Id) != null)
|
||||||
|
.Select(x => x.GetViewModel).ToList()
|
||||||
|
|
||||||
|
}).ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using FactoryContracts.BindingModels;
|
using FactoryBuisinessLogic.MailWorker;
|
||||||
|
using FactoryContracts.BindingModels;
|
||||||
using FactoryContracts.BusinessLogicsContracts;
|
using FactoryContracts.BusinessLogicsContracts;
|
||||||
using FactoryContracts.SearchModels;
|
using FactoryContracts.SearchModels;
|
||||||
using FactoryContracts.ViewModels;
|
using FactoryContracts.ViewModels;
|
||||||
@ -19,13 +20,14 @@ namespace FactoryStorekeeperApp.Controllers
|
|||||||
private readonly IProductLogic productLogic;
|
private readonly IProductLogic productLogic;
|
||||||
private readonly IPlanProductionLogic planProductionLogic;
|
private readonly IPlanProductionLogic planProductionLogic;
|
||||||
private readonly IStorekeeperReportLogic storekeeperReportLogic;
|
private readonly IStorekeeperReportLogic storekeeperReportLogic;
|
||||||
|
private readonly AbstractMailWorker abstractMailWorker;
|
||||||
|
|
||||||
private static bool IsLoggedIn { get { return Client.client != null; } }
|
private static bool IsLoggedIn { get { return Client.client != null; } }
|
||||||
|
|
||||||
public HomeController(ILogger<HomeController> logger, IClientLogic clientLogic,
|
public HomeController(ILogger<HomeController> logger, IClientLogic clientLogic,
|
||||||
IRequirementLogic requirementLogic, IProductLogic productLogic,
|
IRequirementLogic requirementLogic, IProductLogic productLogic,
|
||||||
IMachineLogic machineLogic, IPlanProductionLogic planProductionLogic,
|
IMachineLogic machineLogic, IPlanProductionLogic planProductionLogic,
|
||||||
IStorekeeperReportLogic storekeeperReportLogic)
|
IStorekeeperReportLogic storekeeperReportLogic, AbstractMailWorker abstractMailWorker)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
this.clientLogic = clientLogic;
|
this.clientLogic = clientLogic;
|
||||||
@ -34,6 +36,7 @@ namespace FactoryStorekeeperApp.Controllers
|
|||||||
this.machineLogic = machineLogic;
|
this.machineLogic = machineLogic;
|
||||||
this.planProductionLogic = planProductionLogic;
|
this.planProductionLogic = planProductionLogic;
|
||||||
this.storekeeperReportLogic = storekeeperReportLogic;
|
this.storekeeperReportLogic = storekeeperReportLogic;
|
||||||
|
this.abstractMailWorker = abstractMailWorker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
@ -538,8 +541,13 @@ namespace FactoryStorekeeperApp.Controllers
|
|||||||
DateTo = dateto,
|
DateTo = dateto,
|
||||||
FileName="D:\\temp\\report.pdf"
|
FileName="D:\\temp\\report.pdf"
|
||||||
});
|
});
|
||||||
// TODO: implement sending
|
abstractMailWorker.MailSendAsync(new MailSendInfoBindingModel
|
||||||
throw new NotImplementedException();
|
{
|
||||||
|
MailAddress = Client.client.Email,
|
||||||
|
Subject = $"Отчет по станкам пользователя {Client.client.Login}",
|
||||||
|
Text = $"Отчет по станкам с {datefrom.ToShortDateString()} по {dateto.ToShortDateString()}"
|
||||||
|
});
|
||||||
|
return Redirect("~/Home/Index");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
using FactoryBuisinessLogic.MailWorker;
|
||||||
using FactoryBusinessLogic.BusinessLogics;
|
using FactoryBusinessLogic.BusinessLogics;
|
||||||
using FactoryBusinessLogic.OfficePackage;
|
using FactoryBusinessLogic.OfficePackage;
|
||||||
using FactoryBusinessLogic.OfficePackage.Implements;
|
using FactoryBusinessLogic.OfficePackage.Implements;
|
||||||
|
using FactoryContracts.BindingModels;
|
||||||
using FactoryContracts.BusinessLogicsContracts;
|
using FactoryContracts.BusinessLogicsContracts;
|
||||||
using FactoryContracts.StoragesContracts;
|
using FactoryContracts.StoragesContracts;
|
||||||
using FactoryDatabaseImplement.Implements;
|
using FactoryDatabaseImplement.Implements;
|
||||||
@ -25,10 +27,24 @@ builder.Services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
|
|||||||
builder.Services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
|
builder.Services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
|
||||||
builder.Services.AddTransient<AbstractSaveToWord, SaveToWord>();
|
builder.Services.AddTransient<AbstractSaveToWord, SaveToWord>();
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
|
||||||
|
|
||||||
builder.Services.AddControllersWithViews();
|
builder.Services.AddControllersWithViews();
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
|
var mailSender = app.Services.GetService<AbstractMailWorker>();
|
||||||
|
|
||||||
|
mailSender?.MailConfig(new MailConfigBindingModel
|
||||||
|
{
|
||||||
|
MailLogin = builder.Configuration?.GetSection("MailLogin")?.Value?.ToString() ?? string.Empty,
|
||||||
|
MailPassword = builder.Configuration?.GetSection("MailPassword")?.Value?.ToString() ?? string.Empty,
|
||||||
|
SmtpClientHost = builder.Configuration?.GetSection("SmtpClientHost")?.Value?.ToString() ?? string.Empty,
|
||||||
|
SmtpClientPort = Convert.ToInt32(builder.Configuration?.GetSection("SmtpClientPort")?.Value?.ToString()),
|
||||||
|
PopHost = builder.Configuration?.GetSection("PopHost")?.Value?.ToString() ?? string.Empty,
|
||||||
|
PopPort = Convert.ToInt32(builder.Configuration?.GetSection("PopPort")?.Value?.ToString())
|
||||||
|
});
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
if (!app.Environment.IsDevelopment())
|
if (!app.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
|
@ -7,5 +7,12 @@
|
|||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
|
|
||||||
"IPAddress": "http://localhost:5283/"
|
"IPAddress": "http://localhost:5283/",
|
||||||
|
|
||||||
|
"SmtpClientHost": "smtp.gmail.com",
|
||||||
|
"SmtpClientPort": "587",
|
||||||
|
"PopHost": "pop.gmail.com",
|
||||||
|
"PopPort": "995",
|
||||||
|
"MailLogin": "labworker83@gmail.com",
|
||||||
|
"MailPassword": "wpxc drvx lhqb uqpe"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user