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

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 (model.IgnoreDeleted)
{
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));
}
return OperationResultModel.Error("Error:", "Элемент удален", ResultServiceStatusCode.WasDelete);
}
return OperationResultModel.Success(Mapper.MapToClass<T, E>(entity, model.HaveRight));

View File

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

View File

@ -122,7 +122,7 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
// новые студенты и восстановленцы
foreach (var student in studentFromServer.CurrentStudentsList)
{
var deletedStudent = TryRestoreStudent(student);
var deletedStudent = _studentLogic.GetElement(new StudentGetBindingModel { NumberOfBook = student.recordBookName, IgnoreDeleted = true });
if (deletedStudent != null)
{
await SyncStudentOrders(deletedStudent, groups.List, client, address.Value);
@ -241,29 +241,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
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)
{
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;
}
SetYearFinish(student, studentGroupTo, order, orderStudentMoveType);
// создаем, если не нашли
var studentOrder = _orderStudentRecordLogic.Create(new OrderStudentRecordSetBindingModel
{
@ -461,7 +440,8 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
Info = info,
OrderStudentMoveType = orderStudentMoveType,
StudentGroupFromId = studentGroupFrom?.Id,
StudentGroupToId = studentGroupTo?.Id
StudentGroupToId = studentGroupTo?.Id,
StudentModel = student
});
if (studentOrder == null)
{
@ -469,8 +449,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
continue;
}
SetYearFinish(student, studentGroupTo, order, studentOrder);
SaveLog($"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}");
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;
}
int year = DateTime.Now.Year;
switch (studentOrder.OrderStudentMoveType)
switch (studentOrderType)
{
// у студента не меняется год зачисления
case OrderStudentMoveType.ПродлитьАкадем:
@ -617,7 +595,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
case OrderStudentMoveType.ОтчислитьПоСобственному:
case OrderStudentMoveType.УбратьПоПереводу:
student.EnrollmentYearId = null;
UpdateStudent(student);
return;
// проблема с разными направлениями групп на разных курсах
case OrderStudentMoveType.ПеревестиНаСтаршийКурс:
@ -700,27 +677,6 @@ namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
}
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)

View File

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