Commit 3f018f22 by AlexNasyr

transit

parent 01d0e57c
......@@ -20,7 +20,7 @@ namespace SocialMinistryDataExchange.Controllers {
public async Task<string> PutXMLDefenceStatus() {
var request = System.IO.File.ReadAllText("Model/reference/Request.xml");
var responce = await _repository.PutDefenceStatus(request);
return String.Empty;
return responce;
}
// тестовый запрос зачисленности личности
......@@ -43,6 +43,8 @@ namespace SocialMinistryDataExchange.Controllers {
PersonName = "Василий",
PersonSurname = "Алибабаевич",
PersonBirthday = DateTime.Parse("2015-01-01"),
PersonSnils = "12345678",
Territory = "Пермский ГО (г. Пермь)",
},
PersonOccupation = new SMPersonOccupationStatus()
},
......@@ -54,7 +56,7 @@ namespace SocialMinistryDataExchange.Controllers {
PersonDocumentNumber = "123456",
PersonDocumentDate = DateTime.Parse("2010-01-01"),
},
PersonFamilyName = "Мкртчян",
PersonFamilyName = "Мкртчя",
PersonName = "Василий",
PersonSurname = "Алибабаевич",
PersonBirthday = DateTime.Parse("2015-01-01"),
......
......@@ -5,6 +5,8 @@
namespace SocialMinistryDataExchange.Model.Contingent.Center
{
public partial class Contingent_center_Context : DbContext, IContingentContext {
public Contingent_center_Context()
{
}
......
......@@ -9,25 +9,77 @@ namespace SocialMinistryDataExchange.Model.EscpSD {
[XmlType(AnonymousType = true, Namespace = "urn://ru.permkrai.ecsp/mv/ecsp-sending-status-maloimushch")]
[XmlRoot(Namespace = "urn://ru.permkrai.ecsp/mv/ecsp-sending-status-maloimushch", IsNullable = false)]
public partial class EcspSendingStatusMaloimushch {
public string PrimaryKey { get; set; }
[XmlElement(DataType = "date")]
public DateTime DateTime { get; set; }
public string OrganSZ { get; set; }
public byte ObshKolChlenovSem { get; set; }
public string LgotKat { get; set; }
public decimal SrednedushevoiDohod { get; set; }
public decimal ProzhitMinimum { get; set; }
[XmlElement(DataType = "date")]
public DateTime SrokDeistviiaS { get; set; }
[XmlElement(DataType = "date")]
public DateTime SrokDeistviiaDo { get; set; }
[XmlElement(ElementName = "PrimaryKey")]
public string MsgID { get; set; }
[XmlElement(DataType = "date", ElementName = "DateTime")]
public DateTime MsgDataTime { get; set; }
[XmlElement(ElementName = "Leechnost")]
public Person Person { get; set; }
[XmlElement(ElementName = "Semya")]
public Family? Family { get; set; }
public PersonStatus PersonSDStatus { get; set; } = new();
[XmlElement(ElementName = "OrganSZ")]
public string SDDepartment {
get { return PersonSDStatus.SDDepartment; }
set { PersonSDStatus.SDDepartment = value; }
}
[XmlElement(ElementName = "ObshKolChlenovSem")]
public byte FamilyPersonsCount {
get { return PersonSDStatus.FamilyPersonsCount; }
set { PersonSDStatus.FamilyPersonsCount = value; }
}
[XmlElement(ElementName = "LgotKat")]
public string Status {
get { return PersonSDStatus.Status; }
set { PersonSDStatus.Status = value; }
}
[XmlElement(ElementName = "SrednedushevoiDohod")]
public decimal AvgIncome {
get { return PersonSDStatus.AvgIncome; }
set { PersonSDStatus.AvgIncome = value; }
}
[XmlElement(ElementName = "ProzhitMinimum")]
public decimal MinIncome {
get { return PersonSDStatus.MinIncome; }
set { PersonSDStatus.MinIncome = value; }
}
[XmlElement(DataType = "date", ElementName = "SrokDeistviiaS")]
public DateTime StartDate {
get { return PersonSDStatus.StartDate; }
set { PersonSDStatus.StartDate = value; }
}
[XmlElement(DataType = "date", ElementName = "SrokDeistviiaDo")]
public DateTime EndDate {
get { return PersonSDStatus.EndDate; }
set { PersonSDStatus.EndDate = value; }
}
}
[Serializable()]
[DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "urn://ru.permkrai.ecsp/mv/ecsp-sending-status-maloimushch")]
public class PersonStatus {
[XmlElement(ElementName = "OrganSZ")]
public string SDDepartment { get; set; }
[XmlElement(ElementName = "LgotKat")]
public string Status { get; set; }
[XmlElement(DataType = "date", ElementName = "SrokDeistviiaS")]
public DateTime StartDate { get; set; }
[XmlElement(DataType = "date", ElementName = "SrokDeistviiaDo")]
public DateTime EndDate { get; set; }
[XmlElement(ElementName = "SrednedushevoiDohod")]
public decimal AvgIncome { get; set; }
[XmlElement(ElementName = "ProzhitMinimum")]
public decimal MinIncome { get; set; }
[XmlElement(ElementName = "ObshKolChlenovSem")]
public byte FamilyPersonsCount { get; set; }
}
[Serializable()]
[DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "urn://ru.permkrai.ecsp/mv/ecsp-sending-status-maloimushch")]
public class Family {
[XmlElement(ElementName = "LeechostvSemya")]
public Person[]? Relatives { get; set; }
......@@ -72,6 +124,4 @@ namespace SocialMinistryDataExchange.Model.EscpSD {
[XmlElement(DataType = "date", ElementName = "DataVydachi")]
public DateTime DateOfIssue { get; set; }
}
}
......@@ -3,6 +3,7 @@ using SocialMinistryDataExchange.Model.Contingent.Center;
namespace SocialMinistryDataExchange.Model {
public interface IContingentContext {
DbSet<СтатусыНуждаемости> СтатусыНуждаемостиs { get; set; }
DbSet<ТипНуждаемости> ТипНуждаемостиs { get; set; }
......
......@@ -4,12 +4,15 @@ namespace SocialMinistryDataExchange.Model {
[Flags]
enum PersonSearchAttributes : byte {
PersonFamilyName = 1,
PersonName = 2,
PersonBirthday = 4,
}
[Flags]
enum PersonIdentitySearchAttributes : byte {
PersonDocumentSeria = 1,
PersonDocumentNumber = 2,
PersonDocumentDate = 4,
PersonFamilyName = 8,
PersonName = 16,
PersonBirthday = 32,
}
public class SMResponceTemp {
......@@ -28,10 +31,10 @@ namespace SocialMinistryDataExchange.Model {
public string? Фамилия { get; set; }
public bool? БезОтчества { get; set; }
public DateTime? ДатаРождения { get; set; }
public Guid? ТерриторияФактическогоМестаЖительстваNew { get; set; }
public Guid? ТерриторияРегистрацииПоМестуЖительстваNew { get; set; }
public string? ТерриторияShortname { get; set; }
public string? Снилс { get; set; }
public string? ТерриторияShortname { get; set; }
public Guid? ТипОрганизации { get; set; }
public int? ТипОрганизацииКод { get; set; }
public string? ТипОрганизацииНаименование { get; set; }
......
......@@ -7,6 +7,7 @@ using Serilog;
using System.Xml.Serialization;
using SocialMinistryDataExchange.Model.EscpSD;
using System.IO;
using Microsoft.EntityFrameworkCore;
namespace SocialMinistryDataExchange.Model {
public class SMRepository : ISMRepository {
......@@ -23,7 +24,7 @@ namespace SocialMinistryDataExchange.Model {
// принимает XML статус нуждаемости личности
public Task<string> PutDefenceStatus(string RequestXML) {
string responce = string.Empty;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(EcspSendingStatusMaloimushch));
XmlSerializer xmlSerializer = new(typeof(EcspSendingStatusMaloimushch));
var request = xmlSerializer.Deserialize(new StringReader(RequestXML));
using (StringWriter writer = new()) {
xmlSerializer.Serialize(writer, request);
......@@ -50,20 +51,30 @@ namespace SocialMinistryDataExchange.Model {
Responce.MsgID = Request.MsgID;
Responce.MsgDataTime = DateTime.Now;
Responce.MsgPriority = Request.MsgPriority;
Responce.MsgData = Request.MsgData;
foreach (var Person in Request.MsgData) {
var x = 0;
// проверяем на null ФИО
foreach (var psa in Enum.GetValues(typeof(PersonSearchAttributes))) {
x = Person.Person.GetType().GetProperty(psa.ToString()).GetValue(Person.Person) is null ? x : (x | (byte)psa);
}
//var z = (PersonSearchAttributes)x;
if (x < Enum.GetValues(typeof(PersonSearchAttributes)).Cast<byte>().Sum(s => s)) {
Person.Person.Error = $"Parameters: [{(PersonSearchAttributes)(Enum.GetValues(typeof(PersonSearchAttributes)).Cast<byte>().Sum(s => s) - x)}] can't be null; ";
Person.Person.Error += $"Parameters: [{(PersonSearchAttributes)(Enum.GetValues(typeof(PersonSearchAttributes)).Cast<byte>().Sum(s => s) - x)}] can't be null; ";
_logger.Error($"MsgID '{{@MsgID}}': {{@Error}};", Responce.MsgID, Person.Person.Error);
}
else {
TryFillPersonStatus(Person);
// проверяем на null документе личности
foreach (var psa in Enum.GetValues(typeof(PersonIdentitySearchAttributes))) {
x = Person.Person.PersonDocument.GetType().GetProperty(psa.ToString()).GetValue(Person.Person.PersonDocument) is null ? x : (x | (byte)psa);
}
if (x < Enum.GetValues(typeof(PersonIdentitySearchAttributes)).Cast<byte>().Sum(s => s)) {
Person.Person.Error += $"Parameters: [{(PersonIdentitySearchAttributes)(Enum.GetValues(typeof(PersonIdentitySearchAttributes)).Cast<byte>().Sum(s => s) - x)}] can't be null; ";
_logger.Error($"MsgID '{{@MsgID}}': {{@Error}};", Responce.MsgID, Person.Person.Error);
}
// если ошибок нету заполняем ответ
if(string.IsNullOrEmpty(Person.Person.Error)) {
TryFillPersonStatus(Person, Responce.MsgPriority ?? string.Empty);
}
}
}
......@@ -73,7 +84,7 @@ namespace SocialMinistryDataExchange.Model {
return Task.FromResult(Responce);
}
private void TryFillPersonStatus(SMPersonDataOccupationMessage Person) {
private void TryFillPersonStatus(SMPersonDataOccupationMessage Person, string Priority) {
try {
var person_record = (from pd in _contingentContext.ДокументЛичностиs
where pd.СерияДокумента.Contains(Person.Person.PersonDocument.PersonDocumentSeria) && pd.НомерДокумента.Contains(Person.Person.PersonDocument.PersonDocumentNumber)
......@@ -94,9 +105,9 @@ namespace SocialMinistryDataExchange.Model {
, СерияДокумента = Person.Person.PersonDocument.PersonDocumentSeria, НомерДокумента = Person.Person.PersonDocument.PersonDocumentNumber, КогдаВыданДокумент = pd.КогдаВыданДокумент, ВидУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокумента
, НаименованиеУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Наименование, КодУдостоверяющегоДокумента = pd.ВидУдостоверяющегоДокументаNavigation.Код
// Личность (Guid), Имя, Отчество, БезОтчества, Фамилия
, Личность = pd.Личность, Имя = pd.ЛичностьNavigation.Имя, Отчество = pd.ЛичностьNavigation.Отчество, БезОтчества = pd.ЛичностьNavigation.БезОтчества == null ? false : true, Фамилия = pd.ЛичностьNavigation.Фамилия
, Личность = pd.Личность, Имя = pd.ЛичностьNavigation.Имя, Отчество = pd.ЛичностьNavigation.Отчество, БезОтчества = pd.ЛичностьNavigation.БезОтчества != null, Фамилия = pd.ЛичностьNavigation.Фамилия
// ДатаРождения, ТерриторияФактическогоМестаЖительстваNew (нигде не заполнено - null), Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияФактическогоМестаЖительстваNew = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияРегистрацииПоМестуЖительстваNew = pd.ЛичностьNavigation.ТерриторияРегистрацииПоМестуЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
// ТерриторияShortname
, ТерриторияShortname = pd.ЛичностьNavigation.ТерриторияРегистрацииПоМестуЖительстваNewNavigation.ТерриторияNavigation.Наименование
// ПриказЗачисления, ПриказОтчисления, НачальнаяДата, КонечнаяДата, Подразделение (Guid), Организация (Guid)
......@@ -124,6 +135,23 @@ namespace SocialMinistryDataExchange.Model {
Person.Person.Error += "Personal document Error;";
_logger.Error($"Person '{{@Error}}': {{@Person}};", "TryFillPersonStatus: ", Person.Person);
}
// если ошибок нет или msg.priority = force дозополняем у себя данные
if (string.IsNullOrEmpty(Person.Person.Error) || Priority == "force") {
person_record.Фамилия = Person.Person.PersonFamilyName;
person_record.Имя = Person.Person.PersonName;
person_record.Отчество = Person.Person.PersonSurname;
person_record.БезОтчества = string.IsNullOrEmpty(person_record.Отчество);
person_record.ДатаРождения = Person.Person.PersonBirthday;
person_record.СерияДокумента = Person.Person.PersonDocument.PersonDocumentSeria;
person_record.НомерДокумента = Person.Person.PersonDocument.PersonDocumentNumber;
person_record.КогдаВыданДокумент = Person.Person.PersonDocument.PersonDocumentDate;
// TODO вид удостоверяющего документа
person_record.ТерриторияРегистрацииПоМестуЖительстваNew = GetTeritory(_contingentContext, Person.Person.Territory);
person_record.Снилс = String.IsNullOrEmpty(Person.Person.PersonSnils) ? person_record.Снилс: Person.Person.PersonSnils;
int a =(_contingentContext as DbContext).SaveChanges();
int b = ((DbContext)_contingentContext).SaveChanges(true);
}
Person.Person.PersonFamilyName = person_record.Фамилия;
Person.Person.PersonName = person_record.Имя;
Person.Person.PersonSurname = person_record.Отчество;
......@@ -179,6 +207,13 @@ namespace SocialMinistryDataExchange.Model {
_logger.Error($"Person '{{@Error}}': {{@Person}};", "TryFillPersonStatus: ", Person.Person);
}
}
private static Guid? GetTeritory(IContingentContext context, string address) {
if (string.IsNullOrEmpty(address)) {
return null;
}
var territory = (from terr in context.Территорияs where terr.Наименование.Contains(address) select terr.PrimaryKey).First();
return territory;
}
private static Guid? GetOrganizationType(IContingentContext context, Guid? OrgTypeUid) {
if (OrgTypeUid == null) {
return null;
......@@ -232,9 +267,9 @@ namespace SocialMinistryDataExchange.Model {
// Личность (Guid), Имя, Отчество, БезОтчества, Фамилия
, Личность = pd.Личность, Имя = pd.ЛичностьNavigation.Имя, Отчество = pd.ЛичностьNavigation.Отчество, БезОтчества = pd.ЛичностьNavigation.БезОтчества, Фамилия = pd.ЛичностьNavigation.Фамилия
// ДатаРождения, ТерриторияФактическогоМестаЖительстваNew (нигде не заполнено - null), Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияФактическогоМестаЖительстваNew = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
, ДатаРождения = pd.ЛичностьNavigation.ДатаРождения, ТерриторияРегистрацииПоМестуЖительстваNew = pd.ЛичностьNavigation.ТерриторияРегистрацииПоМестуЖительстваNew, Снилс = pd.ЛичностьNavigation.Снилс
// ТерриторияShortname
, ТерриторияShortname = pd.ЛичностьNavigation.ТерриторияФактическогоМестаЖительстваNewNavigation.ТерриторияNavigation.Наименование
, ТерриторияShortname = pd.ЛичностьNavigation.ТерриторияРегистрацииПоМестуЖительстваNewNavigation.ТерриторияNavigation.Наименование
// ПриказЗачисления, ПриказОтчисления, НачальнаяДата, КонечнаяДата, Подразделение (Guid), Организация (Guid)
, ПриказЗачисления = lp.ПриказЗачисления, ПриказОтчисления = lp.ПриказОтчисления, НачальнаяДата = lp.НачальнаяДата, КонечнаяДата = lp.КонечнаяДата, Подразделение = lp.Подразделение, Организация = lp.Организация
// ТипОрганизации, ТипОрганизацииКод, ТипОрганизацииНаименование
......
......@@ -29,7 +29,7 @@ namespace SocialMinistryDataExchange {
.MinimumLevel.Debug()
.MinimumLevel.Override("Default", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File($@"{Directory.GetCurrentDirectory()}\Logs\{DateTime.Now.ToString("yyyy-MM-dd")}.log"
.WriteTo.File($@"{Directory.GetCurrentDirectory()}\Logs\{DateTime.Now:yyyy-MM-dd}.log"
, outputTemplate: "[{Timestamp:HH:mm:ss.fff}] |{Level:u3}| {Message:lj}{NewLine}{Exception}")
.CreateLogger();
services.AddSingleton(Log.Logger);
......@@ -45,7 +45,8 @@ namespace SocialMinistryDataExchange {
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) {
//public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) {
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
app.UseSwagger();
......
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