2022-03-18 22:08:29 +04:00
using CoreModels.Enums.Department ;
using DepartmentBusinessLogic.BindingModels ;
2021-04-27 15:14:35 +04:00
using DepartmentBusinessLogic.HelperModels ;
using DepartmentBusinessLogic.Interfaces ;
using DepartmentBusinessLogic.ViewModels ;
2022-03-18 22:38:52 +04:00
using ToolsModule.BusinessLogics ;
using ToolsModule.Enums ;
using ToolsModule.Extensions ;
using ToolsModule.Interfaces ;
2021-04-27 15:14:35 +04:00
using SecurityBusinessLogic.BindingModels ;
using SecurityBusinessLogic.BusinessLogics ;
2022-03-18 20:09:15 +04:00
using SecurityBusinessLogic.ViewModels ;
2021-04-27 15:14:35 +04:00
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 ;
2022-03-18 10:22:34 +04:00
using System.Threading.Tasks ;
2021-04-27 15:14:35 +04:00
namespace DepartmentBusinessLogic.BusinessLogics
{
2022-03-15 22:02:13 +04:00
/// <summary>
/// Логика работы с историями синхронизации приказов
/// </summary>
public class OrderSyncHistoryBusinessLogic : GenericBusinessLogic < OrderSyncHistoryGetBindingModel , OrderSyncHistorySetBindingModel , OrderSyncHistoryListViewModel , OrderSyncHistoryViewModel >
2022-03-18 10:22:34 +04:00
{
private OrderSyncHistoryRecordBusinessLogic _recordLogic ;
private EnviromentSettingBusinessLogic _enviromentSettingLogic ;
private StudentGroupBusinessLogic _groupsLogic ;
private StudentBusinessLogic _studentLogic ;
private UserBusinessLogic _userLogic ;
2022-03-18 20:09:15 +04:00
private UserRoleBusinessLogic _userRoleLogic ;
private RoleBusinessLogic _roleLogic ;
2022-03-18 10:22:34 +04:00
private OrderBusinessLogic _orderLogic ;
private OrderStudentRecordBusinessLogic _orderStudentRecordLogic ;
public OrderSyncHistoryBusinessLogic ( IOrderSyncHistoryService service ) : base ( service , "Синхронизация Приказов" , AccessOperation . С и н х р о н и з а ц и я П р и к а з о в ) { }
public async Task < bool > SyncOrders ( )
{
2022-03-18 20:09:15 +04:00
InitLogics ( ) ;
2022-03-18 10:22:34 +04:00
var history = Create ( new OrderSyncHistorySetBindingModel { SyncDate = DateTime . Now } ) ;
if ( history = = null )
{
Errors . Add ( ( "Ошибка создание истории" , "Н е удалось создать историю" ) ) ;
return false ;
}
2022-03-19 11:53:10 +04:00
var address = GetAddress ( history ) ;
if ( address = = null )
2022-03-18 10:22:34 +04:00
{
return false ;
}
2022-03-18 20:09:15 +04:00
var client = GetClinet ( history , address ) ;
if ( client = = null )
2022-03-18 10:22:34 +04:00
{
return false ;
}
// получение списка студентов
HttpResponseMessage response = await client . GetAsync ( $"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment" ) ;
if ( ! response . IsSuccessStatusCode )
{
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список студентов с сервера" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
var studentFromServer = JsonSerializer . Deserialize < StudentListSyncModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
if ( studentFromServer . CurrentStudentsList . Count = = 0 )
{
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = "Полученный список студентов пустой"
} ) ;
return true ;
}
var groups = _groupsLogic . GetList ( new StudentGroupGetBindingModel ( ) ) ;
if ( groups = = null | | groups . List = = null )
{
Errors = _groupsLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список групп с базы" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
var students = _studentLogic . GetList ( new StudentGetBindingModel ( ) ) ;
if ( students = = null | | students . List = = null )
{
Errors = _studentLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список студентов с базы" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
foreach ( var student in students . List )
{
var studentSync = studentFromServer . CurrentStudentsList . FirstOrDefault ( x = > x . recordBookName = = student . NumberOfBook ) ;
// студент не найден, значит он ушел с кафедры, выясняем почему
if ( studentSync = = null )
{
await SyncStudentOrders ( history , student , groups . List , client , address . Value ) ;
}
// не совпадение групп
else if ( student . StudentGroupName ! = studentSync . groupName )
{
await SyncStudentOrders ( history , student , groups . List , client , address . Value ) ;
}
studentFromServer . CurrentStudentsList . Remove ( studentSync ) ;
}
// новые студенты и восстановленцы
foreach ( var student in studentFromServer . CurrentStudentsList )
{
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 )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка при восстановлении студента" , $"Н е удалось восстановить студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
var deletedUser = _userLogic . Restore ( new UserGetBindingModel { Id = deletedStudent . UserId } ) ;
if ( deletedUser = = null )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка при восстановлении пользователя студента" , $"Н е удалось восстановить пользователя студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
_recordLogic . Create ( 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 ;
}
2022-03-18 20:09:15 +04:00
var user = WorkWithUser ( student , history ) ;
2022-03-18 10:22:34 +04:00
if ( user = = null )
{
2022-03-18 20:09:15 +04:00
continue ;
2022-03-18 10:22:34 +04:00
}
var newStudent = _studentLogic . Create ( new StudentSetBindingModel
{
Iduniv = student . iduniv ,
NumberOfBook = student . recordBookName ,
UserId = user . Id ,
FirstName = student . firstName ,
LastName = student . lastName ,
Patronymic = student . patronymicName ,
StudentState = StudentState . Н е о п р е д е л е н ,
Description = string . Empty
} ) ;
if ( newStudent = = null )
{
var errors = _studentLogic . Errors ;
errors . Add ( ( "Ошибка добавления студента" , $"Н е удалось добавить студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Добавлен студент {newStudent}"
} ) ;
await SyncStudentOrders ( history , newStudent , groups . List , client , address . Value ) ;
}
return true ;
}
2022-03-19 11:53:10 +04:00
public async Task < bool > SyncStudentOrders ( Guid studentId )
{
InitLogics ( ) ;
var history = Create ( new OrderSyncHistorySetBindingModel { SyncDate = DateTime . Now } ) ;
if ( history = = null )
{
Errors . Add ( ( "Ошибка создание истории" , "Н е удалось создать историю" ) ) ;
return false ;
}
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Синхронизация приказов по студенту"
} ) ;
var address = GetAddress ( history ) ;
if ( address = = null )
{
return false ;
}
var client = GetClinet ( history , address ) ;
if ( client = = null )
{
return false ;
}
var groups = _groupsLogic . GetList ( new StudentGroupGetBindingModel ( ) ) ;
if ( groups = = null | | groups . List = = null )
{
Errors = _groupsLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список групп с базы" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
var student = _studentLogic . GetElement ( new StudentGetBindingModel { Id = studentId } ) ;
if ( student = = null )
{
Errors = _studentLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить студента" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return false ;
}
await SyncStudentOrders ( history , student , groups . List , client , address . Value ) ;
return true ;
}
2022-03-18 20:09:15 +04:00
private void InitLogics ( )
{
_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 > ( ) ;
_userRoleLogic = DependencyManager . Instance . Resolve < UserRoleBusinessLogic > ( ) ;
_roleLogic = DependencyManager . Instance . Resolve < RoleBusinessLogic > ( ) ;
}
2022-03-19 11:53:10 +04:00
private EnviromentSettingViewModel GetAddress ( OrderSyncHistoryViewModel history )
{
var address = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" } ) ? . List ? . FirstOrDefault ( ) ;
if ( address = = null | | address . Value . IsEmpty ( ) )
{
Errors = _enviromentSettingLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить адрес сервера для получения приказов по студентам" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
return address ;
}
2022-03-18 10:22:34 +04:00
/// <summary>
/// Синхронизация приказов по студенту
/// </summary>
/// <param name="history"></param>
/// <param name="student"></param>
/// <param name="groups"></param>
/// <param name="client"></param>
/// <param name="address"></param>
/// <returns></returns>
private async Task SyncStudentOrders ( OrderSyncHistoryViewModel history , StudentViewModel student , List < StudentGroupViewModel > groups , HttpClient client , string address )
{
var response = await client . GetAsync ( $"{address}/univer/hs/Ulstu_StudentsInfo/v1/GetStudentOrdersByIdAndRecordBook?iduniv={student.Iduniv}&recordBookName={student.NumberOfBook}&allOrders=sppd" ) ;
if ( ! response . IsSuccessStatusCode )
{
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить список приказов по студенту" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return ;
}
var syncOrders = JsonSerializer . Deserialize < StudentOrderListSyncModel > ( await response . Content . ReadAsStringAsync ( ) ) ;
foreach ( var syncOrder in syncOrders . StudentOrders )
{
2022-03-18 20:09:15 +04:00
if ( syncOrder . orderTypeName = = "Утверждение тем курсовых работ" | |
syncOrder . orderTypeName = = "Утверждение тем В К Р " | |
syncOrder . orderTypeName = = "Назначение стипендии" )
{
continue ;
}
2022-03-18 10:22:34 +04:00
if ( syncOrder . markOfApprove . ToLower ( ) ! = "true" )
{
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Приказ {syncOrder.clericNumber} от {syncOrder.clericDate} ({syncOrder.orderTypeName}) по студенту {student} не утврежден "
} ) ;
continue ;
}
if ( syncOrder . clericNumber . IsEmpty ( ) )
{
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Приказ без номера от {syncOrder.clericDate} ({student})"
} ) ;
continue ;
}
if ( syncOrder . clericDate . IsEmpty ( ) )
{
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Приказ {syncOrder.clericNumber} - неизвестная дата ({student})"
} ) ;
continue ;
}
var orderType = GetOrderType ( syncOrder . orderTypeName ) ;
// пропускаем приказы, которые нас не интересуют
2022-03-18 20:09:15 +04:00
if ( orderType = = OrderType . И г н о р и р о в а т ь )
{
continue ;
}
2022-03-18 10:22:34 +04:00
if ( orderType = = OrderType . Н е о п р е д е л е н о )
{
if ( syncOrder . orderTypeName ! = "Корректировка" & & syncOrder . orderTypeName ! = "Назначение стипендии" & &
syncOrder . orderTypeName ! = "Утверждение тем курсовых работ" & & syncOrder . orderTypeName ! = "Утверждение тем работ"
& & syncOrder . orderTypeName ! = "Смена ФИО" )
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Приказ {syncOrder.clericNumber} неопределенного типа {syncOrder.orderTypeName}"
} ) ;
continue ;
}
// пытаемся найти приказ
var order = _orderLogic . GetElement ( new OrderGetBindingModel
{
OrderNumber = syncOrder . clericNumber
} ) ;
if ( order = = null )
{
// если не нашли - пытаемся создать
order = _orderLogic . Create ( new OrderSetBindingModel
{
OrderNumber = syncOrder . clericNumber ,
OrderDate = Convert . ToDateTime ( syncOrder . clericDate ) ,
OrderType = orderType
} ) ;
if ( order = = null )
{
var errors = _orderLogic . Errors ;
errors . Add ( ( "Ошибка добавления приказа" , $"Н е удалось добавить приказ {syncOrder.clericNumber} {syncOrder.clericDate}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
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 ;
}
// игнорируем приказы, не связанные с нашими группами
if ( ! studentGroupFromId . HasValue & & syncOrder . groupNameBefore . IsNotEmpty ( )
& & ! studentGroupToId . HasValue & & syncOrder . groupNameAfter . IsNotEmpty ( ) )
{
continue ;
}
OrderStudentMoveType orderStudentMoveType = OrderStudentMoveType . Н е о п р е д е л е н о ;
switch ( syncOrder . orderTypeName )
{
case "Перевод" :
if ( syncOrder . orderSubTypeName = = "Распределение по группам" )
{
orderStudentMoveType = OrderStudentMoveType . Р а с п р е д е л и т ь ;
info = $"Распределение студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
}
else if ( studentGroupFromId . HasValue & & studentGroupToId . HasValue )
{
orderStudentMoveType = OrderStudentMoveType . П е р е в е с т и Н а Д р у г о е Н а п р а в л е н и е К а ф е д р ы ;
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
}
else if ( ! studentGroupFromId . HasValue & & studentGroupToId . HasValue )
{
orderStudentMoveType = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у ;
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
}
else if ( studentGroupFromId . HasValue & & ! studentGroupToId . HasValue )
2022-03-19 11:53:10 +04:00
{
2022-03-18 10:22:34 +04:00
orderStudentMoveType = OrderStudentMoveType . У б р а т ь П о П е р е в о д у ;
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру" ;
}
2022-03-19 11:53:10 +04:00
if ( syncOrder . reason = = "на другой факультет" )
{
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом" ;
}
2022-03-18 10:22:34 +04:00
break ;
case "Зачисление в вуз вне приемной кампании" :
orderStudentMoveType = OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
info = $"Зачисление студента {student} по приказу" ;
break ;
case "Зачисление в вуз" :
orderStudentMoveType = OrderStudentMoveType . З а ч и с л и т ь П о П р и к а з у ;
info = $"Зачисление студента {student} по приказу" ;
break ;
case "Перевод из другого вуза" :
orderStudentMoveType = OrderStudentMoveType . П р и н я т ь П о П е р е в о д у с Д р у г о г о В у з а ;
info = $"Перевод студента {student} с другого вуза" ;
break ;
case "Перевод на следующий курс" :
orderStudentMoveType = OrderStudentMoveType . П е р е в е с т и Н а С т а р ш и й К у р с ;
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
break ;
case "Уход в академический отпуск" :
DateTime ? date = null ;
if ( syncOrder . dateEnd . IsNotEmpty ( ) )
{
date = Convert . ToDateTime ( syncOrder . dateEnd ) ;
}
orderStudentMoveType = OrderStudentMoveType . О т п р а в и т ь В А к а д е м ;
info = $"Уход в А О студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} до {date?.ToShortDateString() ?? string.Empty}" ;
break ;
case "Продление академического отпуска" :
orderStudentMoveType = OrderStudentMoveType . П р о д л и т ь А к а д е м ;
info = $"Продление А О студента {student}" ;
break ;
case "Восстановление из академического отпуска" :
orderStudentMoveType = OrderStudentMoveType . В о с с т а н о в и т ь И з А к а д е м а ;
info = $"Выход из А О студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
break ;
case "Отчисление" :
2022-03-19 11:53:10 +04:00
switch ( syncOrder . reason )
2022-03-18 10:22:34 +04:00
{
2022-03-19 11:53:10 +04:00
case "за невыполнение учебного плана" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость" ;
break ;
case "по собственному желанию" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} по собственному желанию" ;
break ;
case "в связи с невыходом из академического отпуска" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с невыходм из академического отпуска" ;
break ;
case "за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость" ;
break ;
case "в связи с переводом в ___" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м ;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом" ;
break ;
2022-03-18 10:22:34 +04:00
}
break ;
case "Восстановление" :
orderStudentMoveType = OrderStudentMoveType . В о с с т а н о в и т ь ;
info = $"Восстановление отчисленного студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}" ;
break ;
case "Выпуск" :
orderStudentMoveType = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю ;
info = $"Завершение обучения студента {student}" ;
break ;
}
if ( orderStudentMoveType = = OrderStudentMoveType . Н е о п р е д е л е н о )
{
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Неизветсный приказ {syncOrder.orderTypeName} ({syncOrder.reason}) по студенту {student}"
} ) ;
continue ;
}
// ищем в приказе запись по студенту
2022-03-18 20:09:15 +04:00
var exsistStudentOrder = _orderStudentRecordLogic . GetElement ( new OrderStudentRecordGetBindingModel
2022-03-18 10:22:34 +04:00
{
OrderId = order . Id ,
StudentId = student . Id ,
OrderStudentMoveType = orderStudentMoveType
} ) ;
// если такой приказ по студенту уже есть, просто пропускаем
2022-03-18 20:09:15 +04:00
if ( exsistStudentOrder ! = null )
2022-03-18 10:22:34 +04:00
{
continue ;
}
// создаем, если не нашли
2022-03-18 20:09:15 +04:00
var studentOrder = _orderStudentRecordLogic . Create ( new OrderStudentRecordSetBindingModel
2022-03-18 10:22:34 +04:00
{
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}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
continue ;
}
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = $"Добавили запись к приказу {order.OrderNumber} по студенту {student} с формулировкой {info}"
} ) ;
if ( orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь В С в я з и С П е р е в о д о м | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е в ы х о д С А к а д е м а | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь З а Н е у с п е в а м о с т ь | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о З а в е р ш е н и ю | |
orderStudentMoveType = = OrderStudentMoveType . О т ч и с л и т ь П о С о б с т в е н н о м у )
{
return ;
}
}
}
2022-03-18 20:09:15 +04:00
private HttpClient GetClinet ( OrderSyncHistoryViewModel history , EnviromentSettingViewModel address )
{
var username = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderUserName" } ) ? . List ? . FirstOrDefault ( ) ;
if ( username = = null | | username . Value . IsEmpty ( ) )
{
Errors = _enviromentSettingLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить имя пользователя для получения приказов по студентам" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
var password = _enviromentSettingLogic . GetList ( new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderPassword" } ) ? . List ? . FirstOrDefault ( ) ;
if ( password = = null | | password . Value . IsEmpty ( ) )
{
Errors = _enviromentSettingLogic . Errors ;
Errors . Add ( ( "Ошибка получения данных" , "Н е удалось получить пароль для получения приказов по студентам" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , Errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
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}" ) ) ) ;
return client ;
}
private UserViewModel WorkWithUser ( StudentSyncModel student , OrderSyncHistoryViewModel history )
{
var userName = $"{student.lastName}{(student.firstName.IsNotEmpty() ? $" { student . firstName [ 0 ] } . " : string.Empty)}{(student.patronymicName.IsNotEmpty() ? $" { student . patronymicName [ 0 ] } . " : string.Empty)}" ;
var user = _userLogic . GetOrCreateUser ( new UserGetBindingModel
{
Login = student . recordBookName
} , userName ) ;
if ( user = = null )
{
if ( _userLogic . Errors . Count > 0 )
{
var errors = _userLogic . Errors ;
errors . Add ( ( "Ошибка получения пользователя под студента" , $"Н е удалось получить пользователя под студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
}
var role = _roleLogic . GetElement ( new RoleGetBindingModel { RoleName = "Студент" } ) ;
if ( role = = null )
{
if ( _roleLogic . Errors . Count > 0 )
{
var errors = _roleLogic . Errors ;
errors . Add ( ( "Ошибка получения роли студента" , $"Н е удалось получить роль студента {student.lastName} {student.firstName} {student.patronymicName}" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
}
var link = _userRoleLogic . GetElement ( new UserRoleGetBindingModel { RoleId = role . Id , UserId = user . Id } ) ;
if ( link = = null )
{
var manager = DependencyManager . Instance . Resolve < ISecurityManager > ( ) ;
_userRoleLogic . Create ( new UserRoleSetBindingModel { RoleId = role . Id , UserId = user . Id , UserIdForAccess = manager ? . User } ) ;
if ( _userRoleLogic . Errors . Count > 0 )
{
var errors = _userRoleLogic . Errors ;
errors . Add ( ( "Ошибка создания привязки студента к роли" , $"Н е удалось привязать студента {student.lastName} {student.firstName} {student.patronymicName} к роли" ) ) ;
_recordLogic . Create ( new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history . Id ,
Information = string . Join ( Environment . NewLine , errors . Select ( x = > x . Message ) )
} ) ;
return null ;
}
}
return user ;
}
2022-03-18 10:22:34 +04:00
private static OrderType GetOrderType ( string orderTitle ) = > orderTitle switch
{
"Зачисление в вуз вне приемной кампании" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Зачисление в вуз" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Перевод из другого вуза" = > OrderType . З а ч и с л е н и е С т у д е н т о в ,
"Перевод" = > OrderType . П е р е в о д ,
"Перевод на следующий курс" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Завершение обучения" = > OrderType . О т ч и с л е н и е ,
"Уход в академический отпуск" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Продление академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Восстановление из академического отпуска" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
"Отчисление" = > OrderType . О т ч и с л е н и е ,
"Восстановление" = > OrderType . П е р е в о д ,
"Выпуск" = > OrderType . Д в и ж е н и е С т у д е н т о в ,
2022-03-18 20:09:15 +04:00
"Утверждение тем В К Р " = > OrderType . И г н о р и р о в а т ь ,
2022-03-18 10:22:34 +04:00
_ = > OrderType . Н е о п р е д е л е н о ,
} ;
}
2021-04-27 15:14:35 +04:00
}