|
|
|
@ -30,25 +30,74 @@ namespace CncRepository.Impl
|
|
|
|
{
|
|
|
|
{
|
|
|
|
using (var conn = CreateConnection())
|
|
|
|
using (var conn = CreateConnection())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
string baseSql = @"SELECT dp.id, dp.machine_id, m.name AS MachineName, dp.production_date, dp.program_name, dp.total_quantity, dp.segment_count, dp.total_run_time, dp.total_cutting_time, dp.total_cycle_time
|
|
|
|
// 混合查询:已汇总日期用daily_production,未汇总日期从segment实时计算
|
|
|
|
|
|
|
|
string baseSql = @"
|
|
|
|
|
|
|
|
SELECT dp.id, dp.machine_id AS MachineId, m.name AS MachineName, dp.production_date AS ProductionDate,
|
|
|
|
|
|
|
|
dp.program_name AS ProgramName, dp.total_quantity AS TotalQuantity, dp.segment_count AS SegmentCount,
|
|
|
|
|
|
|
|
dp.total_run_time AS TotalRunTime, dp.total_cutting_time AS TotalCuttingTime, dp.total_cycle_time AS TotalCycleTime
|
|
|
|
FROM cnc_daily_production dp
|
|
|
|
FROM cnc_daily_production dp
|
|
|
|
LEFT JOIN cnc_machine m ON dp.machine_id = m.id
|
|
|
|
LEFT JOIN cnc_machine m ON dp.machine_id = m.id
|
|
|
|
WHERE 1=1";
|
|
|
|
WHERE 1=1";
|
|
|
|
string countSql = @"SELECT COUNT(*) FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.machine_id = m.id WHERE 1=1";
|
|
|
|
string realtimeSql = @"
|
|
|
|
|
|
|
|
SELECT 0 AS Id, seg.machine_id AS MachineId, m.name AS MachineName, seg.production_date AS ProductionDate,
|
|
|
|
|
|
|
|
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(*) AS SegmentCount, NULL AS TotalRunTime, NULL AS TotalCuttingTime, NULL AS TotalCycleTime
|
|
|
|
|
|
|
|
FROM cnc_production_segment seg
|
|
|
|
|
|
|
|
LEFT JOIN cnc_machine m ON seg.machine_id = m.id
|
|
|
|
|
|
|
|
WHERE NOT EXISTS (
|
|
|
|
|
|
|
|
SELECT 1 FROM cnc_daily_production dp
|
|
|
|
|
|
|
|
WHERE dp.machine_id = seg.machine_id AND dp.production_date = seg.production_date
|
|
|
|
|
|
|
|
)";
|
|
|
|
|
|
|
|
|
|
|
|
var parameters = new DynamicParameters();
|
|
|
|
var parameters = new DynamicParameters();
|
|
|
|
if (query?.Date.HasValue == true)
|
|
|
|
// 日期过滤
|
|
|
|
|
|
|
|
if (query?.StartDate.HasValue == true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
baseSql += " AND dp.production_date >= @StartDate";
|
|
|
|
|
|
|
|
realtimeSql += " AND seg.production_date >= @StartDate";
|
|
|
|
|
|
|
|
parameters.Add("StartDate", query.StartDate);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (query?.EndDate.HasValue == true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
baseSql += " AND dp.production_date <= @EndDate";
|
|
|
|
|
|
|
|
realtimeSql += " AND seg.production_date <= @EndDate";
|
|
|
|
|
|
|
|
parameters.Add("EndDate", query.EndDate);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 兼容旧的单日期查询
|
|
|
|
|
|
|
|
if (query?.Date.HasValue == true && query.StartDate == null)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
baseSql += " AND dp.production_date = @Date";
|
|
|
|
baseSql += " AND dp.production_date = @Date";
|
|
|
|
countSql += " AND dp.production_date = @Date";
|
|
|
|
realtimeSql += " AND seg.production_date = @Date";
|
|
|
|
parameters.Add("Date", query.Date);
|
|
|
|
parameters.Add("Date", query.Date);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 车间过滤
|
|
|
|
|
|
|
|
if (query?.WorkshopId.HasValue == true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
baseSql += " AND m.workshop_id = @WorkshopId";
|
|
|
|
|
|
|
|
realtimeSql += " AND m.workshop_id = @WorkshopId";
|
|
|
|
|
|
|
|
parameters.Add("WorkshopId", query.WorkshopId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 机床过滤
|
|
|
|
|
|
|
|
if (query?.MachineId.HasValue == true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
baseSql += " AND dp.machine_id = @MachineId";
|
|
|
|
|
|
|
|
realtimeSql += " AND seg.machine_id = @MachineId";
|
|
|
|
|
|
|
|
parameters.Add("MachineId", query.MachineId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
realtimeSql += " GROUP BY seg.machine_id, seg.production_date, seg.program_name, m.name";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string unionSql = $"{baseSql} UNION ALL {realtimeSql}";
|
|
|
|
|
|
|
|
string countSql = $"SELECT COUNT(*) FROM ({unionSql}) AS t";
|
|
|
|
|
|
|
|
|
|
|
|
int offset = (query.Page - 1) * query.PageSize;
|
|
|
|
int offset = (query.Page - 1) * query.PageSize;
|
|
|
|
string paging = " ORDER BY dp.production_date DESC LIMIT @Limit OFFSET @Offset";
|
|
|
|
string paging = $" ORDER BY ProductionDate DESC, MachineName LIMIT @Limit OFFSET @Offset";
|
|
|
|
parameters.Add("Limit", query.PageSize);
|
|
|
|
parameters.Add("Limit", query.PageSize);
|
|
|
|
parameters.Add("Offset", offset);
|
|
|
|
parameters.Add("Offset", offset);
|
|
|
|
|
|
|
|
|
|
|
|
var items = conn.Query<DailyProductionListItem>(baseSql + paging, parameters).ToList();
|
|
|
|
var items = conn.Query<DailyProductionListItem>(unionSql + paging, parameters).ToList();
|
|
|
|
int total = conn.ExecuteScalar<int>(countSql, parameters);
|
|
|
|
int total = conn.ExecuteScalar<int>(countSql, parameters);
|
|
|
|
return new PagedResult<DailyProductionListItem>
|
|
|
|
return new PagedResult<DailyProductionListItem>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|