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

This commit is contained in:
kotcheshir73 2022-04-28 11:35:15 +04:00
parent df73a0d314
commit 074fc405ed
5 changed files with 70 additions and 68 deletions

View File

@ -128,6 +128,10 @@ namespace CoreDatabase
} }
if (entity.IsDeleted) if (entity.IsDeleted)
{ {
if (model.IgnoreDeleted)
{
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));
}
return OperationResultModel.Error("Error:", "Элемент удален", ResultServiceStatusCode.WasDelete); return OperationResultModel.Error("Error:", "Элемент удален", ResultServiceStatusCode.WasDelete);
} }
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight)); return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));

View File

@ -32,5 +32,10 @@ namespace ToolsModule.ManagmentEntity
/// Иной признак, по которму отбираем записи (для списка) /// Иной признак, по которму отбираем записи (для списка)
/// </summary> /// </summary>
public string PageName { get; set; } public string PageName { get; set; }
/// <summary>
/// Игнорировать признак убдаленности записи и все равно ее возвращать
/// </summary>
public bool IgnoreDeleted { get; set; } = false;
} }
} }

View File

@ -26,7 +26,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
var studentLogic = DependencyManager.Instance.Resolve<IStudentLogic>(); var studentLogic = DependencyManager.Instance.Resolve<IStudentLogic>();
var userLogic = DependencyManager.Instance.Resolve<IUserLogic>(); var userLogic = DependencyManager.Instance.Resolve<IUserLogic>();
var student = studentLogic.GetElement(new StudentGetBindingModel { Id = result.StudentId }); var student = model.StudentModel;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -36,28 +36,17 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
// изменять студента // изменять студента
var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true); var st = Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(student, true);
var studentName = student.ToString(); var studentName = student.ToString();
bool haveChages = false;
if (student.StudentGroupId != result.StudentGroupToId) if (student.StudentGroupId != result.StudentGroupToId)
{ {
st.StudentGroupId = result.StudentGroupToId; st.StudentGroupId = result.StudentGroupToId;
student = studentLogic.Update(st); haveChages = true;
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить группу у студента {studentName}"));
return null;
} }
}
if (student.Description != model.Info) if (student.Description != model.Info)
{ {
st.Description = model.Info; st.Description = model.Info;
student = studentLogic.Update(st); haveChages = true;
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить описание у студента {studentName}"));
return null;
}
} }
if ((result.OrderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу || if ((result.OrderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу ||
@ -69,6 +58,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
st.StudentState = StudentState.Учится; st.StudentState = StudentState.Учится;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -83,6 +73,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
st.StudentState = StudentState.Академ; st.StudentState = StudentState.Академ;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -95,6 +86,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
st.StudentState = StudentState.Учится; st.StudentState = StudentState.Учится;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -112,6 +104,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
st.StudentState = result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен; st.StudentState = result.OrderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -136,8 +129,23 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
if (result.OrderStudentMoveType == OrderStudentMoveType.Восстановить && student.StudentState != StudentState.Учится) if (result.OrderStudentMoveType == OrderStudentMoveType.Восстановить && student.StudentState != StudentState.Учится)
{ {
var deletedStudent = studentLogic.Restore(new StudentGetBindingModel { NumberOfBook = student.NumberOfBook });
if (deletedStudent == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка при восстановлении студента", $"Не удалось восстановить студента {studentName}"));
return null;
}
var deletedUser = userLogic.Restore(new UserGetBindingModel { Id = deletedStudent.UserId });
if (deletedUser == null)
{
Errors.AddRange(userLogic.Errors);
Errors.Add(("Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {studentName}"));
return null;
}
st.StudentState = StudentState.Учится; st.StudentState = StudentState.Учится;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
@ -150,12 +158,38 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{ {
st.StudentState = StudentState.Ушел; st.StudentState = StudentState.Ушел;
student = studentLogic.Update(st); student = studentLogic.Update(st);
haveChages = false;
if (student == null) if (student == null)
{ {
Errors.AddRange(studentLogic.Errors); Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}")); Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
return null; return null;
} }
var delete = studentLogic.Delete(new StudentGetBindingModel { Id = student.Id });
if (!delete)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка удаления студента", $"Не удалось удалить студента {studentName}"));
return null;
}
delete = userLogic.Delete(new UserGetBindingModel { Id = student.UserId });
if (!delete)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка удаления пользователя по студенту", $"Не удалось удалить пользователя по студенту {studentName}"));
return null;
}
}
if (haveChages)
{
student = studentLogic.Update(st);
if (student == null)
{
Errors.AddRange(studentLogic.Errors);
Errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить данные у студента {studentName}"));
return null;
}
} }
} }
return result; return result;

View File

@ -122,7 +122,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
// новые студенты и восстановленцы // новые студенты и восстановленцы
foreach (var student in studentFromServer.CurrentStudentsList) foreach (var student in studentFromServer.CurrentStudentsList)
{ {
var deletedStudent = TryRestoreStudent(student); var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName, IgnoreDeleted = true });
if (deletedStudent != null) if (deletedStudent != null)
{ {
await SyncStudentOrders(deletedStudent, groups.List, client, address.Value); await SyncStudentOrders(deletedStudent, groups.List, client, address.Value);
@ -241,29 +241,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
return client; return client;
} }
private StudentViewModel TryRestoreStudent(StudentSyncModel student)
{
var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
if (deletedStudent == null && _studentLogic.Errors.FirstOrDefault(x => x.Message == "Элемент удален") != default)
{
// восстановленец
deletedStudent = _studentLogic.Restore(new StudentGetBindingModel { NumberOfBook = student.recordBookName });
if (deletedStudent == null)
{
SaveErrors(_studentLogic.Errors, "Ошибка при восстановлении студента", $"Не удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}");
return null;
}
var deletedUser = _userLogic.Restore(new UserGetBindingModel { Id = deletedStudent.UserId });
if (deletedUser == null)
{
SaveErrors(_userLogic.Errors, "Ошибка при восстановлении пользователя студента", $"Не удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}");
return null;
}
return deletedStudent;
}
return null;
}
private UserViewModel WorkWithUser(StudentSyncModel student) private UserViewModel WorkWithUser(StudentSyncModel student)
{ {
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}"; var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" {student.firstName[0]}." : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $"{student.patronymicName[0]}." : string.Empty)}";
@ -453,6 +430,8 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
continue; continue;
} }
SetYearFinish(student, studentGroupTo, order, orderStudentMoveType);
// создаем, если не нашли // создаем, если не нашли
var studentOrder = _orderStudentRecordLogic.Create(new OrderStudentRecordSetBindingModel var studentOrder = _orderStudentRecordLogic.Create(new OrderStudentRecordSetBindingModel
{ {
@ -461,7 +440,8 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
Info = info, Info = info,
OrderStudentMoveType = orderStudentMoveType, OrderStudentMoveType = orderStudentMoveType,
StudentGroupFromId = studentGroupFrom?.Id, StudentGroupFromId = studentGroupFrom?.Id,
StudentGroupToId = studentGroupTo?.Id StudentGroupToId = studentGroupTo?.Id,
StudentModel = student
}); });
if (studentOrder == null) if (studentOrder == null)
{ {
@ -469,8 +449,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
continue; continue;
} }
SetYearFinish(student, studentGroupTo, order, studentOrder);
SaveLog($"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}"); SaveLog($"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}");
if (orderStudentMoveType == OrderStudentMoveType.ОтчислитьВСвязиСПереводом || if (orderStudentMoveType == OrderStudentMoveType.ОтчислитьВСвязиСПереводом ||
@ -595,14 +573,14 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
} }
} }
private void SetYearFinish(StudentViewModel student, StudentGroupViewModel group, OrderViewModel order, OrderStudentRecordViewModel studentOrder) private void SetYearFinish(StudentViewModel student, StudentGroupViewModel group, OrderViewModel order, OrderStudentMoveType studentOrderType)
{ {
if (student == null || studentOrder == null) if (student == null)
{ {
return; return;
} }
int year = DateTime.Now.Year; int year = DateTime.Now.Year;
switch (studentOrder.OrderStudentMoveType) switch (studentOrderType)
{ {
// у студента не меняется год зачисления // у студента не меняется год зачисления
case OrderStudentMoveType.ПродлитьАкадем: case OrderStudentMoveType.ПродлитьАкадем:
@ -617,7 +595,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
case OrderStudentMoveType.ОтчислитьПоСобственному: case OrderStudentMoveType.ОтчислитьПоСобственному:
case OrderStudentMoveType.УбратьПоПереводу: case OrderStudentMoveType.УбратьПоПереводу:
student.EnrollmentYearId = null; student.EnrollmentYearId = null;
UpdateStudent(student);
return; return;
// проблема с разными направлениями групп на разных курсах // проблема с разными направлениями групп на разных курсах
case OrderStudentMoveType.ПеревестиНаСтаршийКурс: case OrderStudentMoveType.ПеревестиНаСтаршийКурс:
@ -700,27 +677,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
} }
student.EnrollmentYearId = yearEnrollment.Id; student.EnrollmentYearId = yearEnrollment.Id;
UpdateStudent(student);
}
private void UpdateStudent(StudentViewModel student)
{
if (student == null)
{
return;
}
var updateStudent = _studentLogic.GetElement(new StudentGetBindingModel { Id = student.Id });
if (updateStudent == null)
{
SaveErrors(_studentLogic.Errors, "Ошибка обновления данных студента", $"Не удалось найти данные студента {student.LastName} {student.FirstName} {student.Patronymic}");
return;
}
updateStudent.EnrollmentYearId = student.EnrollmentYearId;
updateStudent = _studentLogic.Update(Mapper.MapToClass<StudentViewModel, StudentSetBindingModel>(updateStudent, true));
if (updateStudent == null)
{
SaveErrors(_studentLogic.Errors, "Ошибка обновления данных студента", $"Не удалось обновить данные студента {student?.LastName} {student?.FirstName} {student?.Patronymic}");
}
} }
private void SaveErrors(List<(string Title, string Message)> errors, string title, string message) private void SaveErrors(List<(string Title, string Message)> errors, string title, string message)

View File

@ -1,5 +1,6 @@
using CoreModels.Enums.Department; using CoreModels.Enums.Department;
using CoreModels.ModelsDepartment; using CoreModels.ModelsDepartment;
using DepartmentContract.ViewModels;
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using ToolsModule.ManagmentEntity; using ToolsModule.ManagmentEntity;
@ -39,5 +40,7 @@ namespace DepartmentContract.BindingModels
public OrderStudentMoveType OrderStudentMoveType { get; set; } public OrderStudentMoveType OrderStudentMoveType { get; set; }
public string Info { get; set; } public string Info { get; set; }
public StudentViewModel StudentModel { get; set; }
} }
} }