Синхронизация студентов
This commit is contained in:
parent
5694e531b6
commit
61a84b6b68
@ -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;
|
||||
}
|
||||
}
|
@ -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.Неопределено,
|
||||
};
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
@ -12,5 +12,9 @@
|
||||
РаспределениеСтудентов = 1,
|
||||
|
||||
ДвижениеСтудентов = 2,
|
||||
|
||||
Перевод = 3,
|
||||
|
||||
Отчисление = 4
|
||||
}
|
||||
}
|
@ -5,6 +5,8 @@
|
||||
/// </summary>
|
||||
public enum StudentState
|
||||
{
|
||||
Неопределен = -1,
|
||||
|
||||
Учится = 0,
|
||||
|
||||
Академ = 1,
|
||||
@ -13,6 +15,6 @@
|
||||
|
||||
Отчислен = 3,
|
||||
|
||||
Неопределен = -1
|
||||
Ушел = 4
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user