1C_DataBus/1CDataBus/Controllers/ContractsController.cs

98 lines
3.2 KiB
C#

using _1CDataBus.RabbitMQ;
using _1CDataBus.Structure;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Simple.OData.Client;
using System.Linq.Expressions;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace _1CDataBus.Controllers
{
[ApiController]
[Route("[controller]")]
public class ContractsController : ControllerBase
{
private readonly IConfiguration _config;
private readonly ILogger<ContractsController> _logger;
private RabbitConnection _rabbit;
private ODataClient _client;
public ContractsController(ILogger<ContractsController> logger, IConfiguration config)
{
_config = config;
_logger = logger;
_rabbit = new RabbitConnection(_config);
var odata = new ODataAccess(_config);
_client = odata.Client;
}
[HttpPost("SendContractFromQDoc")]
public async Task SendContractFromQDoc(long id)
{
var contract = await _client
.For("IContract")
.Key(id)
.Expand("BusinessUnit")
.Expand("Counterparty")
.Expand("Currency")
.Expand("DealKindSungero")
.FindEntryAsync();
var sendContract = new Contract(contract);
await SendContractTo1C(sendContract);
}
//[HttpPost("Test")]
//public async Task TestDelete()
//{
// var peoples = await _client
// .For("IPersons")
// .Filter("Name eq \'Маударбеков Азат Муратбекович\'")
// .FindEntriesAsync();
// foreach (dynamic person in peoples)
// {
// try
// {
// long Id = person["Id"];
// await _client
// .For("IPersons")
// .Key(Id)
// .DeleteEntryAsync();
// }
// catch (Exception)
// {
// }
// }
//}
[HttpPost("SendContract")]
public async Task SendContractTo1C([FromBody]Contract contract)
{
JsonSerializerOptions options = new()
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
WriteIndented = true
};
var serialized = JsonSerializer.Serialize(contract, options);
await _rabbit.SendMessage(serialized);
}
[HttpGet("GetContract")]
public async Task<string> GetContract(long contractId)
{
var contract = await _client
.For("IContracts")
.Expand("Versions/Body")
.Key(contractId)
.FindEntryAsync();
var versions = (IEnumerable<dynamic>)contract["Versions"];
var lastVersion = versions.OrderByDescending(x => x["Number"]).FirstOrDefault();
byte[] bytes = lastVersion["Body"]["Value"];
var base64 = Convert.ToBase64String(bytes);
return base64;
}
}
}