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

This commit is contained in:
kotcheshir73 2021-04-29 18:10:30 +04:00
parent 5694e531b6
commit 61a84b6b68
5 changed files with 169 additions and 54 deletions

View File

@ -255,8 +255,19 @@ namespace DatabaseCore
/// <returns></returns>
protected abstract IQueryable<T> IncludingWhenReading(IQueryable<T> query);
/// <summary>
/// Дополнительыне проверки, если требуется получать единичную запись но не по id
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
protected virtual bool AdditionalCheckForSingleGet(G model) => false;
/// <summary>
/// Получение единичной записи но не по id
/// </summary>
/// <param name="list"></param>
/// <param name="model"></param>
/// <returns></returns>
protected virtual T GetSingleRecord(IQueryable<T> list, G model) => null;
}
}

View File

@ -289,7 +289,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
var syncOrders = JsonSerializer.Deserialize<StudentOrderListSyncModel>(response.Content.ReadAsStringAsync().Result);
foreach (var syncOrder in syncOrders.StudentOrders)
{
var orderType = GetOrderType(syncOrder.orderSubTypeName);
var orderType = GetOrderType(syncOrder.orderTypeName);
// пропускаем приказы, которые нас не интересуют
if (orderType == OrderType.Неопределено)
@ -335,6 +335,11 @@ namespace DepartmentBusinessLogic.BusinessLogics
// если такой приказ по студенту уже есть, просто пропускаем
if (studentOrder != null)
{
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"Нерспознанный приказ {syncOrder.orderTypeName} для студента {student}"
});
continue;
}
@ -349,7 +354,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
{
studentGroupToId = groups.FirstOrDefault(x => x.ToString() == syncOrder.groupNameAfter)?.Id;
}
// если был переведенец к нам, то игнорируем приказы, не связанные с нашими группами
// игнорируем приказы, не связанные с нашими группами
if (!studentGroupFromId.HasValue && !studentGroupToId.HasValue)
{
continue;
@ -361,66 +366,80 @@ namespace DepartmentBusinessLogic.BusinessLogics
case "Перевод":
if (syncOrder.orderSubTypeName == "Распределение по группам")
{
orderStudentMoveType = OrderStudentMoveType.Распределение;
orderStudentMoveType = OrderStudentMoveType.Распределить;
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
}
// внутренний перевод
else if (studentGroupFromId.HasValue && studentGroupToId.HasValue)
{
orderStudentMoveType = OrderStudentMoveType.ПереводВГруппу;
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в группу {groups.First(x => x.Id == studentGroupToId)}";
}
else if (!studentGroupFromId.HasValue && studentGroupToId.HasValue)
{
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПереводу;
info = $"Зачисление переовдом студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводу;
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.First(x => x.Id == studentGroupToId)}";
}
else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue)
{
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в связи с переводом";
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на другую кафедру";
}
break;
case "Зачисление в вуз вне приемной кампании":
orderStudentMoveType = OrderStudentMoveType.Зачисление;
info = $"Зачисление студента {student}";
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
info = $"Зачисление студента {student} по приказу";
break;
case "Зачисление в вуз":
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
info = $"Зачисление студента {student} по приказу";
break;
case "Перевод из другого вуза":
orderStudentMoveType = OrderStudentMoveType.ПринятьПоПереводусДругогоВуза;
info = $"Перевод студента {student} с другого вуза";
break;
case "Перевод на следующий курс":
orderStudentMoveType = OrderStudentMoveType.ПереводНаКурс;
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.First(x => x.Id == studentGroupToId)}";
break;
//case "Завершение обучения": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} в связи с окончанием обучения";
// break;
case "Уход в академический отпуск":
orderStudentMoveType = OrderStudentMoveType.ВАкадем;
// дата
orderStudentMoveType = OrderStudentMoveType.ОтправитьВАкадем;
info = $"Уход в АО студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}";
break;
case "Продление академического отпуска":
orderStudentMoveType = OrderStudentMoveType.ПродлАкадем;
orderStudentMoveType = OrderStudentMoveType.ПродлитьАкадем;
info = $"Продление АО студента {student}";
break;
case "Восстановление из академического отпуска":
orderStudentMoveType = OrderStudentMoveType.ИзАкадема;
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
info = $"Выход из АО студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
break;
case "Восстановление": // уточнить приказ
//case "Отчисление по собственному": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} по собственному желанию";
// break;
//case "Отчисление за неуспеваемость": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
// info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} за неуспеваемость";
// break;
//case "Отчисление по невыходу из академа": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
// info = $"Отчисление студента {student} по невыходу из академа";
// break;
case "Отчисление":
{
}
break;
case "Восстановление":
orderStudentMoveType = OrderStudentMoveType.Восстановить;
info = $"Восстановление отчисленного студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}";
break;
case "Отчисление по собственному": // уточнить приказ
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} по собственному желанию";
break;
case "Отчисление за неуспеваемость": // уточнить приказ
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} за неуспеваемость";
break;
case "Отчисление по невыходу из академа": // уточнить приказ
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} по невыходу из академа";
break;
case "Хавершение обучения": // уточнить приказ
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} в связи с окончанием обучения";
break;
}
if (orderStudentMoveType == OrderStudentMoveType.Неопределено)
@ -474,8 +493,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
});
}
if ((orderStudentMoveType == OrderStudentMoveType.Зачисление || orderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПереводу
|| orderStudentMoveType == OrderStudentMoveType.ПереводВГруппу) && student.StudentState != StudentState.Учится)
if ((orderStudentMoveType == OrderStudentMoveType.ЗачислитьПоПриказу || orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводу
|| orderStudentMoveType == OrderStudentMoveType.ПринятьПоПереводусДругогоВуза || orderStudentMoveType == OrderStudentMoveType.ПеревестиНаДругоеНаправлениеКафедры)
&& student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = await _studentLogic.UpdateAsync(st);
@ -497,7 +517,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
});
}
if ((orderStudentMoveType == OrderStudentMoveType.ВАкадем || orderStudentMoveType == OrderStudentMoveType.ПродлАкадем)
if ((orderStudentMoveType == OrderStudentMoveType.ОтправитьВАкадем || orderStudentMoveType == OrderStudentMoveType.ПродлитьАкадем)
&& student.StudentState != StudentState.Академ)
{
st.StudentState = StudentState.Академ;
@ -520,7 +540,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
});
}
if (orderStudentMoveType == OrderStudentMoveType.ИзАкадема && student.StudentState != StudentState.Учится)
if (orderStudentMoveType == OrderStudentMoveType.ВосстановитьИзАкадема && student.StudentState != StudentState.Учится)
{
st.StudentState = StudentState.Учится;
student = await _studentLogic.UpdateAsync(st);
@ -612,6 +632,28 @@ namespace DepartmentBusinessLogic.BusinessLogics
});
}
if (orderStudentMoveType == OrderStudentMoveType.УбратьПоПереводу && student.StudentState != StudentState.Ушел)
{
st.StudentState = StudentState.Ушел;
student = await _studentLogic.UpdateAsync(st);
if (student == null)
{
var errors = _studentLogic.Errors;
errors.Add(("Ошибка изменения по студенту", $"Не удалось изменить статус у студента {studentName}"));
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, errors.Select(x => x.Message))
});
continue;
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = $"У студента {student} сменился статус на {StudentState.Ушел}"
});
}
await _recordLogic.CreateAsync(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
@ -631,9 +673,17 @@ namespace DepartmentBusinessLogic.BusinessLogics
private static OrderType GetOrderType(string orderTitle) => orderTitle switch
{
"Зачисление в вуз вне приемной кампании" => OrderType.ЗачислениеСтудентов,
"Зачисление в вуз" => OrderType.ЗачислениеСтудентов,
"Распределение по группам" => OrderType.РаспределениеСтудентов,
"Перевод из другого вуза" => OrderType.ЗачислениеСтудентов,
"Перевод" => OrderType.Перевод,
"Перевод на следующий курс" => OrderType.ДвижениеСтудентов,
"Завершение обучения" => OrderType.Отчисление,
"Уход в академический отпуск" => OrderType.ДвижениеСтудентов,
"Продление академического отпуска" => OrderType.ДвижениеСтудентов,
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
"Отчисление" => OrderType.Отчисление,
"Восстановление" => OrderType.Перевод,
_ => OrderType.Неопределено,
};
}

View File

@ -5,38 +5,86 @@
/// </summary>
public enum OrderStudentMoveType
{
Неопределено = -1,
Неопределено = -1,
Зачисление = 0,
/// <summary>
/// Студент зачисляется сразу на направление кафедры
/// </summary>
ЗачислитьПоПриказу = 0,
Распределение = 1,
/// <summary>
/// Распределение студента в группу
/// </summary>
Распределить = 1,
ПереводНаКурс = 3,
/// <summary>
/// Перевод на старший курс
/// </summary>
ПеревестиНаСтаршийКурс = 2,
ПереводВГруппу = 4,
/// <summary>
/// Отчисление студента в связи с завершением обучения
/// </summary>
ОтчислитьПоЗавершению = 3,
Движение = 2,
/// <summary>
/// Студент переводится с другой кафедры на нашу
/// </summary>
ПринятьПоПереводу = 5,
ИзАкадема = 5,
/// <summary>
/// Студент переводится с другого вуза на нашу кафедру
/// </summary>
ПринятьПоПереводусДругогоВуза = 6,
ВАкадем = 6,
/// <summary>
/// Переход с одного направления кафедоры на другое
/// </summary>
ПеревестиНаДругоеНаправлениеКафедры = 7,
ПродлАкадем = 13,
/// <summary>
/// Студент переводится с нашей кафедры на другую
/// </summary>
УбратьПоПереводу = 8,
ОтчислитьЗаНеуспевамость = 7,
/// <summary>
/// Уход в акакдем студента
/// </summary>
ОтправитьВАкадем = 10,
ОтчислитьВСвязиСПереводом = 8,
/// <summary>
/// Продление академа студента
/// </summary>
ПродлитьАкадем = 11,
ОтчислитьПоСобственному = 9,
/// <summary>
/// Выход из академа студента
/// </summary>
ВосстановитьИзАкадема = 12,
ЗачислитьПоПереводу = 10,
/// <summary>
/// Отчисление студента в связи с не выходом из академа
/// </summary>
ОтчислитьЗаНевыходСАкадема = 13,
Восстановить = 11,
/// <summary>
/// Уход студента в другой ВУЗ
/// </summary>
ОтчислитьВСвязиСПереводом = 20,
ОтчислитьПоЗавершению = 12,
/// <summary>
/// Отчисление студента за долги
/// </summary>
ОтчислитьЗаНеуспевамость = 21,
ОтчислитьЗаНевыходСАкадема = 14,
/// <summary>
/// Отчисление студента по собственному
/// </summary>
ОтчислитьПоСобственному = 22,
Перевод = 15
/// <summary>
/// Восстановление студента после отчисления по собственному
/// </summary>
Восстановить = 23
}
}

View File

@ -12,5 +12,9 @@
РаспределениеСтудентов = 1,
ДвижениеСтудентов = 2,
Перевод = 3,
Отчисление = 4
}
}

View File

@ -5,6 +5,8 @@
/// </summary>
public enum StudentState
{
Неопределен = -1,
Учится = 0,
Академ = 1,
@ -13,6 +15,6 @@
Отчислен = 3,
Неопределен = -1
Ушел = 4
}
}