@ -161,19 +161,51 @@ namespace DepartmentBusinessLogic.BusinessLogics
// студент не найден, значит он ушел с кафедры, выясняем почему
if ( studentSync = = null )
{
await SyncStudentOrders ( history , student , groups . List , client , address . Value , studentSync . iduniv );
await SyncStudentOrders ( history , student , groups . List , client , address . Value );
}
// не совпадение групп
else if ( student . StudentGroupName ! = studentSync . groupName )
{
await SyncStudentOrders ( history , student , groups . List , client , address . Value , studentSync . iduniv );
await SyncStudentOrders ( history , student , groups . List , client , address . Value );
}
studentFromServer . CurrentStudentsList . Remove ( studentSync ) ;
}
// новые студенты
// новые студенты и восстановленцы
foreach ( var student in studentFromServer . CurrentStudentsList )
{
var deletedStudent = await _studentLogic . GetElementAsync ( new StudentGetBindingModel { NumberOfBook = student . recordBookName } ) ;
if ( deletedStudent = = null & & _studentLogic . Errors . FirstOrDefault ( x = > x . Message = = "Элемент удален" ) ! = default )
{
// восстановленец
deletedStudent = await _studentLogic . RestoreAsync ( new StudentGetBindingModel { NumberOfBook = student . recordBookName } ) ;
if ( deletedStudent = = null )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка при восстановлении студента" , $"Н е удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
var deletedUser = await _userLogic . RestoreAsync ( new UserGetBindingModel { Id = deletedStudent . UserId } ) ;
if ( deletedUser = = null )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка при восстановлении пользователя студента" , $"Н е удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
await SyncStudentOrders ( history , deletedStudent , groups . List , client , address . Value ) ;
continue ;
}
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" { student . firstName [ 0 ] } . " : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $" { student . patronymicName [ 0 ] } . " : string.Empty)}" ;
var result = await _userLogic . GetListAsync ( new UserGetBindingModel { UserNameForSearch = userName } ) ;
@ -196,12 +228,13 @@ namespace DepartmentBusinessLogic.BusinessLogics
var newStudent = await _studentLogic . CreateAsync ( new StudentSetBindingModel
{
Iduniv = student . iduniv ,
NumberOfBook = student . recordBookName ,
UserId = newuser . Id ,
FirstName = student . firstName ,
LastName = student . lastName ,
Patronymic = student . patronymicName ,
NumberOfBook = student . recordBookName ,
StudentState = GetStudentState ( student . stateName ) ,
StudentState = StudentState . Н е о п р е д е л е н ,
Description = student . presenatationOfRecordBook
} ) ;
@ -223,7 +256,7 @@ namespace DepartmentBusinessLogic.BusinessLogics
Information = $"Добавлен студент {newStudent}"
} ) ;
await SyncStudentOrders ( history , newStudent , groups . List , client , address . Value , student . iduniv );
await SyncStudentOrders ( history , newStudent , groups . List , client , address . Value );
studentFromServer . CurrentStudentsList . Remove ( student ) ;
}
@ -231,13 +264,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
return true ;
}
private static StudentState GetStudentState ( string state ) = > state switch
{
"Является студентом" = > StudentState . У ч и т с я ,
"Находится в академическом отпуске" = > StudentState . А к а д е м ,
_ = > StudentState . Н е о п р е д е л е н ,
} ;
/// <summary>
/// Синхронизация приказов по студенту
/// </summary>
@ -246,11 +272,10 @@ namespace DepartmentBusinessLogic.BusinessLogics
/// <param name="groups"></param>
/// <param name="client"></param>
/// <param name="address"></param>
/// <param name="iduniv"></param>
/// <returns></returns>
private async Task SyncStudentOrders ( OrderSyncHistoryViewModel history , StudentViewModel student , List < StudentGroupViewModel > groups , HttpClient client , string address , string iduniv )
private async Task SyncStudentOrders ( OrderSyncHistoryViewModel history , StudentViewModel student , List < StudentGroupViewModel > groups , HttpClient client , string address )
{
HttpResponseMessage response = await client . GetAsync ( $"{address}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={ i duniv}&recordBookName={student.NumberOfBook}&allOrders=sppd") ;
HttpResponseMessage response = await client . GetAsync ( $"{address}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={ student.I duniv}&recordBookName={student.NumberOfBook}&allOrders=sppd") ;
if ( ! response . IsSuccessStatusCode )
{
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список приказов по студенту" ) ) ;
@ -265,9 +290,13 @@ namespace DepartmentBusinessLogic.BusinessLogics
foreach ( var syncOrder in syncOrders . StudentOrders )
{
var orderType = GetOrderType ( syncOrder . orderSubTypeName ) ;
// отбираем только приказы, которые нас интересуют
if ( orderType ! = OrderType . Н е о п р е д е л е н о )
// пропускаем приказы, которые нас не интересуют
if ( orderType = = OrderType . Н е о п р е д е л е н о )
{
continue ;
}
// пытаемся найти приказ
var order = await _orderLogic . GetElementAsync ( new OrderGetBindingModel
{
@ -302,8 +331,13 @@ namespace DepartmentBusinessLogic.BusinessLogics
OrderId = order . Id ,
StudentId = student . Id
} ) ;
if ( studentOrder = = null )
// если такой приказ по студенту уже есть, просто пропускаем
if ( studentOrder ! = null )
{
continue ;
}
Guid ? studentGroupFromId = null ;
Guid ? studentGroupToId = null ;
string info = string . Empty ;
@ -315,13 +349,23 @@ namespace DepartmentBusinessLogic.BusinessLogics
{
studentGroupToId = groups . FirstOrDefault ( x = > x . ToString ( ) = = syncOrder . groupNameAfter ) ? . Id ;
}
// если был переведенец к нам, то игнорируем приказы, не связанные с нашими группами
if ( ! studentGroupFromId . HasValue & & ! studentGroupToId . HasValue )
{
continue ;
}
OrderStudentMoveType orderStudentMoveType = OrderStudentMoveType . Н е о п р е д е л е н о ;
switch ( syncOrder . orderSubTypeName )
switch ( syncOrder . order TypeName)
{
case "Перевод" :
if ( syncOrder . orderSubTypeName = = "Распределение по группам" )
{
orderStudentMoveType = OrderStudentMoveType . Р а с п р е д е л е н и е ;
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
}
// внутренний перевод
if ( studentGroupFromId . HasValue & & studentGroupToId . HasValue )
else if ( studentGroupFromId . HasValue & & studentGroupToId . HasValue )
{
orderStudentMoveType = OrderStudentMoveType . П е р е в о д В Г р у п п у ;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
@ -337,17 +381,45 @@ namespace DepartmentBusinessLogic.BusinessLogics
info = $"Отчисление студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в связи с переводом" ;
}
break ;
case "Зачисление в вуз ":
case "Зачисление в вуз вне приемной кампании ":
orderStudentMoveType = OrderStudentMoveType . З а ч и с л е н и е ;
info = $"Зачисление студента {student}" ;
break ;
case "Распределение по группам" :
orderStudentMoveType = OrderStudentMoveType . Р а с п р е д е л е н и е ;
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
break ;
case "Перевод на следующий курс" :
orderStudentMoveType = OrderStudentMoveType . П е р е в о д Н а К у р с ;
info = $"Перевод студента {student} на следующий курс" ;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.First(x => x.Id == studentGroupToId)}" ;
break ;
case "Уход в академический отпуск" :
orderStudentMoveType = OrderStudentMoveType . В А к а д е м ;
info = $"Уход в А О студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}" ;
break ;
case "Продление академического отпуска" :
orderStudentMoveType = OrderStudentMoveType . П р о д л А к а д е м ;
info = $"Продление А О студента {student}" ;
break ;
case "Восстановление из академического отпуска" :
orderStudentMoveType = OrderStudentMoveType . И з А к а д е м а ;
info = $"Выход из А О студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
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 ;
}
@ -378,11 +450,11 @@ namespace DepartmentBusinessLogic.BusinessLogics
continue ;
}
var st = Mapper . MapToClass < StudentViewModel , StudentSetBindingModel > ( student , true ) ;
var studentName = student . ToString ( ) ;
if ( student . StudentGroupId ! = studentGroupToId )
{
var st = Mapper . MapToClass < StudentViewModel , StudentSetBindingModel > ( student , true ) ;
st . StudentGroupId = studentGroupToId ;
var studentName = student . ToString ( ) ;
student = await _studentLogic . UpdateAsync ( st ) ;
if ( student = = null )
{
@ -402,6 +474,144 @@ namespace DepartmentBusinessLogic.BusinessLogics
} ) ;
}
if ( ( orderStudentMoveType = = OrderStudentMoveType . З а ч и с л е н и е | | orderStudentMoveType = = OrderStudentMoveType . З а ч и с л и т ь П о П е р е в о д у
| | 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.Учится}"
} ) ;
}
if ( ( orderStudentMoveType = = OrderStudentMoveType . В А к а д е м | | 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.Академ}"
} ) ;
}
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.Учится}"
} ) ;
}
if ( ( orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м | | orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а
| | orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь | | orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у
| | orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю ) & & student . StudentState ! = StudentState . О т ч и с л е н )
{
st . StudentState = orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю ? 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} сменился статус на {(orderStudentMoveType == OrderStudentMoveType.ОтчислитьПоЗавершению ? StudentState.Завершил : StudentState.Отчислен)}"
} ) ;
var result = await _studentLogic . DeleteAsync ( new StudentGetBindingModel { Id = student . Id } ) ;
if ( ! result )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка удаления студента" , $"Н е удалось удалить студента {studentName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
result = await _userLogic . DeleteAsync ( new UserGetBindingModel { Id = student . UserId } ) ;
if ( ! result )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка удаления пользователя по студенту" , $"Н е удалось удалить пользователя по студенту {studentName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
}
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 ,
@ -418,8 +628,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
}
}
}
}
}
private static OrderType GetOrderType ( string orderTitle ) = > orderTitle switch
{