feat: update production kanban details
This commit is contained in:
223
生产任务看板/doc/MES_Kanban_MonthlyRates.sql
Normal file
223
生产任务看板/doc/MES_Kanban_MonthlyRates.sql
Normal 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
|
||||
97
生产任务看板/doc/MES_Kanban_ProductionInfo.sql
Normal file
97
生产任务看板/doc/MES_Kanban_ProductionInfo.sql
Normal 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;
|
||||
Reference in New Issue
Block a user