скинхронизация списка приказо студента

This commit is contained in:
kotcheshir73 2022-03-19 11:53:10 +04:00
parent 2ccbccd6d4
commit 513c14b73d
5 changed files with 153 additions and 43 deletions

View File

@ -1,17 +1,15 @@
using ToolsModule.Attributes; using System;
using System;
namespace ToolsModule.BindingModels namespace ToolsModule.BindingModels
{ {
/// <summary> /// <summary>
/// Сохранение записи по идентификатору /// Сохранение записи по идентификатору
/// </summary> /// </summary>
public class SetBindingModel : AccessBindingModel public class SetBindingModel : AccessBindingModel
{ {
/// <summary> /// <summary>
/// Идентификатор записи /// Идентификатор записи
/// </summary> /// </summary>
[MapConfiguration("Id")]
public Guid Id { get; set; } = Guid.NewGuid(); public Guid Id { get; set; } = Guid.NewGuid();
} }
} }

View File

@ -63,6 +63,7 @@ namespace ToolsModule.BusinessLogics
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка получения", ex.Message)); Errors.Add(("Ошибка получения", ex.Message));
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
} }
return null; return null;
} }
@ -93,6 +94,7 @@ namespace ToolsModule.BusinessLogics
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка получения", ex.Message)); Errors.Add(("Ошибка получения", ex.Message));
Errors.Add(("Ошибка получения (Stack)", ex.StackTrace));
} }
return null; return null;
} }
@ -123,6 +125,7 @@ namespace ToolsModule.BusinessLogics
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка создания", ex.Message)); Errors.Add(("Ошибка создания", ex.Message));
Errors.Add(("Ошибка создания (Stack)", ex.StackTrace));
} }
return null; return null;
} }
@ -153,6 +156,7 @@ namespace ToolsModule.BusinessLogics
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка изменения", ex.Message)); Errors.Add(("Ошибка изменения", ex.Message));
Errors.Add(("Ошибка изменения (Stack)", ex.StackTrace));
} }
return null; return null;
} }
@ -183,6 +187,7 @@ namespace ToolsModule.BusinessLogics
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка удаления", ex.Message)); Errors.Add(("Ошибка удаления", ex.Message));
Errors.Add(("Ошибка удаления (Stack)", ex.StackTrace));
} }
return false; return false;
} }
@ -212,7 +217,8 @@ namespace ToolsModule.BusinessLogics
} }
catch (Exception ex) catch (Exception ex)
{ {
Errors.Add(("Ошибка удаления", ex.Message)); Errors.Add(("Ошибка восстановления", ex.Message));
Errors.Add(("Ошибка восстановления (Stack)", ex.StackTrace));
} }
return null; return null;
} }

View File

@ -29,7 +29,7 @@ namespace ToolsModule.BusinessLogics
/// <param name="obj"></param> /// <param name="obj"></param>
/// <param name="newObject"></param> /// <param name="newObject"></param>
/// <returns></returns> /// <returns></returns>
public static To MapToClass<From, To>(From obj, To newObject, bool haveRigth) where To : class => FillObject(obj, newObject, haveRigth); public static To MapToClass<From, To>(From obj, To newObject, bool haveRigth) where To : class => FillObject(obj, newObject, haveRigth, true);
/// <summary> /// <summary>
/// Заполнение объекта /// Заполнение объекта
@ -39,24 +39,29 @@ namespace ToolsModule.BusinessLogics
/// <param name="obj"></param> /// <param name="obj"></param>
/// <param name="newObject"></param> /// <param name="newObject"></param>
/// <param name="haveRigth"></param> /// <param name="haveRigth"></param>
/// <param name="exsistRecord"></param>
/// <returns></returns> /// <returns></returns>
private static To FillObject<From, To>(From obj, To newObject, bool haveRigth) private static To FillObject<From, To>(From obj, To newObject, bool haveRigth, bool exsistRecord = false)
where To : class where To : class
{ {
if (obj == null) if (obj == null)
{ {
return null; return null;
} }
if (newObject == null) if (newObject == null)
{ {
return null; return null;
} }
var typeFrom = typeof(From); var typeFrom = typeof(From);
var typeTo = typeof(To); var typeTo = typeof(To);
var properties = typeTo.GetProperties().Where(x => x.CanWrite); var properties = typeTo.GetProperties().Where(x => x.CanWrite);
foreach (var property in properties) foreach (var property in properties)
{ {
if (property.Name == "Id" && exsistRecord)
{
continue;
}
var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>(); var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>();
if (!haveRigth && checkRight != null) if (!haveRigth && checkRight != null)
{ {

View File

@ -57,16 +57,9 @@ namespace DepartmentBusinessLogic.BusinessLogics
return false; return false;
} }
var address = _enviromentSettingLogic.GetList(new EnviromentSettingGetBindingModel { Key = "SyncStudentOrderIpAddress" })?.List?.FirstOrDefault(); var address = GetAddress(history);
if (address == null || address.Value.IsEmpty()) if (address == null)
{ {
Errors = _enviromentSettingLogic.Errors;
Errors.Add(("Ошибка получения данных", "Не удалось получить адрес сервера для получения приказов по студентам"));
_recordLogic.Create(new OrderSyncHistoryRecordSetBindingModel
{
OrderSyncHistoryId = history.Id,
Information = string.Join(Environment.NewLine, Errors.Select(x => x.Message))
});
return false; return false;
} }
@ -76,8 +69,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
return false; return false;
} }
// авторизация
// получение списка студентов // получение списка студентов
HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment"); HttpResponseMessage response = await client.GetAsync($"{address.Value}/univer/hs/Ulstu_StudentsInfo/v1/GetCurrentStudentsOfDepartment");
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
@ -217,6 +208,63 @@ namespace DepartmentBusinessLogic.BusinessLogics
return true; return true;
} }
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;
}
private void InitLogics() private void InitLogics()
{ {
@ -231,6 +279,23 @@ namespace DepartmentBusinessLogic.BusinessLogics
_roleLogic = DependencyManager.Instance.Resolve<RoleBusinessLogic>(); _roleLogic = DependencyManager.Instance.Resolve<RoleBusinessLogic>();
} }
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;
}
/// <summary> /// <summary>
/// Синхронизация приказов по студенту /// Синхронизация приказов по студенту
/// </summary> /// </summary>
@ -374,10 +439,15 @@ namespace DepartmentBusinessLogic.BusinessLogics
info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}"; info = $"Перевод студента {student} c группы {syncOrder.groupNameBefore} другой кафедры в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
} }
else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue) else if (studentGroupFromId.HasValue && !studentGroupToId.HasValue)
{ {
orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу; orderStudentMoveType = OrderStudentMoveType.УбратьПоПереводу;
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру"; info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на другую кафедру";
} }
if (syncOrder.reason == "на другой факультет")
{
orderStudentMoveType = OrderStudentMoveType.ОтчислитьВСвязиСПереводом;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} в связи с переводом";
}
break; break;
case "Зачисление в вуз вне приемной кампании": case "Зачисление в вуз вне приемной кампании":
orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу; orderStudentMoveType = OrderStudentMoveType.ЗачислитьПоПриказу;
@ -395,10 +465,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс; orderStudentMoveType = OrderStudentMoveType.ПеревестиНаСтаршийКурс;
info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}"; info = $"Перевод студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} на следующий курс в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
//case "Завершение обучения": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
// info = $"Отчисление студента {student} в связи с окончанием обучения";
// break;
case "Уход в академический отпуск": case "Уход в академический отпуск":
DateTime? date = null; DateTime? date = null;
if (syncOrder.dateEnd.IsNotEmpty()) if (syncOrder.dateEnd.IsNotEmpty())
@ -416,20 +482,29 @@ namespace DepartmentBusinessLogic.BusinessLogics
orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема; orderStudentMoveType = OrderStudentMoveType.ВосстановитьИзАкадема;
info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}"; info = $"Выход из АО студента {student} в группу {groups.FirstOrDefault(x => x.Id == studentGroupToId)}";
break; break;
//case "Отчисление по невыходу из академа": // уточнить приказ
// orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНевыходСАкадема;
// info = $"Отчисление студента {student} по невыходу из академа";
// break;
case "Отчисление": case "Отчисление":
if (syncOrder.reason == "за невыполнение учебного плана") switch(syncOrder.reason)
{ {
orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость; case "за невыполнение учебного плана":
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость"; orderStudentMoveType = OrderStudentMoveType.ОтчислитьЗаНеуспевамость;
} info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} за неуспеваемость";
if (syncOrder.reason == "по собственному желанию") break;
{ case "по собственному желанию":
orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному; orderStudentMoveType = OrderStudentMoveType.ОтчислитьПоСобственному;
info = $"Отчисление студента {student} из группы {groups.FirstOrDefault(x => x.Id == studentGroupFromId)} по собственному желанию"; 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;
} }
break; break;
case "Восстановление": case "Восстановление":
@ -614,9 +689,6 @@ namespace DepartmentBusinessLogic.BusinessLogics
"Продление академического отпуска" => OrderType.ДвижениеСтудентов, "Продление академического отпуска" => OrderType.ДвижениеСтудентов,
"Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов, "Восстановление из академического отпуска" => OrderType.ДвижениеСтудентов,
"Отчисление" => OrderType.Отчисление, "Отчисление" => OrderType.Отчисление,
"Отчисление (за невыполнение обязанностей по добросовестному освоению образовательной программы и выполнению учебного плана)" => OrderType.Отчисление,
"Отчисление (в связи с переводом в ___)" => OrderType.Отчисление,
"Отчисление (в связи с невыходом из академического отпуска)" => OrderType.Отчисление,
"Восстановление" => OrderType.Перевод, "Восстановление" => OrderType.Перевод,
"Выпуск" => OrderType.ДвижениеСтудентов, "Выпуск" => OrderType.ДвижениеСтудентов,
"Утверждение тем ВКР" => OrderType.Игнорировать, "Утверждение тем ВКР" => OrderType.Игнорировать,

View File

@ -6,6 +6,9 @@ using ToolsDesktop.Interfaces;
using ToolsDesktop.Models; using ToolsDesktop.Models;
using ToolsModule.Enums; using ToolsModule.Enums;
using System; using System;
using System.Threading.Tasks;
using ToolsDesktop.Helpers;
using ToolsModule.BusinessLogics;
namespace DepartmentWindowsDesktop.EntityControls namespace DepartmentWindowsDesktop.EntityControls
{ {
@ -30,7 +33,33 @@ namespace DepartmentWindowsDesktop.EntityControls
public ControlViewEntityListConfiguration GetConfigControl() => new() public ControlViewEntityListConfiguration GetConfigControl() => new()
{ {
PaginationOn = false PaginationOn = false,
ControlOnMoveElem = new()
{
{ "ToolStripMenuItemSyncOrders", ("Синхронизировать приказы студента", async (object sender, EventArgs e) => { await SyncOrders(); }) }
}
}; };
/// <summary>
/// Синхронизация приказов
/// </summary>
/// <returns></returns>
private async Task SyncOrders()
{
if (!ParentId.HasValue)
{
return;
}
var orderSyncHistoryBusinessLogic = DependencyManager.Instance.Resolve<OrderSyncHistoryBusinessLogic>();
var flag = await orderSyncHistoryBusinessLogic.SyncStudentOrders(ParentId.Value);
if (!flag)
{
DialogHelper.MessageException(_businessLogic.Errors, "Ошибки при синхронизации");
}
else
{
DialogHelper.MessageInformation("Завершено успешно", "Синхронизация приказов");
}
}
} }
} }