Синхронизация студентов

This commit is contained in:
kotcheshir73 2022-03-18 10:22:34 +04:00
parent d79be9a8dc
commit 48ad010501
3 changed files with 532 additions and 499 deletions

View File

@ -15,6 +15,7 @@ using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
namespace DepartmentBusinessLogic.BusinessLogics namespace DepartmentBusinessLogic.BusinessLogics
{ {
@ -39,7 +40,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
public OrderSyncHistoryBusinessLogic(IOrderSyncHistoryService service) : base(service, "Синхронизация Приказов", AccessOperation.СинхронизацияПриказов) { } public OrderSyncHistoryBusinessLogic(IOrderSyncHistoryService service) : base(service, "Синхронизация Приказов", AccessOperation.СинхронизацияПриказов) { }
public bool SyncOrders() public async Task<bool> SyncOrders()
{ {
var history = Create(new OrderSyncHistorySetBindingModel { SyncDate = DateTime.Now }); var history = Create(new OrderSyncHistorySetBindingModel { SyncDate = DateTime.Now });
if (history == null) if (history == null)
@ -60,7 +61,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
if (address == null || address.Value.IsEmpty()) if (address == null || address.Value.IsEmpty())
{ {
Errors = _enviromentSettingLogic.Errors; Errors = _enviromentSettingLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить адрес серверая для получения приказов по студентам")); Errors.Add(("Ошибка получения данных", "Не удалось получить адрес сервера для получения приказов по студентам"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
@ -106,7 +107,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
// авторизация // авторизация
// получение списка студентов // получение списка студентов
HttpResponseMessage response = client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment").Result; HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с сервера")); Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с сервера"));
@ -117,7 +118,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
}); });
return false; return false;
} }
var studentFromServer = JsonSerializer.Deserialize<StudentListSyncModel>(response.Content.ReadAsStringAsync().Result); var studentFromServer = JsonSerializer.Deserialize<StudentListSyncModel>(await response.Content.ReadAsStringAsync());
if (studentFromServer.CurrentStudentsList.Count == 0) if (studentFromServer.CurrentStudentsList.Count == 0)
{ {
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
@ -132,7 +133,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
if (groups == null || groups.List == null) if (groups == null || groups.List == null)
{ {
Errors = _groupsLogic.Errors; Errors = _groupsLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить список групп")); Errors.Add(("Ошибка получения данных", "Не удалось получить список групп с базы"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
@ -145,7 +146,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
if (students == null || students.List == null) if (students == null || students.List == null)
{ {
Errors = _studentLogic.Errors; Errors = _studentLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов")); Errors.Add(("Ошибка получения данных", "Не удалось получить список студентов с базы"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel _recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{ {
OrderSyncHistoryId = history.Id, OrderSyncHistoryId = history.Id,
@ -160,12 +161,12 @@ namespace DepartmentBusinessLogic.BusinessLogics
// студент не найден, значит он ушел с кафедры, выясняем почему // студент не найден, значит он ушел с кафедры, выясняем почему
if (studentSync == null) if (studentSync == null)
{ {
SyncStudentOrders(history, student, groups.List, client, address.Value); await SyncStudentOrders(history, student, groups.List, client, address.Value);
} }
// не совпадение групп // не совпадение групп
else if (student.StudentGroupName != studentSync.groupName) else if (student.StudentGroupName != studentSync.groupName)
{ {
SyncStudentOrders(history, student, groups.List, client, address.Value); await SyncStudentOrders(history, student, groups.List, client, address.Value);
} }
studentFromServer.CurrentStudentsList.Remove(studentSync); studentFromServer.CurrentStudentsList.Remove(studentSync);
@ -201,14 +202,15 @@ namespace DepartmentBusinessLogic.BusinessLogics
}); });
continue; continue;
} }
SyncStudentOrders(history, deletedStudent, groups.List, client, address.Value); await SyncStudentOrders(history, deletedStudent, groups.List, client, address.Value);
continue; continue;
} }
var user = _userLogic.GetElement(new UserGetBindingModel var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
var user = _userLogic.GetOrCreateUser(new UserGetBindingModel
{ {
Login = student.recordBookName Login = student.recordBookName
}); }, userName);
if (user == null) if (user == null)
{ {
if (_userLogic.Errors.Count > 0) if (_userLogic.Errors.Count > 0)
@ -222,25 +224,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
}); });
continue; continue;
} }
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
user = _userLogic.Create(new UserSetBindingModel
{
Login = student.recordBookName,
Password = userName
});
if (user == null)
{
var errors = _userLogic.Errors;
errors.Add(("Ошибка создания пользователя под студента", $"Не удалось создать пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
} }
var newStudent = _studentLogic.Create(new StudentSetBindingModel var newStudent = _studentLogic.Create(new StudentSetBindingModel
@ -273,7 +256,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
Information = $"Добавлен студент {newStudent}" Information = $"Добавлен студент {newStudent}"
}); });
SyncStudentOrders(history, newStudent, groups.List, client, address.Value); await SyncStudentOrders(history, newStudent, groups.List, client, address.Value);
} }
return true; return true;
} }
@ -287,9 +270,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
/// <param name="client"></param> /// <param name="client"></param>
/// <param name="address"></param> /// <param name="address"></param>
/// <returns></returns> /// <returns></returns>
private void SyncStudentOrders(OrderSyncHistoryViewModel history, StudentViewModel student, List<StudentGroupViewModel> groups, HttpClient client, string address) private async Task SyncStudentOrders(OrderSyncHistoryViewModel history, StudentViewModel student, List<StudentGroupViewModel> groups, HttpClient client, string address)
{ {
HttpResponseMessage response = client.GetAsync($"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd").Result; var response = await client.GetAsync($"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd");
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
Errors.Add(("Ошибка получения данных", "Не удалось получить список приказов по студенту")); Errors.Add(("Ошибка получения данных", "Не удалось получить список приказов по студенту"));
@ -300,7 +283,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
}); });
return; return;
} }
var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(response.Content.ReadAsStringAsync().Result); var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(await response.Content.ReadAsStringAsync());
foreach (var syncOrder in syncOrders.StudentOrders) foreach (var syncOrder in syncOrders.StudentOrders)
{ {
if (syncOrder.markOfApprove.ToLower() != "true") if (syncOrder.markOfApprove.ToLower() != "true")
@ -473,6 +456,10 @@ namespace DepartmentBusinessLogic.BusinessLogics
orderStudentMoveType = OrderStudentMoveType.Восстановить; orderStudentMoveType = OrderStudentMoveType.Восстановить;
info = $"Восстановление отчисленного студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}"; info = $"Восстановление отчисленного студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
case "Выпуск":
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоЗавершению;
info = $"Завершение обучения студента {student}";
break;
} }
if (orderStudentMoveType == OrderStudentMoveType.Неопределено) if (orderStudentMoveType == OrderStudentMoveType.Неопределено)
@ -551,6 +538,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов, "Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
"Отчисление" => OrderType.Отчисление, "Отчисление" => OrderType.Отчисление,
"Восстановление" => OrderType.Перевод, "Восстановление" => OrderType.Перевод,
"Выпуск" => OrderType.ДвижениеСтудентов,
_ => OrderType.Неопределено, _ => OrderType.Неопределено,
}; };
} }

View File

@ -9,6 +9,7 @@ using DesktopTools.Models;
using ModuleTools.Enums; using ModuleTools.Enums;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
@ -43,7 +44,7 @@ namespace DepartmentWindowsDesktop.EntityControls
}, },
ControlOnMoveElem = new() ControlOnMoveElem = new()
{ {
{ "ToolStripMenuItemSyncOrders", ("Синхронизировать студентов", (object sender, EventArgs e) => { SyncOrders(); }) } { "ToolStripMenuItemSyncOrders", ("Синхронизировать студентов", async (object sender, EventArgs e) => { await SyncOrders (); }) }
} }
}; };
@ -51,9 +52,9 @@ namespace DepartmentWindowsDesktop.EntityControls
/// Синхронизация приказов /// Синхронизация приказов
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private void SyncOrders() private async Task SyncOrders()
{ {
var flag = _businessLogic.SyncOrders(); var flag = await _businessLogic.SyncOrders();
if (!flag) if (!flag)
{ {
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации"); DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации");

View File

@ -3,6 +3,8 @@ using ModuleTools.Enums;
using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.BindingModels;
using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.Interfaces;
using SecurityBusinessLogic.ViewModels; using SecurityBusinessLogic.ViewModels;
using System;
using System.Linq;
namespace SecurityBusinessLogic.BusinessLogics namespace SecurityBusinessLogic.BusinessLogics
{ {
@ -12,5 +14,47 @@ namespace SecurityBusinessLogic.BusinessLogics
public class UserBusinessLogic : GenericBusinessLogic<UserGetBindingModel, UserSetBindingModel, UserListViewModel, UserViewModel> public class UserBusinessLogic : GenericBusinessLogic<UserGetBindingModel, UserSetBindingModel, UserListViewModel, UserViewModel>
{ {
public UserBusinessLogic(IUserService service) : base(service, "Пользователи", AccessOperation.Пользователи) { } public UserBusinessLogic(IUserService service) : base(service, "Пользователи", AccessOperation.Пользователи) { }
public UserViewModel GetOrCreateUser(UserGetBindingModel model, string password)
{
Errors.Clear();
try
{
model.HaveRight = !NoAccess(model, AccessType.View);
if (model.HaveRight && !_allowSimpleView)
{
throw new MethodAccessException("Нет прав на получение списка");
}
var result = Service.Read(model);
if (result.IsSucceeded)
{
return result.Result as UserViewModel;
}
if (result.Errors.First().Message == "Элемент удален")
{
result = Service.Restore(model);
}
else if (result.Errors.First().Message == "Элемент не найден")
{
result = Service.Create(new UserSetBindingModel
{
Login = model.Login,
Password = password
});
}
if (!result.IsSucceeded)
{
Errors.AddRange(result.Errors);
return null;
}
return result.Result as UserViewModel;
}
catch (Exception ex)
{
Errors.Add(("Ошибка получения", ex.Message));
}
return null;
}
} }
} }