新增仪表盘API端点:NC程序产量排行TOP10和NC程序产量分布(饼图数据)

main
haoliang 1 month ago
parent 4f04fec9e0
commit a781dfabb8

@ -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)
{

@ -22,5 +22,11 @@ namespace CncRepository.Interface
object GetMachineStatusDistribution();
List<AlertListItem> GetRecentAlerts(int count);
/// <summary>NC程序产量排行TOP N</summary>
List<ProgramRankItem> GetProgramRank(DateTime startDate, DateTime endDate, int top, string sortOrder = "desc");
/// <summary>NC程序产量分布饼图数据</summary>
List<ProgramDistributionItem> GetProgramDistribution(DateTime startDate, DateTime endDate, int top = 10);
}
}

@ -69,6 +69,22 @@ namespace CncService.Impl
return _dashboardRepository.GetMachineStatusDistribution();
}
/// <inheritdoc/>
public List<ProgramRankItem> GetProgramRank(DateTime? startDate, DateTime? endDate, int top = 10, string sortOrder = "desc")
{
var s = startDate ?? DateTime.Today;
var e = endDate ?? DateTime.Today;
return _dashboardRepository.GetProgramRank(s, e, top, sortOrder);
}
/// <inheritdoc/>
public List<ProgramDistributionItem> GetProgramDistribution(DateTime? startDate, DateTime? endDate, int top = 10)
{
var s = startDate ?? DateTime.Today;
var e = endDate ?? DateTime.Today;
return _dashboardRepository.GetProgramDistribution(s, e, top);
}
/// <inheritdoc/>
public List<AlertListItem> GetRecentAlerts(int count = 5)
{

@ -24,5 +24,11 @@ namespace CncService.Interface
List<AlertListItem> GetRecentAlerts(int count = 5);
object GetCollectorStatus();
/// <summary>NC程序产量排行TOP N</summary>
List<ProgramRankItem> GetProgramRank(DateTime? startDate, DateTime? endDate, int top = 10, string sortOrder = "desc");
/// <summary>NC程序产量分布饼图数据</summary>
List<ProgramDistributionItem> GetProgramDistribution(DateTime? startDate, DateTime? endDate, int top = 10);
}
}

@ -116,6 +116,30 @@ namespace CncWebApi.Controllers
return Ok(ApiResponse<object>.Success(new { items = result }));
}
/// <summary>
/// NC程序产量排行TOP N
/// GET /api/admin/dashboard/program-rank
/// </summary>
[HttpGet]
[Route("program-rank")]
public IHttpActionResult GetProgramRank(DateTime? startDate = null, DateTime? endDate = null, int top = 10, string sortOrder = "desc")
{
var result = _dashboardService.GetProgramRank(startDate, endDate, top, sortOrder);
return Ok(ApiResponse<object>.Success(new { items = result }));
}
/// <summary>
/// NC程序产量分布饼图数据
/// GET /api/admin/dashboard/program-distribution
/// </summary>
[HttpGet]
[Route("program-distribution")]
public IHttpActionResult GetProgramDistribution(DateTime? startDate = null, DateTime? endDate = null, int top = 10)
{
var result = _dashboardService.GetProgramDistribution(startDate, endDate, top);
return Ok(ApiResponse<object>.Success(new { items = result }));
}
/// <summary>
/// 采集服务状态
/// GET /api/admin/collector/status

Loading…
Cancel
Save