using JSONParser.Structure; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Runtime.InteropServices.JavaScript.JSType; namespace JSONParser { public class JSONStructure { //private JArray _array; private List _orgs; private List _depts; private List _jobs; private List _emps; public List BusinessUnits { get; set; } public List Departments { get; set; } public List JobTitles { get; set; } public List Employees { get; set; } public List Persons { get; set; } public List Logins { get; set; } public List NotFoundDepartments { get; set; } = new List(); public List NotFoundEmployees { get; set; } = new List(); public JSONStructure(JArray array) { //var filePath = @"C:\Users\anboevdd\Desktop\ОШС_2024-10-30.json"; //var json = File.ReadAllText(filePath); //var array = JArray.Parse(json); Persons = array.Where(x => (string)x["Type"] == "ФизическиеЛица").Select(x => new Person { Type = (string)x["Type"], Sid = (string)x["Sid"], FirstName = (string)x["FirstName"], LastName = (string)x["LastName"], MiddleName = (string)x["MiddleName"] }).ToList(); Logins = array.Where(x => (string)x["Type"] == "УчетныеЗаписи").Select(x => new Login { Type = (string)x["Type"], Sid = (string)x["Sid"], //LoginName = (string)x["LoginName"] == null ? null : $"POLY\\{(string)x["LoginName"]}", LoginName = (string)x["LoginName"] == null ? null : $"{(string)x["LoginName"]}", TypeAuthentication = (string)x["TypeAuthentication"], Status = (bool)x["Status"] }).ToList(); _orgs = array.Where(x => (string)x["Type"] == "Организации").ToList(); _depts = array.Where(x => (string)x["Type"] == "ПодразделенияОрганизаций").ToList(); _jobs = array.Where(x => (string)x["Type"] == "Должности").ToList(); _emps = array.Where(x => (string)x["Type"] == "Сотрудники").ToList(); BusinessUnits = GetBusinessUnits(); Departments = GetDepartments(); JobTitles = GetJobTitles(); Employees = GetEmployees(); BusinessUnits.ForEach(x => x.NCEO = CreateEmployee(x.NCEO.Sid)); BusinessUnits.ForEach(x => x.Account = CreateEmployee(x.Account.Sid)); } private List GetEmployees() { var result = new List(); foreach (var item in _emps) { result.Add(CreateEmployee((string)item["Sid"])); } return result; } private List GetJobTitles() { var result = new List(); foreach (var item in _jobs) { result.Add(CreateJobTitle((string)item["Sid"])); } return result; } private List GetDepartments() { var result = new List(); foreach (var item in _depts) { result.Add(CreateDepartment((string)item["Sid"])); } return result; } private Department CreateDepartment(string sid) { if (Guid.Parse(sid) == Guid.Empty) return null; var department = new Department(); var dept = _depts.FirstOrDefault(x => (string)x["Sid"] == sid); if (dept != null) { department.Type = (string)dept["Type"]; department.Sid = (string)dept["Sid"]; department.Name = (string)dept["Name"]; department.ShortName = (string)dept["ShortName"]; //department.BusinessUnit = BusinessUnits.FirstOrDefault(x => x.Sid == (string)dept["BusinessUnit"]); department.BusinessUnit = CreateBusinessUnit((string)dept["BusinessUnit"]); if (string.IsNullOrEmpty((string)dept["HeadOffice"])) { department.HeadOffice = null; } else { department.HeadOffice = CreateDepartment((string)dept["HeadOffice"]); } department.Status = (string)dept["Status"]; } else { department.Sid = sid; NotFoundDepartments.Add(sid); //Console.WriteLine($"Department {sid}"); } return department; } private List GetBusinessUnits() { var result = new List(); foreach (var item in _orgs) { result.Add(CreateBusinessUnit((string)item["Sid"])); } return result; } private BusinessUnit CreateBusinessUnit(string sid) { var org = _orgs.FirstOrDefault(x => (string)x["Sid"] == sid); var bu = new BusinessUnit(); if (org != null) { bu.Type = (string)org["Type"]; bu.Sid = (string)org["Sid"]; bu.Name = (string)org["Name"]; bu.LegalName = (string)org["LegalName"]; bu.NCEO = new Employee { Sid = (string)org["NCEO"] }; bu.Account = new Employee { Sid = (string)org["Account"] }; if ((string)org["Sid"] == (string)org["HeadCompany"] || Guid.Parse((string)org["Sid"]) == Guid.Empty) { bu.HeadCompany = null; } else { bu.HeadCompany = CreateBusinessUnit((string)org["HeadCompany"]); } bu.BINArmadoc = (string)org["BINArmadoc"]; bu.LegalAddress = (string)org["LegalAddress"]; bu.PostalAddress = (string)org["PostalAddress"]; bu.Phones = (string)org["Phones"]; } else { bu.Sid = sid; //Console.WriteLine($"BusinessUnit - {sid}"); } return bu; } private Employee CreateEmployee(string? sid) { if (Guid.Parse(sid) == Guid.Empty) return null; var employee = new Employee(); var emp = _emps.FirstOrDefault(x => (string)x["Sid"] == sid); if (emp != null) { employee.Type = (string)emp["Type"]; employee.Sid = (string)emp["Sid"]; employee.Person = Persons.FirstOrDefault(x => x.Sid == (string)emp["Person"]); employee.Login = Logins.FirstOrDefault(x => x.Sid == (string)emp["Login"]); employee.Email = (string)emp["Email"]; employee.Status = (bool)emp["Status"]; //employee.Department = Departments.FirstOrDefault(x => x.Sid == (string)emp["Department"]); employee.Department = CreateDepartment((string)emp["Department"]); employee.JobTitleName = (string)emp["JobTitleName"]; employee.JobTitle = new JobTitle { Type = "Должности", Sid = Guid.NewGuid().ToString(), Name = employee.JobTitleName, Department = employee.Department }; //employee.JobTitle = CreateJobTitle((string)emp["JobTitle"]); } else { employee.Sid = sid; NotFoundEmployees.Add(sid); //Console.WriteLine($"Employee - {sid}"); } return employee; } private JobTitle CreateJobTitle(string sid) { var jt = _jobs.FirstOrDefault(x => (string)x["Sid"] == sid); var jobTitle = new JobTitle(); if (jt != null) { jobTitle.Type = (string)jt["Type"]; jobTitle.Sid = (string)jt["Sid"]; jobTitle.Name = (string)jt["Name"]; jobTitle.Department = CreateDepartment((string)jt["Department"]); } else { jobTitle.Sid = sid; //Console.WriteLine($"JobTitle - {sid}"); } return jobTitle; } } }