Commit 1d9c1e93 by AlexNasyr

DI in repository realized

parent d53c5430
...@@ -7,42 +7,45 @@ using System.Threading.Tasks; ...@@ -7,42 +7,45 @@ using System.Threading.Tasks;
namespace SocialMinistryDataExchange.Controllers { namespace SocialMinistryDataExchange.Controllers {
[ApiController] [ApiController]
public class apiController : ControllerBase { public class apiController : ControllerBase {
private readonly ISMContext _context; private ISMRepository _repository;
public apiController(ISMContext context) { public apiController(ISMRepository repository) {
_context = context; _repository = repository;
} }
[HttpGet] [HttpGet]
[Route("[controller]/getpersonFixID")] [Route("[controller]/getpersonFixID")]
public async Task<List<SMResponce>> GetPersonFixID() { public async Task<List<SMResponce>> GetPersonFixID() {
var result = await _context.GetPersonByID("27373577-4234-43B2-A969-8D95B9384171"); var result = await _repository.GetPersonByID("27373577-4234-43B2-A969-8D95B9384171");
return result; return result;
} }
[HttpPost] [HttpPost]
[Route("[controller]/getpersonByID/{PersonID}")] [Route("[controller]/getpersonByID/{PersonID}")]
public async Task<List<SMResponce>> GetPersonByID(string PersonID) { public async Task<List<SMResponce>> GetPersonByID(string PersonID) {
var result = await _context.GetPersonByID(PersonID); var result = await _repository.GetPersonByID(PersonID);
return result; return result;
} }
// тестовый запрос с фиксированным документом личности
[HttpGet] [HttpGet]
[Route("[controller]/getpersonFixDoc")] [Route("[controller]/getpersonFixDoc")]
public async Task<List<SMResponce>> GetPersonFixDoc() { public async Task<List<SMResponce>> GetPersonFixDoc() {
var result = await _context.GetPersonByDoc(JsonSerializer.Serialize(new SMRequest() { rowguid_eais = "223322", document_seria = "V-II", document_number = "123456" })); var result = await _repository.GetPersonByDoc(JsonSerializer.Serialize(new SMRequest() { rowguid_eais = "223322", document_seria = "V-II", document_number = "123456" }));
return result; return result;
} }
// запрос по серии/номеру документа личности
[HttpPost] [HttpPost]
[Route("[controller]/getpersonByDoc/{Rowguid}/{Seria}/{Number}")] [Route("[controller]/getpersonByDoc/{Rowguid}/{Seria}/{Number}")]
public async Task<List<SMResponce>> GetPersonFixDoc(string Rowguid, string Seria, string Number) { public async Task<List<SMResponce>> GetPersonFixDoc(string Rowguid, string Seria, string Number) {
var result = await _context.GetPersonByDoc(JsonSerializer.Serialize(new SMRequest() { rowguid_eais = Rowguid, document_seria = Seria, document_number = Number })); var result = await _repository.GetPersonByDoc(JsonSerializer.Serialize(new SMRequest() { rowguid_eais = Rowguid, document_seria = Seria, document_number = Number }));
return result; return result;
} }
// запрос статуса нуждаемости по guid личности
[HttpPost] [HttpPost]
[Route("[controller]/getpersonDefenceDemandByID/{PersonID}")] [Route("[controller]/getpersonDefenceDemandByID/{PersonID}")]
public async Task<ISMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID) { public async Task<SMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID) {
var result = await _context.GetPersonDefenceDemandByID(PersonID); var result = await _repository.GetPersonDefenceDemandByID(PersonID);
return result; return result;
} }
} }
......
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
...@@ -8,175 +8,7 @@ using System.Threading.Tasks; ...@@ -8,175 +8,7 @@ using System.Threading.Tasks;
#nullable disable #nullable disable
namespace SocialMinistryDataExchange.Model.DB.Center { namespace SocialMinistryDataExchange.Model.DB.Center {
public partial class Контингент_center_Context : DbContext, ISMContext { public partial class Контингент_center_Context : DbContext, IContingentContext {
public Task<ISMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID) {
var status = (from st in СтатусыНуждаемостиs where st.Личность == new Guid(PersonID) orderby st.НачальнаяДатаСтатуса descending
select new ISMDefenceDemandResponce { PersonID = st.Личность, Status = st.ТипНуждаемостиNavigation.Наименование, StartDate = st.НачальнаяДатаСтатуса, EndDate = st.КонечнаяДатаСтатуса }).First();
return Task.FromResult(status);
}
public Task<List<SMResponce>> GetPersonByDoc(string document) {
var doc = JsonSerializer.Deserialize<SMRequest>(document);
try {
var records = (from pd in ДокументЛичностиs where pd.СерияДокумента == doc.document_seria && pd.НомерДокумента == doc.document_number
join lp in ЛичностьПодразделенияs on pd.Личность equals lp.Личность into lps
from lp in lps.DefaultIfEmpty()
join op in ОбразовательнаяПрограммаОрганизацииs on lp.Организация equals op.Организация into ops
from op in ops.DefaultIfEmpty()
join cp in ТекущаяЛичностьПодразделенияs on pd.Личность equals cp.Личность into cps
from cp in cps.DefaultIfEmpty()
select new SMResponceTemp {
rowguid_eais = doc.rowguid_eais
// СерияДокумента, НомерДокумента, КогдаВыданДокумент, ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента, КодУдостоверяющегоДокумента
, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number, КогдаВыданДокумент = pd.КогдаВыданДокумент, ВидУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Наименование, КодУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Код
// Личность (Guid), Имя, Отчество, БезОтчества, Фамилия
, Личность = pd.Личность, Имя = pd.ЛичностьNavigation.Имя, Отчество = pd.ЛичностьNavigation.Отчество, БезОтчества = pd.ЛичностьNavigation.БезОтчества, Фамилия = pd.ЛичностьNavigation.Фамилия
// ДатаРождения, ТерриторияФактическогоМестаЖительстваNew (нигде не заполнено - null), Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияФактическогоМестаЖительстваNew = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
// ТерриторияShortname
, ТерриторияShortname = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNewNavigation.ТерриторияNavigation.Наименование
// ПриказЗачисления, ПриказОтчисления, НачальнаяДата, КонечнаяДата, Подразделение (Guid), Организация (Guid)
, ПриказЗачисления = lp.ПриказЗачисления, ПриказОтчисления = lp.ПриказОтчисления, НачальнаяДата = lp.НачальнаяДата, КонечнаяДата = lp.КонечнаяДата, Подразделение = lp.Подразделение, Организация = lp.Организация
// ТипОрганизации, ТипОрганизацииКод, ТипОрганизацииНаименование
, ТипОрганизации = lp.ОрганизацияNavigation.ТипОрганизации, ТипОрганизацииКод = lp.ОрганизацияNavigation.ТипОрганизацииNavigation.Код, ТипОрганизацииНаименование = lp.ОрганизацияNavigation.ТипОрганизацииNavigation.Наименование
// ПолноеНаименованиеОрганизации, ВидУчредителя (Guid), ВидУчредителяКод
, ПолноеНаименованиеОрганизации = lp.ОрганизацияNavigation.ПолноеНаименование, ВидУчредителя = lp.ОрганизацияNavigation.ВидУчредителя, ВидУчредителяКод = lp.ОрганизацияNavigation.ВидУчредителяNavigation.Код
// ОбразовательнаяПрограммаТип (Guid), ОбразовательнаяПрограммаКод
, ОбразовательнаяПрограммаТип = op.ТипОп, ОбразовательнаяПрограммаКод = op.ТипОпNavigation.Код
// ФормаОбученияКод, ФормаОбученияНаименование
, ФормаОбученияКод = cp.ФормаОбученияNavigation.Код, ФормаОбученияНаименование = cp.ФормаОбученияNavigation.Наименование
}).ToList();
// записи не найдены
if (records.Count == 0) {
records.Add(new SMResponceTemp() { rowguid_eais = doc.rowguid_eais, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number });
}
return Task.FromResult(FormatResponce(this, records));
}
catch (Exception ex) {
// TODO log exception
return Task.FromResult(FormatResponce(this, new List<SMResponceTemp>() { new SMResponceTemp() { rowguid_eais = doc.rowguid_eais, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number } }));
}
}
static Guid? GetOrganizationType(Контингент_center_Context context, Guid? OrgTypeUid) {
if (OrgTypeUid == null) {
return null;
}
var type = (from too in context.ТипОбразовательнойОрганизацииs where too.PrimaryKey == OrgTypeUid select too).First();
return type.Иерархия == null ? type.PrimaryKey : GetOrganizationType(context, type.Иерархия);
}
static Guid? GetProgramType(Контингент_center_Context context, Guid? ProgramTypeUid) {
if (ProgramTypeUid == null) {
return null;
}
// выделяем ДОШКОЛЬНУЮ в отдельный тип
if (ProgramTypeUid.ToString() == "5BE7BD7C-1202-45E2-8E9E-7247070EA7B6") {
return ProgramTypeUid;
}
var type = (from opt in context.ТипОбразовательнойПрограммыs where opt.PrimaryKey == ProgramTypeUid select opt).First();
return type.Иерархия == null ? type.PrimaryKey : GetProgramType(context, type.Иерархия);
}
static List<SMResponce> FormatResponce(Контингент_center_Context context, List<SMResponceTemp> records) {
List<SMResponce> responce = new();
foreach (SMResponceTemp record in records) {
var SMRecord = new SMResponce();
if (record.Личность != Guid.Empty) { // записи найдены
SMRecord.rowguid_eais = record.rowguid_eais;
SMRecord.TerritoryName = record.ТерриторияShortname;
SMRecord.PersonFamilyName = record.Фамилия;
SMRecord.PersonName = record.Имя;
SMRecord.PersonSurname = record.Отчество;
SMRecord.PersonBirthday = record.ДатаРождения;
SMRecord.PersonDocumentType = record.КодУдостоверяющегоДокумента == 12 || record.КодУдостоверяющегоДокумента == 13 || record.КодУдостоверяющегоДокумента == 21 ?
"1"
: record.КодУдостоверяющегоДокумента == 11 || record.КодУдостоверяющегоДокумента == 31 ?
"2"
: String.Empty;
SMRecord.PersonDocumentSeria = record.СерияДокумента;
SMRecord.PersonDocumentNumber = record.НомерДокумента;
SMRecord.PersonDocumentDate = record.КогдаВыданДокумент;
SMRecord.PersonSnils = record.Снилс;
SMRecord.rowguid_contingent = record.Личность.ToString();
SMRecord.Status = record.ПриказОтчисления == null ? record.ПриказЗачисления == null ? "3" : "1" : "2";
SMRecord.StatusDate = SMRecord.Status switch {
"1" => record.НачальнаяДата,
"2" => record.КонечнаяДата,
_ => DateTime.Now,
};
if (SMRecord.Status == "1") {
SMRecord.FounderType = record.ВидУчредителяКод.ToString() ?? String.Empty;
SMRecord.OrganizationType = GetOrganizationType(context, record.ТипОрганизации).ToString() switch {
"29025A0D-7C7F-457B-9E14-0A6C16CBF94D" => "1",
"CF85F418-FFAD-4C86-8937-B2D4FBF4B661" => "2",
"1EB33F46-5A7C-4117-97EB-D3DFE4C3A7B2" => "3",
"BB88E168-D124-462B-8870-2D9A35755561" => "4",
_ => "5",
};
SMRecord.EducationProgram = GetProgramType(context, record.ОбразовательнаяПрограммаТип).ToString() switch {
"5BE7BD7C-1202-45E2-8E9E-7247070EA7B6" => "1",
"C09D82B4-CC8D-4EB8-9703-C95AEA53E044" => "2",
"8E674FDF-32CF-4080-B062-85C41A067A6F" => "3",
_ => "4",
};
SMRecord.EducationForm = record.ФормаОбученияКод switch {
11 => "1",
12 => "2",
13 => "3",
21 => "4",
22 => "5",
_ => String.Empty
};
}
}
else {
// записи не найдены
SMRecord.rowguid_eais = record.rowguid_eais;
SMRecord.PersonDocumentSeria = record.СерияДокумента;
SMRecord.PersonDocumentNumber = record.НомерДокумента;
SMRecord.Status = "3";
SMRecord.StatusDate = DateTime.Now;
}
responce.Add(SMRecord);
}
return responce;
}
//форма обучения в GetPersonByID не исправлена
public Task<List<SMResponce>> GetPersonByID(string ID) {
var records = ЛичностьПодразделенияs.Where(persondepartment => persondepartment.Личность == new Guid(ID))
.Join(Личностьs, persondepartment => persondepartment.Личность, person => person.PrimaryKey, (persondepartment, person) => new { persondepartment, person })
.Join(Территорияs, up => up.person.ТерриторияФактическогоМестаЖительстваNew, location => location.PrimaryKey, (up, location) => new { up.persondepartment, up.person, location })
.Join(ОбразовательнаяОрганизацияs, up => up.persondepartment.Организация, organization => organization.PrimaryKey, (up, organization) => new { up.persondepartment, up.person, up.location, organization })
.Join(ВидУчредителяs, up => up.organization.ВидУчредителя, organizationfounder => organizationfounder.PrimaryKey, (up, organizationfounder) => new { up.persondepartment, up.person, up.location, up.organization, organizationfounder })
.Join(ДокументЛичностиs, up => up.persondepartment.Личность, doc => doc.Личность, (up, doc) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, doc })
.Join(ВидУдостоверяющегоДокументаs, up => up.doc.ВидУдостоверяющегоДокумента, doctype => doctype.PrimaryKey, (up, doctype) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, doctype })
.Join(ОбразовательнаяПрограммаОрганизацииs, up => up.organization.PrimaryKey, educationprogram => educationprogram.Организация, (up, educationprogram) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, educationprogram })
.Join(ТипОбразовательнойПрограммыs, up => up.educationprogram.ТипОп, programtype => programtype.PrimaryKey, (up, programtype) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, up.educationprogram, programtype })
.Join(ФормаОбученияs, up => up.programtype.Иерархия, eduform => eduform.Иерархия, (up, eduform) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, up.educationprogram, up.programtype, eduform })
.Select(result => new SMResponceTemp() {Личность = result.persondepartment.Личность, ПриказЗачисления = result.persondepartment.ПриказЗачисления, ПриказОтчисления = result.persondepartment.ПриказОтчисления
, НачальнаяДата = result.persondepartment.НачальнаяДата, КонечнаяДата = result.persondepartment.КонечнаяДата, Подразделение = result.persondepartment.Подразделение
, Организация = result.persondepartment.Организация
, Имя = result.person.Имя, Отчество = result.person.Отчество, Фамилия = result.person.Фамилия, БезОтчества = result.person.БезОтчества, ДатаРождения = result.person.ДатаРождения
, ТерриторияФактическогоМестаЖительстваNew = result.person.ТерриторияФактическогоМестаЖительстваNew, Снилс = result.person.Снилс
, ТерриторияShortname = result.location.Наименование, ТипОрганизации = result.organization.ТипОрганизации, ПолноеНаименованиеОрганизации = result.organization.ПолноеНаименование, ВидУчредителя = result.organization.ВидУчредителя
, ВидУчредителяКод = result.organizationfounder.Код
, СерияДокумента = result.doc.СерияДокумента, НомерДокумента = result.doc.НомерДокумента, КогдаВыданДокумент = result.doc.КогдаВыданДокумент, ВидУдостоверяющегоДокумента = result.doc.ВидУдостоверяющегоДокумента
, НаименованиеУдостоверяющегоДокумента = result.doctype.Наименование, КодУдостоверяющегоДокумента = result.doctype.Код
, ОбразовательнаяПрограммаТип = result.educationprogram.ТипОп, ОбразовательнаяПрограммаКод = result.programtype.Код, ОбразовательнаяПрограммаИерархия = result.programtype.Иерархия
, ФормаОбученияНаименование = result.eduform.Наименование, ФормаОбученияКод = result.eduform.Код
, rowguid_eais = result.person.PrimaryKey.ToString()
}).ToList();
return Task.FromResult(FormatResponce(this, records));
}
public Контингент_center_Context() { public Контингент_center_Context() {
} }
......
using Microsoft.EntityFrameworkCore;
using SocialMinistryDataExchange.Model.DB;
namespace SocialMinistryDataExchange.Model {
public interface IContingentContext {
DbSet<СтатусыНуждаемости> СтатусыНуждаемостиs { get; set; }
DbSet<ТипНуждаемости> ТипНуждаемостиs { get; set; }
DbSet<ДокументЛичности> ДокументЛичностиs { get; set; }
DbSet<ЛичностьПодразделения> ЛичностьПодразделенияs { get; set; }
DbSet<ОбразовательнаяПрограммаОрганизации> ОбразовательнаяПрограммаОрганизацииs { get; set; }
DbSet<ТекущаяЛичностьПодразделения> ТекущаяЛичностьПодразделенияs { get; set; }
DbSet<Личность> Личностьs { get; set; }
DbSet<Территория> Территорияs { get; set; }
DbSet<ОбразовательнаяОрганизация> ОбразовательнаяОрганизацияs { get; set; }
DbSet<ВидУчредителя> ВидУчредителяs { get; set; }
DbSet<ВидУдостоверяющегоДокумента> ВидУдостоверяющегоДокументаs { get; set; }
DbSet<ТипОбразовательнойПрограммы> ТипОбразовательнойПрограммыs { get; set; }
DbSet<ФормаОбучения> ФормаОбученияs { get; set; }
DbSet<ТипОбразовательнойОрганизации> ТипОбразовательнойОрганизацииs { get; set; }
}
}
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SocialMinistryDataExchange.Model { namespace SocialMinistryDataExchange.Model {
public interface ISMContext { public interface ISMRepository {
Task<List<SMResponce>> GetPersonByID(string ID); Task<List<SMResponce>> GetPersonByID(string ID);
Task<List<SMResponce>> GetPersonByDoc(string Document); Task<List<SMResponce>> GetPersonByDoc(string Document);
Task<ISMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID); Task<SMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID);
} }
} }
using System; using System;
namespace SocialMinistryDataExchange.Model { namespace SocialMinistryDataExchange.Model {
public class ISMDefenceDemandResponce { public class SMDefenceDemandResponce {
public ISMDefenceDemandResponce() { public SMDefenceDemandResponce() {
} }
public Guid PersonID { get; set; } public Guid PersonID { get; set; }
......
using System.Threading.Tasks;
using System.Linq;
using System;
using System.Collections.Generic;
using System.Text.Json;
namespace SocialMinistryDataExchange.Model {
public class SMRepository : ISMRepository {
private IContingentContext _contingentContext;
public SMRepository() {
}
public SMRepository(IContingentContext contingentContext) {
_contingentContext = contingentContext;
}
public Task<SMDefenceDemandResponce> GetPersonDefenceDemandByID(string PersonID) {
var status = (from st in _contingentContext.СтатусыНуждаемостиs
where st.Личность == new Guid(PersonID)
orderby st.НачальнаяДатаСтатуса descending
select new SMDefenceDemandResponce { PersonID = st.Личность, Status = st.ТипНуждаемостиNavigation.Наименование, StartDate = st.НачальнаяДатаСтатуса, EndDate = st.КонечнаяДатаСтатуса }).First();
return Task.FromResult(status);
}
public Task<List<SMResponce>> GetPersonByDoc(string document) {
var doc = JsonSerializer.Deserialize<SMRequest>(document);
try {
var records = (from pd in _contingentContext.ДокументЛичностиs
where pd.СерияДокумента == doc.document_seria && pd.НомерДокумента == doc.document_number
join lp in _contingentContext.ЛичностьПодразделенияs on pd.Личность equals lp.Личность into lps
from lp in lps.DefaultIfEmpty()
join op in _contingentContext.ОбразовательнаяПрограммаОрганизацииs on lp.Организация equals op.Организация into ops
from op in ops.DefaultIfEmpty()
join cp in _contingentContext.ТекущаяЛичностьПодразделенияs on pd.Личность equals cp.Личность into cps
from cp in cps.DefaultIfEmpty()
select new SMResponceTemp {
rowguid_eais = doc.rowguid_eais
// СерияДокумента, НомерДокумента, КогдаВыданДокумент, ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента, КодУдостоверяющегоДокумента
, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number, КогдаВыданДокумент = pd.КогдаВыданДокумент, ВидУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Наименование, КодУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Код
// Личность (Guid), Имя, Отчество, БезОтчества, Фамилия
, Личность = pd.Личность, Имя = pd.ЛичностьNavigation.Имя, Отчество = pd.ЛичностьNavigation.Отчество, БезОтчества = pd.ЛичностьNavigation.БезОтчества, Фамилия = pd.ЛичностьNavigation.Фамилия
// ДатаРождения, ТерриторияФактическогоМестаЖительстваNew (нигде не заполнено - null), Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияФактическогоМестаЖительстваNew = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
// ТерриторияShortname
, ТерриторияShortname = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNewNavigation.ТерриторияNavigation.Наименование
// ПриказЗачисления, ПриказОтчисления, НачальнаяДата, КонечнаяДата, Подразделение (Guid), Организация (Guid)
, ПриказЗачисления = lp.ПриказЗачисления, ПриказОтчисления = lp.ПриказОтчисления, НачальнаяДата = lp.НачальнаяДата, КонечнаяДата = lp.КонечнаяДата, Подразделение = lp.Подразделение, Организация = lp.Организация
// ТипОрганизации, ТипОрганизацииКод, ТипОрганизацииНаименование
, ТипОрганизации = lp.ОрганизацияNavigation.ТипОрганизации, ТипОрганизацииКод = lp.ОрганизацияNavigation.ТипОрганизацииNavigation.Код, ТипОрганизацииНаименование = lp.ОрганизацияNavigation.ТипОрганизацииNavigation.Наименование
// ПолноеНаименованиеОрганизации, ВидУчредителя (Guid), ВидУчредителяКод
, ПолноеНаименованиеОрганизации = lp.ОрганизацияNavigation.ПолноеНаименование, ВидУчредителя = lp.ОрганизацияNavigation.ВидУчредителя, ВидУчредителяКод = lp.ОрганизацияNavigation.ВидУчредителяNavigation.Код
// ОбразовательнаяПрограммаТип (Guid), ОбразовательнаяПрограммаКод
, ОбразовательнаяПрограммаТип = op.ТипОп, ОбразовательнаяПрограммаКод = op.ТипОпNavigation.Код
// ФормаОбученияКод, ФормаОбученияНаименование
, ФормаОбученияКод = cp.ФормаОбученияNavigation.Код, ФормаОбученияНаименование = cp.ФормаОбученияNavigation.Наименование
}).ToList();
// записи не найдены
if (records.Count == 0) {
records.Add(new SMResponceTemp() { rowguid_eais = doc.rowguid_eais, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number });
}
return Task.FromResult(FormatResponce(_contingentContext, records));
}
catch (Exception ex) {
// TODO log exception
return Task.FromResult(FormatResponce(_contingentContext, new List<SMResponceTemp>() { new SMResponceTemp() { rowguid_eais = doc.rowguid_eais, СерияДокумента = doc.document_seria, НомерДокумента = doc.document_number } }));
}
}
static Guid? GetOrganizationType(IContingentContext context, Guid? OrgTypeUid) {
if (OrgTypeUid == null) {
return null;
}
var type = (from too in context.ТипОбразовательнойОрганизацииs where too.PrimaryKey == OrgTypeUid select too).First();
return type.Иерархия == null ? type.PrimaryKey : GetOrganizationType(context, type.Иерархия);
}
static Guid? GetProgramType(IContingentContext context, Guid? ProgramTypeUid) {
if (ProgramTypeUid == null) {
return null;
}
// выделяем ДОШКОЛЬНУЮ в отдельный тип
if (ProgramTypeUid.ToString() == "5BE7BD7C-1202-45E2-8E9E-7247070EA7B6") {
return ProgramTypeUid;
}
var type = (from opt in context.ТипОбразовательнойПрограммыs where opt.PrimaryKey == ProgramTypeUid select opt).First();
return type.Иерархия == null ? type.PrimaryKey : GetProgramType(context, type.Иерархия);
}
static List<SMResponce> FormatResponce(IContingentContext context, List<SMResponceTemp> records) {
List<SMResponce> responce = new();
foreach (SMResponceTemp record in records) {
var SMRecord = new SMResponce();
if (record.Личность != Guid.Empty) { // записи найдены
SMRecord.rowguid_eais = record.rowguid_eais;
SMRecord.TerritoryName = record.ТерриторияShortname;
SMRecord.PersonFamilyName = record.Фамилия;
SMRecord.PersonName = record.Имя;
SMRecord.PersonSurname = record.Отчество;
SMRecord.PersonBirthday = record.ДатаРождения;
SMRecord.PersonDocumentType = record.КодУдостоверяющегоДокумента == 12 || record.КодУдостоверяющегоДокумента == 13 || record.КодУдостоверяющегоДокумента == 21 ?
"1"
: record.КодУдостоверяющегоДокумента == 11 || record.КодУдостоверяющегоДокумента == 31 ?
"2"
: String.Empty;
SMRecord.PersonDocumentSeria = record.СерияДокумента;
SMRecord.PersonDocumentNumber = record.НомерДокумента;
SMRecord.PersonDocumentDate = record.КогдаВыданДокумент;
SMRecord.PersonSnils = record.Снилс;
SMRecord.rowguid_contingent = record.Личность.ToString();
SMRecord.Status = record.ПриказОтчисления == null ? record.ПриказЗачисления == null ? "3" : "1" : "2";
SMRecord.StatusDate = SMRecord.Status switch {
"1" => record.НачальнаяДата,
"2" => record.КонечнаяДата,
_ => DateTime.Now,
};
if (SMRecord.Status == "1") {
SMRecord.FounderType = record.ВидУчредителяКод.ToString() ?? String.Empty;
SMRecord.OrganizationType = GetOrganizationType(context, record.ТипОрганизации).ToString() switch {
"29025A0D-7C7F-457B-9E14-0A6C16CBF94D" => "1",
"CF85F418-FFAD-4C86-8937-B2D4FBF4B661" => "2",
"1EB33F46-5A7C-4117-97EB-D3DFE4C3A7B2" => "3",
"BB88E168-D124-462B-8870-2D9A35755561" => "4",
_ => "5",
};
SMRecord.EducationProgram = GetProgramType(context, record.ОбразовательнаяПрограммаТип).ToString() switch {
"5BE7BD7C-1202-45E2-8E9E-7247070EA7B6" => "1",
"C09D82B4-CC8D-4EB8-9703-C95AEA53E044" => "2",
"8E674FDF-32CF-4080-B062-85C41A067A6F" => "3",
_ => "4",
};
SMRecord.EducationForm = record.ФормаОбученияКод switch {
11 => "1",
12 => "2",
13 => "3",
21 => "4",
22 => "5",
_ => String.Empty
};
}
}
else {
// записи не найдены
SMRecord.rowguid_eais = record.rowguid_eais;
SMRecord.PersonDocumentSeria = record.СерияДокумента;
SMRecord.PersonDocumentNumber = record.НомерДокумента;
SMRecord.Status = "3";
SMRecord.StatusDate = DateTime.Now;
}
responce.Add(SMRecord);
}
return responce;
}
//форма обучения в GetPersonByID не исправлена
public Task<List<SMResponce>> GetPersonByID(string ID) {
var records = _contingentContext.ЛичностьПодразделенияs.Where(persondepartment => persondepartment.Личность == new Guid(ID))
.Join(_contingentContext.Личностьs, persondepartment => persondepartment.Личность, person => person.PrimaryKey, (persondepartment, person) => new { persondepartment, person })
.Join(_contingentContext.Территорияs, up => up.person.ТерриторияФактическогоМестаЖительстваNew, location => location.PrimaryKey, (up, location) => new { up.persondepartment, up.person, location })
.Join(_contingentContext.ОбразовательнаяОрганизацияs, up => up.persondepartment.Организация, organization => organization.PrimaryKey, (up, organization) => new { up.persondepartment, up.person, up.location, organization })
.Join(_contingentContext.ВидУчредителяs, up => up.organization.ВидУчредителя, organizationfounder => organizationfounder.PrimaryKey, (up, organizationfounder) => new { up.persondepartment, up.person, up.location, up.organization, organizationfounder })
.Join(_contingentContext.ДокументЛичностиs, up => up.persondepartment.Личность, doc => doc.Личность, (up, doc) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, doc })
.Join(_contingentContext.ВидУдостоверяющегоДокументаs, up => up.doc.ВидУдостоверяющегоДокумента, doctype => doctype.PrimaryKey, (up, doctype) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, doctype })
.Join(_contingentContext.ОбразовательнаяПрограммаОрганизацииs, up => up.organization.PrimaryKey, educationprogram => educationprogram.Организация, (up, educationprogram) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, educationprogram })
.Join(_contingentContext.ТипОбразовательнойПрограммыs, up => up.educationprogram.ТипОп, programtype => programtype.PrimaryKey, (up, programtype) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, up.educationprogram, programtype })
.Join(_contingentContext.ФормаОбученияs, up => up.programtype.Иерархия, eduform => eduform.Иерархия, (up, eduform) => new { up.persondepartment, up.person, up.location, up.organization, up.organizationfounder, up.doc, up.doctype, up.educationprogram, up.programtype, eduform })
.Select(result => new SMResponceTemp() {
Личность = result.persondepartment.Личность, ПриказЗачисления = result.persondepartment.ПриказЗачисления, ПриказОтчисления = result.persondepartment.ПриказОтчисления
, НачальнаяДата = result.persondepartment.НачальнаяДата, КонечнаяДата = result.persondepartment.КонечнаяДата, Подразделение = result.persondepartment.Подразделение
, Организация = result.persondepartment.Организация
, Имя = result.person.Имя, Отчество = result.person.Отчество, Фамилия = result.person.Фамилия, БезОтчества = result.person.БезОтчества, ДатаРождения = result.person.ДатаРождения
, ТерриторияФактическогоМестаЖительстваNew = result.person.ТерриторияФактическогоМестаЖительстваNew, Снилс = result.person.Снилс
, ТерриторияShortname = result.location.Наименование, ТипОрганизации = result.organization.ТипОрганизации, ПолноеНаименованиеОрганизации = result.organization.ПолноеНаименование, ВидУчредителя = result.organization.ВидУчредителя
, ВидУчредителяКод = result.organizationfounder.Код
, СерияДокумента = result.doc.СерияДокумента, НомерДокумента = result.doc.НомерДокумента, КогдаВыданДокумент = result.doc.КогдаВыданДокумент, ВидУдостоверяющегоДокумента = result.doc.ВидУдостоверяющегоДокумента
, НаименованиеУдостоверяющегоДокумента = result.doctype.Наименование, КодУдостоверяющегоДокумента = result.doctype.Код
, ОбразовательнаяПрограммаТип = result.educationprogram.ТипОп, ОбразовательнаяПрограммаКод = result.programtype.Код, ОбразовательнаяПрограммаИерархия = result.programtype.Иерархия
, ФормаОбученияНаименование = result.eduform.Наименование, ФормаОбученияКод = result.eduform.Код
, rowguid_eais = result.person.PrimaryKey.ToString()
}).ToList();
return Task.FromResult(FormatResponce(_contingentContext, records));
}
}
}
...@@ -29,7 +29,8 @@ namespace SocialMinistryDataExchange { ...@@ -29,7 +29,8 @@ namespace SocialMinistryDataExchange {
c.SwaggerDoc("v1", new OpenApiInfo { Title = "SocialMinistryDataExchange", Version = "v1" }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "SocialMinistryDataExchange", Version = "v1" });
}); });
services.AddDbContext<Êîíòèíãåíò_center_Context>(options => options.UseSqlServer(ConnectionString)); services.AddDbContext<Êîíòèíãåíò_center_Context>(options => options.UseSqlServer(ConnectionString));
services.AddTransient<ISMContext, Êîíòèíãåíò_center_Context>(); services.AddTransient<IContingentContext, Êîíòèíãåíò_center_Context>();
services.AddTransient<ISMRepository, SMRepository>();
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment