2021-04-27 15:14:35 +04:00
using DepartmentBusinessLogic.BindingModels ;
using DepartmentBusinessLogic.Enums ;
using DepartmentBusinessLogic.HelperModels ;
using DepartmentBusinessLogic.Interfaces ;
using DepartmentBusinessLogic.ViewModels ;
using ModuleTools.BusinessLogics ;
using ModuleTools.Enums ;
using ModuleTools.Extensions ;
using SecurityBusinessLogic.BindingModels ;
using SecurityBusinessLogic.BusinessLogics ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Net.Http ;
using System.Net.Http.Headers ;
using System.Text ;
using System.Text.Json ;
using System.Threading.Tasks ;
namespace DepartmentBusinessLogic.BusinessLogics
{
/// <summary>
/// Логика работы с историями синхронизации приказов
/// </summary>
public class OrderSyncHistoryBusinessLogic : GenericBusinessLogic < OrderSyncHistoryGetBindingModel , OrderSyncHistorySetBindingModel , OrderSyncHistoryListViewModel , OrderSyncHistoryViewModel >
{
2021-04-27 19:10:38 +04:00
private OrderSyncHistoryRecordBusinessLogic _recordLogic ;
private EnviromentSettingBusinessLogic _enviromentSettingLogic ;
private StudentGroupBusinessLogic _groupsLogic ;
private StudentBusinessLogic _studentLogic ;
private UserBusinessLogic _userLogic ;
private OrderBusinessLogic _orderLogic ;
private OrderStudentRecordBusinessLogic _orderStudentRecordLogic ;
2021-04-27 15:14:35 +04:00
public OrderSyncHistoryBusinessLogic ( IOrderSyncHistoryService service ) : base ( service , "Синхронизация Приказов" , AccessOperation . С и н х р о н и з а ц и я П р и к а з о в ) { }
public async Task < bool > SyncOrders ( )
{
var history = await CreateAsync ( new OrderSyncHistorySetBindingModel { SyncDate = DateTime . Now } ) ;
if ( history = = null )
{
Errors . Add ( ( "Ошибка создание истории" , "Н е удалось создать историю" ) ) ;
return false ;
}
2021-04-27 19:10:38 +04:00
_recordLogic = DependencyManager . Instance . Resolve < OrderSyncHistoryRecordBusinessLogic > ( ) ;
_enviromentSettingLogic = DependencyManager . Instance . Resolve < EnviromentSettingBusinessLogic > ( ) ;
_groupsLogic = DependencyManager . Instance . Resolve < StudentGroupBusinessLogic > ( ) ;
_studentLogic = DependencyManager . Instance . Resolve < StudentBusinessLogic > ( ) ;
_orderLogic = DependencyManager . Instance . Resolve < OrderBusinessLogic > ( ) ;
_orderStudentRecordLogic = DependencyManager . Instance . Resolve < OrderStudentRecordBusinessLogic > ( ) ;
_userLogic = DependencyManager . Instance . Resolve < UserBusinessLogic > ( ) ;
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
var address = ( await _enviromentSettingLogic . GetListAsync ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" } ) ) ? . List ? . FirstOrDefault ( ) ;
2021-04-27 15:14:35 +04:00
if ( address = = null | | address . Value . IsEmpty ( ) )
{
2021-04-27 19:10:38 +04:00
Errors = _enviromentSettingLogic . Errors ;
2021-04-27 15:14:35 +04:00
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить адрес серверая для получения приказов по студентам" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
2021-04-27 19:10:38 +04:00
var username = ( await _enviromentSettingLogic . GetListAsync ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderUserName" } ) ) ? . List ? . FirstOrDefault ( ) ;
2021-04-27 15:14:35 +04:00
if ( username = = null | | username . Value . IsEmpty ( ) )
{
2021-04-27 19:10:38 +04:00
Errors = _enviromentSettingLogic . Errors ;
2021-04-27 15:14:35 +04:00
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить имя пользователя для получения приказов по студентам" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
2021-04-27 19:10:38 +04:00
var password = ( await _enviromentSettingLogic . GetListAsync ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderPassword" } ) ) ? . List ? . FirstOrDefault ( ) ;
2021-04-27 15:14:35 +04:00
if ( password = = null | | password . Value . IsEmpty ( ) )
{
2021-04-27 19:10:38 +04:00
Errors = _enviromentSettingLogic . Errors ;
2021-04-27 15:14:35 +04:00
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить пароль для получения приказов по студентам" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
var client = new HttpClient
{
BaseAddress = new Uri ( address . Value )
} ;
client . DefaultRequestHeaders . Accept . Clear ( ) ;
client . DefaultRequestHeaders . Accept . Add ( new MediaTypeWithQualityHeaderValue ( "application/json" ) ) ;
client . DefaultRequestHeaders . Authorization = new AuthenticationHeaderValue ( "Basic" , Convert . ToBase64String ( Encoding . UTF8 . GetBytes ( $"{username.Value}:{password.Value}" ) ) ) ;
// авторизация
// получение списка студентов
HttpResponseMessage response = await client . GetAsync ( $"{address.Value}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment" ) ;
if ( ! response . IsSuccessStatusCode )
{
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список студентов с сервера" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
var studentFromServer = JsonSerializer . Deserialize < StudentListSyncModel > ( response . Content . ReadAsStringAsync ( ) . Result ) ;
if ( studentFromServer . CurrentStudentsList . Count = = 0 )
{
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = "Полученный список студентов пустой"
} ) ;
return true ;
}
2021-04-27 19:10:38 +04:00
var groups = await _groupsLogic . GetListAsync ( new StudentGroupGetBindingModel ( ) ) ;
2021-04-27 15:14:35 +04:00
if ( groups = = null | | groups . List = = null )
{
2021-04-27 19:10:38 +04:00
Errors = _groupsLogic . Errors ;
2021-04-27 15:14:35 +04:00
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список групп" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
2021-04-27 19:10:38 +04:00
var students = await _studentLogic . GetListAsync ( new StudentGetBindingModel ( ) ) ;
if ( students = = null | | students . List = = null )
2021-04-27 15:14:35 +04:00
{
2021-04-27 19:10:38 +04:00
Errors = _studentLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список студентов" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
2021-04-27 19:10:38 +04:00
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
foreach ( var student in students . List )
{
var studentSync = studentFromServer . CurrentStudentsList . FirstOrDefault ( x = > x . recordBookName = = student . NumberOfBook ) ;
// студент не найден, значит он ушел с кафедры, выясняем почему
if ( studentSync = = null )
{
2021-04-28 17:58:52 +04:00
await SyncStudentOrders ( history , student , groups . List , client , address . Value ) ;
2021-04-27 15:14:35 +04:00
}
2021-04-27 19:10:38 +04:00
// не совпадение групп
else if ( student . StudentGroupName ! = studentSync . groupName )
2021-04-27 15:14:35 +04:00
{
2021-04-28 17:58:52 +04:00
await SyncStudentOrders ( history , student , groups . List , client , address . Value ) ;
2021-04-27 19:10:38 +04:00
}
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
studentFromServer . CurrentStudentsList . Remove ( studentSync ) ;
}
2021-04-28 17:58:52 +04:00
// новые студенты и восстановленцы
2021-04-27 19:10:38 +04:00
foreach ( var student in studentFromServer . CurrentStudentsList )
{
2021-04-28 17:58:52 +04:00
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 ;
}
2021-04-27 19:10:38 +04:00
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 } ) ;
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
var newuser = await _userLogic . CreateAsync ( new UserSetBindingModel
{
Login = userName ,
Password = student . recordBookName
} ) ;
if ( newuser = = null )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка создания пользователя под студента" , $"Н е удалось создать пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
2021-04-27 19:10:38 +04:00
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
2021-04-27 15:14:35 +04:00
} ) ;
2021-04-27 19:10:38 +04:00
continue ;
}
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
var newStudent = await _studentLogic . CreateAsync ( new StudentSetBindingModel
{
2021-04-28 17:58:52 +04:00
Iduniv = student . iduniv ,
NumberOfBook = student . recordBookName ,
2021-04-27 19:10:38 +04:00
UserId = newuser . Id ,
FirstName = student . firstName ,
LastName = student . lastName ,
Patronymic = student . patronymicName ,
2021-04-28 17:58:52 +04:00
StudentState = StudentState . Н е о п р е д е л е н ,
2021-04-27 19:10:38 +04:00
Description = student . presenatationOfRecordBook
} ) ;
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
if ( newStudent = = null )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка добавления студента" , $"Н е удалось добавить студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
2021-04-27 19:10:38 +04:00
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
2021-04-27 15:14:35 +04:00
} ) ;
2021-04-27 19:10:38 +04:00
continue ;
}
2021-04-27 15:14:35 +04:00
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Добавлен студент {newStudent}"
} ) ;
2021-04-27 15:14:35 +04:00
2021-04-28 17:58:52 +04:00
await SyncStudentOrders ( history , newStudent , groups . List , client , address . Value ) ;
2021-04-27 19:10:38 +04:00
studentFromServer . CurrentStudentsList . Remove ( student ) ;
2021-04-27 15:14:35 +04:00
}
return true ;
}
/// <summary>
/// Синхронизация приказов по студенту
/// </summary>
/// <param name="history"></param>
/// <param name="student"></param>
2021-04-27 17:09:03 +04:00
/// <param name="groups"></param>
2021-04-27 15:14:35 +04:00
/// <param name="client"></param>
/// <param name="address"></param>
/// <returns></returns>
2021-04-28 17:58:52 +04:00
private async Task SyncStudentOrders ( OrderSyncHistoryViewModel history , StudentViewModel student , List < StudentGroupViewModel > groups , HttpClient client , string address )
2021-04-27 15:14:35 +04:00
{
2021-04-28 17:58:52 +04:00
HttpResponseMessage response = await client . GetAsync ( $"{address}/univer_Testing/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd" ) ;
2021-04-27 15:14:35 +04:00
if ( ! response . IsSuccessStatusCode )
{
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список приказов по студенту" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 15:14:35 +04:00
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return ;
}
var syncOrders = JsonSerializer . Deserialize < StudentOrderListSyncModel > ( response . Content . ReadAsStringAsync ( ) . Result ) ;
2021-04-27 17:09:03 +04:00
foreach ( var syncOrder in syncOrders . StudentOrders )
2021-04-27 15:14:35 +04:00
{
2021-04-29 18:10:30 +04:00
var orderType = GetOrderType ( syncOrder . orderTypeName ) ;
2021-04-28 17:58:52 +04:00
// пропускаем приказы, которые нас не интересуют
if ( orderType = = OrderType . Н е о п р е д е л е н о )
{
continue ;
}
// пытаемся найти приказ
var order = await _orderLogic . GetElementAsync ( new OrderGetBindingModel
{
OrderNumber = syncOrder . clericNumber ,
OrderDate = Convert . ToDateTime ( syncOrder . clericDate )
} ) ;
if ( order = = null )
2021-04-27 15:14:35 +04:00
{
2021-04-28 17:58:52 +04:00
// если не нашли - пытаемся создать
order = await _orderLogic . CreateAsync ( new OrderSetBindingModel
2021-04-27 17:09:03 +04:00
{
OrderNumber = syncOrder . clericNumber ,
2021-04-28 17:58:52 +04:00
OrderDate = Convert . ToDateTime ( syncOrder . clericDate ) ,
OrderType = orderType
2021-04-27 17:09:03 +04:00
} ) ;
if ( order = = null )
{
2021-04-28 17:58:52 +04:00
var errors = _orderLogic . Errors ;
errors . Add ( ( "Ошибка добавления приказа" , $"Н е удалось добавить приказ {syncOrder.clericNumber} {syncOrder.clericDate}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 17:09:03 +04:00
{
2021-04-28 17:58:52 +04:00
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
2021-04-27 17:09:03 +04:00
} ) ;
2021-04-28 17:58:52 +04:00
continue ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
}
2021-04-27 15:14:35 +04:00
2021-04-28 17:58:52 +04:00
// ищем в приказе запись по студенту
var studentOrder = await _orderStudentRecordLogic . GetElementAsync ( new OrderStudentRecordGetBindingModel
{
OrderId = order . Id ,
StudentId = student . Id
} ) ;
// если такой приказ по студенту уже есть, просто пропускаем
if ( studentOrder ! = null )
{
2021-04-29 18:10:30 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Нерспознанный приказ {syncOrder.orderTypeName} для студента {student}"
} ) ;
2021-04-28 17:58:52 +04:00
continue ;
}
Guid ? studentGroupFromId = null ;
Guid ? studentGroupToId = null ;
string info = string . Empty ;
if ( syncOrder . groupNameBefore . IsNotEmpty ( ) )
{
studentGroupFromId = groups . FirstOrDefault ( x = > x . ToString ( ) = = syncOrder . groupNameBefore ) ? . Id ;
}
if ( syncOrder . groupNameAfter . IsNotEmpty ( ) )
{
studentGroupToId = groups . FirstOrDefault ( x = > x . ToString ( ) = = syncOrder . groupNameAfter ) ? . Id ;
}
2021-04-29 18:10:30 +04:00
// игнорируем приказы, не связанные с нашими группами
2021-04-28 17:58:52 +04:00
if ( ! studentGroupFromId . HasValue & & ! studentGroupToId . HasValue )
{
continue ;
}
OrderStudentMoveType orderStudentMoveType = OrderStudentMoveType . Н е о п р е д е л е н о ;
switch ( syncOrder . orderTypeName )
{
case "Перевод" :
if ( syncOrder . orderSubTypeName = = "Распределение по группам" )
2021-04-27 17:09:03 +04:00
{
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . Р а с п р е д е л и т ь ;
2021-04-28 17:58:52 +04:00
info = $"Распределение студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
// внутренний перевод
else if ( studentGroupFromId . HasValue & & studentGroupToId . HasValue )
2021-04-27 17:09:03 +04:00
{
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . П е р е в е с т и Н а Д р у г о е Н а п р а в л е н и е К а ф е д р ы ;
2021-04-28 17:58:52 +04:00
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
else if ( ! studentGroupFromId . HasValue & & studentGroupToId . HasValue )
2021-04-27 17:09:03 +04:00
{
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у ;
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.First(x => x.Id == studentGroupToId)}" ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
else if ( studentGroupFromId . HasValue & & ! studentGroupToId . HasValue )
2021-04-27 17:09:03 +04:00
{
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . У б р а т ь П о П е р е в о д у ;
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на другую кафедру" ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
break ;
case "Зачисление в вуз вне приемной кампании" :
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
info = $"Зачисление студента {student} по приказу" ;
break ;
case "Зачисление в вуз" :
orderStudentMoveType = OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
info = $"Зачисление студента {student} по приказу" ;
break ;
case "Перевод из другого вуза" :
orderStudentMoveType = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у с Д р у г о г о В у з а ;
info = $"Перевод студента {student} с другого вуза" ;
2021-04-28 17:58:52 +04:00
break ;
case "Перевод на следующий курс" :
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . П е р е в е с т и Н а С т а р ш и й К у р с ;
2021-04-28 17:58:52 +04:00
info = $"Перевод студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.First(x => x.Id == studentGroupToId)}" ;
break ;
2021-04-29 18:10:30 +04:00
//case "Завершение обучения": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} в связи с окончанием обучения";
// break;
2021-04-28 17:58:52 +04:00
case "Уход в академический отпуск" :
2021-04-29 18:10:30 +04:00
// дата
orderStudentMoveType = OrderStudentMoveType . О т п р а в и т ь В А к а д е м ;
2021-04-28 17:58:52 +04:00
info = $"Уход в А О студента {student} из группы {groups.First(x => x.Id == studentGroupFromId)}" ;
break ;
case "Продление академического отпуска" :
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . П р о д л и т ь А к а д е м ;
2021-04-28 17:58:52 +04:00
info = $"Продление А О студента {student}" ;
break ;
case "Восстановление из академического отпуска" :
2021-04-29 18:10:30 +04:00
orderStudentMoveType = OrderStudentMoveType . В о с с т а н о в и т ь И з А к а д е м а ;
2021-04-28 17:58:52 +04:00
info = $"Выход из А О студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
break ;
2021-04-29 18:10:30 +04:00
//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 "Восстановление" :
2021-04-28 17:58:52 +04:00
orderStudentMoveType = OrderStudentMoveType . В о с с т а н о в и т ь ;
info = $"Восстановление отчисленного студента {student} в группу {groups.First(x => x.Id == studentGroupToId)}" ;
break ;
}
if ( orderStudentMoveType = = OrderStudentMoveType . Н е о п р е д е л е н о )
{
continue ;
}
// создаем, если не нашли
studentOrder = await _orderStudentRecordLogic . CreateAsync ( new OrderStudentRecordSetBindingModel
{
OrderId = order . Id ,
StudentId = student . Id ,
Info = info ,
OrderStudentMoveType = orderStudentMoveType ,
StudentGroupFromId = studentGroupFromId ,
StudentGroupToId = studentGroupToId
} ) ;
if ( studentOrder = = null )
{
var errors = _orderStudentRecordLogic . Errors ;
errors . Add ( ( "Ошибка добавления записи приказа по студенту" , $"Н е удалось добавить запись приказа {syncOrder.orderSubTypeName} по студенту {student}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
var st = Mapper . MapToClass < StudentViewModel , StudentSetBindingModel > ( student , true ) ;
var studentName = student . ToString ( ) ;
if ( student . StudentGroupId ! = studentGroupToId )
{
st . StudentGroupId = studentGroupToId ;
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} сменилась группа на {student.StudentGroupName}"
} ) ;
}
2021-04-27 17:09:03 +04:00
2021-04-29 18:10:30 +04:00
if ( ( orderStudentMoveType = = OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у | | orderStudentMoveType = = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у
| | orderStudentMoveType = = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у с Д р у г о г о В у з а | | orderStudentMoveType = = OrderStudentMoveType . П е р е в е с т и Н а Д р у г о е Н а п р а в л е н и е К а ф е д р ы )
& & student . StudentState ! = StudentState . У ч и т с я )
2021-04-28 17:58:52 +04:00
{
st . StudentState = StudentState . У ч и т с я ;
student = await _studentLogic . UpdateAsync ( st ) ;
if ( student = = null )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка изменения по студенту" , $"Н е удалось изменить статус у студента {studentName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 17:09:03 +04:00
{
2021-04-28 17:58:52 +04:00
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
2021-04-27 17:09:03 +04:00
} ) ;
2021-04-28 17:58:52 +04:00
continue ;
}
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"У студента {student} сменился статус на {StudentState.Учится}"
} ) ;
}
2021-04-29 18:10:30 +04:00
if ( ( orderStudentMoveType = = OrderStudentMoveType . О т п р а в и т ь В А к а д е м | | orderStudentMoveType = = OrderStudentMoveType . П р о д л и т ь А к а д е м )
2021-04-28 17:58:52 +04:00
& & 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
2021-04-27 17:09:03 +04:00
{
2021-04-28 17:58:52 +04:00
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.Академ}"
} ) ;
}
2021-04-27 19:10:38 +04:00
2021-04-29 18:10:30 +04:00
if ( orderStudentMoveType = = OrderStudentMoveType . В о с с т а н о в и т ь И з А к а д е м а & & student . StudentState ! = StudentState . У ч и т с я )
2021-04-28 17:58:52 +04:00
{
st . StudentState = StudentState . У ч и т с я ;
student = await _studentLogic . UpdateAsync ( st ) ;
if ( student = = null )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка изменения по студенту" , $"Н е удалось изменить статус у студента {studentName}" ) ) ;
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 19:10:38 +04:00
{
2021-04-28 17:58:52 +04:00
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.Учится}"
} ) ;
}
2021-04-27 19:10:38 +04:00
2021-04-28 17:58:52 +04:00
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}" ) ) ;
2021-04-27 19:10:38 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
2021-04-27 17:09:03 +04:00
{
OrderSyncHistoryId = history . Id ,
2021-04-28 17:58:52 +04:00
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
2021-04-27 17:09:03 +04:00
} ) ;
2021-04-28 17:58:52 +04:00
continue ;
}
}
2021-04-27 17:09:03 +04:00
2021-04-28 17:58:52 +04:00
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
2021-04-27 17:09:03 +04:00
{
2021-04-28 17:58:52 +04:00
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
2021-04-27 17:09:03 +04:00
}
2021-04-28 17:58:52 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"У студента {student} сменился статус на {StudentState.Учится}"
} ) ;
}
2021-04-29 18:10:30 +04:00
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.Ушел}"
} ) ;
}
2021-04-28 17:58:52 +04:00
await _recordLogic . CreateAsync ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}"
} ) ;
if ( orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у )
{
return ;
2021-04-27 15:14:35 +04:00
}
}
}
private static OrderType GetOrderType ( string orderTitle ) = > orderTitle switch
{
2021-04-29 18:10:30 +04:00
"Зачисление в вуз вне приемной кампании" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
2021-04-27 15:14:35 +04:00
"Зачисление в вуз" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
2021-04-29 18:10:30 +04:00
"Перевод из другого вуза" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Перевод" = > OrderType . П е р е в о д ,
2021-04-27 15:14:35 +04:00
"Перевод на следующий курс" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
2021-04-29 18:10:30 +04:00
"Завершение обучения" = > OrderType . О т ч и с л е н и е ,
"Уход в академический отпуск" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Продление академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Восстановление из академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Отчисление" = > OrderType . О т ч и с л е н и е ,
"Восстановление" = > OrderType . П е р е в о д ,
2021-04-27 15:14:35 +04:00
_ = > OrderType . Н е о п р е д е л е н о ,
} ;
}
}