diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/FQC/QCStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/FQC/QCStatisticsController.cs
index c28e2425..e8bcdb2e 100644
--- a/ZR.Admin.WebApi/Controllers/mes/qc/FQC/QCStatisticsController.cs
+++ b/ZR.Admin.WebApi/Controllers/mes/qc/FQC/QCStatisticsController.cs
@@ -5,6 +5,10 @@ using ZR.Service.mes.qc.IService;
using Microsoft.AspNetCore.Mvc;
using ZR.Model.MES.qc;
using System.Collections.Generic;
+using ZR.Model.MES.qc.DTO;
+using NPOI.HSSF.UserModel;
+using NPOI.XSSF.UserModel;
+using NPOI.SS.UserModel;
namespace ZR.Admin.WebApi.Controllers.mes.qc.FQC
{
@@ -25,7 +29,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.FQC
///
///
[HttpGet("queryQualityStatisticsTable_first")]
- public IActionResult GetQualityStatisticsTable_first(DateTime starttime,DateTime endTime,string workorderid,string partnumber,string product_description,string team,int pageNum,int pageSize)
+ public IActionResult GetQualityStatisticsTable_first(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize)
{
(List, int) list = qcStatistics.GetQualityStatisticsTable_first(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize);
@@ -69,11 +73,122 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.FQC
[HttpGet("delete_statisticsTable")]
- public IActionResult DeleteStatisticsTable(string workorderid)
+ public IActionResult DeleteStatisticsTable(string workorderid)
{
- int deletenum= qcStatistics.DeleteStatisticsTable(workorderid);
+ int deletenum = qcStatistics.DeleteStatisticsTable(workorderid);
return SUCCESS(deletenum);
}
+
+
+ ///
+ /// 导出对应报表
+ ///
+ /// 开始时间
+ /// 结束时间
+ /// 工单号
+ /// 零件号
+ /// 产品描述
+ /// 班组
+ /// 分页开始
+ /// 分页结束
+ /// 报表类别 1-首检 2-抛光 3-包装 4-全部
+ /// 是否展示细节,展示细节则根据三行,两行合并规则
+ ///
+ [HttpGet("downloadStatisticsTableExcel")]
+ public IActionResult DownloadStatisticsTableExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int type, bool isShowDetail)
+ {
+ try
+ {
+ string fileName = @"导出统计报表-" + DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + Guid.NewGuid() + ".xlsx";
+ List excelDataList = qcStatistics.DownloadStatisticsTableExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, type);
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ var sheet = workbook.CreateSheet();
+ // 标题列
+ var row0 = sheet.CreateRow(0);
+ ICellStyle style = workbook.CreateCellStyle();
+ style.Alignment = HorizontalAlignment.Center;
+ style.VerticalAlignment = VerticalAlignment.Center;
+ string[] titleDict = { "工单号", "零件号", "颜色", "描述", "生产投入数", "班次", "合格数", "合格率", "抛光总数", "打磨总数", "报废总数", "开始时间", "结束时间"};
+ string[] titleDetailDict = { "备注", "缩孔", "针孔" };
+ if(isShowDetail)
+ {
+ titleDict.Concat(titleDetailDict);
+ }
+ for (int i = 0; i < titleDict.Length; i++)
+ {
+ var cell = row0.CreateCell(i);
+ cell.SetCellValue(titleDict[i]);
+ cell.CellStyle = style;
+ }
+ string _lastWorkOrderId = "";
+ int rowIndex = 1;
+ for (int i = 0;i< excelDataList.Count;i++) {
+ var item = excelDataList[i];
+ if (_lastWorkOrderId == item.WorkorderId)
+ {
+ continue;
+ }
+ var row = sheet.CreateRow(rowIndex);
+ if (!isShowDetail)
+ {
+
+ var cell1 = row.CreateCell(0);
+ cell1.SetCellValue(item.WorkorderId);
+ cell1.CellStyle = style;
+ var cell2 = row.CreateCell(1);
+ cell2.SetCellValue(item.FinishedPartNumber);
+ cell2.CellStyle = style;
+ var cell3 = row.CreateCell(2);
+ cell3.SetCellValue(item.Color);
+ cell3.CellStyle = style;
+ var cell4 = row.CreateCell(3);
+ cell4.SetCellValue(item.ProductDescription);
+ cell4.CellStyle = style;
+ var cell5 = row.CreateCell(4);
+ cell5.SetCellValue(item.RequireNumber.ToString());
+ cell5.CellStyle = style;
+ var cell6 = row.CreateCell(5);
+ cell6.SetCellValue(item.Team);
+ cell6.CellStyle = style;
+ var cell7 = row.CreateCell(6);
+ cell7.SetCellValue(item.RequireNumber.ToString());
+ cell7.CellStyle = style;
+ var cell8 = row.CreateCell(7);
+ cell8.SetCellValue(item.QualifiedRate.ToString());
+ cell8.CellStyle = style;
+ var cell9 = row.CreateCell(8);
+ cell9.SetCellValue(item.PaoguangTotal.ToString());
+ cell9.CellStyle = style;
+ var cell10 = row.CreateCell(9);
+ cell10.SetCellValue(item.DamoTotal.ToString());
+ cell10.CellStyle = style;
+ var cell11 = row.CreateCell(10);
+ cell11.SetCellValue(item.BaofeiTotal.ToString());
+ cell11.CellStyle = style;
+ var cell12 = row.CreateCell(11);
+ cell12.SetCellValue(item.StartTime.ToString());
+ cell12.CellStyle = style;
+ var cell13 = row.CreateCell(12);
+ cell13.SetCellValue(item.EndTime.ToString());
+ cell13.CellStyle = style;
+ }
+ _lastWorkOrderId = item.WorkorderId;
+ rowIndex++;
+ }
+ IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment));
+ string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "QualityStatisticsExport", fileName);
+ using (FileStream fs = new(fullPath, FileMode.Create, FileAccess.Write))
+ {
+ workbook.Write(fs);
+ }
+ workbook.Dispose();
+ return ExportExcel(fullPath, fileName);
+ }
+ catch (Exception e)
+ {
+ return ToResponse(new ApiResult(500, e.Message, "Excel导出异常"));
+ }
+ }
}
}
diff --git a/ZR.Admin.WebApi/wwwroot/.gitignore b/ZR.Admin.WebApi/wwwroot/.gitignore
new file mode 100644
index 00000000..25710b89
--- /dev/null
+++ b/ZR.Admin.WebApi/wwwroot/.gitignore
@@ -0,0 +1 @@
+/QualityStatisticsExport
diff --git a/ZR.Service/mes/qc/IService/IQCStatisticsService.cs b/ZR.Service/mes/qc/IService/IQCStatisticsService.cs
index 70dc7d7f..9e4dde6d 100644
--- a/ZR.Service/mes/qc/IService/IQCStatisticsService.cs
+++ b/ZR.Service/mes/qc/IService/IQCStatisticsService.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZR.Model.MES.qc;
+using ZR.Model.MES.qc.DTO;
namespace ZR.Service.mes.qc.IService
{
@@ -24,5 +25,20 @@ namespace ZR.Service.mes.qc.IService
#endregion
public int DeleteStatisticsTable(string workorderid);
+
+ ///
+ /// 导出指定的质检报告数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ List DownloadStatisticsTableExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int type);
}
}
diff --git a/ZR.Service/mes/qc/QCStatisticsService.cs b/ZR.Service/mes/qc/QCStatisticsService.cs
index ffafb8c7..9b2f4ed1 100644
--- a/ZR.Service/mes/qc/QCStatisticsService.cs
+++ b/ZR.Service/mes/qc/QCStatisticsService.cs
@@ -1,13 +1,18 @@
using Infrastructure.Attribute;
+using Mapster;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.IdentityModel.Tokens;
using SqlSugar;
using System;
using System.Collections.Generic;
+using System.Drawing;
using System.Linq;
+using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using ZR.Model.mes.md;
using ZR.Model.MES.qc;
+using ZR.Model.MES.qc.DTO;
using ZR.Model.MES.qu;
using ZR.Service.mes.qc.IService;
@@ -191,5 +196,71 @@ namespace ZR.Service.mes.qc
return num;
}
+ List IQCStatisticsService.DownloadStatisticsTableExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int type)
+ {
+ try
+ {
+ pageNum = 1;
+ pageSize = 5000;
+ return type switch
+ {
+ // 首检
+ 1 => DoFirstExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize),
+ // 抛光
+ 2 => DoSecondExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize),
+ // 包装
+ 3 => DoThirdExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize),
+ // 总表
+ 4 => DoTotalExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize),
+ _ => throw new Exception("获取的报表类型错误!" + type),
+ };
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+
+ }
+ public List DoFirstExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize)
+ {
+
+ List list = GetQualityStatisticsTable_first(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).Item1;
+ List newList = list.Select(item => new QcQualityStatisticsFirstDto()
+ {
+ WorkorderId = item.WorkorderId,
+ FinishedPartNumber = item.FinishedPartNumber,
+ ProductDescription = product_description,
+ Color = item.Color,
+ RequireNumber = item.RequireNumber,
+ Team = item.Team,
+ QualifiedNumber = item.QualifiedNumber,
+ QualifiedRate = item.QualifiedRate ?? 0,
+ PaoguangTotal = item.PaoguangTotal ?? 0,
+ DamoTotal = item.DamoTotal ?? 0,
+ BaofeiTotal = item.BaofeiTotal ?? 0,
+ StartTime = item.StartTime,
+ EndTime = item.EndTime,
+ }).ToList();
+ return newList;
+ }
+ public List DoSecondExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize)
+ {
+ List list = GetQualityStatisticsTable_again(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).Item1;
+ List newList = list.Select(item => new QcQualityStatisticsFirstDto()).ToList();
+ return newList;
+ }
+
+ public List DoThirdExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize)
+ {
+ List list = GetQualityStatisticsTable_final(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).Item1;
+ List newList = list.Select(item => new QcQualityStatisticsFirstDto()).ToList();
+ return newList;
+ }
+ public List DoTotalExcel(DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize)
+ {
+ List list = GetQualityStatisticsTable_total(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).Item1;
+ List newList = list.Select(item => new QcQualityStatisticsFirstDto()).ToList();
+ return newList;
+ }
}
}