Files
parr_api/PARR.EsppTemplateSync/Services/ParserService.cs

171 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<ParserService> logger;
private readonly GlobalSettings globalSettings;
private readonly SettingsFromDb settingsFromDb;
public ParserService(
ILogger<ParserService> logger,
GlobalSettings globalSettings,
SettingsFromDb settingsFromDb
)
{
this.logger = logger;
this.globalSettings = globalSettings;
this.settingsFromDb = settingsFromDb;
}
public async Task<bool> 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<Dt>(string str);
//public class Converter
//{
// public T ParseString<T>(string str, CustomParserHandlerDelegate<T> customParser)
// {
// var obj = customParser(str);
// return obj;
// }
//}
//public class RunConverter
//{
// public void Run<T>(CustomParserHandlerDelegate<T> 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";
//}
}