提供报表导出
This commit is contained in:
parent
702781151e
commit
e6aed9d06a
@ -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<ReportExportService> 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<Yarn> 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<string> 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());
|
||||
|
||||
// 检查文件夹是否存在
|
||||
|
@ -20,4 +20,10 @@
|
||||
<ProjectReference Include="..\Seyounth.Core\Seyounth.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="exportTemp.xlsx">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
BIN
Seyounth.Hyosung.Data/exportTemp.xlsx
Normal file
BIN
Seyounth.Hyosung.Data/exportTemp.xlsx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user