8 лаба

This commit is contained in:
spacyboy 2024-06-22 10:36:54 +04:00
parent 5eaa15c044
commit 9ece512f60
60 changed files with 2289 additions and 1458 deletions

4
.gitignore vendored
View File

@ -398,3 +398,7 @@ FodyWeavers.xsd
# JetBrains Rider # JetBrains Rider
*.sln.iml *.sln.iml
# dll файлы
*.dll
/SecuritySystem/ImplementationExtensions

View File

@ -0,0 +1,63 @@
using SecuritySystemContracts.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystem
{
public static class DataGridViewExtension
{
public static void FillandConfigGrid<T>(this DataGridView grid, List<T>? data)
{
if (data == null)
{
return;
}
grid.DataSource = data;
//получаем тип
var type = typeof(T);
//получаем свойства
var properties = type.GetProperties();
foreach (DataGridViewColumn column in grid.Columns)
{
var property = properties.FirstOrDefault(x => x.Name == column.Name);
if (property == null)
{
throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }");
}
var attribute = property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault();
if (attribute == null)
{
throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }");
}
// ищем нужный нам атрибут
if (attribute is ColumnAttribute columnAttr)
{
column.HeaderText = columnAttr.Title;
column.Visible = columnAttr.Visible;
if (columnAttr.IsUseAutoSize)
{
column.AutoSizeMode = (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode),
columnAttr.GridViewAutoSize.ToString());
}
else
{
column.Width = columnAttr.Width;
}
}
}
}
}
}

View File

@ -15,82 +15,73 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormClients : Form public partial class FormClients : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IClientLogic _clientLogic; private readonly IClientLogic _clientLogic;
public FormClients(ILogger<FormClients> logger, IClientLogic clientLogic) public FormClients(ILogger<FormClients> logger, IClientLogic clientLogic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_clientLogic = clientLogic; _clientLogic = clientLogic;
} }
private void FormClients_Load(object sender, EventArgs e) private void FormClients_Load(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
private void LoadData() private void LoadData()
{ {
_logger.LogInformation("Загрузка клиентов"); try
{
dataGridView.FillandConfigGrid(_clientLogic.ReadList(null));
_logger.LogInformation("Загрузка клиентов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки клиентов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
try private void ButtonDelete_Click(object sender, EventArgs e)
{ {
var list = _clientLogic.ReadList(null); if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (list != null) _logger.LogInformation("Удаление клиента");
{
dataGridView.DataSource = list;
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Успешная загрузка клиентов"); try
} {
catch (Exception ex) if (!_clientLogic.Delete(new ClientBindingModel
{ {
_logger.LogError(ex, "Ошибка загрузки клиентов"); Id = id
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); }))
} {
} throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
private void ButtonDelete_Click(object sender, EventArgs e) LoadData();
{ }
if (dataGridView.SelectedRows.Count == 1) catch (Exception ex)
{ {
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) _logger.LogError(ex, "Ошибка удаления компонента");
{ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); }
}
}
}
_logger.LogInformation("Удаление клиента"); private void ButtonRef_Click(object sender, EventArgs e)
{
try LoadData();
{ }
if (!_clientLogic.Delete(new ClientBindingModel }
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
} }

View File

@ -14,125 +14,125 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormImplementer : Form public partial class FormImplementer : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IImplementerLogic _logic; private readonly IImplementerLogic _logic;
private int? _id; private int? _id;
public int Id { set { _id = value; } } public int Id { set { _id = value; } }
//конструктор //конструктор
public FormImplementer(ILogger<FormImplementer> logger, IImplementerLogic logic) public FormImplementer(ILogger<FormImplementer> logger, IImplementerLogic logic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_logic = logic; _logic = logic;
} }
//при загрузке формы //при загрузке формы
private void FormImplementer_Load(object sender, EventArgs e) private void FormImplementer_Load(object sender, EventArgs e)
{ {
//проверка на заполнение поля id. Если оно заполнено, то пробуем получить запись и выести её на экран //проверка на заполнение поля id. Если оно заполнено, то пробуем получить запись и выести её на экран
if (_id.HasValue) if (_id.HasValue)
{ {
try try
{ {
_logger.LogInformation("Получение исполнителя"); _logger.LogInformation("Получение исполнителя");
var view = _logic.ReadElement(new ImplementerSearchModel { Id = _id.Value }); var view = _logic.ReadElement(new ImplementerSearchModel { Id = _id.Value });
if (view != null) if (view != null)
{ {
textBoxImplementerFIO.Text = view.ImplementerFIO; textBoxImplementerFIO.Text = view.ImplementerFIO;
textBoxPassword.Text = view.Password; textBoxPassword.Text = view.Password;
textBoxWorkExperience.Text = view.WorkExperience.ToString(); textBoxWorkExperience.Text = view.WorkExperience.ToString();
textBoxQualification.Text = view.Qualification.ToString(); textBoxQualification.Text = view.Qualification.ToString();
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка получения исполнителя"); _logger.LogError(ex, "Ошибка получения исполнителя");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }
private void ButtonSave_Click(object sender, EventArgs e) private void ButtonSave_Click(object sender, EventArgs e)
{ {
//проверка на заполнение поля с ФИО исполнителя //проверка на заполнение поля с ФИО исполнителя
if (string.IsNullOrEmpty(textBoxImplementerFIO.Text)) if (string.IsNullOrEmpty(textBoxImplementerFIO.Text))
{ {
MessageBox.Show("Заполните ФИО", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Заполните ФИО", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
//проверка на заполнение поля с паролем //проверка на заполнение поля с паролем
if (string.IsNullOrEmpty(textBoxPassword.Text)) if (string.IsNullOrEmpty(textBoxPassword.Text))
{ {
MessageBox.Show("Введите пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Введите пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
//проверка на заполнение поля со стажем //проверка на заполнение поля со стажем
if (string.IsNullOrEmpty(textBoxWorkExperience.Text)) if (string.IsNullOrEmpty(textBoxWorkExperience.Text))
{ {
MessageBox.Show("Введите ваш стаж", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Введите ваш стаж", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
//проверка на заполнение поля с квалификацией //проверка на заполнение поля с квалификацией
if (string.IsNullOrEmpty(textBoxQualification.Text)) if (string.IsNullOrEmpty(textBoxQualification.Text))
{ {
MessageBox.Show("Введите свою квалификацию", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Введите свою квалификацию", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
_logger.LogInformation("Сохранение исполнителя"); _logger.LogInformation("Сохранение исполнителя");
try try
{ {
var model = new ImplementerBindingModel var model = new ImplementerBindingModel
{ {
Id = _id ?? 0, Id = _id ?? 0,
ImplementerFIO = textBoxImplementerFIO.Text, ImplementerFIO = textBoxImplementerFIO.Text,
Password = textBoxPassword.Text, Password = textBoxPassword.Text,
WorkExperience = Convert.ToInt16(textBoxWorkExperience.Text), WorkExperience = Convert.ToInt16(textBoxWorkExperience.Text),
Qualification = Convert.ToInt16(textBoxQualification.Text) Qualification = Convert.ToInt16(textBoxQualification.Text)
}; };
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult) if (!operationResult)
{ {
throw new Exception("Ошибка при сохранеии. Дополнительная информация в логах."); throw new Exception("Ошибка при сохранеии. Дополнительная информация в логах.");
} }
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
Close(); Close();
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка сохранения исполнителя"); _logger.LogError(ex, "Ошибка сохранения исполнителя");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ButtonCancel_Click(object sender, EventArgs e) private void ButtonCancel_Click(object sender, EventArgs e)
{ {
DialogResult = DialogResult.Cancel; DialogResult = DialogResult.Cancel;
Close(); Close();
} }
} }
} }

View File

@ -1,5 +1,7 @@
using SecuritySystemContracts.BindingModels; using SecuritySystemBusinessLogic.BusinessLogic;
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,115 +15,101 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormImplementers : Form public partial class FormImplementers : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IImplementerLogic _logic; private readonly IImplementerLogic _logic;
public FormImplementers(ILogger<FormSensors> logger, IImplementerLogic logic) public FormImplementers(ILogger<FormSensors> logger, IImplementerLogic logic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_logic = logic; _logic = logic;
} }
private void FormImplementers_Load(object sender, EventArgs e) private void FormImplementers_Load(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillandConfigGrid(_logic.ReadList(null));
//растягиваем колонку Название на всю ширину, колонку Id скрываем _logger.LogInformation("Загрузка исполнителей");
if (list != null) }
{ catch (Exception ex)
dataGridView.DataSource = list; {
dataGridView.Columns["Id"].Visible = false; _logger.LogError(ex, "Ошибка загрузки исполнителей");
dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка исполнителей"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
catch (Exception ex) }
{
_logger.LogError(ex, "Ошибка загрузки исполнителей");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); private void ButtonCreate_Click(object sender, EventArgs e)
} {
} var form = DependencyManager.Instance.Resolve<FormImplementer>();
private void ButtonCreate_Click(object sender, EventArgs e) if (form.ShowDialog() == DialogResult.OK)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); LoadData();
}
}
if (service is FormImplementer form) private void ButtonChange_Click(object sender, EventArgs e)
{ {
if (form.ShowDialog() == DialogResult.OK) if (dataGridView.SelectedRows.Count == 1)
{ {
LoadData(); var form = DependencyManager.Instance.Resolve<FormImplementer>();
}
}
}
private void ButtonChange_Click(object sender, EventArgs e) form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer));
if (service is FormImplementer form) if (form.ShowDialog() == DialogResult.OK)
{ {
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); LoadData();
}
}
}
if (form.ShowDialog() == DialogResult.OK) private void ButtonDelete_Click(object sender, EventArgs e)
{ {
LoadData(); //проверяем наличие выделенной строки
} if (dataGridView.SelectedRows.Count == 1)
} {
} if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
} {
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
private void ButtonDelete_Click(object sender, EventArgs e) _logger.LogInformation("Удаление исполнителя");
{
//проверяем наличие выделенной строки
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление исполнителя"); try
{
if (!_logic.Delete(new ImplementerBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
try LoadData();
{ }
if (!_logic.Delete(new ImplementerBindingModel catch (Exception ex)
{ {
Id = id _logger.LogError(ex, "Ошибка удаления исполнителя");
})) MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
{ }
throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); }
} }
}
LoadData(); private void ButtonUpdate_Click(object sender, EventArgs e)
} {
catch (Exception ex) LoadData();
{ }
_logger.LogError(ex, "Ошибка удаления исполнителя"); }
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonUpdate_Click(object sender, EventArgs e)
{
LoadData();
}
}
} }

View File

@ -13,48 +13,40 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormMails : Form public partial class FormMails : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IMessageInfoLogic _messageLogic; private readonly IMessageInfoLogic _messageLogic;
public FormMails(ILogger<FormMails> logger, IMessageInfoLogic messageLogic) public FormMails(ILogger<FormMails> logger, IMessageInfoLogic messageLogic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_messageLogic = messageLogic; _messageLogic = messageLogic;
} }
private void FormMails_Load(object sender, EventArgs e) private void FormMails_Load(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
private void LoadData() private void LoadData()
{ {
_logger.LogInformation("Загрузка писем"); _logger.LogInformation("Загрузка писем");
try try
{ {
var list = _messageLogic.ReadList(null); dataGridView.FillandConfigGrid(_messageLogic.ReadList(null));
if (list != null) _logger.LogInformation("Успешная загрузка писем");
{ }
dataGridView.DataSource = list; catch (Exception ex)
dataGridView.Columns["MessageId"].Visible = false; {
dataGridView.Columns["ClientId"].Visible = false; _logger.LogError(ex, "Ошибка загрузки писем");
dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
}
_logger.LogInformation("Успешная загрузка писем"); }
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки писем");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
} }

View File

@ -33,6 +33,7 @@
toolStripMenuItem = new ToolStripMenuItem(); toolStripMenuItem = new ToolStripMenuItem();
SensorToolStripMenuItem = new ToolStripMenuItem(); SensorToolStripMenuItem = new ToolStripMenuItem();
SecureToolStripMenuItem = new ToolStripMenuItem(); SecureToolStripMenuItem = new ToolStripMenuItem();
письмаToolStripMenuItem = new ToolStripMenuItem();
reportsToolStripMenuItem = new ToolStripMenuItem(); reportsToolStripMenuItem = new ToolStripMenuItem();
sensorsToolStripMenuItem = new ToolStripMenuItem(); sensorsToolStripMenuItem = new ToolStripMenuItem();
sensorSecuresToolStripMenuItem = new ToolStripMenuItem(); sensorSecuresToolStripMenuItem = new ToolStripMenuItem();
@ -45,7 +46,7 @@
buttonCreateOrder = new Button(); buttonCreateOrder = new Button();
buttonRef = new Button(); buttonRef = new Button();
buttonIssuedOrder = new Button(); buttonIssuedOrder = new Button();
письмаToolStripMenuItem = new ToolStripMenuItem(); createBackUpToolStripMenuItem = new ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
@ -64,7 +65,7 @@
// menuStrip1 // menuStrip1
// //
menuStrip1.ImageScalingSize = new Size(20, 20); menuStrip1.ImageScalingSize = new Size(20, 20);
menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, reportsToolStripMenuItem, workWithClientsToolStripMenuItem, workWithImplementerToolStripMenuItem, startingWorkToolStripMenuItem }); menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, reportsToolStripMenuItem, workWithClientsToolStripMenuItem, workWithImplementerToolStripMenuItem, startingWorkToolStripMenuItem, createBackUpToolStripMenuItem });
menuStrip1.Location = new Point(0, 0); menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Padding = new Padding(5, 2, 0, 2); menuStrip1.Padding = new Padding(5, 2, 0, 2);
@ -82,17 +83,24 @@
// SensorToolStripMenuItem // SensorToolStripMenuItem
// //
SensorToolStripMenuItem.Name = "SensorToolStripMenuItem"; SensorToolStripMenuItem.Name = "SensorToolStripMenuItem";
SensorToolStripMenuItem.Size = new Size(180, 22); SensorToolStripMenuItem.Size = new Size(130, 22);
SensorToolStripMenuItem.Text = "Заготовки"; SensorToolStripMenuItem.Text = "Заготовки";
SensorToolStripMenuItem.Click += SensorToolStripMenuItem_Click; SensorToolStripMenuItem.Click += SensorToolStripMenuItem_Click;
// //
// SecureToolStripMenuItem // SecureToolStripMenuItem
// //
SecureToolStripMenuItem.Name = "SecureToolStripMenuItem"; SecureToolStripMenuItem.Name = "SecureToolStripMenuItem";
SecureToolStripMenuItem.Size = new Size(180, 22); SecureToolStripMenuItem.Size = new Size(130, 22);
SecureToolStripMenuItem.Text = "Изделия"; SecureToolStripMenuItem.Text = "Изделия";
SecureToolStripMenuItem.Click += SecureToolStripMenuItem_Click; SecureToolStripMenuItem.Click += SecureToolStripMenuItem_Click;
// //
// письмаToolStripMenuItem
//
письмаToolStripMenuItem.Name = "письмаToolStripMenuItem";
письмаToolStripMenuItem.Size = new Size(130, 22);
письмаToolStripMenuItem.Text = "Письма";
письмаToolStripMenuItem.Click += MailsToolStripMenuItem_Click;
//
// reportsToolStripMenuItem // reportsToolStripMenuItem
// //
reportsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { sensorsToolStripMenuItem, sensorSecuresToolStripMenuItem, ordersToolStripMenuItem }); reportsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { sensorsToolStripMenuItem, sensorSecuresToolStripMenuItem, ordersToolStripMenuItem });
@ -189,12 +197,12 @@
buttonIssuedOrder.UseVisualStyleBackColor = true; buttonIssuedOrder.UseVisualStyleBackColor = true;
buttonIssuedOrder.Click += ButtonIssuedOrder_Click; buttonIssuedOrder.Click += ButtonIssuedOrder_Click;
// //
// письмаToolStripMenuItem // createBackUpToolStripMenuItem
// //
письмаToolStripMenuItem.Name = "письмаToolStripMenuItem"; createBackUpToolStripMenuItem.Name = "createBackUpToolStripMenuItem";
письмаToolStripMenuItem.Size = new Size(180, 22); createBackUpToolStripMenuItem.Size = new Size(97, 20);
письмаToolStripMenuItem.Text = "Письма"; createBackUpToolStripMenuItem.Text = "Создать бекап";
письмаToolStripMenuItem.Click += MailsToolStripMenuItem_Click; createBackUpToolStripMenuItem.Click += CreateBackUpToolStripMenuItem_Click;
// //
// FormMain // FormMain
// //
@ -235,5 +243,6 @@
private Button buttonRef; private Button buttonRef;
private Button buttonIssuedOrder; private Button buttonIssuedOrder;
private ToolStripMenuItem письмаToolStripMenuItem; private ToolStripMenuItem письмаToolStripMenuItem;
private ToolStripMenuItem createBackUpToolStripMenuItem;
} }
} }

View File

@ -1,6 +1,7 @@
using SecuritySystemBusinessLogic.BusinessLogic; using SecuritySystemBusinessLogic.BusinessLogic;
using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using SecuritySystemDataModels.Enums; using SecuritySystemDataModels.Enums;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
@ -25,7 +26,9 @@ namespace SecuritySystem
private readonly IWorkProcess _workProcess; private readonly IWorkProcess _workProcess;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) private readonly IBackUpLogic _backUpLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess, IBackUpLogic backUpLogic)
{ {
InitializeComponent(); InitializeComponent();
@ -33,6 +36,7 @@ namespace SecuritySystem
_orderLogic = orderLogic; _orderLogic = orderLogic;
_reportLogic = reportLogic; _reportLogic = reportLogic;
_workProcess = workProcess; _workProcess = workProcess;
_backUpLogic = backUpLogic;
} }
private void FormMain_Load(object sender, EventArgs e) private void FormMain_Load(object sender, EventArgs e)
@ -46,18 +50,7 @@ namespace SecuritySystem
try try
{ {
var list = _orderLogic.ReadList(null); dataGridView.FillandConfigGrid(_orderLogic.ReadList(null));
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["SecureId"].Visible = false;
dataGridView.Columns["ImplementerId"].Visible = false;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["SecureName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Çàãðóçêà çàêàçîâ"); _logger.LogInformation("Çàãðóçêà çàêàçîâ");
} }
@ -70,34 +63,24 @@ namespace SecuritySystem
private void SensorToolStripMenuItem_Click(object sender, EventArgs e) private void SensorToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSensors)); var form = DependencyManager.Instance.Resolve<FormSensors>();
if (service is FormSensors form) form.ShowDialog();
{
form.ShowDialog();
}
} }
private void SecureToolStripMenuItem_Click(object sender, EventArgs e) private void SecureToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSecures)); var form = DependencyManager.Instance.Resolve<FormSecures>();
if (service is FormSecures form) form.ShowDialog();
{
form.ShowDialog();
}
} }
private void ButtonCreateOrder_Click(object sender, EventArgs e) private void ButtonCreateOrder_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); var form = DependencyManager.Instance.Resolve<FormCreateOrder>();
if (service is FormCreateOrder form)
{
form.ShowDialog();
LoadData();
}
form.ShowDialog();
LoadData();
} }
private void ButtonIssuedOrder_Click(object sender, EventArgs e) private void ButtonIssuedOrder_Click(object sender, EventArgs e)
@ -153,58 +136,69 @@ namespace SecuritySystem
private void SensorSecuresToolStripMenuItem_Click(object sender, EventArgs e) private void SensorSecuresToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportSecureSensors)); var form = DependencyManager.Instance.Resolve<FormReportSecureSensors>();
form.ShowDialog();
if (service is FormReportSecureSensors form)
{
form.ShowDialog();
}
} }
private void OrdersToolStripMenuItem_Click(object sender, EventArgs e) private void OrdersToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); var form = DependencyManager.Instance.Resolve<FormReportOrders>();
if (service is FormReportOrders form) form.ShowDialog();
{
form.ShowDialog();
}
} }
private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormClients)); var form = DependencyManager.Instance.Resolve<FormClients>();
if (service is FormClients form) form.ShowDialog();
{
form.ShowDialog();
}
} }
private void StartingWorkToolStripMenuItem_Click(object sender, EventArgs e) private void StartingWorkToolStripMenuItem_Click(object sender, EventArgs e)
{ {
_workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); _workProcess.DoWork(DependencyManager.Instance.Resolve<IImplementerLogic>()!, _orderLogic);
MessageBox.Show("Ïðîöåññ îáðàáîòêè çàïóùåí", "Ñîîáùåíèå", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Ïðîöåññ îáðàáîòêè çàïóùåí", "Ñîîáùåíèå", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
private void ImplementerToolStripMenuItem_Click(object sender, EventArgs e) private void ImplementerToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); var form = DependencyManager.Instance.Resolve<FormImplementers>();
if (service is FormImplementers form) form.ShowDialog();
{
form.ShowDialog();
}
} }
private void MailsToolStripMenuItem_Click(object sender, EventArgs e) private void MailsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormMails)); var form = DependencyManager.Instance.Resolve<FormMails>();
if (service is FormMails form) form.ShowDialog();
}
private void CreateBackUpToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{ {
form.ShowDialog(); if (_backUpLogic != null)
{
var fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
_backUpLogic.CreateBackUp(new BackUpSaveBinidngModel
{
FolderName = fbd.SelectedPath
});
MessageBox.Show("Áåêàï ñîçäàí", "Ñîîáùåíèå", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }

View File

@ -1,5 +1,6 @@
using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using SecuritySystemContracts.SearchModels; using SecuritySystemContracts.SearchModels;
using SecuritySystemDataModels.Models; using SecuritySystemDataModels.Models;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -15,232 +16,226 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormSecure : Form public partial class FormSecure : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ISecureLogic _logic; private readonly ISecureLogic _logic;
private int? _id; private int? _id;
private Dictionary<int, (ISensorModel, int)> _secureSensors; private Dictionary<int, (ISensorModel, int)> _secureSensors;
public int Id { set { _id = value; } } public int Id { set { _id = value; } }
public FormSecure(ILogger<FormSecure> logger, ISecureLogic logic) public FormSecure(ILogger<FormSecure> logger, ISecureLogic logic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_logic = logic; _logic = logic;
_secureSensors = new Dictionary<int, (ISensorModel, int)>(); _secureSensors = new Dictionary<int, (ISensorModel, int)>();
} }
private void FormSecure_Load(object sender, EventArgs e) private void FormSecure_Load(object sender, EventArgs e)
{ {
if (_id.HasValue) if (_id.HasValue)
{ {
_logger.LogInformation("Загрузка изделия"); _logger.LogInformation("Загрузка изделия");
try try
{ {
var view = _logic.ReadElement(new SecureSearchModel { Id = _id.Value }); var view = _logic.ReadElement(new SecureSearchModel { Id = _id.Value });
if (view != null) if (view != null)
{ {
textBoxName.Text = view.SecureName; textBoxName.Text = view.SecureName;
textBoxPrice.Text = view.Price.ToString(); textBoxPrice.Text = view.Price.ToString();
_secureSensors = view.SecureSensors ?? new Dictionary<int, (ISensorModel, int)>(); _secureSensors = view.SecureSensors ?? new Dictionary<int, (ISensorModel, int)>();
LoadData(); LoadData();
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка загрузки изделия"); _logger.LogError(ex, "Ошибка загрузки изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }
private void LoadData() private void LoadData()
{ {
_logger.LogInformation("Загрузка заготовок для изделия"); _logger.LogInformation("Загрузка заготовок для изделия");
try try
{ {
if (_secureSensors != null) if (_secureSensors != null)
{ {
dataGridView.Rows.Clear(); dataGridView.Rows.Clear();
foreach (var awp in _secureSensors) foreach (var awp in _secureSensors)
{ {
dataGridView.Rows.Add(new object[] { awp.Key, awp.Value.Item1.SensorName, awp.Value.Item2 }); dataGridView.Rows.Add(new object[] { awp.Key, awp.Value.Item1.SensorName, awp.Value.Item2 });
} }
textBoxPrice.Text = CalcPrice().ToString(); textBoxPrice.Text = CalcPrice().ToString();
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка загрузки заготовки для изделия"); _logger.LogError(ex, "Ошибка загрузки заготовки для изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSecureSensor)); var form = DependencyManager.Instance.Resolve<FormSecureSensor>();
if (service is FormSecureSensor form) if (form.ShowDialog() == DialogResult.OK)
{ {
if (form.ShowDialog() == DialogResult.OK) if (form.SensorModel == null)
{ {
if (form.SensorModel == null) return;
{ }
return;
}
_logger.LogInformation("Добавление новой заготовки:{SensorName} - {Count}", form.SensorModel.SensorName, form.Count); _logger.LogInformation("Добавление новой заготовки:{SensorName} - {Count}", form.SensorModel.SensorName, form.Count);
if (_secureSensors.ContainsKey(form.Id)) if (_secureSensors.ContainsKey(form.Id))
{ {
_secureSensors[form.Id] = (form.SensorModel, form.Count); _secureSensors[form.Id] = (form.SensorModel, form.Count);
} }
else else
{ {
_secureSensors.Add(form.Id, (form.SensorModel, form.Count)); _secureSensors.Add(form.Id, (form.SensorModel, form.Count));
} }
LoadData(); LoadData();
} }
} }
}
private void ButtonUpd_Click(object sender, EventArgs e) private void ButtonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSecureSensor)); var form = DependencyManager.Instance.Resolve<FormSecureSensor>();
if (service is FormSecureSensor form) int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
{ form.Id = id;
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); form.Count = _secureSensors[id].Item2;
form.Id = id;
form.Count = _secureSensors[id].Item2;
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
if (form.SensorModel == null) if (form.SensorModel == null)
{ {
return; return;
} }
_logger.LogInformation("Изменение компонента:{SensorName} - {Count}", form.SensorModel.SensorName, form.Count); _logger.LogInformation("Изменение компонента:{SensorName} - {Count}", form.SensorModel.SensorName, form.Count);
_secureSensors[form.Id] = (form.SensorModel, form.Count); _secureSensors[form.Id] = (form.SensorModel, form.Count);
LoadData(); LoadData();
} }
} }
} }
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
try try
{ {
_logger.LogInformation("Удаление заготовки:{SensorName} - {Count}", dataGridView.SelectedRows[0].Cells[1].Value); _logger.LogInformation("Удаление заготовки:{SensorName} - {Count}", dataGridView.SelectedRows[0].Cells[1].Value);
_secureSensors?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value)); _secureSensors?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value));
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
LoadData(); LoadData();
} }
} }
} }
private void ButtonRef_Click(object sender, EventArgs e) private void ButtonRef_Click(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
private void ButtonSave_Click(object sender, EventArgs e) private void ButtonSave_Click(object sender, EventArgs e)
{ {
if (string.IsNullOrEmpty(textBoxName.Text)) if (string.IsNullOrEmpty(textBoxName.Text))
{ {
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
if (string.IsNullOrEmpty(textBoxPrice.Text)) if (string.IsNullOrEmpty(textBoxPrice.Text))
{ {
MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
if (_secureSensors == null || _secureSensors.Count == 0) if (_secureSensors == null || _secureSensors.Count == 0)
{ {
MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
_logger.LogInformation("Сохранение изделия"); _logger.LogInformation("Сохранение изделия");
try try
{ {
var model = new SecureBindingModel var model = new SecureBindingModel
{ {
Id = _id ?? 0, Id = _id ?? 0,
SecureName = textBoxName.Text, SecureName = textBoxName.Text,
Price = Convert.ToDouble(textBoxPrice.Text), Price = Convert.ToDouble(textBoxPrice.Text),
SecureSensors = _secureSensors SecureSensors = _secureSensors
}; };
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult) if (!operationResult)
{ {
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
} }
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
Close(); Close();
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка сохранения изделия"); _logger.LogError(ex, "Ошибка сохранения изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ButtonCancel_Click(object sender, EventArgs e) private void ButtonCancel_Click(object sender, EventArgs e)
{ {
DialogResult = DialogResult.Cancel; DialogResult = DialogResult.Cancel;
Close(); Close();
} }
//в конце умножить на 1.1, так как прибавляем к итоговой стоимости некоторый процент (в данном случае 10%) //в конце умножить на 1.1, так как прибавляем к итоговой стоимости некоторый процент (в данном случае 10%)
private double CalcPrice() private double CalcPrice()
{ {
double price = 0; double price = 0;
foreach (var elem in _secureSensors) foreach (var elem in _secureSensors)
{ {
price += ((elem.Value.Item1?.Cost ?? 0) * elem.Value.Item2); price += ((elem.Value.Item1?.Cost ?? 0) * elem.Value.Item2);
} }
return Math.Round(price * 1.1, 2); return Math.Round(price * 1.1, 2);
} }
} }
} }

View File

@ -1,5 +1,7 @@
using SecuritySystemContracts.BindingModels; using SecuritySystemBusinessLogic.BusinessLogic;
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,113 +15,100 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormSecures : Form public partial class FormSecures : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ISecureLogic _logic; private readonly ISecureLogic _logic;
public FormSecures(ILogger<FormSecures> logger, ISecureLogic logic)
{
InitializeComponent(); public FormSecures(ILogger<FormSecures> logger, ISecureLogic logic)
{
_logger = logger; InitializeComponent();
_logic = logic;
}
private void FormSecures_Load(object sender, EventArgs e) _logger = logger;
{ _logic = logic;
LoadData(); }
}
private void LoadData() private void FormSecures_Load(object sender, EventArgs e)
{ {
try LoadData();
{ }
var list = _logic.ReadList(null);
if (list != null) private void LoadData()
{ {
dataGridView.DataSource = list; try
dataGridView.Columns["Id"].Visible = false; {
dataGridView.Columns["SecureSensors"].Visible = false; dataGridView.FillandConfigGrid(_logic.ReadList(null));
dataGridView.Columns["SecureName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка изделий"); _logger.LogInformation("Загрузка изделий");
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка загрузки изделий"); _logger.LogError(ex, "Ошибка загрузки изделий");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSecure)); var form = DependencyManager.Instance.Resolve<FormSecure>();
if (service is FormSecure form) if (form.ShowDialog() == DialogResult.OK)
{ {
if (form.ShowDialog() == DialogResult.OK) LoadData();
{ }
LoadData(); }
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e) private void ButtonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSecure)); var form = DependencyManager.Instance.Resolve<FormSecure>();
if (service is FormSecure form) form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
LoadData(); LoadData();
} }
} }
} }
}
private void ButtonDelete_Click(object sender, EventArgs e) private void ButtonDelete_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление изделия"); _logger.LogInformation("Удаление изделия");
try try
{ {
if (!_logic.Delete(new SecureBindingModel if (!_logic.Delete(new SecureBindingModel
{ {
Id = id Id = id
})) }))
{ {
throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
} }
LoadData(); LoadData();
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка удаления компонента"); _logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
} }
} }
private void ButtonRef_Click(object sender, EventArgs e) private void ButtonRef_Click(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
} }
} }

View File

@ -1,5 +1,7 @@
using SecuritySystemContracts.BindingModels; using SecuritySystemBusinessLogic.BusinessLogic;
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,114 +15,100 @@ using System.Windows.Forms;
namespace SecuritySystem namespace SecuritySystem
{ {
public partial class FormSensors : Form public partial class FormSensors : Form
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ISensorLogic _logic; private readonly ISensorLogic _logic;
public FormSensors(ILogger<FormSensors> logger, ISensorLogic logic) public FormSensors(ILogger<FormSensors> logger, ISensorLogic logic)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_logic = logic; _logic = logic;
} }
private void FormSensor_Load(object sender, EventArgs e) private void FormSensor_Load(object sender, EventArgs e)
{ {
LoadData(); LoadData();
} }
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillandConfigGrid(_logic.ReadList(null));
//растягиваем колонку Название на всю ширину, колонку Id скрываем _logger.LogInformation("Загрузка заготовок");
if (list != null) }
{ catch (Exception ex)
dataGridView.DataSource = list; {
dataGridView.Columns["Id"].Visible = false; _logger.LogError(ex, "Ошибка загрузки заготовок");
dataGridView.Columns["SensorName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка заготовок"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
catch (Exception ex) }
{
_logger.LogError(ex, "Ошибка загрузки заготовок");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); private void ButtonAdd_Click(object sender, EventArgs e)
} {
} var form = DependencyManager.Instance.Resolve<FormSensor>();
private void ButtonAdd_Click(object sender, EventArgs e) if (form.ShowDialog() == DialogResult.OK)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormSensor)); LoadData();
}
}
if (service is FormSensor form) //проверяем наличие выделенной строки
{ private void ButtonUpd_Click(object sender, EventArgs e)
if (form.ShowDialog() == DialogResult.OK) {
{ if (dataGridView.SelectedRows.Count == 1)
LoadData(); {
} var form = DependencyManager.Instance.Resolve<FormSensor>();
}
}
//проверяем наличие выделенной строки form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
private void ButtonUpd_Click(object sender, EventArgs e) if (form.ShowDialog() == DialogResult.OK)
{ {
if (dataGridView.SelectedRows.Count == 1) LoadData();
{ }
var service = Program.ServiceProvider?.GetService(typeof(FormSensor)); }
}
if (service is FormSensor form) private void ButtonDelete_Click(object sender, EventArgs e)
{ {
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); //проверяем наличие выделенной строки
if (form.ShowDialog() == DialogResult.OK) if (dataGridView.SelectedRows.Count == 1)
{ {
LoadData(); if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
} {
} int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
}
}
private void ButtonDelete_Click(object sender, EventArgs e) _logger.LogInformation("Удаление компонента");
{
//проверяем наличие выделенной строки
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление компонента"); try
{
if (!_logic.Delete(new SensorBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
try LoadData();
{ }
if (!_logic.Delete(new SensorBindingModel catch (Exception ex)
{ {
Id = id _logger.LogError(ex, "Ошибка удаления компонента");
})) MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
{ }
throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); }
} }
}
LoadData(); private void ButtonRef_Click(object sender, EventArgs e)
} {
catch (Exception ex) LoadData();
{ }
_logger.LogError(ex, "Ошибка удаления компонента"); }
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
} }

View File

@ -4,6 +4,7 @@ using SecuritySystemBusinessLogic.OfficePackage;
using SecuritySystemBusinessLogic.OfficePackage.Implements; using SecuritySystemBusinessLogic.OfficePackage.Implements;
using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.DI;
using SecuritySystemContracts.StoragesContracts; using SecuritySystemContracts.StoragesContracts;
using SecuritySystemDatabaseImplement.Implements; using SecuritySystemDatabaseImplement.Implements;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -12,97 +13,88 @@ using NLog.Extensions.Logging;
namespace SecuritySystem namespace SecuritySystem
{ {
internal static class Program internal static class Program
{ {
private static ServiceProvider? _serviceProvider; /// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font;
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
var services = new ServiceCollection();
InitDependency();
public static ServiceProvider? ServiceProvider => _serviceProvider; try
{
var mailSender = DependencyManager.Instance.Resolve<AbstractMailWorker>();
mailSender?.MailConfig(new MailConfigBindingModel
{
MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty,
MailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"] ?? string.Empty,
SmtpClientHost = System.Configuration.ConfigurationManager.AppSettings["SmtpClientHost"] ?? string.Empty,
SmtpClientPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SmtpClientPort"]),
PopHost = System.Configuration.ConfigurationManager.AppSettings["PopHost"] ?? string.Empty,
PopPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PopPort"])
});
/// <summary> // ñîçäàåì òàéìåð
/// The main entry point for the application. var timer = new System.Threading.Timer(new TimerCallback(MailCheck!), null, 0, 100000);
/// </summary> }
[STAThread] catch (Exception ex)
static void Main() {
{ var logger = DependencyManager.Instance.Resolve<ILogger>();
// To customize application configuration such as set high DPI settings or default font;
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
var services = new ServiceCollection();
ConfigureServices(services);
_serviceProvider = services.BuildServiceProvider();
try logger?.LogError(ex, "Îøèáêà ðàáîòû ñ ïî÷òîé");
{ }
var mailSender = _serviceProvider.GetService<AbstractMailWorker>();
mailSender?.MailConfig(new MailConfigBindingModel
{
MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty,
MailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"] ?? string.Empty,
SmtpClientHost = System.Configuration.ConfigurationManager.AppSettings["SmtpClientHost"] ?? string.Empty,
SmtpClientPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SmtpClientPort"]),
PopHost = System.Configuration.ConfigurationManager.AppSettings["PopHost"] ?? string.Empty,
PopPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PopPort"])
});
// ñîçäàåì òàéìåð
var timer = new System.Threading.Timer(new TimerCallback(MailCheck!), null, 0, 100000);
}
catch (Exception ex)
{
var logger = _serviceProvider.GetService<ILogger>();
logger?.LogError(ex, "Îøèáêà ðàáîòû ñ ïî÷òîé");
}
Application.Run(_serviceProvider.GetRequiredService<FormMain>()); Application.Run(DependencyManager.Instance.Resolve<FormMain>());
} }
private static void ConfigureServices(ServiceCollection services) private static void InitDependency()
{ {
services.AddLogging(option => DependencyManager.InitDependency();
{
option.SetMinimumLevel(LogLevel.Information);
option.AddNLog("nlog.config");
});
services.AddTransient<ISensorStorage, SensorStorage>(); DependencyManager.Instance.AddLogging(option =>
services.AddTransient<IOrderStorage, OrderStorage>(); {
services.AddTransient<ISecureStorage, SecureStorage>(); option.SetMinimumLevel(LogLevel.Information);
services.AddTransient<IClientStorage, ClientStorage>(); option.AddNLog("nlog.config");
services.AddTransient<IImplementerStorage, ImplementerStorage>(); });
services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
services.AddTransient<ISensorLogic, SensorLogic>(); DependencyManager.Instance.RegisterType<ISensorLogic, SensorLogic>();
services.AddTransient<IOrderLogic, OrderLogic>(); DependencyManager.Instance.RegisterType<IOrderLogic, OrderLogic>();
services.AddTransient<ISecureLogic, SecureLogic>(); DependencyManager.Instance.RegisterType<ISecureLogic, SecureLogic>();
services.AddTransient<IReportLogic, ReportLogic>(); DependencyManager.Instance.RegisterType<IReportLogic, ReportLogic>();
services.AddTransient<IClientLogic, ClientLogic>(); DependencyManager.Instance.RegisterType<IClientLogic, ClientLogic>();
services.AddTransient<IImplementerLogic, ImplementerLogic>(); DependencyManager.Instance.RegisterType<IImplementerLogic, ImplementerLogic>();
services.AddTransient<IMessageInfoLogic, MessageInfoLogic>(); DependencyManager.Instance.RegisterType<IMessageInfoLogic, MessageInfoLogic>();
DependencyManager.Instance.RegisterType<IBackUpLogic, BackUpLogic>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>(); DependencyManager.Instance.RegisterType<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<AbstractSaveToWord, SaveToWord>(); DependencyManager.Instance.RegisterType<AbstractSaveToWord, SaveToWord>();
services.AddTransient<AbstractSaveToPdf, SaveToPdf>(); DependencyManager.Instance.RegisterType<AbstractSaveToPdf, SaveToPdf>();
services.AddTransient<IWorkProcess, WorkModeling>(); DependencyManager.Instance.RegisterType<IWorkProcess, WorkModeling>();
services.AddSingleton<AbstractMailWorker, MailKitWorker>(); DependencyManager.Instance.RegisterType<AbstractMailWorker, MailKitWorker>(true);
services.AddTransient<FormMain>(); DependencyManager.Instance.RegisterType<FormMain>();
services.AddTransient<FormSensor>(); DependencyManager.Instance.RegisterType<FormSensor>();
services.AddTransient<FormSensors>(); DependencyManager.Instance.RegisterType<FormSensors>();
services.AddTransient<FormCreateOrder>(); DependencyManager.Instance.RegisterType<FormCreateOrder>();
services.AddTransient<FormSecure>(); DependencyManager.Instance.RegisterType<FormSecure>();
services.AddTransient<FormSecures>(); DependencyManager.Instance.RegisterType<FormSecureSensor>();
services.AddTransient<FormSecureSensor>(); DependencyManager.Instance.RegisterType<FormSecures>();
services.AddTransient<FormReportSecureSensors>(); DependencyManager.Instance.RegisterType<FormReportSecureSensors>();
services.AddTransient<FormReportOrders>(); DependencyManager.Instance.RegisterType<FormReportOrders>();
services.AddTransient<FormClients>(); DependencyManager.Instance.RegisterType<FormClients>();
services.AddTransient<FormImplementers>(); DependencyManager.Instance.RegisterType<FormImplementer>();
services.AddTransient<FormImplementer>(); DependencyManager.Instance.RegisterType<FormImplementers>();
services.AddTransient<FormMails>(); DependencyManager.Instance.RegisterType<FormMails>();
} }
private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck(); private static void MailCheck(object obj) => DependencyManager.Instance.Resolve<AbstractMailWorker>()?.MailCheck();
} }
} }

View File

@ -0,0 +1,129 @@
using SecuritySystemContracts.BindingModels;
using SecuritySystemContracts.BusinessLogicsContracts;
using SecuritySystemContracts.StoragesContracts;
using SecuritySystemDataModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemBusinessLogic.BusinessLogic
{
public class BackUpLogic : IBackUpLogic
{
private readonly ILogger _logger;
private readonly IBackUpInfo _backUpInfo;
public BackUpLogic(ILogger<BackUpLogic> logger, IBackUpInfo backUpInfo)
{
_logger = logger;
_backUpInfo = backUpInfo;
}
public void CreateBackUp(BackUpSaveBinidngModel model)
{
if (_backUpInfo == null)
{
return;
}
try
{
_logger.LogDebug("Clear folder");
// зачистка папки и удаление старого архива
var dirInfo = new DirectoryInfo(model.FolderName);
if (dirInfo.Exists)
{
//НЕ ВЫБИРАЕМ РАБОЧИЙ СТОЛ, ИНАЧЕ ВСЁ С НЕГО УДАЛИТСЯ
foreach (var file in dirInfo.GetFiles())
{
file.Delete();
}
}
_logger.LogDebug("Delete archive");
string fileName = $"{model.FolderName}.zip";
if (File.Exists(fileName))
{
File.Delete(fileName);
}
// берем метод для сохранения
_logger.LogDebug("Get assembly");
var typeIId = typeof(IId);
var assembly = typeIId.Assembly;
if (assembly == null)
{
throw new ArgumentNullException("Сборка не найдена", nameof(assembly));
}
var types = assembly.GetTypes();
var method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance);
_logger.LogDebug("Find {count} types", types.Length);
foreach (var type in types)
{
//проверка на то, является ли тип интерфейсом и унаследован ли он от IId
if (type.IsInterface && type.GetInterface(typeIId.Name) != null)
{
var modelType = _backUpInfo.GetTypeByModelInterface(type.Name);
if (modelType == null)
{
throw new InvalidOperationException($"Не найден класс - модель для { type.Name }");
}
_logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
// вызываем метод на выполнение
method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName });
}
}
_logger.LogDebug("Create zip and remove folder");
// архивируем
ZipFile.CreateFromDirectory(model.FolderName, fileName);
// удаляем папку
dirInfo.Delete(true);
}
catch (Exception)
{
throw;
}
}
private void SaveToFile<T>(string folderName) where T : class, new()
{
var records = _backUpInfo.GetList<T>();
if (records == null)
{
_logger.LogWarning("{type} type get null list", typeof(T).Name);
return;
}
//три строчки ниже - сериализация файлов в json
var jsonFormatter = new DataContractJsonSerializer(typeof(List<T>));
using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate);
jsonFormatter.WriteObject(fs, records);
}
}
}

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.Attributes
{
//указываем, что данный атрибут можно прописать только в Property
[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute : Attribute
{
public ColumnAttribute(string title = "", bool visible = true, int width = 0,
GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false)
{
Title = title;
Visible = visible;
Width = width;
GridViewAutoSize = gridViewAutoSize;
IsUseAutoSize = isUseAutoSize;
}
public string Title { get; private set; }
public bool Visible { get; private set; }
public int Width { get; private set; }
public GridViewAutoSize GridViewAutoSize { get; private set; }
public bool IsUseAutoSize { get; private set; }
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.Attributes
{
public enum GridViewAutoSize
{
NotSet = 0,
None = 1,
ColumnHeader = 2,
AllCellsExceptHeader = 4,
AllCells = 6,
DisplayedCellsExceptHeader = 8,
DisplayedCells = 10,
Fill = 16
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.BindingModels
{
public class BackUpSaveBinidngModel
{
public string FolderName { get; set; } = string.Empty;
}
}

View File

@ -9,6 +9,8 @@ namespace SecuritySystemContracts.BindingModels
{ {
public class MessageInfoBindingModel : IMessageInfoModel public class MessageInfoBindingModel : IMessageInfoModel
{ {
public int Id { get; set; }
public string MessageId { get; set; } = string.Empty; public string MessageId { get; set; } = string.Empty;
public int? ClientId { get; set; } public int? ClientId { get; set; }

View File

@ -0,0 +1,16 @@
using SecuritySystemContracts.BindingModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.BusinessLogicsContracts
{
//интерфейс создания бекапа
public interface IBackUpLogic
{
//путь и имя файла для архивации
void CreateBackUp(BackUpSaveBinidngModel model);
}
}

View File

@ -0,0 +1,63 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
/// <summary>
/// Менеджер для работы с зависимостями
/// </summary>
public class DependencyManager
{
private readonly IDependencyContainer _dependencyManager;
private static DependencyManager? _manager;
private static readonly object _locjObject = new();
private DependencyManager()
{
_dependencyManager = new UnityDependencyContainer();
}
public static DependencyManager Instance
{
get
{
if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } }
return _manager;
}
}
//Иницализация библиотек, в которых идут установки зависомстей
public static void InitDependency()
{
var ext = ServiceProviderLoader.GetImplementationExtensions();
if (ext == null)
{
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
}
// регистрируем зависимости
ext.RegisterServices();
}
//Регистрация логгера
public void AddLogging(Action<ILoggingBuilder> configure) => _dependencyManager.AddLogging(configure);
//Добавление зависимости
public void RegisterType<T, U>(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType<T, U>(isSingle);
//Добавление зависимости
public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
//Получение класса со всеми зависмостями
public T Resolve<T>() => _dependencyManager.Resolve<T>();
}
}

View File

@ -0,0 +1,26 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
//Интерфейс установки зависмости между элементами
public interface IDependencyContainer
{
//Регистрация логгера
void AddLogging(Action<ILoggingBuilder> configure);
//Добавление зависимости
void RegisterType<T, U>(bool isSingle) where U : class, T where T :
class;
//Добавление зависимости
void RegisterType<T>(bool isSingle) where T : class;
//Получение класса со всеми зависмостями
T Resolve<T>();
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
//Интерфейс для регистрации зависимостей в модулях
public interface IImplementationExtension
{
//для установления приоритета
public int Priority { get; }
//Регистрация сервисов
public void RegisterServices();
}
}

View File

@ -0,0 +1,62 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
public class ServiceDependencyContainer : IDependencyContainer
{
private ServiceProvider? _serviceProvider;
private readonly ServiceCollection _serviceCollection;
public ServiceDependencyContainer()
{
_serviceCollection = new ServiceCollection();
}
public void AddLogging(Action<ILoggingBuilder> configure)
{
_serviceCollection.AddLogging(configure);
}
public void RegisterType<T, U>(bool isSingle) where U : class, T where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton<T, U>();
}
else
{
_serviceCollection.AddTransient<T, U>();
}
_serviceProvider = null;
}
public void RegisterType<T>(bool isSingle) where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton<T>();
}
else
{
_serviceCollection.AddTransient<T>();
}
_serviceProvider = null;
}
public T Resolve<T>()
{
if (_serviceProvider == null)
{
_serviceProvider = _serviceCollection.BuildServiceProvider();
}
return _serviceProvider.GetService<T>()!;
}
}
}

View File

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
//Загрузчик данных
public static partial class ServiceProviderLoader
{
//Загрузка всех классов-реализаций IImplementationExtension
public static IImplementationExtension? GetImplementationExtensions()
{
IImplementationExtension? source = null;
var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories);
foreach (var file in files.Distinct())
{
Assembly asm = Assembly.LoadFrom(file);
foreach (var t in asm.GetExportedTypes())
{
if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t))
{
if (source == null)
{
source = (IImplementationExtension)Activator.CreateInstance(t)!;
}
else
{
var newSource = (IImplementationExtension)Activator.CreateInstance(t)!;
if (newSource.Priority > source.Priority)
{
source = newSource;
}
}
}
}
}
return source;
}
private static string TryGetImplementationExtensionsFolder()
{
var directory = new DirectoryInfo(Directory.GetCurrentDirectory());
while (directory != null && !directory.GetDirectories("ImplementationExtensions",
SearchOption.AllDirectories).Any(x => x.Name == "ImplementationExtensions"))
{
directory = directory.Parent;
}
return $"{directory?.FullName}\\ImplementationExtensions";
}
}
}

View File

@ -0,0 +1,43 @@
using Microsoft.Extensions.Logging;
using Unity.Microsoft.Logging;
using Unity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.DI
{
public class UnityDependencyContainer : IDependencyContainer
{
private readonly IUnityContainer _container;
public UnityDependencyContainer()
{
_container = new UnityContainer();
}
public void AddLogging(Action<ILoggingBuilder> configure)
{
var factory = LoggerFactory.Create(configure);
_container.AddExtension(new LoggingExtension(factory));
}
public void RegisterType<T>(bool isSingle) where T : class
{
_container.RegisterType<T>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
}
public T Resolve<T>()
{
return _container.Resolve<T>();
}
void IDependencyContainer.RegisterType<T, U>(bool isSingle)
{
_container.RegisterType<T, U>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
}
}
}

View File

@ -15,6 +15,8 @@
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" /> <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="Unity" Version="5.11.10" />
<PackageReference Include="Unity.Microsoft.Logging" Version="5.10.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemContracts.StoragesContracts
{
//интерфейс получения данных по всем сущностям
public interface IBackUpInfo
{
//метод получения данных по всем сущностям
List<T>? GetList<T>() where T : class, new();
Type? GetTypeByModelInterface(string modelInterfaceName);
}
}

View File

@ -1,4 +1,5 @@
using SecuritySystemDataModels.Models; using SecuritySystemContracts.Attributes;
using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -8,18 +9,19 @@ using System.Threading.Tasks;
namespace SecuritySystemContracts.ViewModels namespace SecuritySystemContracts.ViewModels
{ {
public class ClientViewModel : IClientModel public class ClientViewModel : IClientModel
{ {
public int Id { get; set; } [Column(visible: false)]
public int Id { get; set; }
[DisplayName("ФИО клиента")] [Column(title: "ФИО клиента", width: 150)]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[DisplayName("Логин (эл. почта)")] [Column(title: "Логие (эл. почта)", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
[DisplayName("Пароль")] [Column(title: "Пароль", width: 150)]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
} }
} }

View File

@ -1,4 +1,5 @@
using SecuritySystemDataModels.Models; using SecuritySystemContracts.Attributes;
using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,18 +11,19 @@ namespace SecuritySystemContracts.ViewModels
{ {
public class ImplementerViewModel : IImplementerModel public class ImplementerViewModel : IImplementerModel
{ {
[Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
[DisplayName("ФИО исполнителя")] [Column(title: "ФИО исполнителя", width: 150)]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Пароль")] [Column(title: "Пароль", width: 150)]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[DisplayName("Стаж")] [Column(title: "Стаж", width: 150)]
public int WorkExperience { get; set; } public int WorkExperience { get; set; }
[DisplayName("Квалификация")] [Column(title: "Квалификация", width: 150)]
public int Qualification { get; set; } public int Qualification { get; set; }
} }
} }

View File

@ -1,4 +1,5 @@
using SecuritySystemDataModels.Models; using SecuritySystemContracts.Attributes;
using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,20 +11,25 @@ namespace SecuritySystemContracts.ViewModels
{ {
public class MessageInfoViewModel : IMessageInfoModel public class MessageInfoViewModel : IMessageInfoModel
{ {
[Column(visible: false)]
public int Id { get; set; }
[Column(visible: false)]
public string MessageId { get; set; } = string.Empty; public string MessageId { get; set; } = string.Empty;
[Column(visible: false)]
public int? ClientId { get; set; } public int? ClientId { get; set; }
[DisplayName("Отправитель")] [Column(title: "Отправитель", width: 150)]
public string SenderName { get; set; } = string.Empty; public string SenderName { get; set; } = string.Empty;
[DisplayName("Дата отправки")] [Column(title: "Дата отправки", width: 150)]
public DateTime DateDelivery { get; set; } = DateTime.Now; public DateTime DateDelivery { get; set; } = DateTime.Now;
[DisplayName("Заголовок")] [Column(title: "Заголовок", width: 150)]
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
[DisplayName("Текст")] [Column(title: "Текст", width: 150)]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
} }
} }

View File

@ -1,4 +1,5 @@
using SecuritySystemDataModels.Enums; using SecuritySystemContracts.Attributes;
using SecuritySystemDataModels.Enums;
using SecuritySystemDataModels.Models; using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -9,40 +10,43 @@ using System.Threading.Tasks;
namespace SecuritySystemContracts.ViewModels namespace SecuritySystemContracts.ViewModels
{ {
//класс для отображения пользователю информации о заказах //класс для отображения пользователю информации о заказах
public class OrderViewModel : IOrderModel public class OrderViewModel : IOrderModel
{ {
[DisplayName("Номер")] [Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
public int ClientId { get; set; } [Column(visible: false)]
public int ClientId { get; set; }
public int? ImplementerId { get; set; } [Column(visible: false)]
public int? ImplementerId { get; set; }
public int SecureId { get; set; } [Column(visible: false)]
public int SecureId { get; set; }
[DisplayName("ФИО клиента")] [Column(title: "ФИО клиента", width: 150)]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[DisplayName("Изделие")] [Column(title: "Изделие", width: 150)]
public string SecureName { get; set; } = string.Empty; public string SecureName { get; set; } = string.Empty;
[DisplayName("ФИО исполнителя")] [Column(title: "ФИО исполнителя", width: 150)]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Количество")] [Column(title: "Количество", width: 150)]
public int Count { get; set; } public int Count { get; set; }
[DisplayName("Сумма")] [Column(title: "Сумма", width: 150)]
public double Sum { get; set; } public double Sum { get; set; }
[DisplayName("Статус")] [Column(title: "Статус", width: 150)]
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
[DisplayName("Дата создания")] [Column(title: "Дата создания", width: 150)]
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
[DisplayName("Дата выполнения")] [Column(title: "Дата выполнения", width: 150)]
public DateTime? DateImplement { get; set; } public DateTime? DateImplement { get; set; }
} }
} }

View File

@ -1,4 +1,5 @@
using SecuritySystemDataModels.Models; using SecuritySystemContracts.Attributes;
using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -8,17 +9,19 @@ using System.Threading.Tasks;
namespace SecuritySystemContracts.ViewModels namespace SecuritySystemContracts.ViewModels
{ {
//класс для отображения пользователю информаци о продуктах (изделиях) //класс для отображения пользователю информаци о продуктах (изделиях)
public class SecureViewModel : ISecureModel public class SecureViewModel : ISecureModel
{ {
public int Id { get; set; } [Column(visible: false)]
public int Id { get; set; }
[DisplayName("Навание изделия")] [Column(title: "Навание изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string SecureName { get; set; } = string.Empty; public string SecureName { get; set; } = string.Empty;
[DisplayName("Цена")] [Column(title: "Цена", width: 150)]
public double Price { get; set; } public double Price { get; set; }
public Dictionary<int, (ISensorModel, int)> SecureSensors { get; set; } = new(); [Column(visible: false)]
} public Dictionary<int, (ISensorModel, int)> SecureSensors { get; set; } = new();
} }
}

View File

@ -5,18 +5,20 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using SecuritySystemContracts.Attributes;
namespace SecuritySystemContracts.ViewModels namespace SecuritySystemContracts.ViewModels
{ {
//класс для отображения пользователю данных //класс для отображения пользователю данных
public class SensorViewModel : ISensorModel public class SensorViewModel : ISensorModel
{ {
public int Id { get; set; } [Column(visible: false)]
public int Id { get; set; }
[DisplayName("Название Датчика")] [Column(title: "Название датчика", width: 150)]
public string SensorName { get; set; } = string.Empty; public string SensorName { get; set; } = string.Empty;
[DisplayName("Цена")] [Column(title: "Цена", width: 150)]
public double Cost { get; set; } public double Cost { get; set; }
} }
} }

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace SecuritySystemDataModels.Models namespace SecuritySystemDataModels.Models
{ {
public interface IMessageInfoModel public interface IMessageInfoModel : IId
{ {
string MessageId { get; } string MessageId { get; }

View File

@ -0,0 +1,33 @@
using SecuritySystemContracts.DI;
using SecuritySystemContracts.StoragesContracts;
using SecuritySystemDatabaseImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement
{
public class DataBaseImplementationExtension : IImplementationExtension
{
public int Priority => 2;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<ISensorStorage, SensorStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<ISecureStorage, SecureStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -0,0 +1,36 @@
using SecuritySystemContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
public List<T>? GetList<T>() where T : class, new()
{
using var context = new SecuritySystemDatabase();
return context.Set<T>().ToList();
}
public Type? GetTypeByModelInterface(string modelInterfaceName)
{
var assembly = typeof(BackUpInfo).Assembly;
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.IsClass && type.GetInterface(modelInterfaceName) != null)
{
return type;
}
}
return null;
}
}
}

View File

@ -6,22 +6,28 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
[DataContract]
public class Client : IClientModel public class Client : IClientModel
{ {
[DataMember]
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]
[DataMember]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[Required] [Required]
[DataMember]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
[Required] [Required]
[DataMember]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
//для реализации связи многие ко многим с заказами (так как клиенты могу сделать одинаковый заказ) //для реализации связи многие ко многим с заказами (так как клиенты могу сделать одинаковый заказ)

View File

@ -6,25 +6,32 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
[DataContract]
public class Implementer : IImplementerModel public class Implementer : IImplementerModel
{ {
[DataMember]
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]
[DataMember]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[Required] [Required]
[DataMember]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[Required] [Required]
[DataMember]
public int WorkExperience { get; set; } public int WorkExperience { get; set; }
[Required] [Required]
[DataMember]
public int Qualification { get; set; } public int Qualification { get; set; }
//для реализации связи один ко многим с заказами //для реализации связи один ко многим с заказами

View File

@ -5,28 +5,29 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
[DataContract]
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public int Id => throw new NotImplementedException();
[Key] [Key]
[DataMember]
public string MessageId { get; set; } = string.Empty; public string MessageId { get; set; } = string.Empty;
public int? ClientId { get; set; } public int? ClientId { get; set; }
[Required]
public string SenderName { get; set; } = string.Empty; public string SenderName { get; set; } = string.Empty;
[Required]
public DateTime DateDelivery { get; set; } = DateTime.Now; public DateTime DateDelivery { get; set; } = DateTime.Now;
[Required]
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
[Required]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
public virtual Client? Client { get; set; } public virtual Client? Client { get; set; }

View File

@ -6,94 +6,105 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
public class Order : IOrderModel [DataContract]
{ public class Order : IOrderModel
public int Id { get; private set; } {
[DataMember]
public int Id { get; private set; }
[Required] [Required]
public int SecureId { get; private set; } [DataMember]
public int SecureId { get; private set; }
[Required] [Required]
public int ClientId { get; private set; } [DataMember]
public int ClientId { get; private set; }
public int? ImplementerId { get; private set; } [DataMember]
public int? ImplementerId { get; private set; }
[Required] [Required]
public int Count { get; private set; } [DataMember]
public int Count { get; private set; }
[Required] [Required]
public double Sum { get; private set; } [DataMember]
public double Sum { get; private set; }
[Required] [Required]
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; [DataMember]
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
[Required] [Required]
public DateTime DateCreate { get; private set; } = DateTime.Now; [DataMember]
public DateTime DateCreate { get; private set; } = DateTime.Now;
public DateTime? DateImplement { get; private set; } [DataMember]
public DateTime? DateImplement { get; private set; }
//для передачи названия изделия //для передачи названия изделия
public virtual Secure Secure { get; set; } public virtual Secure Secure { get; set; }
//для передачи имени клиента //для передачи имени клиента
public virtual Client Client { get; set; } public virtual Client Client { get; set; }
//для передачи имени исполнителя //для передачи имени исполнителя
public virtual Implementer? Implementer { get; set; } public virtual Implementer? Implementer { get; set; }
public static Order? Create(OrderBindingModel model) public static Order? Create(OrderBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new Order() return new Order()
{ {
Id = model.Id, Id = model.Id,
SecureId = model.SecureId, SecureId = model.SecureId,
ClientId = model.ClientId, ClientId = model.ClientId,
ImplementerId = model.ImplementerId, ImplementerId = model.ImplementerId,
Count = model.Count, Count = model.Count,
Sum = model.Sum, Sum = model.Sum,
Status = model.Status, Status = model.Status,
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement DateImplement = model.DateImplement
}; };
} }
public void Update(OrderBindingModel model) public void Update(OrderBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return; return;
} }
ImplementerId = model.ImplementerId; ImplementerId = model.ImplementerId;
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} }
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SecureId = SecureId, SecureId = SecureId,
ClientId = ClientId, ClientId = ClientId,
ImplementerId = ImplementerId, ImplementerId = ImplementerId,
Count = Count, Count = Count,
Sum = Sum, Sum = Sum,
Status = Status, Status = Status,
DateCreate = DateCreate, DateCreate = DateCreate,
DateImplement = DateImplement, DateImplement = DateImplement,
SecureName = Secure.SecureName, SecureName = Secure.SecureName,
ClientFIO = Client.ClientFIO, ClientFIO = Client.ClientFIO,
ImplementerFIO = Implementer?.ImplementerFIO ImplementerFIO = Implementer?.ImplementerFIO
}; };
} }
} }

View File

@ -7,112 +7,118 @@ using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
public class Secure : ISecureModel [DataContract]
{ public class Secure : ISecureModel
public int Id { get; set; } {
[DataMember]
public int Id { get; set; }
[Required] [Required]
public string SecureName { get; set; } = string.Empty; [DataMember]
public string SecureName { get; set; } = string.Empty;
[Required] [Required]
public double Price { get; set; } [DataMember]
public double Price { get; set; }
public Dictionary<int, (ISensorModel, int)>? _secureSensors = null; public Dictionary<int, (ISensorModel, int)>? _secureSensors = null;
//это поле не будет "мапиться" в бд //это поле не будет "мапиться" в бд
[NotMapped] [NotMapped]
public Dictionary<int, (ISensorModel, int)> SecureSensors [DataMember]
{ public Dictionary<int, (ISensorModel, int)> SecureSensors
get {
{ get
if (_secureSensors == null) {
{ if (_secureSensors == null)
_secureSensors = Sensors {
.ToDictionary(recPC => recPC.SensorId, recPC => (recPC.Sensor as ISensorModel, recPC.Count)); _secureSensors = Sensors
} .ToDictionary(recPC => recPC.SensorId, recPC => (recPC.Sensor as ISensorModel, recPC.Count));
}
return _secureSensors; return _secureSensors;
} }
} }
//для реализации связи многие ко многим с заготовками //для реализации связи многие ко многим с заготовками
[ForeignKey("SecureId")] [ForeignKey("SecureId")]
public virtual List<SecureSensor> Sensors { get; set; } = new(); public virtual List<SecureSensor> Sensors { get; set; } = new();
[ForeignKey("SecureId")] [ForeignKey("SecureId")]
public virtual List<Order> Orders { get; set; } = new(); public virtual List<Order> Orders { get; set; } = new();
public static Secure Create(SecuritySystemDatabase context, SecureBindingModel model) public static Secure Create(SecuritySystemDatabase context, SecureBindingModel model)
{ {
return new Secure() return new Secure()
{ {
Id = model.Id, Id = model.Id,
SecureName = model.SecureName, SecureName = model.SecureName,
Price = model.Price, Price = model.Price,
Sensors = model.SecureSensors.Select(x => new SecureSensor Sensors = model.SecureSensors.Select(x => new SecureSensor
{ {
Sensor = context.Sensors.First(y => y.Id == x.Key), Sensor = context.Sensors.First(y => y.Id == x.Key),
Count = x.Value.Item2 Count = x.Value.Item2
}).ToList() }).ToList()
}; };
} }
public void Update(SecureBindingModel model) public void Update(SecureBindingModel model)
{ {
SecureName = model.SecureName; SecureName = model.SecureName;
Price = model.Price; Price = model.Price;
} }
public SecureViewModel GetViewModel => new() public SecureViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SecureName = SecureName, SecureName = SecureName,
Price = Price, Price = Price,
SecureSensors = SecureSensors SecureSensors = SecureSensors
}; };
Dictionary<int, (ISensorModel, int)> ISecureModel.SecureSensors => throw new NotImplementedException(); Dictionary<int, (ISensorModel, int)> ISecureModel.SecureSensors => throw new NotImplementedException();
public void UpdateSensors(SecuritySystemDatabase context, SecureBindingModel model) public void UpdateSensors(SecuritySystemDatabase context, SecureBindingModel model)
{ {
var secureSensors = context.SecureSensors.Where(rec => rec.SecureId == model.Id).ToList(); var secureSensors = context.SecureSensors.Where(rec => rec.SecureId == model.Id).ToList();
if (secureSensors != null && secureSensors.Count > 0) if (secureSensors != null && secureSensors.Count > 0)
{ {
// удалили те, которых нет в модели // удалили те, которых нет в модели
context.SecureSensors.RemoveRange(secureSensors.Where(rec => !model.SecureSensors.ContainsKey(rec.SecureId))); context.SecureSensors.RemoveRange(secureSensors.Where(rec => !model.SecureSensors.ContainsKey(rec.SecureId)));
context.SaveChanges(); context.SaveChanges();
// обновили количество у существующих записей // обновили количество у существующих записей
foreach (var updateSecure in secureSensors) foreach (var updateSecure in secureSensors)
{ {
updateSecure.Count = model.SecureSensors[updateSecure.SecureId].Item2; updateSecure.Count = model.SecureSensors[updateSecure.SecureId].Item2;
model.SecureSensors.Remove(updateSecure.SecureId); model.SecureSensors.Remove(updateSecure.SecureId);
} }
context.SaveChanges(); context.SaveChanges();
} }
var secure = context.Secures.First(x => x.Id == Id); var secure = context.Secures.First(x => x.Id == Id);
foreach (var pc in model.SecureSensors) foreach (var pc in model.SecureSensors)
{ {
context.SecureSensors.Add(new SecureSensor context.SecureSensors.Add(new SecureSensor
{ {
Secure = secure, Secure = secure,
Sensor = context.Sensors.First(x => x.Id == pc.Key), Sensor = context.Sensors.First(x => x.Id == pc.Key),
Count = pc.Value.Item2 Count = pc.Value.Item2
}); });
context.SaveChanges(); context.SaveChanges();
} }
_secureSensors = null; _secureSensors = null;
} }
} }
} }

View File

@ -2,26 +2,28 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
public class SecureSensor [DataContract]
{ public class SecureSensor
public int Id { get; set; } {
public int Id { get; set; }
[Required] [Required]
public int SecureId { get; set; } public int SecureId { get; set; }
[Required] [Required]
public int SensorId { get; set; } public int SensorId { get; set; }
[Required] [Required]
public int Count { get; set; } public int Count { get; set; }
public virtual Sensor Sensor { get; set; } = new(); public virtual Sensor Sensor { get; set; } = new();
public virtual Secure Secure { get; set; } = new(); public virtual Secure Secure { get; set; } = new();
} }
} }

View File

@ -7,66 +7,71 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SecuritySystemDatabaseImplement.Models namespace SecuritySystemDatabaseImplement.Models
{ {
public class Sensor : ISensorModel [DataContract]
{ public class Sensor : ISensorModel
public int Id { get; private set; } {
[DataMember]
public int Id { get; private set; }
[Required] [Required]
public string SensorName { get; private set; } = string.Empty; [DataMember]
public string SensorName { get; private set; } = string.Empty;
[Required] [Required]
public double Cost { get; set; } [DataMember]
public double Cost { get; set; }
//для реализации связи многие ко многим с изделиями //для реализации связи многие ко многим с изделиями
[ForeignKey("SensorId")] [ForeignKey("SensorId")]
public virtual List<SecureSensor> SecureSensors { get; set; } = new(); public virtual List<SecureSensor> SecureSensors { get; set; } = new();
public static Sensor? Create(SensorBindingModel model) public static Sensor? Create(SensorBindingModel model)
{ {
if(model == null) if (model == null)
{ {
return null; return null;
} }
return new Sensor() return new Sensor()
{ {
Id = model.Id, Id = model.Id,
SensorName = model.SensorName, SensorName = model.SensorName,
Cost = model.Cost Cost = model.Cost
}; };
} }
public static Sensor Create(SensorViewModel model) public static Sensor Create(SensorViewModel model)
{ {
return new Sensor return new Sensor
{ {
Id = model.Id, Id = model.Id,
SensorName = model.SensorName, SensorName = model.SensorName,
Cost = model.Cost Cost = model.Cost
}; };
} }
public void Update(SensorBindingModel model) public void Update(SensorBindingModel model)
{ {
if(model == null) if (model == null)
{ {
return; return;
} }
SensorName = model.SensorName; SensorName = model.SensorName;
Cost = model.Cost; Cost = model.Cost;
} }
public SensorViewModel GetViewModel => new() public SensorViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SensorName = SensorName, SensorName = SensorName,
Cost = Cost Cost = Cost
}; };
} }
} }

View File

@ -20,4 +20,8 @@
<Folder Include="Migrations\" /> <Folder Include="Migrations\" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,34 @@
using SecuritySystemContracts.DI;
using SecuritySystemContracts.StoragesContracts;
using SecuritySystemFileImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemFileImplement
{
//для реализации нужных нам зависимостей в данном варианте хранения информации
public class FileImplementationExtension : IImplementationExtension
{
public int Priority => 1;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<ISensorStorage, SensorStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<ISecureStorage, SecureStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -0,0 +1,37 @@
using SecuritySystemContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemFileImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
public List<T>? GetList<T>() where T : class, new()
{
var source = DataFileSingleton.GetInstance();
return (List<T>?)source.GetType().GetProperties()
.FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == typeof(T))
?.GetValue(source);
}
public Type? GetTypeByModelInterface(string modelInterfaceName)
{
var assembly = typeof(BackUpInfo).Assembly;
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.IsClass && type.GetInterface(modelInterfaceName) != null)
{
return type;
}
}
return null;
}
}
}

View File

@ -7,20 +7,26 @@ using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
[DataContract]
public class Client : IClientModel public class Client : IClientModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
public string ClientFIO { get; private set; } = string.Empty; public string ClientFIO { get; private set; } = string.Empty;
[DataMember]
public string Email { get; private set; } = string.Empty; public string Email { get; private set; } = string.Empty;
[DataMember]
public string Password { get; private set; } = string.Empty; public string Password { get; private set; } = string.Empty;
public static Client? Create(ClientBindingModel model) public static Client? Create(ClientBindingModel model)

View File

@ -5,22 +5,29 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
[DataContract]
public class Implementer : IImplementerModel public class Implementer : IImplementerModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
public string ImplementerFIO { get; private set; } = string.Empty; public string ImplementerFIO { get; private set; } = string.Empty;
[DataMember]
public string Password { get; private set; } = string.Empty; public string Password { get; private set; } = string.Empty;
[DataMember]
public int WorkExperience { get; private set; } public int WorkExperience { get; private set; }
[DataMember]
public int Qualification { get; private set; } public int Qualification { get; private set; }
public static Implementer? Create(ImplementerBindingModel model) public static Implementer? Create(ImplementerBindingModel model)

View File

@ -6,24 +6,34 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
[DataContract]
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public int Id { get; private set; }
[DataMember]
public string MessageId { get; private set; } = string.Empty; public string MessageId { get; private set; } = string.Empty;
[DataMember]
public int? ClientId { get; private set; } public int? ClientId { get; private set; }
[DataMember]
public string SenderName { get; private set; } = string.Empty; public string SenderName { get; private set; } = string.Empty;
[DataMember]
public DateTime DateDelivery { get; private set; } = DateTime.Now; public DateTime DateDelivery { get; private set; } = DateTime.Now;
[DataMember]
public string Subject { get; private set; } = string.Empty; public string Subject { get; private set; } = string.Empty;
[DataMember]
public string Body { get; private set; } = string.Empty; public string Body { get; private set; } = string.Empty;
public static MessageInfo? Create(MessageInfoBindingModel model) public static MessageInfo? Create(MessageInfoBindingModel model)

View File

@ -6,109 +6,120 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
//класс, реализующий интерфейс модели заказа //класс, реализующий интерфейс модели заказа
public class Order : IOrderModel [DataContract]
{ public class Order : IOrderModel
public int Id { get; private set; } {
[DataMember]
public int Id { get; private set; }
public int ClientId { get; private set; } [DataMember]
public int ClientId { get; private set; }
public int? ImplementerId { get; private set; } [DataMember]
public int? ImplementerId { get; private set; }
public int SecureId { get; private set; } [DataMember]
public int SecureId { get; private set; }
public int Count { get; private set; } [DataMember]
public int Count { get; private set; }
public double Sum { get; private set; } [DataMember]
public double Sum { get; private set; }
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; [DataMember]
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
public DateTime DateCreate { get; private set; } = DateTime.Now; [DataMember]
public DateTime DateCreate { get; private set; } = DateTime.Now;
public DateTime? DateImplement { get; private set; } [DataMember]
public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel model) public static Order? Create(OrderBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new Order() return new Order()
{ {
Id = model.Id, Id = model.Id,
ClientId = model.ClientId, ClientId = model.ClientId,
SecureId = model.SecureId, SecureId = model.SecureId,
ImplementerId = model.ImplementerId, ImplementerId = model.ImplementerId,
Count = model.Count, Count = model.Count,
Sum = model.Sum, Sum = model.Sum,
Status = model.Status, Status = model.Status,
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement DateImplement = model.DateImplement
}; };
} }
public static Order? Create(XElement element) public static Order? Create(XElement element)
{ {
if (element == null) if (element == null)
{ {
return null; return null;
} }
return new Order() return new Order()
{ {
Id = Convert.ToInt32(element.Attribute("Id")!.Value), Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value), ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value),
ImplementerId = Convert.ToInt32(element.Attribute("ImplementerId")!.Value), ImplementerId = Convert.ToInt32(element.Attribute("ImplementerId")!.Value),
SecureId = Convert.ToInt32(element.Element("SecureId")!.Value), SecureId = Convert.ToInt32(element.Element("SecureId")!.Value),
Count = Convert.ToInt32(element.Element("Count")!.Value), Count = Convert.ToInt32(element.Element("Count")!.Value),
Sum = Convert.ToDouble(element.Element("Sum")!.Value), Sum = Convert.ToDouble(element.Element("Sum")!.Value),
Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value), Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value),
DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value), DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value),
DateImplement = string.IsNullOrEmpty(element.Element("DateImplement")!.Value) ? null : DateImplement = string.IsNullOrEmpty(element.Element("DateImplement")!.Value) ? null :
Convert.ToDateTime(element.Element("DateImplement")!.Value) Convert.ToDateTime(element.Element("DateImplement")!.Value)
}; };
} }
public void Update(OrderBindingModel model) public void Update(OrderBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return; return;
} }
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} }
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
ClientId = ClientId, ClientId = ClientId,
ImplementerId = ImplementerId, ImplementerId = ImplementerId,
SecureId = SecureId, SecureId = SecureId,
Count = Count, Count = Count,
Sum = Sum, Sum = Sum,
Status = Status, Status = Status,
DateCreate = DateCreate, DateCreate = DateCreate,
DateImplement = DateImplement DateImplement = DateImplement
}; };
public XElement GetXElement => new("Order", public XElement GetXElement => new("Order",
new XAttribute("Id", Id), new XAttribute("Id", Id),
new XElement("ClientId", ClientId.ToString()), new XElement("ClientId", ClientId.ToString()),
new XElement("ImplementerId", ClientId.ToString()), new XElement("ImplementerId", ClientId.ToString()),
new XElement("SecureId", SecureId.ToString()), new XElement("SecureId", SecureId.ToString()),
new XElement("Count", Count.ToString()), new XElement("Count", Count.ToString()),
new XElement("Sum", Sum.ToString()), new XElement("Sum", Sum.ToString()),
new XElement("Status", Status.ToString()), new XElement("Status", Status.ToString()),
new XElement("DateCreate", DateCreate.ToString()), new XElement("DateCreate", DateCreate.ToString()),
new XElement("DateImplement", DateImplement.ToString())); new XElement("DateImplement", DateImplement.ToString()));
} }
} }

View File

@ -4,105 +4,110 @@ using SecuritySystemDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
//класс реализующий интерфейс модели изделия //класс реализующий интерфейс модели изделия
public class Secure : ISecureModel [DataContract]
{ public class Secure : ISecureModel
public int Id { get; private set; } {
[DataMember]
public int Id { get; private set; }
public string SecureName { get; private set; } = string.Empty; [DataMember]
public string SecureName { get; private set; } = string.Empty;
public double Price { get; private set; } [DataMember]
public double Price { get; private set; }
public Dictionary<int, int> Sensors { get; private set; } = new(); public Dictionary<int, int> Sensors { get; private set; } = new();
private Dictionary<int, (ISensorModel, int)>? _secureSensors = null;
private Dictionary<int, (ISensorModel, int)>? _secureSensors = null; [DataMember]
public Dictionary<int, (ISensorModel, int)> SecureSensors
{
get
{
if (_secureSensors == null)
{
var source = DataFileSingleton.GetInstance();
public Dictionary<int, (ISensorModel, int)> SecureSensors _secureSensors = Sensors.ToDictionary(x => x.Key,
{ y => ((source.Sensors.FirstOrDefault(z => z.Id == y.Key) as ISensorModel)!, y.Value));
get }
{
if (_secureSensors == null)
{
var source = DataFileSingleton.GetInstance();
_secureSensors = Sensors.ToDictionary(x => x.Key, return _secureSensors;
y => ((source.Sensors.FirstOrDefault(z => z.Id == y.Key) as ISensorModel)!, y.Value)); }
} }
return _secureSensors; public static Secure? Create(SecureBindingModel model)
} {
} if (model == null)
{
return null;
}
public static Secure? Create(SecureBindingModel model) return new Secure()
{ {
if (model == null) Id = model.Id,
{ SecureName = model.SecureName,
return null; Price = model.Price,
} Sensors = model.SecureSensors.ToDictionary(x => x.Key, x => x.Value.Item2)
};
}
return new Secure() public static Secure? Create(XElement element)
{ {
Id = model.Id, if (element == null)
SecureName = model.SecureName, {
Price = model.Price, return null;
Sensors = model.SecureSensors.ToDictionary(x => x.Key, x => x.Value.Item2) }
};
}
public static Secure? Create(XElement element) return new Secure()
{ {
if (element == null) Id = Convert.ToInt32(element.Attribute("Id")!.Value),
{ SecureName = element.Element("SecureName")!.Value,
return null; Price = Convert.ToDouble(element.Element("Price")!.Value),
} Sensors = element.Element("SecureSensors")!.Elements("SecureSensors").ToDictionary(
x => Convert.ToInt32(x.Element("Key")?.Value),
x => Convert.ToInt32(x.Element("Value")?.Value))
};
}
return new Secure() public void Update(SecureBindingModel model)
{ {
Id = Convert.ToInt32(element.Attribute("Id")!.Value), if (model == null)
SecureName = element.Element("SecureName")!.Value, {
Price = Convert.ToDouble(element.Element("Price")!.Value), return;
Sensors = element.Element("SecureSensors")!.Elements("SecureSensors").ToDictionary( }
x => Convert.ToInt32(x.Element("Key")?.Value),
x => Convert.ToInt32(x.Element("Value")?.Value))
};
}
public void Update(SecureBindingModel model) SecureName = model.SecureName;
{ Price = model.Price;
if (model == null) Sensors = model.SecureSensors.ToDictionary(x => x.Key, x => x.Value.Item2);
{ _secureSensors = null;
return; }
}
SecureName = model.SecureName; public SecureViewModel GetViewModel => new()
Price = model.Price; {
Sensors = model.SecureSensors.ToDictionary(x => x.Key, x => x.Value.Item2); Id = Id,
_secureSensors = null; SecureName = SecureName,
} Price = Price,
SecureSensors = SecureSensors
};
public SecureViewModel GetViewModel => new() public XElement GetXElement => new("Secure",
{ new XAttribute("Id", Id),
Id = Id, new XElement("SecureName", SecureName),
SecureName = SecureName, new XElement("Price", Price.ToString()),
Price = Price, new XElement("SecureSensors", Sensors.Select(
SecureSensors = SecureSensors x => new XElement("SecureSensors",
}; new XElement("Key", x.Key),
new XElement("Value", x.Value))
public XElement GetXElement => new("Secure", ).ToArray()));
new XAttribute("Id", Id), }
new XElement("SecureName", SecureName),
new XElement("Price", Price.ToString()),
new XElement("SecureSensors", Sensors.Select(
x => new XElement("SecureSensors",
new XElement("Key", x.Key),
new XElement("Value", x.Value))
).ToArray()));
}
} }

View File

@ -5,72 +5,77 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace SecuritySystemFileImplement.Models namespace SecuritySystemFileImplement.Models
{ {
//реализация интерфейса модели заготовки //реализация интерфейса модели заготовки
public class Sensor : ISensorModel [DataContract]
{ public class Sensor : ISensorModel
public int Id { get; private set; } {
[DataMember]
public int Id { get; private set; }
public string SensorName { get; private set; } = string.Empty; [DataMember]
public string SensorName { get; private set; } = string.Empty;
public double Cost { get; set; } [DataMember]
public double Cost { get; set; }
public static Sensor? Create(SensorBindingModel model) public static Sensor? Create(SensorBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new Sensor() return new Sensor()
{ {
Id = model.Id, Id = model.Id,
SensorName = model.SensorName, SensorName = model.SensorName,
Cost = model.Cost Cost = model.Cost
}; };
} }
public static Sensor? Create(XElement element) public static Sensor? Create(XElement element)
{ {
if (element == null) if (element == null)
{ {
return null; return null;
} }
return new Sensor() return new Sensor()
{ {
Id = Convert.ToInt32(element.Attribute("Id")!.Value), Id = Convert.ToInt32(element.Attribute("Id")!.Value),
SensorName = element.Element("SensorName")!.Value, SensorName = element.Element("SensorName")!.Value,
Cost = Convert.ToDouble(element.Element("Cost")!.Value) Cost = Convert.ToDouble(element.Element("Cost")!.Value)
}; };
} }
public void Update(SensorBindingModel model) public void Update(SensorBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return; return;
} }
SensorName = model.SensorName; SensorName = model.SensorName;
Cost = model.Cost; Cost = model.Cost;
} }
public SensorViewModel GetViewModel => new() public SensorViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SensorName = SensorName, SensorName = SensorName,
Cost = Cost Cost = Cost
}; };
public XElement GetXElement => new("Sensor", public XElement GetXElement => new("Sensor",
new XAttribute("Id", Id), new XAttribute("Id", Id),
new XElement("SensorName", SensorName), new XElement("SensorName", SensorName),
new XElement("Cost", Cost.ToString())); new XElement("Cost", Cost.ToString()));
} }
} }

View File

@ -18,4 +18,8 @@
<ProjectReference Include="..\SecuritySystemDataModels\SecuritySystemDataModels.csproj" /> <ProjectReference Include="..\SecuritySystemDataModels\SecuritySystemDataModels.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,22 @@
using SecuritySystemContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemListImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
public List<T>? GetList<T>() where T : class, new()
{
throw new NotImplementedException();
}
public Type? GetTypeByModelInterface(string modelInterfaceName)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,34 @@
using SecuritySystemContracts.DI;
using SecuritySystemContracts.StoragesContracts;
using SecuritySystemListImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecuritySystemListImplement
{
public class ListImplementationExtension : IImplementationExtension
{
public int Priority => 0;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<ISensorStorage, SensorStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<ISecureStorage, SecureStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -12,6 +12,8 @@ namespace SecuritySystemListImplement.Models
{ {
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public int Id { get; private set; }
public string MessageId { get; private set; } = string.Empty; public string MessageId { get; private set; } = string.Empty;
public int? ClientId { get; private set; } public int? ClientId { get; private set; }

View File

@ -12,73 +12,73 @@ using System.Threading.Tasks;
namespace SecuritySystemListImplement.Models namespace SecuritySystemListImplement.Models
{ {
//класс, реализующий интерфейс модели заказа //класс, реализующий интерфейс модели заказа
public class Order : IOrderModel public class Order : IOrderModel
{ {
//методы set сделали приватными, чтобы исключить неразрешённые манипуляции //методы set сделали приватными, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; } public int Id { get; private set; }
public int ClientId { get; private set; } public int ClientId { get; private set; }
public int? ImplementerId { get; private set; } public int? ImplementerId { get; private set; }
public int SecureId { get; private set; } public int SecureId { get; private set; }
public int Count { get; private set; } public int Count { get; private set; }
public double Sum { get; private set; } public double Sum { get; private set; }
public OrderStatus Status { get; private set; } public OrderStatus Status { get; private set; }
public DateTime DateCreate { get; private set; } = DateTime.Now; public DateTime DateCreate { get; private set; } = DateTime.Now;
public DateTime? DateImplement { get; private set; } public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel? model) public static Order? Create(OrderBindingModel? model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new Order() return new Order()
{ {
Id = model.Id, Id = model.Id,
SecureId = model.SecureId, SecureId = model.SecureId,
ClientId = model.ClientId, ClientId = model.ClientId,
ImplementerId = model.ImplementerId, ImplementerId = model.ImplementerId,
Count = model.Count, Count = model.Count,
Sum = model.Sum, Sum = model.Sum,
Status = model.Status, Status = model.Status,
DateCreate = model.DateCreate, DateCreate = model.DateCreate,
DateImplement = model.DateImplement DateImplement = model.DateImplement
}; };
} }
//метод изменения существующего объекта //метод изменения существующего объекта
public void Update(OrderBindingModel? model) public void Update(OrderBindingModel? model)
{ {
if (model == null) if (model == null)
{ {
return; return;
} }
Status = model.Status; Status = model.Status;
DateImplement = model.DateImplement; DateImplement = model.DateImplement;
} }
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента //метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public OrderViewModel GetViewModel => new() public OrderViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SecureId = SecureId, SecureId = SecureId,
ClientId = ClientId, ClientId = ClientId,
ImplementerId = ImplementerId, ImplementerId = ImplementerId,
Count = Count, Count = Count,
Sum = Sum, Sum = Sum,
Status = Status, Status = Status,
DateCreate = DateCreate, DateCreate = DateCreate,
DateImplement = DateImplement DateImplement = DateImplement
}; };
} }
} }

View File

@ -9,55 +9,55 @@ using System.Threading.Tasks;
namespace SecuritySystemListImplement.Models namespace SecuritySystemListImplement.Models
{ {
//класс реализующий интерфейс модели изделия //класс, реализующий интерфейс модели изделия
public class Secure : ISecureModel public class Secure : ISecureModel
{ {
//методы set делаем приватным, чтобы исключить неразрешённые манипуляции //методы set делаем приватным, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; } public int Id { get; private set; }
public string SecureName { get; private set; } = string.Empty; public string SecureName { get; private set; } = string.Empty;
public double Price { get; private set; } public double Price { get; private set; }
public Dictionary<int, (ISensorModel, int)> SecureSensors { get; private set; } = new Dictionary<int, (ISensorModel, int)>(); public Dictionary<int, (ISensorModel, int)> SecureSensors { get; private set; } = new Dictionary<int, (ISensorModel, int)>();
//метод для создания объекта от класса-компонента на основе класса-BindingModel //метод для создания объекта от класса-компонента на основе класса-BindingModel
public static Secure? Create(SecureBindingModel? model) public static Secure? Create(SecureBindingModel? model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new Secure() return new Secure()
{ {
Id = model.Id, Id = model.Id,
SecureName = model.SecureName, SecureName = model.SecureName,
Price = model.Price, Price = model.Price,
SecureSensors = model.SecureSensors SecureSensors = model.SecureSensors
}; };
} }
//метод изменения существующего объекта //метод изменения существующего объекта
public void Update(SecureBindingModel? model) public void Update(SecureBindingModel? model)
{ {
if (model == null) if (model == null)
{ {
return; return;
} }
SecureName = model.SecureName; SecureName = model.SecureName;
Price = model.Price; Price = model.Price;
SecureSensors = model.SecureSensors; SecureSensors = model.SecureSensors;
} }
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента //метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public SecureViewModel GetViewModel => new() public SecureViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SecureName = SecureName, SecureName = SecureName,
Price = Price, Price = Price,
SecureSensors = SecureSensors SecureSensors = SecureSensors
}; };
} }
} }

View File

@ -9,50 +9,50 @@ using System.Threading.Tasks;
namespace SecuritySystemListImplement.Models namespace SecuritySystemListImplement.Models
{ {
//реализация интерфейса модели заготовки //реализация интерфейса модели заготовки
public class Sensor : ISensorModel public class Sensor : ISensorModel
{ {
//методы set делаем приватным, чтобы исключить неразрешённые манипуляции //методы set делаем приватным, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; } public int Id { get; private set; }
public string SensorName { get; private set; } = string.Empty; public string SensorName { get; private set; } = string.Empty;
public double Cost { get; private set; } public double Cost { get; private set; }
//метод для создания объекта от класса-компонента на основе класса-BindingModel //метод для создания объекта от класса-компонента на основе класса-BindingModel
public static Sensor? Create(SensorBindingModel? model) public static Sensor? Create(SensorBindingModel? model)
{ {
if(model == null) if (model == null)
{ {
return null; return null;
} }
return new Sensor() return new Sensor()
{ {
Id = model.Id, Id = model.Id,
SensorName = model.SensorName, SensorName = model.SensorName,
Cost = model.Cost Cost = model.Cost
}; };
} }
//метод изменения существующего объекта //метод изменения существующего объекта
public void Update(SensorBindingModel? model) public void Update(SensorBindingModel? model)
{ {
if(model == null) if (model == null)
{ {
return; return;
} }
SensorName = model.SensorName; SensorName = model.SensorName;
Cost = model.Cost; Cost = model.Cost;
} }
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента //метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public SensorViewModel GetViewModel => new() public SensorViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
SensorName = SensorName, SensorName = SensorName,
Cost = Cost Cost = Cost
}; };
} }
} }

View File

@ -22,4 +22,8 @@
<ProjectReference Include="..\SecuritySystemDataModels\SecuritySystemDataModels.csproj" /> <ProjectReference Include="..\SecuritySystemDataModels\SecuritySystemDataModels.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

Binary file not shown.