feat(esppApi): добавлены методы взятия в работу, выполнения и списания трудозатрат
This commit is contained in:
@@ -18,6 +18,35 @@ namespace PARR.EsppApi
|
||||
this.esppHttpService = esppHttpService;
|
||||
}
|
||||
|
||||
public Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId)//TODO упростить можно без RecordIdQuery
|
||||
{
|
||||
return SetStatusAsync(recordId, "2-В работе");
|
||||
}
|
||||
|
||||
public Task<EsppResultBase<EsppResponse>> SetStatusIsDone(string recordId)//TODO упростить можно без RecordIdQuery
|
||||
{
|
||||
|
||||
return SetStatusAsync(recordId, "4-Выполнен");
|
||||
}
|
||||
|
||||
private async Task<EsppResultBase<EsppResponse>> SetStatusAsync(string recordId, string newStatusStr)
|
||||
{
|
||||
//TODO assignee сразу назначаем принудительно, чтобы было понятно кто менял объект
|
||||
var result = await esppHttpService.SendAsync<EsppResponse>($"<ROOT operation=\"SaveTask\" returnFormat=\"json\">{{\"recordid\":\"{recordId}\",\"status\":\"{newStatusStr}\", \"assignee\":\"{esppOrderSettings.AccountName}\"}}</ROOT>");
|
||||
|
||||
if (result.Data != null && result.Data.ErrorCode != "0")
|
||||
return new EsppResultBase<EsppResponse>(null, false, new Exception(result.Data.Message));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<EsppResultBase<EsppOrder>> FindOrderByRecordIdAsync(string recordId)
|
||||
{
|
||||
var result = await esppHttpService.SendAsync<EsppOrder>($"<ROOT operation=\"GetTask\" returnFormat=\"json\">\r\n{{\"recordid\":\"{recordId}\"}}\r\n</ROOT>");//TODO упростить можно без RecordIdQuery
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query)
|
||||
{
|
||||
DateTime? generateDateStartWOTimeZone = query.GenerateDateStart.HasValue ? query.GenerateDateStart.Value.AddHours(esppOrderSettings.EsppUserTimeZone) : null;
|
||||
@@ -29,16 +58,16 @@ namespace PARR.EsppApi
|
||||
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)
|
||||
if (!conditions.Any())
|
||||
{
|
||||
logger.LogDebug("Пришёл пустой запрос в EsppHttpService.FindOrdersAsync");
|
||||
return new EsppResultBase<IEnumerable<EsppOrder>>(null, false);
|
||||
@@ -49,5 +78,18 @@ namespace PARR.EsppApi
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public async Task<EsppResultBase<EsppResponse>> AddMTnk(AddMtnkQuery mtnk)
|
||||
{
|
||||
var result = await esppHttpService.SendAsync<EsppResponse>(
|
||||
$"<ROOT operation=\"AddMTNK\" returnFormat=\"json\">{{\"recordid\":\"{mtnk.RecordId}\"," +
|
||||
$"\"joboperation\":\"{mtnk.JobOperation}\",\"time\":\"{mtnk.Time}\",\"workscope\":\"{mtnk.Workspace}\"" +
|
||||
$"}}</ROOT>");
|
||||
|
||||
if (result.Data != null && result.Data.ErrorCode != "0")
|
||||
return new EsppResultBase<EsppResponse>(null, false, new Exception(result.Data.Message));
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,26 @@ namespace PARR.EsppApi
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<IEnumerable<EsppOrder>>> FindOrdersAsync(FindOrdersQuery query);
|
||||
/// <summary>
|
||||
/// Поиск наряда по номеру
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<EsppOrder>> FindOrderByRecordIdAsync(string recordId);
|
||||
/// <summary>
|
||||
/// Взять наряд в работу
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId);
|
||||
/// <summary>
|
||||
/// Установить статус наряда как выполнен
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<EsppResponse>> SetStatusIsDone(string recordId);
|
||||
/// <summary>
|
||||
/// Списание трудозатрат по модульным ТНК
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<EsppResultBase<EsppResponse>> AddMTnk(AddMtnkQuery mtnk);
|
||||
|
||||
//взять в работу
|
||||
//выполнить + списать трудозатраты
|
||||
//найти по номеру
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ namespace PARR.EsppApi.Models
|
||||
return new DateTimeOffset(utc, new TimeSpan(0));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
14
PARR.EsppApi/Models/EsppResponse.cs
Normal file
14
PARR.EsppApi/Models/EsppResponse.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PARR.EsppApi.Models
|
||||
{
|
||||
public class EsppResponse
|
||||
{
|
||||
public string Message { get; set; } = string.Empty;
|
||||
public string ErrorCode { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
27
PARR.EsppApi/Models/Query/AddMtnkQuery.cs
Normal file
27
PARR.EsppApi/Models/Query/AddMtnkQuery.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
namespace PARR.EsppApi.Models.Query
|
||||
{
|
||||
public class AddMtnkQuery
|
||||
{
|
||||
/// <summary>
|
||||
/// номер наряда
|
||||
/// </summary>
|
||||
public required string RecordId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// операция для списания, должна совпадать по тексту с АСУ ЕСПП
|
||||
/// </summary>
|
||||
public required string JobOperation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// время в формате чч:мм
|
||||
/// </summary>
|
||||
public required string Time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// объём работ
|
||||
/// </summary>
|
||||
public int Workspace { get; set; } = 1;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -5,15 +5,11 @@
|
||||
/// </summary>
|
||||
public class FindOrdersQuery
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Подробное описание, содержит значение
|
||||
/// </summary>
|
||||
public string? DescriptionContains { get; set; }
|
||||
|
||||
private DateTime? _generateDateStart;
|
||||
|
||||
/// <summary>
|
||||
/// Дата сначала которой выбирать созданные наряды, UTC
|
||||
/// </summary>
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PARR.EsppApi.Models;
|
||||
using System;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace PARR.EsppApi
|
||||
@@ -12,7 +9,7 @@ namespace PARR.EsppApi
|
||||
private readonly ILogger<EsppHttpService> logger;
|
||||
private readonly HttpClient httpClient;
|
||||
|
||||
public EsppHttpService(ILogger<EsppHttpService> logger,HttpClient httpClient)
|
||||
public EsppHttpService(ILogger<EsppHttpService> logger, HttpClient httpClient)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.httpClient = httpClient;
|
||||
@@ -29,19 +26,16 @@ namespace PARR.EsppApi
|
||||
var response = await httpClient.SendAsync(request);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
logger.LogError($"Ошибка при получении данных из АСУ ЕСПП, StatusCode:{response.StatusCode}");
|
||||
|
||||
}
|
||||
|
||||
var responseString = await response.Content.ReadAsStringAsync();
|
||||
|
||||
logger.LogDebug($"Получил данные, строка: {responseString}");
|
||||
|
||||
var obj = JsonSerializer.Deserialize<T>(responseString);
|
||||
|
||||
return new EsppResultBase<T>(obj, true);
|
||||
|
||||
return new EsppResultBase<T>(obj, true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -5,7 +5,11 @@ namespace PARR.EsppApi.Settings
|
||||
internal class EsppOrderSettings
|
||||
{
|
||||
public string Url { get; set; } = string.Empty;
|
||||
|
||||
public string UserName { get; set; } = string.Empty;
|
||||
|
||||
public string AccountName { get; set; } = string.Empty;
|
||||
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using PARR.EsppApi;
|
||||
using PARR.EsppApi.Models.Query;
|
||||
using System.ComponentModel.Design.Serialization;
|
||||
|
||||
namespace PARR.Test
|
||||
{
|
||||
@@ -17,11 +16,6 @@ namespace PARR.Test
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
//while (!stoppingToken.IsCancellationRequested)
|
||||
//{
|
||||
// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||
// await Task.Delay(1000, stoppingToken);
|
||||
//}
|
||||
|
||||
await TestEsppApi();
|
||||
}
|
||||
@@ -29,11 +23,43 @@ namespace PARR.Test
|
||||
|
||||
private async Task TestEsppApi()
|
||||
{
|
||||
var result = await esppApiService.FindOrdersAsync(new FindOrdersQuery { DescriptionContains = "Полное", GenerateDateStart = new DateTime(2023, 10, 10) , GenerateDateEnd = new DateTime(2023, 10, 24) });
|
||||
//var result = await esppApiService.FindOrdersAsync(new FindOrdersQuery { DescriptionContains = "Полное", GenerateDateStart = new DateTime(2023, 10, 10) , GenerateDateEnd = new DateTime(2023, 10, 24) });
|
||||
var recordId = "НАР23-00049787";
|
||||
|
||||
if (result.IsSuccess)
|
||||
var result = await esppApiService.FindOrderByRecordIdAsync(recordId);
|
||||
|
||||
if (result.IsSuccess && (result.Data != null && result.Data.Number.Any()))
|
||||
{
|
||||
var orders = result.Data;
|
||||
//var orders = result.Data;
|
||||
|
||||
var inWorkResult = await esppApiService.SetStatusInWorkAsync(recordId);
|
||||
if (!inWorkResult.IsSuccess)
|
||||
{
|
||||
_logger.LogError(inWorkResult.Exception, $"Не удалось взять в работу наряда{recordId}");
|
||||
return;
|
||||
}
|
||||
|
||||
var tnk = new AddMtnkQuery { RecordId = recordId, JobOperation = "Не учтена в перечне ТНК", Time = "00:05" };
|
||||
|
||||
var addMtnkResult = await esppApiService.AddMTnk(tnk);
|
||||
|
||||
if (!addMtnkResult.IsSuccess)
|
||||
{
|
||||
_logger.LogError(addMtnkResult.Exception, $"Не удалось списать трудозатраты наряда {recordId}");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var resFinish = await esppApiService.SetStatusIsDone(recordId);
|
||||
if (!resFinish.IsSuccess)
|
||||
{
|
||||
_logger.LogError(resFinish.Exception, $"Не удалось обновить статус наряда {recordId}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogWarning($"не найден наряд {recordId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"EsppOrderSettings": {
|
||||
"Url": "http://rzd-espp-t-rpa-app-1.gvc.oao.rzd:8080/espp_api/OperationExecutor/",
|
||||
"UserName": "Auto-PTK-DVS",
|
||||
"AccountName": "АВТО ТЕХНОЛОГ ПТК-ДВС (AUTO-PTK-DVS)",
|
||||
"Password": "123456789",
|
||||
"EsppUserTimeZone": 10
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user