using Microsoft.Extensions.Logging; using PARR.DAL.Contracts; using PARR.EsppTemplateSync.Domain; using PARR.EsppTemplateSync.Settings; using System.Globalization; namespace PARR.EsppTemplateSync.Services { internal class ParserService : IParserService { private readonly ILogger logger; private readonly GlobalSettings globalSettings; private readonly SettingsFromDb settingsFromDb; public ParserService( ILogger logger, GlobalSettings globalSettings, SettingsFromDb settingsFromDb ) { this.logger = logger; this.globalSettings = globalSettings; this.settingsFromDb = settingsFromDb; } public async Task ParseFileAsync(string path) { //TODO: bool isSuccess = true; return isSuccess; } public EsppTemplate? ParseString(string str) { // TODO: а если формат нет тот? Все будет ок? var splittedContent = str.Split(globalSettings.ParsingSeparator); if (splittedContent.Length != 17) { return null; } //var name = splittedContent[0].Trim().Substring(1, splittedContent[0].Length - 2); var name = splittedContent[0].Trim(); CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; if (!string.IsNullOrEmpty(settingsFromDb.TemplatePrefixName) && !name.StartsWith(settingsFromDb.TemplatePrefixName, true, currentCulture) ) { logger.LogWarning($"Имя шаблона не соответствует обязательному префиксу({settingsFromDb.TemplatePrefixName}). Шаблон {name} игнорирован"); return null; } if (!bool.TryParse(splittedContent[1].Trim(), out var isActive)) isActive = false; var workGroup = splittedContent[2].Trim(); var shortDescription = splittedContent[3].Trim(); var category = splittedContent[4].Trim(); var responseArea = splittedContent[5].Trim(); var duration = splittedContent[6].Trim(); var ek = splittedContent[7].Trim(); var initiator = splittedContent[8].Trim(); var fullDescription = splittedContent[9].Trim(); var closingCode = splittedContent[10].Trim(); var solution = splittedContent[11].Trim(); var process = splittedContent[12].Trim(); var subProcess = splittedContent[13].Trim(); var tnk = splittedContent[14].Trim(); var work = splittedContent[15].Trim(); var worker = splittedContent[16].Trim(); var template = new EsppTemplate { Name = name, IsActive = isActive, WorkGroup = workGroup, ShortDescription = shortDescription, //Category = category, ResponseArea = responseArea, Duration = duration, EK = ek, //Initiator = initiator, FullDescription = fullDescription, //ClosingCode = closingCode, Solution = solution, Process = process, SubProcess = subProcess, TNK = tnk, Work = work, //Worker = worker }; return template; } private DateTimeOffset? ConvertDateFromStr(string dateString) { var format = "dd/MM/yy HH:mm:ss"; var provider = CultureInfo.CurrentCulture; try { var result = DateTimeOffset.ParseExact(dateString, format, provider).ToOffset(new TimeSpan(0)); logger.LogInformation($"{dateString} было преобразовано в {result.ToString()}."); return result; } catch (FormatException) { logger.LogWarning($"{dateString} имеет некоррктный формат для преобразование в DateTimeOffset"); } return null; } } // dll //public delegate Dt CustomParserHandlerDelegate
(string str); //public class Converter //{ // public T ParseString(string str, CustomParserHandlerDelegate customParser) // { // var obj = customParser(str); // return obj; // } //} //public class RunConverter //{ // public void Run(CustomParserHandlerDelegate customParser) // { // var conv = new Converter(); // //var obj = conv.ParseString("sdfsdfsdf", SuperParser); // var obj = conv.ParseString("sdfsdfsdf", customParser); // } //} ////--- //public class Xxx //{ // void Test() // { // var rc = new RunConverter(); // rc.Run(SuperParser); // } // Model1 SuperParser(string str) // { // // custom logic // return new Model1 { Field = str }; // } //} //public class Model1 //{ // public string Field { get; set; } = "111"; //} }