feat(esppOrderManager): логика изменения статусов наряда. Добавлен проект с константами, вынес в него OrderStatusEnum. (EsppApi)Обновлена модель EsppOrder, при изменении статуса наряда, добавлено поле Решение.

This commit is contained in:
Mikhail Trubnikov
2023-11-20 12:26:33 +10:00
parent 1c02f9978a
commit 113a801060
17 changed files with 256 additions and 48 deletions

View File

@@ -18,21 +18,27 @@ namespace PARR.EsppApi
this.esppHttpService = esppHttpService;
}
public Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId)//TODO упростить можно без RecordIdQuery
public Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId, string resultMsg)//TODO упростить можно без RecordIdQuery
{
return SetStatusAsync(recordId, "2-В работе");
return SetStatusAsync(recordId, "2-В работе", resultMsg);
}
public Task<EsppResultBase<EsppResponse>> SetStatusIsDone(string recordId)//TODO упростить можно без RecordIdQuery
public Task<EsppResultBase<EsppResponse>> SetStatusIsDoneAsync(string recordId, string resultMsg)//TODO упростить можно без RecordIdQuery
{
return SetStatusAsync(recordId, "4-Выполнен");
return SetStatusAsync(recordId, "4-Выполнен", resultMsg);
}
private async Task<EsppResultBase<EsppResponse>> SetStatusAsync(string recordId, string newStatusStr)
private async Task<EsppResultBase<EsppResponse>> SetStatusAsync(string recordId, string newStatusStr, string resultMsg)
{
//TODO assignee сразу назначаем принудительно, чтобы было понятно кто менял объект
var result = await esppHttpService.SendAsync<EsppResponse>($"<ROOT operation=\"SaveTask\" returnFormat=\"json\">{{\"recordid\":\"{recordId}\",\"status\":\"{newStatusStr}\", \"assignee\":\"{esppOrderSettings.AccountName}\"}}</ROOT>");
var query = $"<ROOT operation=\"SaveTask\" returnFormat=\"json\">{{" +
$"\"recordid\":\"{recordId}\"," +
$"\"status\":\"{newStatusStr}\"," +
$"\"assignee\":\"{esppOrderSettings.AccountName}\"" +
$"\"resolution\":\"{resultMsg}\"," +
$"}}</ROOT>";
var result = await esppHttpService.SendAsync<EsppResponse>(query);
if (result.Data != null && result.Data.ErrorCode != "0")
return new EsppResultBase<EsppResponse>(null, false, new Exception(result.Data.Message));
@@ -79,7 +85,7 @@ namespace PARR.EsppApi
}
public async Task<EsppResultBase<EsppResponse>> AddMTnk(AddMtnkQuery mtnk)
public async Task<EsppResultBase<EsppResponse>> AddMTnkAsync(AddMtnkQuery mtnk)
{
var result = await esppHttpService.SendAsync<EsppResponse>(
$"<ROOT operation=\"AddMTNK\" returnFormat=\"json\">{{\"recordid\":\"{mtnk.RecordId}\"," +

View File

@@ -21,19 +21,19 @@ namespace PARR.EsppApi
/// Взять наряд в работу
/// </summary>
/// <returns></returns>
Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId);
Task<EsppResultBase<EsppResponse>> SetStatusInWorkAsync(string recordId, string resultMsg);
/// <summary>
/// Установить статус наряда как выполнен
/// </summary>
/// <returns></returns>
Task<EsppResultBase<EsppResponse>> SetStatusIsDone(string recordId);
Task<EsppResultBase<EsppResponse>> SetStatusIsDoneAsync(string recordId, string resultMsg);
/// <summary>
/// Списание трудозатрат по модульным ТНК
/// </summary>
/// <returns></returns>
Task<EsppResultBase<EsppResponse>> AddMTnk(AddMtnkQuery mtnk);
Task<EsppResultBase<EsppResponse>> AddMTnkAsync(AddMtnkQuery mtnk);
}
}

View File

@@ -1,4 +1,5 @@
using PARR.EsppApi.Settings;
using PARR.Constants;
using PARR.EsppApi.Settings;
using System.Globalization;
using System.Text.Json.Serialization;
@@ -15,6 +16,9 @@ namespace PARR.EsppApi.Models
[JsonPropertyName("assignment")]
public string? WorkGroup { get; set; }
/// <summary>
/// Статус наряда в формате строки
/// </summary>
[JsonPropertyName("status")]
public string Status { get; set; } = string.Empty;
@@ -37,6 +41,32 @@ namespace PARR.EsppApi.Models
return new DateTimeOffset(utc, new TimeSpan(0));
}
}
/// <summary>
/// Статус наряда в формате OrderStatusEnum
/// </summary>
public OrderStatusEnum StatusEnum
{
get
{
switch (Status.Trim())
{
case "1-Направлен в группу":
return OrderStatusEnum.New;
case "2-В работе":
return OrderStatusEnum.InWork;
case "3-Приостановлен":
return OrderStatusEnum.Stop;
case "4-Выполнен":
return OrderStatusEnum.Complete;
case "5-Закрыт":
return OrderStatusEnum.Closed;
default:
//logger.LogWarning($"Не смог распознать статус наряда, вернул значение по умполчанию: {OrderStatusEnum.New.ToString()}, входящее значение: {statusName}");
return OrderStatusEnum.New;
}
}
}
}
}

View File

@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PARR.EsppApi.Models
namespace PARR.EsppApi.Models
{
public class EsppResponse
{