feat: update production kanban details

This commit is contained in:
meswork764
2026-07-20 18:47:17 +08:00
parent b5bc8d7358
commit 77d1a97e83
11 changed files with 2336 additions and 63 deletions

View File

@@ -0,0 +1,223 @@
USE [YL_MESDB]
GO
CREATE OR ALTER PROCEDURE [dbo].[MES_Kanban_MonthlyRates]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @today date = CONVERT(date, GETDATE());
DECLARE @currentStart date = DATEFROMPARTS(YEAR(@today), MONTH(@today), 1);
DECLARE @currentEnd date = DATEADD(month, 1, @currentStart);
DECLARE @previousStart date = DATEADD(month, -1, @currentStart);
DECLARE @previousEnd date = @currentStart;
DECLARE @rates TABLE (
[module] varchar(20) NOT NULL,
[currentNumerator] decimal(18, 2) NULL,
[currentDenominator] decimal(18, 2) NULL,
[previousNumerator] decimal(18, 2) NULL,
[previousDenominator] decimal(18, 2) NULL
);
-- Sales and purchase source views contain the exception set and total set.
INSERT INTO @rates
SELECT
'sales',
CASE WHEN currentTotal.total > currentException.total THEN currentTotal.total - currentException.total ELSE 0 END,
currentTotal.total,
CASE WHEN previousTotal.total > previousException.total THEN previousTotal.total - previousException.total ELSE 0 END,
previousTotal.total
FROM (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_SaleOTRate_m]
WHERE [DocDate] >= @currentStart AND [DocDate] < @currentEnd
) currentTotal
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_SaleOTRate_z]
WHERE [DocDate] >= @currentStart AND [DocDate] < @currentEnd
) currentException
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_SaleOTRate_m]
WHERE [DocDate] >= @previousStart AND [DocDate] < @previousEnd
) previousTotal
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_SaleOTRate_z]
WHERE [DocDate] >= @previousStart AND [DocDate] < @previousEnd
) previousException;
INSERT INTO @rates
SELECT
'research',
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd AND [] = N'已完成' THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd AND [] = N'已完成' THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd THEN 1 ELSE 0 END)
FROM [dbo].[MES_设计报工_任务]
WHERE [] >= @previousStart AND [] < @currentEnd;
INSERT INTO @rates
SELECT
'plan',
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd AND ISNULL([], 0) = 1 THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd AND ISNULL([], 0) = 1 THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd THEN 1 ELSE 0 END)
FROM [dbo].[View_生产订单_MES]
WHERE [] >= @previousStart AND [] < @currentEnd
AND [] LIKE N'%装配%'
AND [] NOT LIKE N'%3420-HT2%'
AND [] NOT LIKE N'%3420-YT2%'
AND [] NOT LIKE N'%3420-YF2%'
AND [] NOT LIKE N'%3420-YP2%';
INSERT INTO @rates
SELECT
'purchase',
CASE WHEN currentTotal.total > currentException.total THEN currentTotal.total - currentException.total ELSE 0 END,
currentTotal.total,
CASE WHEN previousTotal.total > previousException.total THEN previousTotal.total - previousException.total ELSE 0 END,
previousTotal.total
FROM (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_POOnTimeRate_M]
WHERE [DocDate] >= @currentStart AND [DocDate] < @currentEnd
) currentTotal
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_POOnTimeRate]
WHERE [DocDate] >= @currentStart AND [DocDate] < @currentEnd
) currentException
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_POOnTimeRate_M]
WHERE [DocDate] >= @previousStart AND [DocDate] < @previousEnd
) previousTotal
CROSS JOIN (
SELECT COUNT_BIG(1) AS total
FROM [SAP].[SBO_YL].[dbo].[SAP_MES_POOnTimeRate]
WHERE [DocDate] >= @previousStart AND [DocDate] < @previousEnd
) previousException;
INSERT INTO @rates
SELECT
'machining',
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd
AND [] IS NOT NULL AND [] <= DATEADD(day, 1, []) THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @currentStart AND [] < @currentEnd THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd
AND [] IS NOT NULL AND [] <= DATEADD(day, 1, []) THEN 1 ELSE 0 END),
SUM(CASE WHEN [] >= @previousStart AND [] < @previousEnd THEN 1 ELSE 0 END)
FROM [dbo].[View_生产订单_MES]
WHERE [] >= @previousStart AND [] < @currentEnd
AND [] <> N'走手续'
AND [] NOT LIKE N'%装配%'
AND [] NOT IN (N'期初物料', N'打磨', N'钻床', N'电火花', N'压力测试', N'酸洗/喷漆', N'抛光', N'外协')
AND [] = 1
AND [] > 5000;
;WITH assemblyBase AS (
SELECT
ISNULL([], CASE
WHEN [] LIKE N'%系统%' THEN DATEADD(day, 3, [])
ELSE DATEADD(day, 3, [])
END) AS expectedInspection,
CASE
WHEN ISNULL([], 0) >= 4
OR (ISNULL([], 0) > 0 AND ISNULL([], 0) >= ISNULL([], 0))
THEN []
ELSE NULL
END AS completionTime,
CASE
WHEN [] LIKE N'%系统%' AND [] IS NOT NULL THEN 1
WHEN [] NOT LIKE N'%系统%' AND ISNULL([], 0) = 1 THEN 1
ELSE 0
END AS executable
FROM [dbo].[View_生产订单_MES]
WHERE [] = N'pit_Resource'
AND [] LIKE N'%装配%'
AND [] NOT LIKE N'%软管总成%'
AND [] NOT LIKE N'%发货部件%'
AND ISNULL([], N'') <> N''
)
INSERT INTO @rates
SELECT
'assembly',
SUM(CASE WHEN expectedInspection >= @currentStart AND expectedInspection < @currentEnd AND executable = 1
AND NOT (completionTime > expectedInspection OR (completionTime IS NULL AND expectedInspection < @today)) THEN 1 ELSE 0 END),
SUM(CASE WHEN expectedInspection >= @currentStart AND expectedInspection < @currentEnd AND executable = 1 THEN 1 ELSE 0 END),
SUM(CASE WHEN expectedInspection >= @previousStart AND expectedInspection < @previousEnd AND executable = 1
AND NOT (completionTime > expectedInspection OR completionTime IS NULL) THEN 1 ELSE 0 END),
SUM(CASE WHEN expectedInspection >= @previousStart AND expectedInspection < @previousEnd AND executable = 1 THEN 1 ELSE 0 END)
FROM assemblyBase
WHERE expectedInspection >= @previousStart AND expectedInspection < @currentEnd;
;WITH qualitySummary AS (
SELECT
[TaskAID],
SUM(ISNULL([], 0)) AS inspectedQuantity,
MAX([]) AS lastInspectionTime
FROM [dbo].[YL_质量检验_质检记录]
WHERE [] = 6 AND [TaskAID] IS NOT NULL
GROUP BY [TaskAID]
), operationSummary AS (
SELECT
[TaskAID],
SUM(ISNULL([], 0)) AS completedQuantity,
MAX(CASE WHEN ISNULL([], 0) <> 0 THEN COALESCE([], []) END) AS lastReportTime
FROM [dbo].[YL_加工中心_操作记录表]
WHERE ISNULL([], 0) IN (3, 6) AND [TaskAID] IS NOT NULL
GROUP BY [TaskAID]
), qualityBase AS (
SELECT
o.lastReportTime,
DATEADD(day, 2, o.lastReportTime) AS inspectionDeadline,
o.completedQuantity,
ISNULL(q.inspectedQuantity, 0) AS inspectedQuantity,
q.lastInspectionTime
FROM operationSummary o
LEFT JOIN qualitySummary q ON q.[TaskAID] = o.[TaskAID]
WHERE o.lastReportTime >= @previousStart AND o.lastReportTime < @currentEnd
AND o.completedQuantity > 0
)
INSERT INTO @rates
SELECT
'quality',
SUM(CASE WHEN lastReportTime >= @currentStart AND lastReportTime < @currentEnd
AND ((inspectedQuantity >= completedQuantity AND lastInspectionTime <= inspectionDeadline)
OR (inspectedQuantity < completedQuantity AND inspectionDeadline >= @today)) THEN 1 ELSE 0 END),
SUM(CASE WHEN lastReportTime >= @currentStart AND lastReportTime < @currentEnd THEN 1 ELSE 0 END),
SUM(CASE WHEN lastReportTime >= @previousStart AND lastReportTime < @previousEnd
AND inspectedQuantity >= completedQuantity AND lastInspectionTime <= inspectionDeadline THEN 1 ELSE 0 END),
SUM(CASE WHEN lastReportTime >= @previousStart AND lastReportTime < @previousEnd THEN 1 ELSE 0 END)
FROM qualityBase;
-- Temporary placeholder until the warehouse timely-rate formula is confirmed.
INSERT INTO @rates
VALUES ('warehouse', 95, 100, 95, 100);
SELECT
[module],
CAST(CASE WHEN ISNULL([currentDenominator], 0) = 0 THEN 0 ELSE ISNULL([currentNumerator], 0) * 100.0 / [currentDenominator] END AS decimal(18, 2)) AS [currentRate],
CAST(CASE WHEN ISNULL([previousDenominator], 0) = 0 THEN 0 ELSE ISNULL([previousNumerator], 0) * 100.0 / [previousDenominator] END AS decimal(18, 2)) AS [previousRate],
ISNULL([currentNumerator], 0) AS [currentNumerator],
ISNULL([currentDenominator], 0) AS [currentDenominator],
ISNULL([previousNumerator], 0) AS [previousNumerator],
ISNULL([previousDenominator], 0) AS [previousDenominator]
FROM @rates
ORDER BY CASE [module]
WHEN 'sales' THEN 1
WHEN 'research' THEN 2
WHEN 'plan' THEN 3
WHEN 'purchase' THEN 4
WHEN 'machining' THEN 5
WHEN 'assembly' THEN 6
WHEN 'quality' THEN 7
WHEN 'warehouse' THEN 8
ELSE 99
END;
END
GO

View File

@@ -0,0 +1,97 @@
CREATE OR ALTER PROCEDURE [dbo].[MES_Kanban_ProductionInfo]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @today date = CONVERT(date, GETDATE());
DECLARE @tomorrow date = DATEADD(day, 1, @today);
DECLARE @monthStart date = DATEFROMPARTS(YEAR(@today), MONTH(@today), 1);
DECLARE @currentPlan decimal(18, 2) = 0;
DECLARE @currentOutput decimal(18, 2) = 0;
DECLARE @completionRate decimal(18, 2) = 0;
DECLARE @workHours decimal(18, 1) = 0;
DECLARE @kitRate decimal(18, 2) = 0;
DECLARE @qualityRate decimal(18, 2) = 0;
;WITH AssemblyOrders AS
(
SELECT
CONVERT(nvarchar(100), []) AS [],
MAX(ISNULL(CONVERT(decimal(18, 4), []), 0)) AS [],
MAX(ISNULL(CONVERT(decimal(18, 4), []), 0)) AS []
FROM [dbo].[View_生产订单_MES]
WHERE [] >= @monthStart
AND [] < @tomorrow
AND [] LIKE N'%装配%'
GROUP BY CONVERT(nvarchar(100), [])
)
SELECT
@currentPlan = ISNULL(SUM([]), 0),
@currentOutput = ISNULL(SUM([]), 0)
FROM AssemblyOrders;
SET @completionRate = CAST(
CASE WHEN @currentPlan > 0
THEN @currentOutput * 100.0 / @currentPlan
ELSE 0
END AS decimal(18, 2)
);
SELECT @workHours = CAST(ISNULL(SUM(ISNULL([], 0)), 0) / 3600.0 AS decimal(18, 1))
FROM [dbo].[View_生产工时视图全部]
WHERE [] >= @monthStart
AND [] < @tomorrow
AND ISNULL([], 0) = -1
AND ISNULL([], 0) > 0;
SELECT @kitRate = CAST(
CASE WHEN COUNT_BIG(1) > 0
THEN SUM(CASE WHEN ISNULL([], 0) = 1 THEN 1 ELSE 0 END) * 100.0 / COUNT_BIG(1)
ELSE 0
END AS decimal(18, 2)
)
FROM [dbo].[View_生产订单_MES]
WHERE [] >= @monthStart
AND [] < @tomorrow
AND [] LIKE N'%装配%'
AND [] NOT LIKE N'%3420-HT2%'
AND [] NOT LIKE N'%3420-YT2%'
AND [] NOT LIKE N'%3420-YF2%'
AND [] NOT LIKE N'%3420-YP2%';
SELECT @qualityRate = CAST(
CASE WHEN ISNULL(SUM([]), 0) > 0
THEN ISNULL(SUM([]), 0) * 100.0 / SUM([])
ELSE 0
END AS decimal(18, 2)
)
FROM [dbo].[View_质量检验_质检记录]
WHERE [] = N'装配'
AND [] >= @monthStart
AND [] < @tomorrow;
SELECT [Zone], [Sort], [TagName], [TagValue], [TagUnit], [Icon], [color]
FROM
(
SELECT N'生产' AS [Zone], 1 AS [Sort], N'当前计划' AS [TagName],
CONVERT(nvarchar(50), @currentPlan) AS [TagValue], N'' AS [TagUnit],
N'AssemblyPlan' AS [Icon], N'#0678b4' AS [color]
UNION ALL
SELECT N'生产', 2, N'当前产量', CONVERT(nvarchar(50), @currentOutput), N'',
N'ManufacturingExecution', N'#68b720'
UNION ALL
SELECT N'生产', 3, N'计划完成', CONVERT(nvarchar(50), @completionRate), N'%',
N'ProductionCheck', N'#e97378'
UNION ALL
SELECT N'生产', 4, N'工时消耗', CONVERT(nvarchar(50), @workHours), N'h',
N'ManHourStatistics', N'#9d6dd5'
UNION ALL
SELECT N'生产', 5, N'齐套率', CONVERT(nvarchar(50), @kitRate), N'%',
N'GroupMatching', N'#dc7e86'
UNION ALL
SELECT N'生产', 6, N'合格率', CONVERT(nvarchar(50), @qualityRate), N'%',
N'QualityBasicData', N'#fafc80'
) AS ProductionInfo
ORDER BY [Sort];
END;