fix:质量检查

This commit is contained in:
geh
2025-03-28 14:41:48 +08:00
parent dbf8b972bc
commit 19f17b9edb
6 changed files with 278 additions and 44 deletions
@@ -488,58 +488,210 @@ namespace FineUIPro.Web.CQMS.Check
NPOI.SS.UserModel.IRow row = sheet.GetRow(0);
NPOI.SS.UserModel.ICell cell;
int i = 2;
foreach (var item in lists)
// 将 lists 转换为 DataTable
DataTable tb = LINQToDataTable(lists);
// 创建一个列表来存储CheckStatisc对象
var checkStatiscList = new List<CheckStatisc>();
if (this.rbType.SelectedValue == "0")
{
// 使用LINQ对DataTable进行分组统计----年份
var query = from row1 in tb.AsEnumerable()
let checkDate = row1.Field<DateTime>("CheckDate")
let state = row1.Field<int>("OK")
group row1 by new { checkDate.Year, state }
into g
select new
{
Year = g.Key.Year,
State = g.Key.state,
Count = g.Count()
};
// 计算每个年份的总记录数
var yearlyTotals = query.GroupBy(q => q.Year).ToDictionary(g => g.Key, g => g.Sum(q => q.Count));
// 创建一个包含年度总数和不同State计数的结果集
var result = query.GroupBy(q => q.Year).Select(g => new
{
Year = g.Key,
YearlyTotal = yearlyTotals[g.Key],
CompleteNumber = g.Where(q => q.State == 1).Sum(q => q.Count),
NCompleteNumber = g.Where(q => q.State == 0).Sum(q => q.Count)
}).ToList();
// 遍历结果集并创建CheckStatisc对象
foreach (var item in result)
{
var checkStatisc = new CheckStatisc
{
TypeName = item.Year.ToString(),
AllNumber = item.YearlyTotal,
CompleteNumber = item.CompleteNumber,
NCompleteNumber = item.NCompleteNumber,
Probability = ((double)item.CompleteNumber / item.YearlyTotal * 100).ToString("F2") + "%"
};
checkStatiscList.Add(checkStatisc);
}
}
else if (this.rbType.SelectedValue == "1")
{
// 使用LINQ对DataTable进行分组统计----年月
var queryByMonth = from row1 in tb.AsEnumerable()
let checkDate = row1.Field<DateTime>("CheckDate")
let state = row1.Field<int>("OK")
group row1 by new { checkDate.Year, checkDate.Month, state }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
State = g.Key.state,
Count = g.Count()
};
// 计算每个月的总记录数
var monthlyTotals = queryByMonth.GroupBy(q => new { q.Year, q.Month }).ToDictionary(
g => new { g.Key.Year, g.Key.Month },
g => g.Sum(q => q.Count));
// 创建一个包含月度总数和不同State计数的结果集
var resultByMonth = queryByMonth.GroupBy(q => new { q.Year, q.Month }).Select(g => new
{
Year = g.Key.Year,
Month = g.Key.Month,
MonthlyTotal = monthlyTotals[g.Key],
CompleteNumber = g.Where(q => q.State == 1).Sum(q => q.Count),
NCompleteNumber = g.Where(q => q.State == 0).Sum(q => q.Count)
}).ToList();
// 遍历结果集并创建CheckStatisc对象
foreach (var item in resultByMonth)
{
var checkStatisc = new CheckStatisc
{
TypeName = $"{item.Year}年{item.Month:D2}月",
AllNumber = item.MonthlyTotal,
CompleteNumber = item.CompleteNumber,
NCompleteNumber = item.NCompleteNumber,
Probability = ((double)item.CompleteNumber / item.MonthlyTotal * 100).ToString("F2") + "%"
};
checkStatiscList.Add(checkStatisc);
}
}
else if (this.rbType.SelectedValue == "2")
{
// 使用LINQ对DataTable进行分组统计----专业名称
var queryByProfessionalName = from row1 in tb.AsEnumerable()
let professionalName = row1.Field<string>("ProfessionalName")
let state = row1.Field<int>("OK")
group row1 by professionalName
into g
select new
{
ProfessionalName = g.Key,
TotalCount = g.Count(),
CompleteCount = g.Count(q => q.Field<int>("OK") == 1),
IncompleteCount = g.Count(q => q.Field<int>("OK") != 0)
};
// 遍历结果集并创建CheckStatisc对象
foreach (var item in queryByProfessionalName)
{
var checkStatisc = new CheckStatisc
{
TypeName = item.ProfessionalName,
AllNumber = item.TotalCount,
CompleteNumber = item.CompleteCount,
NCompleteNumber = item.IncompleteCount,
Probability = ((double)item.CompleteCount / item.TotalCount * 100).ToString("F2") + "%"
};
checkStatiscList.Add(checkStatisc);
}
}
checkStatiscList = checkStatiscList.OrderBy(cs => cs.TypeName).ToList();
foreach (var item in checkStatiscList)
{
// 第二步:创建新数据行
row = sheet.CreateRow(i);
// 添加数据
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(BLL.UnitService.GetUnitNameByUnitId(item.UnitId));//施工单位
cell.SetCellValue(item.TypeName);//类型名称
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.CheckDate.HasValue ? string.Format("{0:yyyy-MM-dd}", item.CheckDate) : "");
cell.SetCellValue(item.AllNumber);//总数
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.CheckTypeStr);
cell.SetCellValue(item.CompleteNumber);//合格数
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.UnitWorkName);
cell.SetCellValue(item.NCompleteNumber);//不合格数
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.ProfessionalName);
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.QuestionTypeStr);
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.CheckSite);
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.QuestionDef);
cell = row.CreateCell(8);
cell.CellStyle = cellStyle;
cell.SetCellValue(item.HandleWay);
cell = row.CreateCell(9);
cell.CellStyle = cellStyle;
string s = string.Empty;
if (!string.IsNullOrEmpty(item.JointCheckDetailId))
{
s = ConvertState(item.JointCheckDetailId);
}
cell.SetCellValue(s);
cell.SetCellValue(item.Probability);//合格率
i++;
}
// foreach (var item in lists)
// {
// // 第二步:创建新数据行
// row = sheet.CreateRow(i);
// // 添加数据
// cell = row.CreateCell(0);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(BLL.UnitService.GetUnitNameByUnitId(item.UnitId));//施工单位
//
// cell = row.CreateCell(1);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.CheckDate.HasValue ? string.Format("{0:yyyy-MM-dd}", item.CheckDate) : "");
//
// cell = row.CreateCell(2);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.CheckTypeStr);
//
// cell = row.CreateCell(3);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.UnitWorkName);
//
// cell = row.CreateCell(4);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.ProfessionalName);
//
// cell = row.CreateCell(5);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.QuestionTypeStr);
//
// cell = row.CreateCell(6);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.CheckSite);
//
// cell = row.CreateCell(7);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.QuestionDef);
//
// cell = row.CreateCell(8);
// cell.CellStyle = cellStyle;
// cell.SetCellValue(item.HandleWay);
//
// cell = row.CreateCell(9);
// cell.CellStyle = cellStyle;
// string s = string.Empty;
// if (!string.IsNullOrEmpty(item.JointCheckDetailId))
// {
// s = ConvertState(item.JointCheckDetailId);
// }
// cell.SetCellValue(s);
//
// i++;
// }
// 第三步:写入文件流
using (FileStream stream = new FileStream(newUrl, FileMode.Create, FileAccess.Write))
{