Compare commits
4 Commits
f04385a03c
...
cc4a7d8c20
| Author | SHA1 | Date | |
|---|---|---|---|
| cc4a7d8c20 | |||
| 0b8068f926 | |||
| 9fd7a68798 | |||
| d6e2690bb8 |
@@ -1,30 +1,34 @@
|
|||||||
|
using DigitalData.Core.Abstraction.Application.Repository;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
using EnvelopeGenerator.Domain.Entities;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.ServiceHost.Jobs;
|
namespace EnvelopeGenerator.ServiceHost.Jobs;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// migrate from EnvelopeGenerator.CommonServices.Services.ActionService
|
||||||
|
/// </summary>
|
||||||
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
||||||
public class ActionService
|
public class ActionService(IRepository<History> histRepo)
|
||||||
{
|
{
|
||||||
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
||||||
public bool CreateReport(Envelope envelope)
|
public bool CreateReport(Envelope envelope, CancellationToken cancel = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
||||||
public bool FinalizeEnvelope(Envelope envelope)
|
public bool FinalizeEnvelope(Envelope envelope, CancellationToken cancel = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
||||||
public bool CompleteEnvelope(Envelope envelope)
|
public bool CompleteEnvelope(Envelope envelope, CancellationToken cancel = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
[Obsolete("This is a placeholder service added by copilot. Migrate the actual logic from CommonServices.Jobs")]
|
||||||
public bool CompleteEnvelope(Envelope envelope, Receiver receiver)
|
public bool CompleteEnvelope(Envelope envelope, Receiver receiver, CancellationToken cancel = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,143 +43,105 @@ public class FinalizeDocumentJob(IOptions<WorkerOptions> options, IConfiguration
|
|||||||
var jobId = typeof(FinalizeDocumentJob).FullName;
|
var jobId = typeof(FinalizeDocumentJob).FullName;
|
||||||
logger.LogDebug("Starting job {jobId}", jobId);
|
logger.LogDebug("Starting job {jobId}", jobId);
|
||||||
|
|
||||||
try
|
_config = await mediator.Send(new ReadDefaultConfigQuery(), cancel);
|
||||||
|
|
||||||
|
var envelopes = await envRepo
|
||||||
|
.Where(e => e.Status == EnvelopeStatus.EnvelopeCompletelySigned
|
||||||
|
&& e.ChangedWhen.HasValue
|
||||||
|
&& EF.Functions.DateDiffMinute(e.ChangedWhen.Value, DateTime.Now) >= CompleteWaitTime)
|
||||||
|
.OrderBy(e => e.Id)
|
||||||
|
.ToListAsync(cancel);
|
||||||
|
|
||||||
|
if (envelopes.Count > 0)
|
||||||
|
logger.LogInformation("Found [{count}] completed envelopes.", envelopes.Count);
|
||||||
|
|
||||||
|
var total = envelopes.Count;
|
||||||
|
var current = 1;
|
||||||
|
|
||||||
|
foreach (var envelope in envelopes)
|
||||||
{
|
{
|
||||||
logger.LogDebug("Loading Configuration..");
|
try
|
||||||
_config = await mediator.Send(new ReadDefaultConfigQuery(), cancel);
|
|
||||||
|
|
||||||
logger.LogDebug("DocumentPath: [{documentPath}]", _config.DocumentPath);
|
|
||||||
logger.LogDebug("ExportPath: [{exportPath}]", _config.ExportPath);
|
|
||||||
|
|
||||||
var completeStatus = EnvelopeStatus.EnvelopeCompletelySigned;
|
|
||||||
var sql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {completeStatus} AND DATEDIFF(minute, CHANGED_WHEN, GETDATE()) >= {CompleteWaitTime} ORDER BY GUID";
|
|
||||||
var table = _database.GetDatatable(sql);
|
|
||||||
|
|
||||||
var envelopeIds = table.Rows.Cast<DataRow>()
|
|
||||||
.Select(r => r.Field<int>("GUID"))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (envelopeIds.Count > 0)
|
|
||||||
{
|
{
|
||||||
logger.LogInformation("Found [{count}] completed envelopes.", envelopeIds.Count);
|
var envelopeData = GetEnvelopeData(envelope.Id);
|
||||||
}
|
|
||||||
|
|
||||||
var total = envelopeIds.Count;
|
if (envelopeData is null)
|
||||||
var current = 1;
|
{
|
||||||
|
logger.LogWarning("EnvelopeData could not be loaded for Id [{id}]!", envelope.Id);
|
||||||
|
throw new ArgumentNullException(nameof(EnvelopeData));
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.LogDebug("Burning Annotations to pdf ...");
|
||||||
|
var burnedDocument = BurnAnnotationsToPdf(envelopeData);
|
||||||
|
if (burnedDocument is null)
|
||||||
|
{
|
||||||
|
logger.LogWarning("Document could not be finalized!");
|
||||||
|
throw new ApplicationException("Document could not be finalized");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actionService?.CreateReport(envelope) == false)
|
||||||
|
{
|
||||||
|
logger.LogWarning("Document Report could not be created!");
|
||||||
|
throw new ApplicationException("Document Report could not be created");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.LogDebug("Creating report..");
|
||||||
|
var report = reportCreator!.CreateReport(envelope);
|
||||||
|
logger.LogDebug("Report created!");
|
||||||
|
|
||||||
|
logger.LogDebug("Merging documents ...");
|
||||||
|
var mergedDocument = pdfMerger!.MergeDocuments(burnedDocument, report);
|
||||||
|
logger.LogDebug("Documents merged!");
|
||||||
|
|
||||||
|
var outputDirectoryPath = Path.Combine(_config.ExportPath, _parentFolderUid);
|
||||||
|
logger.LogDebug("oOutputDirectoryPath is {outputDirectoryPath}", outputDirectoryPath);
|
||||||
|
if (!Directory.Exists(outputDirectoryPath))
|
||||||
|
{
|
||||||
|
logger.LogDebug("Directory not existing. Creating ... ");
|
||||||
|
Directory.CreateDirectory(outputDirectoryPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
var outputFilePath = Path.Combine(outputDirectoryPath, $"{envelope.Uuid}.pdf");
|
||||||
|
logger.LogDebug("Writing finalized Pdf to disk..");
|
||||||
|
logger.LogInformation("Output path is [{outputFilePath}]", outputFilePath);
|
||||||
|
|
||||||
foreach (var id in envelopeIds)
|
|
||||||
{
|
|
||||||
logger.LogInformation("Finalizing Envelope [{id}] ({current}/{total})", id, current, total);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var envelope = await envRepo.Where(e => e.Id == id).SingleOrDefaultAsync(cancel);
|
File.WriteAllBytes(outputFilePath, mergedDocument);
|
||||||
if (envelope is null)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Envelope could not be loaded for Id [{id}]!", id);
|
|
||||||
throw new ArgumentNullException(nameof(EnvelopeData));
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.LogDebug("Loading Envelope Data..");
|
|
||||||
var envelopeData = GetEnvelopeData(id);
|
|
||||||
|
|
||||||
if (envelopeData is null)
|
|
||||||
{
|
|
||||||
logger.LogWarning("EnvelopeData could not be loaded for Id [{id}]!", id);
|
|
||||||
throw new ArgumentNullException(nameof(EnvelopeData));
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.LogDebug("Burning Annotations to pdf ...");
|
|
||||||
var burnedDocument = BurnAnnotationsToPdf(envelopeData);
|
|
||||||
if (burnedDocument is null)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Document could not be finalized!");
|
|
||||||
throw new ApplicationException("Document could not be finalized");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (actionService?.CreateReport(envelope) == false)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Document Report could not be created!");
|
|
||||||
throw new ApplicationException("Document Report could not be created");
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.LogDebug("Creating report..");
|
|
||||||
var report = reportCreator!.CreateReport(envelope);
|
|
||||||
logger.LogDebug("Report created!");
|
|
||||||
|
|
||||||
logger.LogDebug("Merging documents ...");
|
|
||||||
var mergedDocument = pdfMerger!.MergeDocuments(burnedDocument, report);
|
|
||||||
logger.LogDebug("Documents merged!");
|
|
||||||
|
|
||||||
var outputDirectoryPath = Path.Combine(_config.ExportPath, _parentFolderUid);
|
|
||||||
logger.LogDebug("oOutputDirectoryPath is {outputDirectoryPath}", outputDirectoryPath);
|
|
||||||
if (!Directory.Exists(outputDirectoryPath))
|
|
||||||
{
|
|
||||||
logger.LogDebug("Directory not existing. Creating ... ");
|
|
||||||
Directory.CreateDirectory(outputDirectoryPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
var outputFilePath = Path.Combine(outputDirectoryPath, $"{envelope.Uuid}.pdf");
|
|
||||||
logger.LogDebug("Writing finalized Pdf to disk..");
|
|
||||||
logger.LogInformation("Output path is [{outputFilePath}]", outputFilePath);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.WriteAllBytes(outputFilePath, mergedDocument);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Could not export final document to disk!");
|
|
||||||
throw new ExportDocumentException("Could not export final document to disk!", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.LogDebug("Writing EB-bytes to database...");
|
|
||||||
UpdateFileDb(outputFilePath, envelope.Id);
|
|
||||||
|
|
||||||
if (!SendFinalEmails(envelope))
|
|
||||||
{
|
|
||||||
throw new ApplicationException("Final emails could not be sent!");
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.LogInformation("Report-mails successfully sent!");
|
|
||||||
|
|
||||||
logger.LogDebug("Setting envelope status..");
|
|
||||||
if (actionService?.FinalizeEnvelope(envelope) == false)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Envelope could not be finalized!");
|
|
||||||
throw new ApplicationException("Envelope could not be finalized");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
logger.LogError(ex);
|
logger.LogWarning("Could not export final document to disk!");
|
||||||
logger.LogWarning(ex, "Unhandled exception while working envelope [{id}]", id);
|
throw new ExportDocumentException("Could not export final document to disk!", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
current += 1;
|
logger.LogDebug("Writing EB-bytes to database...");
|
||||||
logger.LogInformation("Envelope [{id}] finalized!", id);
|
UpdateFileDb(outputFilePath, envelope.Id);
|
||||||
|
|
||||||
|
if (!SendFinalEmails(envelope))
|
||||||
|
{
|
||||||
|
throw new ApplicationException("Final emails could not be sent!");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.LogInformation("Report-mails successfully sent!");
|
||||||
|
|
||||||
|
logger.LogDebug("Setting envelope status..");
|
||||||
|
if (actionService?.FinalizeEnvelope(envelope) == false)
|
||||||
|
{
|
||||||
|
logger.LogWarning("Envelope could not be finalized!");
|
||||||
|
throw new ApplicationException("Envelope could not be finalized");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.LogError(ex);
|
||||||
|
logger.LogWarning(ex, "Unhandled exception while working envelope [{id}]", envelope.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.LogDebug("Completed job {jobId} successfully!", jobId);
|
current += 1;
|
||||||
}
|
logger.LogInformation("Envelope [{id}] finalized!", envelope.Id);
|
||||||
catch (MergeDocumentException ex)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Certificate Document job failed at step: Merging documents!");
|
|
||||||
logger.LogError(ex);
|
|
||||||
}
|
|
||||||
catch (ExportDocumentException ex)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Certificate Document job failed at step: Exporting document!");
|
|
||||||
logger.LogError(ex);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.LogWarning("Certificate Document job failed!");
|
|
||||||
logger.LogError(ex);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
logger.LogDebug("Job execution for [{jobId}] ended", jobId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.LogDebug("Completed job {jobId} successfully!", jobId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateFileDb(string filePath, long envelopeId)
|
private void UpdateFileDb(string filePath, long envelopeId)
|
||||||
|
|||||||
Reference in New Issue
Block a user