|
|
|
|
@ -249,6 +249,52 @@ namespace CncRepository.Impl.Dashboard
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>NC程序产量排行</summary>
|
|
|
|
|
public List<ProgramRankItem> GetProgramRank(DateTime startDate, DateTime endDate, int top, string sortOrder = "desc")
|
|
|
|
|
{
|
|
|
|
|
var orderBy = string.Equals(sortOrder, "asc", StringComparison.OrdinalIgnoreCase) ? "ASC" : "DESC";
|
|
|
|
|
using (var conn = CreateConnection())
|
|
|
|
|
{
|
|
|
|
|
var sql = $@"
|
|
|
|
|
SELECT seg.program_name AS ProgramName,
|
|
|
|
|
SUM(CASE WHEN seg.is_settled=1 THEN seg.quantity
|
|
|
|
|
ELSE COALESCE(seg.end_part_count, seg.start_part_count) - seg.start_part_count END) AS TotalQuantity,
|
|
|
|
|
COUNT(DISTINCT seg.machine_id) AS MachineCount
|
|
|
|
|
FROM cnc_production_segment seg
|
|
|
|
|
WHERE seg.production_date BETWEEN @StartDate AND @EndDate
|
|
|
|
|
GROUP BY seg.program_name
|
|
|
|
|
ORDER BY TotalQuantity {orderBy}
|
|
|
|
|
LIMIT @Top";
|
|
|
|
|
var rows = conn.Query<ProgramRankItem>(sql, new { StartDate = startDate, EndDate = endDate, Top = top }).ToList();
|
|
|
|
|
for (int i = 0; i < rows.Count; i++) rows[i].Rank = i + 1;
|
|
|
|
|
return rows;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>NC程序产量分布</summary>
|
|
|
|
|
public List<ProgramDistributionItem> GetProgramDistribution(DateTime startDate, DateTime endDate, int top = 10)
|
|
|
|
|
{
|
|
|
|
|
using (var conn = CreateConnection())
|
|
|
|
|
{
|
|
|
|
|
var sql = @"
|
|
|
|
|
SELECT seg.program_name AS ProgramName,
|
|
|
|
|
SUM(CASE WHEN seg.is_settled=1 THEN seg.quantity
|
|
|
|
|
ELSE COALESCE(seg.end_part_count, seg.start_part_count) - seg.start_part_count END) AS TotalQuantity
|
|
|
|
|
FROM cnc_production_segment seg
|
|
|
|
|
WHERE seg.production_date BETWEEN @StartDate AND @EndDate
|
|
|
|
|
GROUP BY seg.program_name
|
|
|
|
|
ORDER BY TotalQuantity DESC
|
|
|
|
|
LIMIT @Top";
|
|
|
|
|
var rows = conn.Query<ProgramDistributionItem>(sql, new { StartDate = startDate, EndDate = endDate, Top = top }).ToList();
|
|
|
|
|
var total = rows.Sum(r => r.TotalQuantity);
|
|
|
|
|
if (total > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (var r in rows) r.Percentage = Math.Round((decimal)r.TotalQuantity / total * 100, 2);
|
|
|
|
|
}
|
|
|
|
|
return rows;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>最近告警</summary>
|
|
|
|
|
public List<AlertListItem> GetRecentAlerts(int count)
|
|
|
|
|
{
|
|
|
|
|
|