增加刀具寿命界面

This commit is contained in:
zhangshun
2026-06-11 17:27:45 +08:00
parent 42dab65fed
commit 2ac9e1f66e
25 changed files with 3395 additions and 590 deletions

View File

@@ -0,0 +1,45 @@
IF OBJECT_ID(N'dbo.设备管理_刀具寿命_明细_查询', N'P') IS NOT NULL
DROP PROCEDURE dbo.设备管理_刀具寿命_明细_查询
GO
CREATE PROCEDURE dbo.设备管理_刀具寿命_明细_查询
@设备编号 NVARCHAR(100) = N''
AS
BEGIN
SET NOCOUNT ON
SELECT
LTRIM(RTRIM(所在工位号)) AS 设备编号,
LTRIM(RTRIM(所在工位号)) AS 设备名称,
ISNULL(名称, '') AS 刀具名称,
ISNULL(刀具代码, '') AS 刀具代码,
ISNULL(刀具组号, '') AS 刀具组号,
ISNULL(规格, '') AS 规格,
ISNULL(型号, '') AS 型号,
CAST(ISNULL(刀具额定寿命, 0) AS DECIMAL(18, 2)) AS 额定寿命,
CAST(ISNULL(已用寿命, 0) AS DECIMAL(18, 2)) AS 已用寿命,
CAST(ISNULL(预警值1, 0) AS DECIMAL(18, 2)) AS 预警值1,
CAST(ISNULL(刀具额定寿命, 0) - ISNULL(已用寿命, 0) AS DECIMAL(18, 2)) AS 剩余寿命,
CASE
WHEN ISNULL(刀具额定寿命, 0) > 0 AND ISNULL(已用寿命, 0) >= ISNULL(刀具额定寿命, 0) THEN N'报废'
WHEN ISNULL(预警值1, 0) > 0 AND ISNULL(已用寿命, 0) >= ISNULL(预警值1, 0) THEN N'预警'
ELSE N'正常'
END AS 状态,
所属工艺,
采购日期,
装刀到工位日期,
操作时间
FROM dbo.设备管理_刀具设备台账
WHERE ISNULL(LTRIM(RTRIM(@设备编号)), '') = ''
OR LTRIM(RTRIM(所在工位号)) = LTRIM(RTRIM(@设备编号))
ORDER BY
LTRIM(RTRIM(所在工位号)),
CASE
WHEN ISNULL(刀具额定寿命, 0) > 0 AND ISNULL(已用寿命, 0) >= ISNULL(刀具额定寿命, 0) THEN 3
WHEN ISNULL(预警值1, 0) > 0 AND ISNULL(已用寿命, 0) >= ISNULL(预警值1, 0) THEN 2
ELSE 1
END DESC,
ISNULL(名称, ''),
ISNULL(刀具代码, '')
END
GO

View File

@@ -0,0 +1,23 @@
IF OBJECT_ID(N'dbo.设备管理_刀具寿命_机床列表_查询', N'P') IS NOT NULL
DROP PROCEDURE dbo.设备管理_刀具寿命_机床列表_查询
GO
CREATE PROCEDURE dbo.设备管理_刀具寿命_机床列表_查询
AS
BEGIN
SET NOCOUNT ON
/*
当前表“设备管理_刀具设备台账”中:
1. 设备编号为空
2. 所在工位号有实际值,可作为设备/机床维度使用
*/
SELECT DISTINCT
LTRIM(RTRIM(所在工位号)) AS 设备编号,
LTRIM(RTRIM(所在工位号)) AS 设备名称
FROM dbo.设备管理_刀具设备台账
WHERE ISNULL(LTRIM(RTRIM(所在工位号)), '') <> ''
ORDER BY LTRIM(RTRIM(所在工位号))
END
GO

View File

@@ -0,0 +1,46 @@
CREATE OR ALTER PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_工位JPH_历史]
@开始时间 nvarchar(50) = null,
@结束时间 nvarchar(50) = null,
@工位_check bit = null,
@工位列表 nvarchar(max) = null,
@订单号_check bit = null,
@订单号 nvarchar(50) = null,
@产品型号代码_check bit = null,
@产品型号代码 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON
DECLARE @startTime datetime = null
DECLARE @endTime datetime = null
IF @开始时间 IS NOT NULL AND LTRIM(RTRIM(@开始时间)) <> N''
SET @startTime = CONVERT(datetime, @开始时间 + N' 00:00:00', 120)
IF @结束时间 IS NOT NULL AND LTRIM(RTRIM(@结束时间)) <> N''
SET @endTime = CONVERT(datetime, @结束时间 + N' 23:59:59', 120)
;WITH StationFilter AS (
SELECT LTRIM(RTRIM(value)) AS 工位号
FROM STRING_SPLIT(ISNULL(@工位列表, N''), N',')
WHERE LTRIM(RTRIM(value)) <> N''
)
SELECT
日期 = CONVERT(nvarchar(10), CONVERT(datetime, [离开时间], 120), 23),
小时段 = RIGHT('0' + CAST(DATEPART(HOUR, CONVERT(datetime, [离开时间], 120)) AS nvarchar(2)), 2) + N':00',
产量 = COUNT(1)
FROM [dbo].[测量数据发动机在线状态] m
WHERE m.[ID] <> 0
AND m.[离开时间] IS NOT NULL
AND (@startTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) >= @startTime)
AND (@endTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) <= @endTime)
AND (ISNULL(@订单号_check, 0) = 0 OR m.[订单号] = @订单号)
AND (ISNULL(@产品型号代码_check, 0) = 0 OR m.[机型代码] = @产品型号代码)
AND (ISNULL(@工位_check, 0) = 0 OR EXISTS (
SELECT 1 FROM StationFilter f WHERE f.工位号 = m.[工位号]
))
GROUP BY
CONVERT(nvarchar(10), CONVERT(datetime, m.[离开时间], 120), 23),
DATEPART(HOUR, CONVERT(datetime, m.[离开时间], 120))
ORDER BY 日期, 小时段
END

View File

@@ -0,0 +1,23 @@
CREATE OR ALTER PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_工位JPH_历史_导出]
@开始时间 nvarchar(50) = null,
@结束时间 nvarchar(50) = null,
@工位_check bit = null,
@工位列表 nvarchar(max) = null,
@订单号_check bit = null,
@订单号 nvarchar(50) = null,
@产品型号代码_check bit = null,
@产品型号代码 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON
EXEC [dbo].[质量数据查询_测量数据发动机在线状态_工位JPH_历史]
@开始时间 = @开始时间,
@结束时间 = @结束时间,
@工位_check = @工位_check,
@工位列表 = @工位列表,
@订单号_check = @订单号_check,
@订单号 = @订单号,
@产品型号代码_check = @产品型号代码_check,
@产品型号代码 = @产品型号代码
END

View File

@@ -0,0 +1,25 @@
CREATE OR ALTER PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_工位JPH_实时]
@开始时间 nvarchar(50) = null,
@结束时间 nvarchar(50) = null,
@工位_check bit = null,
@工位列表 nvarchar(max) = null,
@订单号_check bit = null,
@订单号 nvarchar(50) = null,
@产品型号代码_check bit = null,
@产品型号代码 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON
DECLARE @today nvarchar(10) = CONVERT(nvarchar(10), GETDATE(), 23)
EXEC [dbo].[质量数据查询_测量数据发动机在线状态_工位JPH_历史]
@开始时间 = @today,
@结束时间 = @today,
@工位_check = @工位_check,
@工位列表 = @工位列表,
@订单号_check = @订单号_check,
@订单号 = @订单号,
@产品型号代码_check = @产品型号代码_check,
@产品型号代码 = @产品型号代码
END

View File

@@ -0,0 +1,71 @@
CREATE OR ALTER PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_工位节拍统计]
@开始时间 nvarchar(50) = null,
@结束时间 nvarchar(50) = null,
@工位_check bit = null,
@工位列表 nvarchar(max) = null,
@订单号_check bit = null,
@订单号 nvarchar(50) = null,
@产品型号代码_check bit = null,
@产品型号代码 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON
DECLARE @startTime datetime = null
DECLARE @endTime datetime = null
IF @开始时间 IS NOT NULL AND LTRIM(RTRIM(@开始时间)) <> N''
SET @startTime = CONVERT(datetime, @开始时间 + N' 00:00:00', 120)
IF @结束时间 IS NOT NULL AND LTRIM(RTRIM(@结束时间)) <> N''
SET @endTime = CONVERT(datetime, @结束时间 + N' 23:59:59', 120)
;WITH StationFilter AS (
SELECT LTRIM(RTRIM(value)) AS 工位号
FROM STRING_SPLIT(ISNULL(@工位列表, N''), N',')
WHERE LTRIM(RTRIM(value)) <> N''
),
SourceData AS (
SELECT
s.[工位号] AS 工位,
CONVERT(nvarchar(10), CONVERT(datetime, m.[离开时间], 120), 23) AS 日期,
CAST(m.[在线时间] AS decimal(18, 2)) AS 在线时间
FROM [dbo].[测量数据发动机在线状态] m
INNER JOIN [dbo].[MES_计划BOM_工位与名称] s
ON m.[工位号] = s.[工位号]
WHERE m.[ID] <> 0
AND m.[离开时间] IS NOT NULL
AND m.[在线时间] IS NOT NULL
AND ISNUMERIC(CONVERT(nvarchar(50), m.[在线时间])) = 1
AND (@startTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) >= @startTime)
AND (@endTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) <= @endTime)
AND (ISNULL(@订单号_check, 0) = 0 OR m.[订单号] = @订单号)
AND (ISNULL(@产品型号代码_check, 0) = 0 OR m.[机型代码] = @产品型号代码)
AND (ISNULL(@工位_check, 0) = 0 OR EXISTS (
SELECT 1 FROM StationFilter f WHERE f.工位号 = m.[工位号]
))
),
DailyAgg AS (
SELECT
工位,
日期,
CAST(AVG(在线时间) AS decimal(18, 2)) AS 当日平均节拍
FROM SourceData
GROUP BY 工位, 日期
),
TotalAgg AS (
SELECT
工位,
CAST(AVG(在线时间) AS decimal(18, 2)) AS 总平均节拍
FROM SourceData
GROUP BY 工位
)
SELECT
d.工位,
t.总平均节拍,
d.日期,
d.当日平均节拍
FROM DailyAgg d
INNER JOIN TotalAgg t ON d.工位 = t.工位
ORDER BY d.工位, d.日期
END

View File

@@ -0,0 +1,140 @@
CREATE OR ALTER PROCEDURE [dbo].[质量数据查询_测量数据发动机在线状态_工位节拍统计_导出]
@开始时间 nvarchar(50) = null,
@结束时间 nvarchar(50) = null,
@工位_check bit = null,
@工位列表 nvarchar(max) = null,
@订单号_check bit = null,
@订单号 nvarchar(50) = null,
@产品型号代码_check bit = null,
@产品型号代码 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON
DECLARE @startTime datetime = null
DECLARE @endTime datetime = null
DECLARE @cols nvarchar(max) = N''
DECLARE @sql nvarchar(max)
IF @开始时间 IS NOT NULL AND LTRIM(RTRIM(@开始时间)) <> N''
SET @startTime = CONVERT(datetime, @开始时间 + N' 00:00:00', 120)
IF @结束时间 IS NOT NULL AND LTRIM(RTRIM(@结束时间)) <> N''
SET @endTime = CONVERT(datetime, @结束时间 + N' 23:59:59', 120)
;WITH StationFilter AS (
SELECT LTRIM(RTRIM(value)) AS 工位号
FROM STRING_SPLIT(ISNULL(@工位列表, N''), N',')
WHERE LTRIM(RTRIM(value)) <> N''
),
SourceData AS (
SELECT
m.[工位号] AS 工位,
CONVERT(nvarchar(10), CONVERT(datetime, m.[离开时间], 120), 23) AS 日期,
CAST(m.[在线时间] AS decimal(18, 2)) AS 在线时间
FROM [dbo].[测量数据发动机在线状态] m
INNER JOIN [dbo].[MES_计划BOM_工位与名称] s
ON m.[工位号] = s.[工位号]
WHERE m.[ID] <> 0
AND m.[离开时间] IS NOT NULL
AND m.[在线时间] IS NOT NULL
AND ISNUMERIC(CONVERT(nvarchar(50), m.[在线时间])) = 1
AND (@startTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) >= @startTime)
AND (@endTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) <= @endTime)
AND (ISNULL(@订单号_check, 0) = 0 OR m.[订单号] = @订单号)
AND (ISNULL(@产品型号代码_check, 0) = 0 OR m.[机型代码] = @产品型号代码)
AND (ISNULL(@工位_check, 0) = 0 OR EXISTS (
SELECT 1 FROM StationFilter f WHERE f.工位号 = m.[工位号]
))
),
DailyAgg AS (
SELECT
工位,
日期,
CAST(AVG(在线时间) AS decimal(18, 2)) AS 当日平均节拍
FROM SourceData
GROUP BY 工位, 日期
)
SELECT @cols = STUFF((
SELECT N',' + QUOTENAME(日期)
FROM (SELECT DISTINCT 日期 FROM DailyAgg) d
ORDER BY 日期
FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, N'')
IF ISNULL(@cols, N'') = N''
BEGIN
SELECT CAST(N'' AS nvarchar(50)) AS 工位, CAST(0 AS decimal(18, 2)) AS 总平均节拍
WHERE 1 = 0
RETURN
END
SET @sql = N'
;WITH StationFilter AS (
SELECT LTRIM(RTRIM(value)) AS 工位号
FROM STRING_SPLIT(ISNULL(@工位列表, N''''), N'','')
WHERE LTRIM(RTRIM(value)) <> N''''
),
SourceData AS (
SELECT
m.[工位号] AS 工位,
CONVERT(nvarchar(10), CONVERT(datetime, m.[离开时间], 120), 23) AS 日期,
CAST(m.[在线时间] AS decimal(18, 2)) AS 在线时间
FROM [dbo].[测量数据发动机在线状态] m
INNER JOIN [dbo].[MES_计划BOM_工位与名称] s
ON m.[工位号] = s.[工位号]
WHERE m.[ID] <> 0
AND m.[离开时间] IS NOT NULL
AND m.[在线时间] IS NOT NULL
AND ISNUMERIC(CONVERT(nvarchar(50), m.[在线时间])) = 1
AND (@startTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) >= @startTime)
AND (@endTime IS NULL OR CONVERT(datetime, m.[离开时间], 120) <= @endTime)
AND (ISNULL(@订单号_check, 0) = 0 OR m.[订单号] = @订单号)
AND (ISNULL(@产品型号代码_check, 0) = 0 OR m.[机型代码] = @产品型号代码)
AND (ISNULL(@工位_check, 0) = 0 OR EXISTS (
SELECT 1 FROM StationFilter f WHERE f.工位号 = m.[工位号]
))
),
DailyAgg AS (
SELECT
工位,
日期,
CAST(AVG(在线时间) AS decimal(18, 2)) AS 当日平均节拍
FROM SourceData
GROUP BY 工位, 日期
),
TotalAgg AS (
SELECT
工位,
CAST(AVG(在线时间) AS decimal(18, 2)) AS 总平均节拍
FROM SourceData
GROUP BY 工位
),
PivotData AS (
SELECT 工位, 日期, 当日平均节拍
FROM DailyAgg
)
SELECT 工位, 总平均节拍, ' + @cols + N'
FROM (
SELECT p.工位, t.总平均节拍, p.日期, p.当日平均节拍
FROM PivotData p
INNER JOIN TotalAgg t ON p.工位 = t.工位
) src
PIVOT (
MAX(当日平均节拍)
FOR 日期 IN (' + @cols + N')
) p
ORDER BY 工位'
EXEC sp_executesql
@sql,
N'@startTime datetime, @endTime datetime, @工位_check bit, @工位列表 nvarchar(max), @订单号_check bit, @订单号 nvarchar(50), @产品型号代码_check bit, @产品型号代码 nvarchar(50)',
@startTime = @startTime,
@endTime = @endTime,
@工位_check = @工位_check,
@工位列表 = @工位列表,
@订单号_check = @订单号_check,
@订单号 = @订单号,
@产品型号代码_check = @产品型号代码_check,
@产品型号代码 = @产品型号代码
END