Синхронизация студентов
This commit is contained in:
parent
d79be9a8dc
commit
48ad010501
@ -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.Неопределено,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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, "Ошибки при синхронизации");
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user