54 lines
2.7 KiB
C#
54 lines
2.7 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using PARR.EsppApi.Models;
|
|
using PARR.EsppApi.Models.Query;
|
|
using PARR.EsppApi.Settings;
|
|
|
|
namespace PARR.EsppApi
|
|
{
|
|
internal class EsppApiService : IEsppApiService
|
|
{
|
|
private readonly ILogger<EsppApiService> logger;
|
|
private readonly EsppOrderSettings esppOrderSettings;
|
|
private readonly EsppHttpService esppHttpService;
|
|
|
|
public EsppApiService(ILogger<EsppApiService> logger, EsppOrderSettings esppOrderSettings, EsppHttpService esppHttpService)
|
|
{
|
|
this.logger = logger;
|
|
this.esppOrderSettings = esppOrderSettings;
|
|
this.esppHttpService = esppHttpService;
|
|
}
|
|
|
|
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query)
|
|
{
|
|
DateTime? generateDateStartWOTimeZone = query.GenerateDateStart.HasValue ? query.GenerateDateStart.Value.AddHours(esppOrderSettings.EsppUserTimeZone) : null;
|
|
DateTime? generateDateEndWOTimeZone = query.GenerateDateEnd.HasValue ? query.GenerateDateEnd.Value.AddHours(esppOrderSettings.EsppUserTimeZone) : null;
|
|
|
|
var conditions = new List<string>();
|
|
|
|
if (!string.IsNullOrEmpty(query.DescriptionContains))
|
|
conditions.Add($"description like \"*{query.DescriptionContains}*\"");
|
|
//if (!string.IsNullOrEmpty(query.TemplateNameContains))
|
|
// conditions.Add($"templateName like \"*{query.TemplateNameContains}*\"");
|
|
|
|
if (generateDateStartWOTimeZone.HasValue)
|
|
conditions.Add($"open.time>='{generateDateStartWOTimeZone.Value.Day}/{generateDateStartWOTimeZone.Value.Month}/{generateDateStartWOTimeZone.Value.Year}" +
|
|
$" {generateDateStartWOTimeZone.Value.Hour}:{generateDateStartWOTimeZone.Value.Minute}:{generateDateStartWOTimeZone.Value.Second}'");
|
|
|
|
if (generateDateEndWOTimeZone.HasValue)
|
|
conditions.Add($"open.time<='{generateDateEndWOTimeZone.Value.Day}/{generateDateEndWOTimeZone.Value.Month}/{generateDateEndWOTimeZone.Value.Year}" +
|
|
$" {generateDateEndWOTimeZone.Value.Hour}:{generateDateEndWOTimeZone.Value.Minute}:{generateDateEndWOTimeZone.Value.Second}'");
|
|
|
|
if (conditions.Count < 1)
|
|
{
|
|
logger.LogDebug("Пришёл пустой запрос в EsppHttpService.FindOrdersAsync");
|
|
return new EsppResultBase<IEnumerable<EsppOrder>>(null, false);
|
|
}
|
|
|
|
var result = await esppHttpService.SendAsync<IEnumerable<EsppOrder>>($"<ROOT operation=\"GetTaskList\" returnFormat=\"json\">{{\"VIEW_QUERY\":\"{string.Join(" and ", conditions)}\"}}</ROOT>");
|
|
|
|
return result;
|
|
|
|
}
|
|
}
|
|
}
|