仪表盘和产量报表全部改为从实时表查询:今日总产量、切削时间、车间产量、机床排行、工人排行、产量趋势均直接查cnc_production_segment;产量报表默认日期改为今天

main
haoliang 4 days ago
parent 6ac639ecb7
commit c836393d3f

@ -173,13 +173,11 @@ function resetFilters() {
loadData() loadData()
} }
// 7 //
async function init() { async function init() {
// 7 //
const end = new Date() const today = new Date().toISOString().split('T')[0]
const start = new Date() filters.dateRange = [today, today]
start.setDate(end.getDate() - 6)
filters.dateRange = [start.toISOString().split('T')[0], end.toISOString().split('T')[0]]
// //
try { try {
const [ws, mc, wr] = await Promise.all([ const [ws, mc, wr] = await Promise.all([

@ -24,7 +24,11 @@ namespace CncRepository.Impl.Dashboard
{ {
var onlineCount = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine WHERE is_online = 1"); var onlineCount = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine WHERE is_online = 1");
var totalMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine"); var totalMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine");
var todayProduction = conn.ExecuteScalar<int>(@"SELECT COALESCE(SUM(total_quantity),0) FROM cnc_daily_production WHERE production_date = CURDATE()"); // 今日总产量:直接从产量分段实时计算
var todayProduction = conn.ExecuteScalar<int>(@"
SELECT COALESCE(SUM(CASE WHEN is_settled=1 THEN quantity
ELSE COALESCE(end_part_count,start_part_count) - start_part_count END), 0)
FROM cnc_production_segment WHERE production_date = CURDATE()");
var activeAlerts = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_alert WHERE is_resolved = 0"); var activeAlerts = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_alert WHERE is_resolved = 0");
// 采集成功率:基于原始采集日志的成功/失败比率 // 采集成功率:基于原始采集日志的成功/失败比率
@ -33,7 +37,15 @@ namespace CncRepository.Impl.Dashboard
var totalCount = successCount + failCount; var totalCount = successCount + failCount;
decimal collectSuccessRate = totalCount > 0 ? Math.Round((decimal)successCount / totalCount * 100, 2) : 0m; decimal collectSuccessRate = totalCount > 0 ? Math.Round((decimal)successCount / totalCount * 100, 2) : 0m;
var todayCuttingTime = conn.ExecuteScalar<int>(@"SELECT COALESCE(SUM(total_cutting_time),0) FROM cnc_daily_production WHERE production_date = CURDATE()"); // 今日切削总时每台机床今日最新cutting_time - 今日最早cutting_time求和后转小时
var todayCuttingTime = Convert.ToInt32(conn.ExecuteScalar<decimal>(@"
SELECT COALESCE(ROUND(SUM(today_delta)/3600, 1), 0)
FROM (
SELECT MAX(cr.cutting_time) - MIN(cr.cutting_time) AS today_delta
FROM cnc_collect_record cr
WHERE DATE(cr.collect_time) = CURDATE()
GROUP BY cr.machine_id
) t"));
var runningMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine WHERE last_device_status = 'running'"); var runningMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine WHERE last_device_status = 'running'");
var dataMissingMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine_daily_status WHERE production_date = CURDATE() AND data_status = 'data_missing'"); var dataMissingMachines = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM cnc_machine_daily_status WHERE production_date = CURDATE() AND data_status = 'data_missing'");
@ -56,17 +68,25 @@ namespace CncRepository.Impl.Dashboard
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
// 当查询范围包含今天时,使用产量分段实时数据;历史日期使用日终汇总
var today = DateTime.Today;
bool includeToday = endDate >= today;
DateTime histEnd = includeToday ? today.AddDays(-1) : endDate;
var sql = @" var sql = @"
SELECT w.Name AS WorkshopName, SELECT w.Name AS WorkshopName,
COALESCE(SUM(dp.total_quantity),0) AS Quantity, COALESCE(SUM(CASE WHEN is_settled=1 THEN dp.quantity
ELSE COALESCE(dp.end_part_count,dp.start_part_count) - dp.start_part_count END), 0) AS Quantity,
COUNT(DISTINCT m.id) AS MachineCount, COUNT(DISTINCT m.id) AS MachineCount,
CASE CASE
WHEN DATEDIFF(@EndDate, @StartDate) = 0 THEN COALESCE(SUM(dp.total_quantity),0) / NULLIF(COUNT(DISTINCT m.id),0) WHEN DATEDIFF(@EndDate, @StartDate) = 0 THEN COALESCE(SUM(CASE WHEN is_settled=1 THEN dp.quantity
ELSE COALESCE(SUM(dp.total_quantity),0) / (DATEDIFF(@EndDate, @StartDate) + 1) / NULLIF(COUNT(DISTINCT m.id),0) ELSE COALESCE(dp.end_part_count,dp.start_part_count) - dp.start_part_count END), 0) / NULLIF(COUNT(DISTINCT m.id),0)
ELSE COALESCE(SUM(CASE WHEN is_settled=1 THEN dp.quantity
ELSE COALESCE(dp.end_part_count,dp.start_part_count) - dp.start_part_count END), 0) / (DATEDIFF(@EndDate, @StartDate) + 1) / NULLIF(COUNT(DISTINCT m.id),0)
END AS AvgQuantity END AS AvgQuantity
FROM cnc_workshop w FROM cnc_workshop w
LEFT JOIN cnc_machine m ON m.workshop_id = w.id LEFT JOIN cnc_machine m ON m.workshop_id = w.id
LEFT JOIN cnc_daily_production dp ON dp.machine_id = m.id LEFT JOIN cnc_production_segment dp ON dp.machine_id = m.id
AND dp.production_date BETWEEN @StartDate AND @EndDate AND dp.production_date BETWEEN @StartDate AND @EndDate
GROUP BY w.id, w.name"; GROUP BY w.id, w.name";
return conn.Query<WorkshopProductionResponse>(sql, new { StartDate = startDate, EndDate = endDate }).ToList(); return conn.Query<WorkshopProductionResponse>(sql, new { StartDate = startDate, EndDate = endDate }).ToList();
@ -81,9 +101,10 @@ namespace CncRepository.Impl.Dashboard
var sql = @" var sql = @"
SELECT m.id AS MachineId, SELECT m.id AS MachineId,
m.name AS MachineName, m.name AS MachineName,
COALESCE(SUM(dp.total_quantity),0) AS Quantity COALESCE(SUM(CASE WHEN dp.is_settled=1 THEN dp.quantity
ELSE COALESCE(dp.end_part_count,dp.start_part_count) - dp.start_part_count END), 0) AS Quantity
FROM cnc_machine m FROM cnc_machine m
LEFT JOIN cnc_daily_production dp ON dp.machine_id = m.id LEFT JOIN cnc_production_segment dp ON dp.machine_id = m.id
AND dp.production_date BETWEEN @StartDate AND @EndDate AND dp.production_date BETWEEN @StartDate AND @EndDate
GROUP BY m.id, m.name GROUP BY m.id, m.name
ORDER BY Quantity DESC ORDER BY Quantity DESC
@ -99,10 +120,11 @@ namespace CncRepository.Impl.Dashboard
{ {
var sql = @" var sql = @"
SELECT w.name AS WorkerName, SELECT w.name AS WorkerName,
COALESCE(SUM(dp.total_quantity),0) AS Quantity COALESCE(SUM(CASE WHEN dp.is_settled=1 THEN dp.quantity
ELSE COALESCE(dp.end_part_count,dp.start_part_count) - dp.start_part_count END), 0) AS Quantity
FROM cnc_worker w FROM cnc_worker w
LEFT JOIN cnc_worker_machine wm ON wm.worker_id = w.id LEFT JOIN cnc_worker_machine wm ON wm.worker_id = w.id
LEFT JOIN cnc_daily_production dp ON dp.machine_id = wm.machine_id LEFT JOIN cnc_production_segment dp ON dp.machine_id = wm.machine_id
AND dp.production_date BETWEEN @StartDate AND @EndDate AND dp.production_date BETWEEN @StartDate AND @EndDate
GROUP BY w.id, w.name GROUP BY w.id, w.name
ORDER BY Quantity DESC ORDER BY Quantity DESC
@ -116,8 +138,10 @@ namespace CncRepository.Impl.Dashboard
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT production_date AS Date, COALESCE(SUM(total_quantity),0) AS Quantity var sql = @"SELECT production_date AS Date,
FROM cnc_daily_production COALESCE(SUM(CASE WHEN is_settled=1 THEN quantity
ELSE COALESCE(end_part_count,start_part_count) - start_part_count END), 0) AS Quantity
FROM cnc_production_segment
WHERE production_date >= DATE_SUB(CURDATE(), INTERVAL @Days DAY) WHERE production_date >= DATE_SUB(CURDATE(), INTERVAL @Days DAY)
GROUP BY production_date GROUP BY production_date
ORDER BY production_date ASC"; ORDER BY production_date ASC";

Loading…
Cancel
Save