diff --git a/Seyounth.Hyosung.Data/Services/ReportExportService.cs b/Seyounth.Hyosung.Data/Services/ReportExportService.cs index 78ba304..5f7d88c 100644 --- a/Seyounth.Hyosung.Data/Services/ReportExportService.cs +++ b/Seyounth.Hyosung.Data/Services/ReportExportService.cs @@ -1,6 +1,8 @@ using System.Data; +using System.Globalization; using ClosedXML.Excel; using Microsoft.Extensions.Logging; +using Seyounth.Hyosung.Data.Models; namespace Seyounth.Hyosung.Data.Services; @@ -11,46 +13,67 @@ public class ReportExportService( ILogger logger) : IReportExportService { + const string TempPath = "./temp.xlsx"; + public async Task ExportAsync(string trayCode) { - var tray = await trayService.GetByCode(trayCode); - var variety = await varietyService.GetById(tray.VarietyId); - var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id); - DataTable dt = new DataTable(); - dt.Columns.Add("托盘号", typeof(string)); - dt.Columns.Add("品类编号", typeof(string)); - dt.Columns.Add("品类", typeof(string)); - dt.Columns.Add("Lot", typeof(string)); - dt.Columns.Add("纱二维码", typeof(string)); - dt.Columns.Add("DEN_FILA", typeof(string)); - dt.Columns.Add("DTEX_FILA", typeof(string)); - dt.Columns.Add("码垛时间", typeof(string)); - dt.Columns.Add("控制号", typeof(string)); - foreach (var yarn in yarns) + try { - dt.Rows.Add( - tray.TrayCode, - variety.Id.ToString(), - variety.Code, - yarn.Lot.ToString(), - yarn.QrCode.Replace("\r\n", " "), - yarn.DenFila, - yarn.DtexFila, - yarn.StackTime?.ToString("yyyy-MM-dd HH:mm:ss"), - tray.ControlNo.ToString() - ); + var tray = await trayService.GetByCode(trayCode); + var variety = await varietyService.GetById(tray.VarietyId); + var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id); + await Create(tray, variety, yarns); + await trayService.ExportedAsync(tray.TrayCode); + } + catch (Exception e) + { + logger.LogError(e, $"export report [{trayCode}] error"); + } + } + + private async Task Create(Tray tray, Variety variety, List yarns) + { + using var workbook = new XLWorkbook(TempPath); + var worksheet = workbook.Worksheet(1); // 假设使用第一个工作表 + + worksheet.Cell("D2").Value = tray.Barcode; // 填充 TrayCode 到第一列 + worksheet.Cell("D3").Value = variety.Code; // 填充 VarietyName 到第二列 + worksheet.Cell("D4").Value = tray.DenFila; + worksheet.Cell("I3").Value = tray.FinishTime?.ToString("yyyy-MM-dd HH:mm:ss"); + worksheet.Cell("I4").Value = tray.DtexFila; + worksheet.Cell("L3").Value = tray.Grade; + worksheet.Cell("M3").Value = variety.StackingLayers; + worksheet.Cell("N3").Value = tray.Unit?.ToString(); + worksheet.Cell("O3").Value = yarns.Count.ToString(); + worksheet.Cell("P3").Value = tray.ControlNo?.ToString(); + worksheet.Cell("Q3").Value = tray.GrossWeight.ToString(CultureInfo.InvariantCulture); + worksheet.Cell("R3").Value = tray.NetWeight.ToString(CultureInfo.InvariantCulture); + + int row = 8; // 假设数据从第二行开始填充 + for (int i = 1; i <= yarns.Count; i++) + { + worksheet.Cell(row, "B").Value = i; // 填充 YarnId 到第一列 + worksheet.Cell(row, "C").Value = yarns[i - 1].Lot; // 填充 YarnName 到第二列 + worksheet.Cell(row, "D").Value = variety.Code; // 填充 YarnName 到第二列 + worksheet.Cell(row, "F").Value = yarns[i - 1].WorkShift; + worksheet.Cell(row, "H").Value = yarns[i - 1].QrCode; + worksheet.Cell(row, "p").Value = yarns[i - 1].StackTime?.ToString("yyyy-MM-dd HH:mm:ss"); + row++; } + // 自动调整列宽 + // worksheet.Columns().AdjustToContents(); + // 获取数据区域 + var dataRange = worksheet.Range(8, 2, row, 18); + // 设置外边框样式 + dataRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thick; + dataRange.Style.Border.OutsideBorderColor = XLColor.Black; var path = await GetDirectoryAsync(tray.FinishTime); var fileName = $"{variety.Id}-{variety.Code}-{tray.TrayCode}-{tray.FinishTime?.ToString("yyyyMMddHHmmss")}.xlsx"; var filePath = Path.Combine(path, fileName); - using var workbook = new XLWorkbook(); - var worksheet = workbook.Worksheets.Add(dt, "纱信息"); - worksheet.Columns().AdjustToContents(); + // 保存工作簿到新文件 workbook.SaveAs(filePath); - await trayService.ExportedAsync(tray.TrayCode); - logger.LogInformation($"export report [{tray.TrayCode}]:{filePath}"); } public async Task ExportNoExportAsync() @@ -71,10 +94,11 @@ public class ReportExportService( public async Task GetDirectoryAsync(DateTime? date = null) { + var root = "D:\\码垛报告"; if (date is null) date = DateTime.Now; // 构建文件夹路径,格式为 年/月/日 - string directoryPath = Path.Combine(date.Value.Year.ToString(), date.Value.Month.ToString(), + string directoryPath = Path.Combine(root, date.Value.Year.ToString(), date.Value.Month.ToString(), date.Value.Day.ToString()); // 检查文件夹是否存在 diff --git a/Seyounth.Hyosung.Data/Seyounth.Hyosung.Data.csproj b/Seyounth.Hyosung.Data/Seyounth.Hyosung.Data.csproj index a4c365b..028439a 100644 --- a/Seyounth.Hyosung.Data/Seyounth.Hyosung.Data.csproj +++ b/Seyounth.Hyosung.Data/Seyounth.Hyosung.Data.csproj @@ -20,4 +20,10 @@ + + + PreserveNewest + + + diff --git a/Seyounth.Hyosung.Data/exportTemp.xlsx b/Seyounth.Hyosung.Data/exportTemp.xlsx new file mode 100644 index 0000000..862f08b Binary files /dev/null and b/Seyounth.Hyosung.Data/exportTemp.xlsx differ