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

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
{
/// <summary>
/// Сохранение записи по идентификатору
/// </summary>
public class SetBindingModel : AccessBindingModel
/// <summary>
/// Сохранение записи по идентификатору
/// </summary>
public class SetBindingModel : AccessBindingModel
{
/// <summary>
/// Идентификатор записи
/// </summary>
[MapConfiguration("Id")]
public Guid Id { get; set; } = Guid.NewGuid();
}
}

View File

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

View File

@ -29,7 +29,7 @@ namespace ToolsModule.BusinessLogics
/// <param name="obj"></param>
/// <param name="newObject"></param>
/// <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>
/// Заполнение объекта
@ -39,24 +39,29 @@ namespace ToolsModule.BusinessLogics
/// <param name="obj"></param>
/// <param name="newObject"></param>
/// <param name="haveRigth"></param>
/// <param name="exsistRecord"></param>
/// <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
{
if (obj == null)
{
return null;
}
if (newObject == null)
{
return null;
}
var typeFrom = typeof(From);
var typeTo = typeof(To);
var properties = typeTo.GetProperties().Where(x => x.CanWrite);
foreach (var property in properties)
{
if (property.Name == "Id" && exsistRecord)
{
continue;
}
var checkRight = property.GetCustomAttribute<CheckRigthForMapAttribute>();
if (!haveRigth && checkRight != null)
{

View File

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

View File

@ -6,6 +6,9 @@ using ToolsDesktop.Interfaces;
using ToolsDesktop.Models;
using ToolsModule.Enums;
using System;
using System.Threading.Tasks;
using ToolsDesktop.Helpers;
using ToolsModule.BusinessLogics;
namespace DepartmentWindowsDesktop.EntityControls
{
@ -30,7 +33,33 @@ namespace DepartmentWindowsDesktop.EntityControls
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("Завершено успешно", "Синхронизация приказов");
}
}
}
}