Creacion del reporte de archivos electronicos, comprimir los archivos oficiales de distintas referencias en un mismo zip

feature/Creacion_Reporte_Archivo_Electronico_20240417
Felix Morales 5 months ago
parent 8170a2a56b
commit ce5f7a2971
  1. 1
      Contracts/Utils/IFileManagerRepository.cs
  2. 11
      Controllers/FileManagerController.cs
  3. 64
      Controllers/Utils/ArchivoElectronicoController.cs
  4. 11
      Repository/Utils/FileManagerRepository.cs

@ -12,5 +12,6 @@ namespace CORRESPONSALBackend.Contracts.Utils
public Task<FileManager> UpdateFileNameById(long id, string newFileName); public Task<FileManager> UpdateFileNameById(long id, string newFileName);
public Task<IEnumerable<FileManager>> GetFilesByProcessId(int process); public Task<IEnumerable<FileManager>> GetFilesByProcessId(int process);
public Task<FileManager> UpdateFileProcessById(long fileId, int process); public Task<FileManager> UpdateFileProcessById(long fileId, int process);
public Task<IEnumerable<FileManager>> GetTraficoFiles(int idTrafico);
} }
} }

@ -430,5 +430,16 @@ namespace CORRESPONSALBackend.Controllers
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
[HttpGet("FileListByReferencia")]
public async Task<IActionResult> GeFileListByReferencia([FromQuery] string referencia){
try{
var trafico = await _traficosRepository.GetByReferencia(referencia);
var fileList = await _Repo.GetTraficoFiles(trafico.id);
return Ok(fileList);
}catch(Exception ex){
return BadRequest(ex.Message);
}
}
} }
} }

@ -1,5 +1,9 @@
using CORRESPONSALBackend.Contracts.ArchivoElectronico; using CORRESPONSALBackend.Contracts.ArchivoElectronico;
using CORRESPONSALBackend.Contracts.Corresponsalias;
using CORRESPONSALBackend.Contracts.Utils;
using CORRESPONSALBackend.DTO.ArchivoElectronico; using CORRESPONSALBackend.DTO.ArchivoElectronico;
using CORRESPONSALBackend.Models.Utils;
using CORRESPONSALBackend.Repository.Utils;
using GEMCO.Backend.Models.Reportes; using GEMCO.Backend.Models.Reportes;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -9,8 +13,20 @@ namespace CORRESPONSALBackend.Controllers.Utils{
public class ArchivoElectronicoController : ControllerBase { public class ArchivoElectronicoController : ControllerBase {
private readonly IArchivoElectronicoRepository _AERepo; private readonly IArchivoElectronicoRepository _AERepo;
public ArchivoElectronicoController(IArchivoElectronicoRepository AERepo){ private readonly IConfiguration _config;
private readonly IFilePaths4ProcessRepository _RepoRelativePath;
private readonly string RootPathCorresponsales;
private readonly ICorresponsaliasTraficosRepository _traficosRepository;
private readonly IFileManagerRepository _fileManagerRepo;
public ArchivoElectronicoController(IArchivoElectronicoRepository AERepo, IConfiguration config,
ICorresponsaliasTraficosRepository traficosRepository, IFilePaths4ProcessRepository RepoRelativePath,
IFileManagerRepository fileManagerRepo){
_AERepo = AERepo; _AERepo = AERepo;
_traficosRepository = traficosRepository;
_config = config;
_RepoRelativePath = RepoRelativePath;
_fileManagerRepo = fileManagerRepo;
RootPathCorresponsales = _config.GetValue<string>("AllFiles");
} }
[HttpGet] [HttpGet]
@ -25,10 +41,50 @@ namespace CORRESPONSALBackend.Controllers.Utils{
[Route("DownloadZippedArchivosOficiales")] [Route("DownloadZippedArchivosOficiales")]
public async Task<IActionResult> DownloadZippedArchivosOficiales([FromBody] DTOAEPeriodoSeleccion data){ public async Task<IActionResult> DownloadZippedArchivosOficiales([FromBody] DTOAEPeriodoSeleccion data){
try{ try{
if(data.Referencias.Count > 0){ //Se obtiene la ruta donde se alojará temporalmente el zip
FilePaths4Process tempFilesRelativePath = await _RepoRelativePath.getPaths4ProcessById(45); // Path: Corresponsales\Zips\Facturacion\Entregas\
var tempFilesPath = RootPathCorresponsales + tempFilesRelativePath.Path;// Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos
string tempFolderName = "ReporteArchivosElectronicos";//Nombre del folder Temporal
string tempFolderPath= tempFilesPath + $"{tempFolderName}\\";//ruta del folder temporal Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos\ReporteArchivosElectronicos
string zipFileName = $"{tempFolderName}.zip";//Nombre del zip final
var zipFilePath = tempFilesPath + zipFileName;//Ruta del zip final Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos\ReporteArchivosElectronicos.zip
if(System.IO.File.Exists(zipFilePath)){//Si ya existe un zip de una descarga anterior lo borra
System.IO.File.Delete(zipFilePath);
}
if(System.IO.Directory.Exists(tempFolderPath)){//Si ya existe la carpeta temporal de una descarga anterior la borra
System.IO.Directory.Delete(tempFolderPath, true);
}
System.IO.Directory.CreateDirectory(tempFolderPath);//Se crea el folder temporal donde se pondran los archivos oficiales
foreach(var referencia in data.Referencias){
var trafico = await _traficosRepository.GetByReferencia(referencia);
string folderAE = tempFolderPath + $"{referencia}\\";//Se obtiene el nombre de la subcarpeta del AE de cada referencia
if(System.IO.Directory.Exists(folderAE)){//Si existe la carpeta se borra
System.IO.Directory.Delete(folderAE);
}
System.IO.Directory.CreateDirectory(folderAE);//Se crea la carpeta
//Obtener la lista de archivos de la referencia actual.
var filesLog = await _fileManagerRepo.GetTraficoFiles(trafico.id);
var filteredFilesLog = filesLog.Where(x => new List<int>(){2,10,11,12,13,14,15,19,17,18,37,38,39,41}.Contains(x.Proceso));
foreach(var fileLog in filteredFilesLog){
FilePaths4Process fileRelativePath = await _RepoRelativePath.getPaths4ProcessById(fileLog.Proceso);//Se obtiene la ruta relativa donde debe estar alojado el archivo
var filePath = RootPathCorresponsales + fileRelativePath.Path + fileLog!.NombreArchivo;//Ahora se obtiene la ruta completa del archivo.
if(System.IO.File.Exists(filePath)){
var bytes = await System.IO.File.ReadAllBytesAsync(filePath);
var originalFileStream = new MemoryStream(bytes);
using(var tempFileStream = System.IO.File.Create(folderAE + fileLog.NombreArchivo)){
await originalFileStream.CopyToAsync(tempFileStream);
}
}
}
} }
return Ok(); System.IO.Compression.ZipFile.CreateFromDirectory(tempFolderPath, zipFilePath);//Se comprime la carpeta con los archivos electronicos de las referencias
Directory.Delete(tempFolderPath, true);//Se borra el folder temporal
var zipBytes = await System.IO.File.ReadAllBytesAsync(zipFilePath);
var zipStream = new MemoryStream(zipBytes);
return File(zipStream, "application/zip", zipFileName);
}catch(Exception ex){ }catch(Exception ex){
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }

@ -122,5 +122,16 @@ namespace CORRESPONSALBackend.Repository.Utils
commandType: CommandType.StoredProcedure); commandType: CommandType.StoredProcedure);
return entrada.FirstOrDefault(); return entrada.FirstOrDefault();
} }
public async Task<IEnumerable<FileManager>> GetTraficoFiles(int idTrafico){
string query = "[Utils.FileManager.GetTraficoFiles]";
using var connection = _context.CreateConnection();
var entrada = await connection.QueryAsync<FileManager>(query, new
{
@idtrafico = idTrafico
},
commandType: CommandType.StoredProcedure);
return entrada.ToList();
}
} }
} }
Loading…
Cancel
Save