feat: update MES tracking and timesheet reports
This commit is contained in:
@@ -0,0 +1,188 @@
|
|||||||
|
USE [YL_MESDB]
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
SELECT '项目工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
SELECT 256*20 AS 合同号, 256*20 AS 订单号, 256*30 AS 产品名称, 256*40 AS 产品编码, 256*15 AS 工序名称, 256*12 AS 操作人,
|
||||||
|
256*12 AS 指派对象, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*15 AS 计划开始, 256*15 AS 计划完成, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品名称, 0 AS 产品编码, 0 AS 工序名称, 0 AS 操作人,
|
||||||
|
0 AS 指派对象, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 计划开始, 0 AS 计划完成, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.订单号,
|
||||||
|
v.产品名称,
|
||||||
|
v.产品编码,
|
||||||
|
v.工序名称,
|
||||||
|
v.操作人,
|
||||||
|
ISNULL(v.工位名称, '') AS 指派对象,
|
||||||
|
CASE WHEN v.计划数量 IS NULL THEN '' WHEN v.计划数量 = FLOOR(v.计划数量) THEN CAST(CAST(v.计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
|
||||||
|
CASE WHEN v.完成数量 IS NULL THEN '' WHEN v.完成数量 = FLOOR(v.完成数量) THEN CAST(CAST(v.完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
|
||||||
|
CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN CAST(v.操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划开始,
|
||||||
|
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划完成,
|
||||||
|
CAST(CAST(v.加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
ORDER BY v.订单合同号, v.产品编码, v.工序名称, v.操作人, v.订单号
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
|
||||||
|
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
|
||||||
|
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
ISNULL(工位名称, '') AS 指派对象,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束', '加班', '异常', '开始加工') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) != -1
|
||||||
|
ORDER BY 操作人, 开始时间
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
SELECT '任务工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
SELECT 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码, 256*25 AS 产品名称, 256*15 AS 工序名称,
|
||||||
|
256*12 AS 操作人, 256*12 AS 指派对象, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码, 0 AS 产品名称, 0 AS 工序名称,
|
||||||
|
0 AS 操作人, 0 AS 指派对象, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
ISNULL(操作人, '') AS 操作人,
|
||||||
|
ISNULL(工位名称, '') AS 指派对象,
|
||||||
|
CASE WHEN 计划数量 IS NULL THEN '' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
|
||||||
|
CASE WHEN 完成数量 IS NULL THEN '' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
ORDER BY 订单合同号, 订单号, 产品编码, 工序名称, 开始时间
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
SELECT '设备工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
|
||||||
|
256*25 AS 产品名称, 256*15 AS 工序名称, 256*12 AS 指派对象, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
|
||||||
|
0 AS 产品名称, 0 AS 工序名称, 0 AS 指派对象, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
ISNULL(工位名称, '') AS 指派对象,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 报工日期 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 报工日期 <= @结束日期)
|
||||||
|
AND 工位名称 IS NOT NULL AND 工位名称 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) = -1
|
||||||
|
ORDER BY 工位名称, 开始时间
|
||||||
|
END
|
||||||
|
GO
|
||||||
@@ -0,0 +1,492 @@
|
|||||||
|
USE [YL_MESDB]
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_项目工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 订单工时汇总 AS (
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.产品编码,
|
||||||
|
v.产品名称,
|
||||||
|
MAX(v.计划数量) AS 计划数量,
|
||||||
|
MAX(v.完成数量) AS 完成数量,
|
||||||
|
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
|
||||||
|
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
|
||||||
|
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY v.订单合同号, v.产品编码, v.产品名称
|
||||||
|
),
|
||||||
|
工序工时明细 AS (
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.产品编码,
|
||||||
|
v.工序名称,
|
||||||
|
v.操作人,
|
||||||
|
MAX(v.工位名称) AS 指派对象,
|
||||||
|
v.订单号,
|
||||||
|
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
|
||||||
|
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
|
||||||
|
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.操作人, v.订单号
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
合同号 AS contractNo,
|
||||||
|
产品名称 AS materialDesc,
|
||||||
|
产品编码 AS materialCode,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS operator,
|
||||||
|
'' AS 指派对象,
|
||||||
|
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
|
||||||
|
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(计划开始, '') AS planStart,
|
||||||
|
ISNULL(计划完成, '') AS planEnd,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
'' AS 订单号
|
||||||
|
FROM 订单工时汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
d.合同号 AS contractNo,
|
||||||
|
'' AS materialDesc,
|
||||||
|
d.产品编码 AS materialCode,
|
||||||
|
d.工序名称 AS processName,
|
||||||
|
d.操作人 AS operator,
|
||||||
|
ISNULL(d.指派对象, '') AS 指派对象,
|
||||||
|
'' AS qty,
|
||||||
|
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
d.计划开始 AS planStart,
|
||||||
|
d.计划完成 AS planEnd,
|
||||||
|
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
d.订单号 AS 订单号
|
||||||
|
FROM 工序工时明细 d
|
||||||
|
|
||||||
|
ORDER BY contractNo, materialCode, [Level], processName
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_作业者工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 操作人汇总 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值
|
||||||
|
ELSE 0
|
||||||
|
END) AS 报工数量,
|
||||||
|
CAST(SUM(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长
|
||||||
|
ELSE 总时长
|
||||||
|
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) != -1
|
||||||
|
GROUP BY 操作人
|
||||||
|
),
|
||||||
|
日期汇总 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值
|
||||||
|
ELSE 0
|
||||||
|
END) AS 报工数量,
|
||||||
|
CAST(SUM(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长
|
||||||
|
ELSE 总时长
|
||||||
|
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) != -1
|
||||||
|
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
工位名称 AS 指派对象,
|
||||||
|
CASE
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值
|
||||||
|
ELSE 0
|
||||||
|
END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长
|
||||||
|
ELSE 总时长
|
||||||
|
END / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
|
||||||
|
异常说明,
|
||||||
|
工序说明,
|
||||||
|
操作类别
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) != -1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
'' AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS 指派对象,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
'' AS 异常说明,
|
||||||
|
'' AS 工序说明,
|
||||||
|
'' AS 操作类别,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 操作人汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS 指派对象,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
'' AS 异常说明,
|
||||||
|
'' AS 工序说明,
|
||||||
|
'' AS 操作类别,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 日期汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
3 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
'' AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(指派对象, '') AS 指派对象,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
ISNULL(异常说明, '') AS 异常说明,
|
||||||
|
ISNULL(工序说明, '') AS 工序说明,
|
||||||
|
ISNULL(操作类别, '') AS 操作类别,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY operator, dateLabel, [Level]
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_任务工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 任务汇总 AS (
|
||||||
|
SELECT
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
操作类别,
|
||||||
|
MAX(计划数量) AS 计划数量,
|
||||||
|
MAX(完成数量) AS 完成数量,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(总时长) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称, 操作类别
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
工序名称,
|
||||||
|
操作人,
|
||||||
|
工位名称 AS 指派对象,
|
||||||
|
操作类别,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
'' AS operator,
|
||||||
|
'' AS 指派对象,
|
||||||
|
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
|
||||||
|
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
操作类别
|
||||||
|
FROM 任务汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(操作人, '') AS operator,
|
||||||
|
ISNULL(指派对象, '') AS 指派对象,
|
||||||
|
'' AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
操作类别
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[工时统计_设备工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 操作人汇总 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) = -1
|
||||||
|
GROUP BY 工位名称
|
||||||
|
),
|
||||||
|
日期汇总 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 工位名称 IS NOT NULL AND 工位名称 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) = -1
|
||||||
|
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
工位名称 AS 指派对象,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
AND ISNULL(阶段标识, 0) = -1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
'' AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS 指派对象,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 操作人汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS 指派对象,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 日期汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
3 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
'' AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(指派对象, '') AS 指派对象,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY operator, dateLabel, [Level]
|
||||||
|
END
|
||||||
|
GO
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
USE [YL_MESDB]
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER PROCEDURE [dbo].[生产管理_生产计划跟踪]
|
||||||
|
@订单号 int = 0,
|
||||||
|
@物料类型 nvarchar(50) = '',
|
||||||
|
@合同号 nvarchar(50) = '',
|
||||||
|
@产品编码 nvarchar(50) = '',
|
||||||
|
@产品名称 nvarchar(50) = '',
|
||||||
|
@工序名称 nvarchar(50) = '',
|
||||||
|
@要求完工日期1 nvarchar(50) = '',
|
||||||
|
@要求完工日期2 nvarchar(50) = '',
|
||||||
|
@计划开始1 nvarchar(50) = '',
|
||||||
|
@计划开始2 nvarchar(50) = '',
|
||||||
|
@计划完成1 nvarchar(50) = '',
|
||||||
|
@计划完成2 nvarchar(50) = '',
|
||||||
|
@排产状态 nvarchar(50) = '全部',
|
||||||
|
@指派对象 nvarchar(50) = '全部',
|
||||||
|
@自制件属性 nvarchar(50) = '全部',
|
||||||
|
@计划号 nvarchar(50) = '',
|
||||||
|
@加急状态 nvarchar(50) = '',
|
||||||
|
@单据状态 nvarchar(50) = ''
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
DECLARE @selectStr NVARCHAR(MAX)
|
||||||
|
DECLARE @selectStrWhere NVARCHAR(4000) = ' WHERE [物料类型] = ''pit_Resource'' '
|
||||||
|
|
||||||
|
SET @selectStr = N'
|
||||||
|
SELECT top 500
|
||||||
|
v.计划号,
|
||||||
|
加急总数,
|
||||||
|
拣配状态,
|
||||||
|
自制件属性,
|
||||||
|
入库数量,
|
||||||
|
外协分组,
|
||||||
|
case
|
||||||
|
when isnull(任务状态,0)=4 then ''已完成''
|
||||||
|
when isnull(任务状态,0)=2 then ''已开工''
|
||||||
|
when isnull(任务状态,0)=0 then ''待执行''
|
||||||
|
when isnull(任务状态,0)=1 then ''可执行''
|
||||||
|
else ''''
|
||||||
|
end as [任务状态],
|
||||||
|
case
|
||||||
|
when isnull(加工状态,0)=2 then ''辅助开始''
|
||||||
|
when isnull(加工状态,0)=3 then ''辅助结束''
|
||||||
|
when isnull(加工状态,0)=4 then ''开始加工''
|
||||||
|
when isnull(加工状态,0)=5 then ''暂停''
|
||||||
|
when isnull(加工状态,0)=6 then ''报工''
|
||||||
|
else ''''
|
||||||
|
end as [加工状态],
|
||||||
|
[计划数量订单],
|
||||||
|
ISNULL(开工时间, 0) AS 开工时间,
|
||||||
|
ISNULL(进度, 0) AS 进度,
|
||||||
|
v.[TaskAID],
|
||||||
|
[合同号],
|
||||||
|
v.[订单编号] AS 订单号,
|
||||||
|
[订单行号],
|
||||||
|
[订单拆分内码] AS 拆分内码,
|
||||||
|
[物料编号] AS 产品编码,
|
||||||
|
[物料描述] AS 产品名称,
|
||||||
|
TRIM(''.'' FROM TRIM(''0'' FROM CAST([计划数量] AS VARCHAR(30)))) AS 计划数量,
|
||||||
|
ISNULL(gy.标准工时, 0) AS 标准工时,
|
||||||
|
[计划完成] AS 要求完工日期,
|
||||||
|
[工序名称],
|
||||||
|
完成数量,
|
||||||
|
收料数量,
|
||||||
|
CASE
|
||||||
|
WHEN [加急状态] = 1 THEN ''加急''
|
||||||
|
ELSE ''''
|
||||||
|
END AS 加急状态,
|
||||||
|
加急数量,
|
||||||
|
性质,
|
||||||
|
ISNULL(总工时, 0) AS 总工时,
|
||||||
|
[占用情况],
|
||||||
|
[排产状态],
|
||||||
|
[工序计划数量],
|
||||||
|
指派对象编号,
|
||||||
|
指派对象,
|
||||||
|
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,
|
||||||
|
计划开始时间,
|
||||||
|
计划完成时间,
|
||||||
|
最晚开始时间,
|
||||||
|
[派工状态],
|
||||||
|
[外协通知],
|
||||||
|
[优先级],
|
||||||
|
[未完成说明],
|
||||||
|
[派工特殊说明],
|
||||||
|
[最后编辑人],
|
||||||
|
[最后编辑时间],
|
||||||
|
[二次派工],
|
||||||
|
CASE
|
||||||
|
WHEN zj_终检.计划号 IS NOT NULL THEN ''是''
|
||||||
|
ELSE ''否''
|
||||||
|
END AS 终检,
|
||||||
|
ISNULL(zj_收检.合格数合计, 0) AS 收检合格数,
|
||||||
|
ISNULL(zj_收检.不合格数合计, 0) AS 收检不合格数,
|
||||||
|
ISNULL(zj_收检.合格数合计, 0) + ISNULL(zj_收检.不合格数合计, 0) AS 收检总数,
|
||||||
|
ISNULL(jl.开始时间, 0) AS 开始时间,
|
||||||
|
ISNULL(jl.结束时间, 0) AS 结束时间,
|
||||||
|
ISNULL(jl.外协结束时间, 0) AS 外协结束时间,
|
||||||
|
STUFF((
|
||||||
|
SELECT '','' + d2.工序名称
|
||||||
|
FROM [dbo].[View_生产订单_MES] d2
|
||||||
|
WHERE d2.订单编号 = v.订单编号 order by d2.订单行号
|
||||||
|
FOR XML PATH('''')
|
||||||
|
), 1, 1, '''') AS 工艺路线
|
||||||
|
FROM [dbo].[View_生产订单全部(包括已关闭)] v
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT DISTINCT 计划号
|
||||||
|
FROM dbo.YL_质量检验_质检记录
|
||||||
|
WHERE 质检类型 = ''终检''
|
||||||
|
) zj_终检 ON v.[订单编号] = zj_终检.计划号
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
TaskAID,
|
||||||
|
SUM(ISNULL(合格数, 0)) AS 合格数合计,
|
||||||
|
SUM(ISNULL(不合格数, 0)) AS 不合格数合计
|
||||||
|
FROM dbo.YL_质量检验_质检记录
|
||||||
|
WHERE 质检类型 = ''收检''
|
||||||
|
GROUP BY TaskAID
|
||||||
|
) zj_收检 ON v.[TaskAID] = zj_收检.TaskAID
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
TaskAID,
|
||||||
|
min(ISNULL(开始时间, 0)) AS 开始时间,
|
||||||
|
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(开始时间, 0) ELSE NULL END) AS 外协结束时间,
|
||||||
|
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(结束时间, 0) ELSE NULL END) AS 结束时间
|
||||||
|
FROM [dbo].[YL_加工中心_操作记录表]
|
||||||
|
GROUP BY TaskAID
|
||||||
|
) jl ON v.[TaskAID] = jl.TaskAID
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
订单编号,
|
||||||
|
工艺顺序,
|
||||||
|
MAX(ISNULL(标准工时, 0)) AS 标准工时
|
||||||
|
FROM dbo.[车间生产管理工艺_零件生产工艺_工艺库]
|
||||||
|
GROUP BY 订单编号, 工艺顺序
|
||||||
|
) gy ON v.[订单编号] = gy.[订单编号] AND v.[订单行号] = gy.[工艺顺序]'
|
||||||
|
|
||||||
|
IF (@订单号 > 0)
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND v.[订单编号] = ' + CONVERT(VARCHAR(10), @订单号)
|
||||||
|
IF (@计划号 > 0)
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND v.[计划号] = '''+@计划号+''''
|
||||||
|
IF (@合同号 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [合同号] LIKE ''%' + @合同号 + '%'''
|
||||||
|
IF (@产品编码 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [物料编号] LIKE ''%' + @产品编码 + '%'''
|
||||||
|
IF (@产品名称 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [物料描述] LIKE ''%' + @产品名称 + '%'''
|
||||||
|
IF (@工序名称 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [工序名称] = ''' + @工序名称 + ''''
|
||||||
|
IF (@要求完工日期1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] >= ''' + @要求完工日期1 + ''''
|
||||||
|
IF (@要求完工日期2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] <= ''' + @要求完工日期2 + ''''
|
||||||
|
IF (@计划开始1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] >= ''' + @计划开始1 + ''''
|
||||||
|
IF (@计划开始2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] <= ''' + @计划开始2 + ''''
|
||||||
|
IF (@计划完成1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] >= ''' + @计划完成1 + ''''
|
||||||
|
IF (@计划完成2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] <= ''' + @计划完成2 + ''''
|
||||||
|
IF (@排产状态 = '未完成')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND ISNULL([排产状态], 0) = 0'
|
||||||
|
ELSE IF (@排产状态 = '已完成')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [排产状态] = 1'
|
||||||
|
IF (@自制件属性 = '机加')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] = ''机加件'''
|
||||||
|
ELSE IF (@自制件属性 = '装配')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] LIKE ''%装配'''
|
||||||
|
IF (@加急状态 = '加急')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [加急状态] = 1'
|
||||||
|
IF (@单据状态 = '正常')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is null'
|
||||||
|
ELSE IF (@单据状态 = '关闭')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is not null'
|
||||||
|
IF (@指派对象 <> '全部')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [指派对象] IN (SELECT value FROM STRING_SPLIT(''' + @指派对象 + ''', '',''))'
|
||||||
|
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' ORDER BY v.[计划完成] ASC, v.[订单编号] ASC'
|
||||||
|
SET @selectStr = @selectStr + @selectStrWhere
|
||||||
|
PRINT @selectStr
|
||||||
|
EXEC sp_executesql @selectStr
|
||||||
|
END
|
||||||
|
GO
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_任务工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 任务汇总 AS (
|
||||||
|
SELECT
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
操作类别,
|
||||||
|
MAX(计划数量) AS 计划数量,
|
||||||
|
MAX(完成数量) AS 完成数量,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(总时长) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY 订单合同号, 订单号, 产品编码, 产品名称, 工序名称,操作类别
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
工序名称,
|
||||||
|
操作人,
|
||||||
|
操作类别,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
'' AS operator,
|
||||||
|
CASE WHEN 计划数量 IS NULL THEN '0' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
|
||||||
|
CASE WHEN 完成数量 IS NULL THEN '0' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
操作类别
|
||||||
|
FROM 任务汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(操作人, '') AS operator,
|
||||||
|
'' AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
操作类别
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY contractNo, orderNo, productCode, processName, [Level], startTime
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_任务工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
-- 导出文件名和类型
|
||||||
|
SELECT '任务工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
-- 字段宽度
|
||||||
|
SELECT 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码, 256*25 AS 产品名称, 256*15 AS 工序名称,
|
||||||
|
256*12 AS 操作人, 256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 是否计算列
|
||||||
|
SELECT 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码, 0 AS 产品名称, 0 AS 工序名称,
|
||||||
|
0 AS 操作人, 0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 导出数据:每行都填满完整信息
|
||||||
|
SELECT
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
ISNULL(操作人, '') AS 操作人,
|
||||||
|
CASE WHEN 计划数量 IS NULL THEN '' WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
|
||||||
|
CASE WHEN 完成数量 IS NULL THEN '' WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
ORDER BY 订单合同号, 订单号, 产品编码, 工序名称, 开始时间
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 操作人汇总 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE
|
||||||
|
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常工时记为负数
|
||||||
|
ELSE 0
|
||||||
|
END) AS 报工数量,
|
||||||
|
CAST(SUM(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
|
||||||
|
ELSE 总时长
|
||||||
|
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) != -1
|
||||||
|
GROUP BY 操作人
|
||||||
|
),
|
||||||
|
日期汇总 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE
|
||||||
|
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常工时记为负数
|
||||||
|
ELSE 0
|
||||||
|
END) AS 报工数量,
|
||||||
|
CAST(SUM(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
|
||||||
|
ELSE 总时长
|
||||||
|
END) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) != -1
|
||||||
|
GROUP BY 操作人, CONVERT(VARCHAR(10), 开始时间, 120)
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
CASE
|
||||||
|
--WHEN 操作类别 IN ('报工', '辅助结束', '加班', '开始加工') THEN 操作数值
|
||||||
|
WHEN 操作类别 NOT IN ('异常') THEN 操作数值
|
||||||
|
WHEN 操作类别 = '异常' THEN -操作数值 -- 异常数量记为负数
|
||||||
|
ELSE 0
|
||||||
|
END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CASE
|
||||||
|
WHEN 操作类别 = '异常' THEN -总时长 -- 异常时长记为负数
|
||||||
|
ELSE 总时长
|
||||||
|
END / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时,
|
||||||
|
异常说明,
|
||||||
|
工序说明,
|
||||||
|
操作类别
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 开始时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 结束时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) != -1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
'' AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
'' AS 异常说明,
|
||||||
|
'' AS 工序说明,
|
||||||
|
'' AS 操作类别,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 操作人汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
'' AS 异常说明,
|
||||||
|
'' AS 工序说明,
|
||||||
|
'' AS 操作类别,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 日期汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
3 AS [Level],
|
||||||
|
操作人 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
'' AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
ISNULL(异常说明, '') AS 异常说明,
|
||||||
|
ISNULL(工序说明, '') AS 工序说明,
|
||||||
|
ISNULL(操作类别, '') AS 操作类别,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY operator, dateLabel, [Level]
|
||||||
|
END
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_作业者工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
-- 导出文件名和类型
|
||||||
|
SELECT '作业者工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
-- 字段宽度
|
||||||
|
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
|
||||||
|
256*25 AS 产品名称, 256*15 AS 工序名称, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 是否计算列
|
||||||
|
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
|
||||||
|
0 AS 产品名称, 0 AS 工序名称, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 导出数据:每行都填满完整信息
|
||||||
|
SELECT
|
||||||
|
操作人,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束','加班','异常','开始加工') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(总时长 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM [dbo].[View_生产工时视图]
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) != -1
|
||||||
|
ORDER BY 操作人, 开始时间
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_设备工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 操作人汇总 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) = -1
|
||||||
|
GROUP BY 工位名称
|
||||||
|
),
|
||||||
|
日期汇总 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
COUNT(*) AS 报工次数,
|
||||||
|
SUM(CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 工位名称 IS NOT NULL AND 工位名称 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) = -1
|
||||||
|
GROUP BY 工位名称, CONVERT(VARCHAR(10), 开始时间, 120)
|
||||||
|
),
|
||||||
|
报工明细 AS (
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
订单合同号 AS 合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
工序名称,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN 操作数值 ELSE 0 END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS 工时小时
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND 操作人 IS NOT NULL AND 操作人 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) = -1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
'' AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 操作人汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
CAST(报工次数 AS VARCHAR(20)) AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
'' AS contractNo,
|
||||||
|
'' AS orderNo,
|
||||||
|
'' AS productCode,
|
||||||
|
'' AS productName,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS startTime,
|
||||||
|
'' AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 日期汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
3 AS [Level],
|
||||||
|
工位名称 AS operator,
|
||||||
|
工作日期 AS dateLabel,
|
||||||
|
'' AS reportCount,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(合同号, '') AS contractNo,
|
||||||
|
ISNULL(订单号, '') AS orderNo,
|
||||||
|
ISNULL(产品编码, '') AS productCode,
|
||||||
|
ISNULL(产品名称, '') AS productName,
|
||||||
|
ISNULL(工序名称, '') AS processName,
|
||||||
|
ISNULL(开始时间, '') AS startTime,
|
||||||
|
ISNULL(结束时间, '') AS endTime,
|
||||||
|
CAST(工时小时 AS VARCHAR(20)) AS workHours
|
||||||
|
FROM 报工明细
|
||||||
|
|
||||||
|
ORDER BY operator, dateLabel, [Level]
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[工时统计_设备工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
-- 导出文件名和类型
|
||||||
|
SELECT '设备工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
-- 字段宽度
|
||||||
|
SELECT 256*12 AS 操作人, 256*15 AS 工作日期, 256*20 AS 合同号, 256*12 AS 订单号, 256*40 AS 产品编码,
|
||||||
|
256*25 AS 产品名称, 256*15 AS 工序名称, 256*10 AS 报工数量, 256*20 AS 开始时间, 256*20 AS 结束时间, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 是否计算列
|
||||||
|
SELECT 0 AS 操作人, 0 AS 工作日期, 0 AS 合同号, 0 AS 订单号, 0 AS 产品编码,
|
||||||
|
0 AS 产品名称, 0 AS 工序名称, 0 AS 报工数量, 0 AS 开始时间, 0 AS 结束时间, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 导出数据:每行都填满完整信息
|
||||||
|
SELECT
|
||||||
|
工位名称,
|
||||||
|
CONVERT(VARCHAR(10), 开始时间, 120) AS 工作日期,
|
||||||
|
ISNULL(订单合同号, '') AS 合同号,
|
||||||
|
ISNULL(订单号, '') AS 订单号,
|
||||||
|
ISNULL(产品编码, '') AS 产品编码,
|
||||||
|
ISNULL(产品名称, '') AS 产品名称,
|
||||||
|
ISNULL(工序名称, '') AS 工序名称,
|
||||||
|
CASE WHEN 操作类别 IN ('报工', '辅助结束') THEN CAST(操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(19), 开始时间, 120) AS 开始时间,
|
||||||
|
CONVERT(VARCHAR(19), 结束时间, 120) AS 结束时间,
|
||||||
|
CAST(CAST(加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 报工日期 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 报工日期 <= @结束日期)
|
||||||
|
AND 工位名称 IS NOT NULL AND 工位名称 != ''
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR 订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR 工位名称 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR 产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR 工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR 订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
and isNull(阶段标识,0) = -1
|
||||||
|
ORDER BY 工位名称, 开始时间
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
CREATE PROCEDURE [dbo].[工时统计_项目工时_查询]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 订单工时汇总 AS (
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.产品编码,
|
||||||
|
v.产品名称,
|
||||||
|
MAX(v.计划数量) AS 计划数量,
|
||||||
|
MAX(v.完成数量) AS 完成数量,
|
||||||
|
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
|
||||||
|
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成,
|
||||||
|
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 总工时小时
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY v.订单合同号, v.产品编码, v.产品名称
|
||||||
|
),
|
||||||
|
工序工时明细 AS (
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.产品编码,
|
||||||
|
v.工序名称,
|
||||||
|
v.操作人,
|
||||||
|
v.订单号,
|
||||||
|
SUM(CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN v.操作数值 ELSE 0 END) AS 报工数量,
|
||||||
|
CAST(SUM(v.加工工时) / 60.0 / 60.0 AS DECIMAL(10,1)) AS 工时小时,
|
||||||
|
MIN(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划开始,
|
||||||
|
MAX(CONVERT(VARCHAR(10), v.报工日期, 120)) AS 计划完成
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE (@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
GROUP BY v.订单合同号, v.产品编码, v.工序名称, v.操作人,v.订单号
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
1 AS [Level],
|
||||||
|
合同号 AS contractNo,
|
||||||
|
产品名称 AS materialDesc,
|
||||||
|
产品编码 AS materialCode,
|
||||||
|
'' AS processName,
|
||||||
|
'' AS operator,
|
||||||
|
CASE WHEN 计划数量 = FLOOR(计划数量) THEN CAST(CAST(计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END + '/' +
|
||||||
|
CASE WHEN 完成数量 = FLOOR(完成数量) THEN CAST(CAST(完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS qty,
|
||||||
|
CAST(报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
ISNULL(计划开始, '') AS planStart,
|
||||||
|
ISNULL(计划完成, '') AS planEnd,
|
||||||
|
CAST(总工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
'' AS 订单号
|
||||||
|
FROM 订单工时汇总
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
2 AS [Level],
|
||||||
|
d.合同号 AS contractNo,
|
||||||
|
'' AS materialDesc,
|
||||||
|
d.产品编码 AS materialCode,
|
||||||
|
d.工序名称 AS processName,
|
||||||
|
d.操作人 AS operator,
|
||||||
|
'' AS qty,
|
||||||
|
CAST(d.报工数量 AS VARCHAR(20)) AS reportQty,
|
||||||
|
d.计划开始 AS planStart,
|
||||||
|
d.计划完成 AS planEnd,
|
||||||
|
CAST(d.工时小时 AS VARCHAR(20)) AS workHours,
|
||||||
|
d.订单号 AS 订单号
|
||||||
|
FROM 工序工时明细 d
|
||||||
|
|
||||||
|
ORDER BY contractNo, materialCode, [Level], processName
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
CREATE PROCEDURE [dbo].[工时统计_项目工时_查询_导出]
|
||||||
|
@合同号 NVARCHAR(50) = NULL,
|
||||||
|
@操作人 NVARCHAR(50) = NULL,
|
||||||
|
@产品编码 NVARCHAR(100) = NULL,
|
||||||
|
@工序名称 NVARCHAR(50) = NULL,
|
||||||
|
@订单号 NVARCHAR(50) = NULL,
|
||||||
|
@开始日期 DATE = NULL,
|
||||||
|
@结束日期 DATE = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
-- 导出文件名和类型
|
||||||
|
SELECT '项目工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype
|
||||||
|
|
||||||
|
-- 字段宽度
|
||||||
|
SELECT 256*20 AS 合同号, 256*20 AS 订单号,256*30 AS 产品名称, 256*40 AS 产品编码, 256*15 AS 工序名称, 256*12 AS 操作人,
|
||||||
|
256*12 AS 计划数量, 256*12 AS 完成数量, 256*10 AS 报工数量, 256*15 AS 计划开始, 256*15 AS 计划完成, 256*12 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 是否计算列
|
||||||
|
SELECT 0 AS 合同号, 0 AS 订单号,0 AS 产品名称, 0 AS 产品编码, 0 AS 工序名称, 0 AS 操作人,
|
||||||
|
0 AS 计划数量, 0 AS 完成数量, 0 AS 报工数量, 0 AS 计划开始, 0 AS 计划完成, 0 AS '工时(h)'
|
||||||
|
|
||||||
|
-- 导出数据:每行都填满完整信息
|
||||||
|
SELECT
|
||||||
|
v.订单合同号 AS 合同号,
|
||||||
|
v.订单号,
|
||||||
|
v.产品名称,
|
||||||
|
v.产品编码,
|
||||||
|
v.工序名称,
|
||||||
|
v.操作人,
|
||||||
|
CASE WHEN v.计划数量 IS NULL THEN '' WHEN v.计划数量 = FLOOR(v.计划数量) THEN CAST(CAST(v.计划数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.计划数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 计划数量,
|
||||||
|
CASE WHEN v.完成数量 IS NULL THEN '' WHEN v.完成数量 = FLOOR(v.完成数量) THEN CAST(CAST(v.完成数量 AS INT) AS VARCHAR(20)) ELSE CAST(CAST(v.完成数量 AS DECIMAL(10,1)) AS VARCHAR(20)) END AS 完成数量,
|
||||||
|
CASE WHEN v.操作类别 IN ('报工', '辅助结束') THEN CAST(v.操作数值 AS VARCHAR(20)) ELSE '0' END AS 报工数量,
|
||||||
|
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划开始,
|
||||||
|
CONVERT(VARCHAR(10), v.报工日期, 120) AS 计划完成,
|
||||||
|
CAST(CAST(v.加工工时 / 60.0 / 60.0 AS DECIMAL(10,2)) AS VARCHAR(20)) AS '工时(h)'
|
||||||
|
FROM View_生产工时视图 v
|
||||||
|
WHERE(@开始日期 IS NULL OR @开始日期 = '' OR 结束时间 >= @开始日期)
|
||||||
|
AND (@结束日期 IS NULL OR @结束日期 = '' OR 开始时间 <= @结束日期)
|
||||||
|
AND (@合同号 IS NULL OR @合同号 = '' OR v.订单合同号 LIKE '%' + @合同号 + '%')
|
||||||
|
AND (@操作人 IS NULL OR @操作人 = '' OR v.操作人 LIKE '%' + @操作人 + '%')
|
||||||
|
AND (@产品编码 IS NULL OR @产品编码 = '' OR v.产品编码 LIKE '%' + @产品编码 + '%')
|
||||||
|
AND (@工序名称 IS NULL OR @工序名称 = '' OR v.工序名称 LIKE '%' + @工序名称 + '%')
|
||||||
|
AND (@订单号 IS NULL OR @订单号 = '' OR v.订单号 LIKE '%' + @订单号 + '%')
|
||||||
|
ORDER BY v.订单合同号, v.产品编码, v.工序名称, v.操作人,v.订单号
|
||||||
|
END
|
||||||
|
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
|
||||||
|
CREATE PROCEDURE [dbo].[生产管理_生产计划跟踪]
|
||||||
|
@订单号 int = 0,
|
||||||
|
@物料类型 nvarchar(50) = '', --自制件、装配件
|
||||||
|
@合同号 nvarchar(50) = '',
|
||||||
|
@产品编码 nvarchar(50) = '',
|
||||||
|
@产品名称 nvarchar(50) = '',
|
||||||
|
@工序名称 nvarchar(50) = '',
|
||||||
|
@要求完工日期1 nvarchar(50) = '',
|
||||||
|
@要求完工日期2 nvarchar(50) = '',
|
||||||
|
@计划开始1 nvarchar(50) = '',
|
||||||
|
@计划开始2 nvarchar(50) = '',
|
||||||
|
@计划完成1 nvarchar(50) = '',
|
||||||
|
@计划完成2 nvarchar(50) = '',
|
||||||
|
@排产状态 nvarchar(50) = '全部', --全部,已完成、未完成
|
||||||
|
@指派对象 nvarchar(50) = '全部',
|
||||||
|
@自制件属性 nvarchar(50) = '全部',
|
||||||
|
@计划号 nvarchar(50) = '',
|
||||||
|
@加急状态 nvarchar(50) = '',
|
||||||
|
@单据状态 nvarchar(50) = ''
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
DECLARE @selectStr NVARCHAR(MAX)
|
||||||
|
DECLARE @selectStrWhere NVARCHAR(4000) = ' WHERE [物料类型] = ''pit_Resource'' '
|
||||||
|
|
||||||
|
SET @selectStr = N'
|
||||||
|
SELECT top 500
|
||||||
|
v.计划号,
|
||||||
|
加急总数,
|
||||||
|
拣配状态,
|
||||||
|
自制件属性,
|
||||||
|
入库数量,
|
||||||
|
外协分组,
|
||||||
|
case
|
||||||
|
when isnull(任务状态,0)=4 then ''已完成''
|
||||||
|
when isnull(任务状态,0)=2 then ''已开工''
|
||||||
|
when isnull(任务状态,0)=0 then ''待执行''
|
||||||
|
when isnull(任务状态,0)=1 then ''可执行''
|
||||||
|
else ''''
|
||||||
|
end as [任务状态],
|
||||||
|
case
|
||||||
|
when isnull(加工状态,0)=2 then ''辅助开始''
|
||||||
|
when isnull(加工状态,0)=3 then ''辅助结束''
|
||||||
|
when isnull(加工状态,0)=4 then ''开始加工''
|
||||||
|
when isnull(加工状态,0)=5 then ''暂停''
|
||||||
|
when isnull(加工状态,0)=6 then ''报工''
|
||||||
|
else ''''
|
||||||
|
end as [加工状态],
|
||||||
|
[计划数量订单],
|
||||||
|
ISNULL(开工时间, 0) AS 开工时间,
|
||||||
|
ISNULL(进度, 0) AS 进度,
|
||||||
|
v.[TaskAID],
|
||||||
|
[合同号],
|
||||||
|
v.[订单编号] AS 订单号,
|
||||||
|
[订单行号],
|
||||||
|
[订单拆分内码] AS 拆分内码,
|
||||||
|
[物料编号] AS 产品编码,
|
||||||
|
[物料描述] AS 产品名称,
|
||||||
|
TRIM(''.'' FROM TRIM(''0'' FROM CAST([计划数量] AS VARCHAR(30)))) AS 计划数量,
|
||||||
|
[计划完成] AS 要求完工日期,
|
||||||
|
[工序名称],
|
||||||
|
完成数量,
|
||||||
|
收料数量,
|
||||||
|
CASE
|
||||||
|
WHEN [加急状态] = 1 THEN ''加急''
|
||||||
|
ELSE ''''
|
||||||
|
END AS 加急状态,
|
||||||
|
加急数量,
|
||||||
|
性质,
|
||||||
|
ISNULL(总工时, 0) AS 总工时,
|
||||||
|
[占用情况],
|
||||||
|
[排产状态],
|
||||||
|
[工序计划数量],
|
||||||
|
指派对象编号,
|
||||||
|
指派对象,
|
||||||
|
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,
|
||||||
|
计划开始时间,
|
||||||
|
计划完成时间,
|
||||||
|
最晚开始时间,
|
||||||
|
[派工状态],
|
||||||
|
[外协通知],
|
||||||
|
[优先级],
|
||||||
|
[未完成说明],
|
||||||
|
[派工特殊说明],
|
||||||
|
[最后编辑人],
|
||||||
|
[最后编辑时间],
|
||||||
|
[二次派工],
|
||||||
|
CASE
|
||||||
|
WHEN zj_终检.计划号 IS NOT NULL THEN ''是''
|
||||||
|
ELSE ''否''
|
||||||
|
END AS 终检,
|
||||||
|
-- 新增收检相关字段
|
||||||
|
ISNULL(zj_收检.合格数合计, 0) AS 收检合格数,
|
||||||
|
ISNULL(zj_收检.不合格数合计, 0) AS 收检不合格数,
|
||||||
|
ISNULL(zj_收检.合格数合计, 0) + ISNULL(zj_收检.不合格数合计, 0) AS 收检总数,
|
||||||
|
ISNULL(jl.开始时间, 0) AS 开始时间,
|
||||||
|
ISNULL(jl.结束时间, 0) AS 结束时间,
|
||||||
|
ISNULL(jl.外协结束时间, 0) AS 外协结束时间,
|
||||||
|
STUFF((
|
||||||
|
SELECT '','' + d2.工序名称
|
||||||
|
FROM [dbo].[View_生产订单_MES] d2
|
||||||
|
WHERE d2.订单编号 = v.订单编号 order by d2.订单行号
|
||||||
|
FOR XML PATH('''')
|
||||||
|
), 1, 1, '''') AS 工艺路线
|
||||||
|
FROM [dbo].[View_生产订单全部(包括已关闭)] v
|
||||||
|
-- 终检判断
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT DISTINCT 计划号
|
||||||
|
FROM dbo.YL_质量检验_质检记录
|
||||||
|
WHERE 质检类型 = ''终检''
|
||||||
|
) zj_终检 ON v.[订单编号] = zj_终检.计划号
|
||||||
|
-- 收检数量统计
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
TaskAID,
|
||||||
|
SUM(ISNULL(合格数, 0)) AS 合格数合计,
|
||||||
|
SUM(ISNULL(不合格数, 0)) AS 不合格数合计
|
||||||
|
FROM dbo.YL_质量检验_质检记录
|
||||||
|
WHERE 质检类型 = ''收检''
|
||||||
|
GROUP BY TaskAID
|
||||||
|
) zj_收检 ON v.[TaskAID] = zj_收检.TaskAID
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
TaskAID,
|
||||||
|
min(ISNULL(开始时间, 0)) AS 开始时间,
|
||||||
|
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(开始时间, 0) ELSE NULL END) AS 外协结束时间,
|
||||||
|
MAX(CASE WHEN 操作类别 = ''报工'' THEN ISNULL(结束时间, 0) ELSE NULL END) AS 结束时间
|
||||||
|
FROM [dbo].[YL_加工中心_操作记录表]
|
||||||
|
GROUP BY TaskAID
|
||||||
|
) jl ON v.[TaskAID] = jl.TaskAID'
|
||||||
|
|
||||||
|
-- 添加筛选条件
|
||||||
|
IF (@订单号 > 0)
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [订单编号] = ' + CONVERT(VARCHAR(10), @订单号)
|
||||||
|
IF (@计划号 > 0)
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND v.[计划号] = '''+@计划号+''''
|
||||||
|
IF (@合同号 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [合同号] LIKE ''%' + @合同号 + '%'''
|
||||||
|
|
||||||
|
IF (@产品编码 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [物料编号] LIKE ''%' + @产品编码 + '%'''
|
||||||
|
|
||||||
|
IF (@产品名称 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [物料描述] LIKE ''%' + @产品名称 + '%'''
|
||||||
|
|
||||||
|
IF (@工序名称 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [工序名称] = ''' + @工序名称 + ''''
|
||||||
|
|
||||||
|
IF (@要求完工日期1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] >= ''' + @要求完工日期1 + ''''
|
||||||
|
|
||||||
|
IF (@要求完工日期2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成] <= ''' + @要求完工日期2 + ''''
|
||||||
|
|
||||||
|
IF (@计划开始1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] >= ''' + @计划开始1 + ''''
|
||||||
|
|
||||||
|
IF (@计划开始2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划开始时间] <= ''' + @计划开始2 + ''''
|
||||||
|
|
||||||
|
IF (@计划完成1 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] >= ''' + @计划完成1 + ''''
|
||||||
|
|
||||||
|
IF (@计划完成2 <> '')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [计划完成时间] <= ''' + @计划完成2 + ''''
|
||||||
|
|
||||||
|
IF (@排产状态 = '未完成')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND ISNULL([排产状态], 0) = 0'
|
||||||
|
ELSE IF (@排产状态 = '已完成')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [排产状态] = 1'
|
||||||
|
IF (@自制件属性 = '机加')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] = ''机加件'''
|
||||||
|
ELSE IF (@自制件属性 = '装配')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [自制件属性] LIKE ''%装配'''
|
||||||
|
|
||||||
|
IF (@加急状态 = '加急')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [加急状态] = 1'
|
||||||
|
IF (@单据状态 = '正常')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is null'
|
||||||
|
ELSE IF (@单据状态 = '关闭')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [单据状态] is not null'
|
||||||
|
IF (@指派对象 <> '全部')
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' AND [指派对象] IN (SELECT value FROM STRING_SPLIT(''' + @指派对象 + ''', '',''))'
|
||||||
|
|
||||||
|
-- 添加排序
|
||||||
|
SET @selectStrWhere = @selectStrWhere + ' ORDER BY [计划完成] ASC, [订单编号] ASC'
|
||||||
|
|
||||||
|
-- 合并SQL
|
||||||
|
SET @selectStr = @selectStr + @selectStrWhere
|
||||||
|
|
||||||
|
-- 打印SQL(调试用)
|
||||||
|
PRINT @selectStr
|
||||||
|
|
||||||
|
-- 执行查询
|
||||||
|
EXEC sp_executesql @selectStr
|
||||||
|
END
|
||||||
Binary file not shown.
81
MES_Manage_View_V20/sql_异常提醒_装配及时送检_查询.sql
Normal file
81
MES_Manage_View_V20/sql_异常提醒_装配及时送检_查询.sql
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
USE [YL_MESDB]
|
||||||
|
GO
|
||||||
|
|
||||||
|
SET ANSI_NULLS ON
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE OR ALTER PROCEDURE [dbo].[异常提醒_装配及时送检_查询]
|
||||||
|
@订单号 int = 0,
|
||||||
|
@合同号 nvarchar(50) = N'',
|
||||||
|
@产品编码 nvarchar(50) = N'',
|
||||||
|
@产品名称 nvarchar(50) = N'',
|
||||||
|
@工序名称 nvarchar(50) = N'',
|
||||||
|
@辅助配件 nvarchar(50) = N'不含'
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
;WITH 装配任务 AS (
|
||||||
|
SELECT
|
||||||
|
CASE WHEN v.[物料描述] LIKE N'%系统%' THEN N'系统类' ELSE N'阀类' END AS 任务类型,
|
||||||
|
v.[合同号],
|
||||||
|
v.[订单编号] AS 订单号,
|
||||||
|
v.[物料编号] AS 产品编码,
|
||||||
|
v.[物料描述] AS 产品名称,
|
||||||
|
TRIM('.' FROM TRIM('0' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数量,
|
||||||
|
v.[工序名称],
|
||||||
|
v.[指派对象],
|
||||||
|
v.[计划开始时间],
|
||||||
|
v.[计划完成时间],
|
||||||
|
v.[齐套时间],
|
||||||
|
v.[钣金预达时间],
|
||||||
|
CASE
|
||||||
|
WHEN v.[物料描述] LIKE N'%系统%'
|
||||||
|
THEN ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[钣金预达时间]))
|
||||||
|
ELSE ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[齐套时间]))
|
||||||
|
END AS 预计送检日期,
|
||||||
|
CASE WHEN ISNULL(v.[加急状态], 0) = 1 THEN N'加急' ELSE N'' END AS 加急状态
|
||||||
|
FROM [dbo].[View_生产订单_MES] v
|
||||||
|
WHERE v.[物料类型] = 'pit_Resource'
|
||||||
|
AND v.[自制件属性] LIKE N'%装配%'
|
||||||
|
AND ISNULL(v.[任务状态], 0) < 4
|
||||||
|
AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
|
||||||
|
AND (@合同号 = N'' OR v.[合同号] LIKE N'%' + @合同号 + N'%')
|
||||||
|
AND (@产品编码 = N'' OR v.[物料编号] LIKE N'%' + @产品编码 + N'%')
|
||||||
|
AND (@产品名称 = N'' OR v.[物料描述] LIKE N'%' + @产品名称 + N'%')
|
||||||
|
AND (@工序名称 = N'' OR v.[工序名称] = @工序名称)
|
||||||
|
AND (
|
||||||
|
@辅助配件 <> N'不含'
|
||||||
|
OR (
|
||||||
|
v.[物料描述] NOT LIKE N'%软管总成%'
|
||||||
|
AND v.[物料描述] NOT LIKE N'%发货部件%'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AND v.[不装配] <> N'否'
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
任务类型,
|
||||||
|
合同号,
|
||||||
|
订单号,
|
||||||
|
产品编码,
|
||||||
|
产品名称,
|
||||||
|
计划数量,
|
||||||
|
工序名称,
|
||||||
|
指派对象,
|
||||||
|
计划开始时间,
|
||||||
|
计划完成时间,
|
||||||
|
齐套时间,
|
||||||
|
钣金预达时间,
|
||||||
|
预计送检日期,
|
||||||
|
加急状态
|
||||||
|
FROM 装配任务
|
||||||
|
WHERE 预计送检日期 IS NOT NULL
|
||||||
|
AND CONVERT(date, 预计送检日期) <= CONVERT(date, GETDATE())
|
||||||
|
ORDER BY
|
||||||
|
CONVERT(date, 预计送检日期),
|
||||||
|
CASE WHEN 加急状态 = N'加急' THEN 0 ELSE 1 END,
|
||||||
|
订单号;
|
||||||
|
END
|
||||||
|
GO
|
||||||
@@ -0,0 +1,267 @@
|
|||||||
|
<template>
|
||||||
|
<div class="assembly-punctual-inspection">
|
||||||
|
<el-card>
|
||||||
|
<div class="search-container">
|
||||||
|
<span class="show-text">生产订单:</span>
|
||||||
|
<el-input
|
||||||
|
v-model="productionOrder"
|
||||||
|
placeholder="请输入生产订单"
|
||||||
|
clearable
|
||||||
|
style="width: 150px; margin-right: 10px"
|
||||||
|
@keyup.enter.native="searchTable"
|
||||||
|
/>
|
||||||
|
<span class="show-text">销售订单:</span>
|
||||||
|
<el-input
|
||||||
|
v-model="salesOrder"
|
||||||
|
placeholder="请输入销售订单"
|
||||||
|
clearable
|
||||||
|
style="width: 150px; margin-right: 10px"
|
||||||
|
@keyup.enter.native="searchTable"
|
||||||
|
/>
|
||||||
|
<span class="show-text">物料编码:</span>
|
||||||
|
<el-input
|
||||||
|
v-model="materialCode"
|
||||||
|
placeholder="请输入物料编码"
|
||||||
|
clearable
|
||||||
|
style="width: 180px; margin-right: 10px"
|
||||||
|
@keyup.enter.native="searchTable"
|
||||||
|
/>
|
||||||
|
<span class="show-text">物料名称:</span>
|
||||||
|
<el-input
|
||||||
|
v-model="materialName"
|
||||||
|
placeholder="请输入物料名称"
|
||||||
|
clearable
|
||||||
|
style="width: 180px; margin-right: 10px"
|
||||||
|
@keyup.enter.native="searchTable"
|
||||||
|
/>
|
||||||
|
<span class="show-text">工序名称:</span>
|
||||||
|
<el-input
|
||||||
|
v-model="processName"
|
||||||
|
placeholder="请输入工序名称"
|
||||||
|
clearable
|
||||||
|
style="width: 150px; margin-right: 10px"
|
||||||
|
@keyup.enter.native="searchTable"
|
||||||
|
/>
|
||||||
|
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="searchTable">查询</el-button>
|
||||||
|
<el-button :disabled="loading || tableData.length === 0" icon="el-icon-download" plain type="success" @click="exportToExcel">导出</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-tip">
|
||||||
|
仅显示预计送检日期小于等于今天的数据
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="tableData"
|
||||||
|
:height="'70vh'"
|
||||||
|
:row-class-name="tableRowClassName"
|
||||||
|
border
|
||||||
|
element-loading-background="rgba(0, 0, 0, 0.2)"
|
||||||
|
element-loading-spinner="el-icon-loading"
|
||||||
|
highlight-current-row
|
||||||
|
size="mini"
|
||||||
|
style="width: 100%; margin-top: 16px"
|
||||||
|
tooltip-effect="dark"
|
||||||
|
>
|
||||||
|
<el-table-column align="center" label="序号" type="index" width="60" fixed />
|
||||||
|
<el-table-column align="center" prop="任务类型" label="任务类型" width="90" fixed />
|
||||||
|
<el-table-column align="center" prop="预计送检日期" label="预计送检日期" width="120" fixed show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.预计送检日期) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" prop="订单号" label="生产订单" width="100" fixed />
|
||||||
|
<el-table-column align="center" prop="合同号" label="销售订单" width="120" fixed show-overflow-tooltip />
|
||||||
|
<el-table-column align="center" prop="产品编码" label="物料编码" width="180" show-overflow-tooltip />
|
||||||
|
<el-table-column align="center" prop="产品名称" label="物料名称" width="220" show-overflow-tooltip />
|
||||||
|
<el-table-column align="center" prop="工序名称" label="工序名称" width="120" show-overflow-tooltip />
|
||||||
|
<el-table-column align="center" prop="计划数量" label="计划数量" width="100" />
|
||||||
|
<el-table-column align="center" prop="指派对象" label="指派对象" width="140" show-overflow-tooltip />
|
||||||
|
<el-table-column align="center" prop="计划开始时间" label="计划开始时间" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.计划开始时间) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" prop="计划完成时间" label="计划完成时间" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.计划完成时间) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" prop="齐套时间" label="齐套时间" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.齐套时间) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" prop="钣金预达时间" label="钣金预达时间" width="120">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.钣金预达时间) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" prop="加急状态" label="加急状态" width="90" />
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as XLSX from 'xlsx'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'AssemblyPunctualInspection',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
productionOrder: '',
|
||||||
|
salesOrder: '',
|
||||||
|
materialCode: '',
|
||||||
|
materialName: '',
|
||||||
|
processName: '',
|
||||||
|
loading: false,
|
||||||
|
tableData: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.searchTable()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
formatDate(value) {
|
||||||
|
if (!value) return ''
|
||||||
|
return String(value).split(' ')[0]
|
||||||
|
},
|
||||||
|
tableRowClassName({ row }) {
|
||||||
|
if (this.isOverdue(row.预计送检日期)) {
|
||||||
|
return 'overdue-row'
|
||||||
|
}
|
||||||
|
if (this.isToday(row.预计送检日期)) {
|
||||||
|
return 'today-row'
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
},
|
||||||
|
async searchTable() {
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
const param = []
|
||||||
|
param.push(['订单号', this.productionOrder || 0])
|
||||||
|
param.push(['合同号', this.salesOrder])
|
||||||
|
param.push(['产品编码', this.materialCode])
|
||||||
|
param.push(['产品名称', this.materialName])
|
||||||
|
param.push(['工序名称', this.processName])
|
||||||
|
param.push(['辅助配件', '不含'])
|
||||||
|
|
||||||
|
const data = this.CreateData('11', '异常提醒_装配及时送检_查询', param)
|
||||||
|
const response = await this.ExecDatabase(data)
|
||||||
|
this.tableData = response.data || []
|
||||||
|
} catch (error) {
|
||||||
|
this.$message.error('查询失败: ' + error.message)
|
||||||
|
this.tableData = []
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isOverdue(value) {
|
||||||
|
const targetTime = this.getDateTime(value)
|
||||||
|
if (targetTime === Infinity) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return targetTime < this.getTodayTime()
|
||||||
|
},
|
||||||
|
isToday(value) {
|
||||||
|
const targetTime = this.getDateTime(value)
|
||||||
|
if (targetTime === Infinity) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return targetTime === this.getTodayTime()
|
||||||
|
},
|
||||||
|
getTodayTime() {
|
||||||
|
const now = new Date()
|
||||||
|
now.setHours(0, 0, 0, 0)
|
||||||
|
return now.getTime()
|
||||||
|
},
|
||||||
|
getDateTime(value) {
|
||||||
|
if (!value) {
|
||||||
|
return Infinity
|
||||||
|
}
|
||||||
|
const dateText = this.formatDate(value).replace(/-/g, '/')
|
||||||
|
const date = new Date(dateText)
|
||||||
|
if (Number.isNaN(date.getTime())) {
|
||||||
|
return Infinity
|
||||||
|
}
|
||||||
|
date.setHours(0, 0, 0, 0)
|
||||||
|
return date.getTime()
|
||||||
|
},
|
||||||
|
exportToExcel() {
|
||||||
|
const exportData = this.tableData.map((item, index) => ({
|
||||||
|
序号: index + 1,
|
||||||
|
任务类型: item.任务类型,
|
||||||
|
预计送检日期: item.预计送检日期,
|
||||||
|
生产订单: item.订单号,
|
||||||
|
销售订单: item.合同号,
|
||||||
|
物料编码: item.产品编码,
|
||||||
|
物料名称: item.产品名称,
|
||||||
|
工序名称: item.工序名称,
|
||||||
|
计划数量: item.计划数量,
|
||||||
|
指派对象: item.指派对象,
|
||||||
|
计划开始时间: this.formatDate(item.计划开始时间),
|
||||||
|
计划完成时间: this.formatDate(item.计划完成时间),
|
||||||
|
齐套时间: this.formatDate(item.齐套时间),
|
||||||
|
钣金预达时间: this.formatDate(item.钣金预达时间),
|
||||||
|
加急状态: item.加急状态
|
||||||
|
}))
|
||||||
|
|
||||||
|
const wb = XLSX.utils.book_new()
|
||||||
|
const ws = XLSX.utils.json_to_sheet(exportData)
|
||||||
|
ws['!cols'] = [
|
||||||
|
{ wch: 8 },
|
||||||
|
{ wch: 10 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 22 },
|
||||||
|
{ wch: 28 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 10 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 14 },
|
||||||
|
{ wch: 10 }
|
||||||
|
]
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, '装配及时送检')
|
||||||
|
XLSX.writeFile(wb, '装配及时送检.xlsx')
|
||||||
|
this.$message.success('导出成功')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.assembly-punctual-inspection {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-text {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-tip {
|
||||||
|
margin-top: 12px;
|
||||||
|
color: #909399;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .overdue-row > td {
|
||||||
|
background-color: #fde2e2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .today-row > td {
|
||||||
|
background-color: #faecd8 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -54,6 +54,7 @@
|
|||||||
<el-table-column align="center" label="序号" type="index" width="50" />
|
<el-table-column align="center" label="序号" type="index" width="50" />
|
||||||
<el-table-column align="center" label="工序名称" prop="工序名称" width="100" />
|
<el-table-column align="center" label="工序名称" prop="工序名称" width="100" />
|
||||||
<el-table-column align="center" label="计划数量" prop="计划数量" width="100" />
|
<el-table-column align="center" label="计划数量" prop="计划数量" width="100" />
|
||||||
|
<el-table-column align="center" label="标准工时" prop="标准工时" width="100" />
|
||||||
<el-table-column align="center" label="指派对象" prop="指派对象" width="100" />
|
<el-table-column align="center" label="指派对象" prop="指派对象" width="100" />
|
||||||
<!-- 在子数据中显示外协标识 -->
|
<!-- 在子数据中显示外协标识 -->
|
||||||
<!-- <el-table-column align="center" label="外协" width="80">
|
<!-- <el-table-column align="center" label="外协" width="80">
|
||||||
@@ -512,6 +513,7 @@ export default {
|
|||||||
进度: item.进度,
|
进度: item.进度,
|
||||||
拆分内码: item.拆分内码,
|
拆分内码: item.拆分内码,
|
||||||
计划数量: item.计划数量,
|
计划数量: item.计划数量,
|
||||||
|
标准工时: item.标准工时,
|
||||||
开工时间: item.开工时间,
|
开工时间: item.开工时间,
|
||||||
完成数量: item.完成数量,
|
完成数量: item.完成数量,
|
||||||
收料数量: item.收料数量,
|
收料数量: item.收料数量,
|
||||||
@@ -551,6 +553,7 @@ export default {
|
|||||||
进度: item.进度,
|
进度: item.进度,
|
||||||
拆分内码: item.拆分内码,
|
拆分内码: item.拆分内码,
|
||||||
计划数量: item.计划数量,
|
计划数量: item.计划数量,
|
||||||
|
标准工时: item.标准工时,
|
||||||
开工时间: item.开工时间,
|
开工时间: item.开工时间,
|
||||||
完成数量: item.完成数量,
|
完成数量: item.完成数量,
|
||||||
收料数量: item.收料数量,
|
收料数量: item.收料数量,
|
||||||
|
|||||||
@@ -80,6 +80,12 @@
|
|||||||
{{ scope.row.level === 2 ? scope.row.operator : '' }}
|
{{ scope.row.level === 2 ? scope.row.operator : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="指派对象" label="指派对象" width="120" align="center" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.level === 2 ? scope.row.指派对象 : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="qty" label="计划/完成" width="100" align="center" />
|
<el-table-column prop="qty" label="计划/完成" width="100" align="center" />
|
||||||
|
|
||||||
@@ -161,6 +167,12 @@
|
|||||||
{{ scope.row.level === 3 ? scope.row.processName : '' }}
|
{{ scope.row.level === 3 ? scope.row.processName : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="指派对象" label="指派对象" width="120" align="center" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.level === 3 ? scope.row.指派对象 : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="startTime" label="开始时间" width="150" align="center">
|
<el-table-column prop="startTime" label="开始时间" width="150" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -246,6 +258,12 @@
|
|||||||
{{ scope.row.level === 2 ? scope.row.operator : '' }}
|
{{ scope.row.level === 2 ? scope.row.operator : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="指派对象" label="指派对象" width="120" align="center" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.level === 2 ? scope.row.指派对象 : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="qty" label="计划/完成" width="100" align="center">
|
<el-table-column prop="qty" label="计划/完成" width="100" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -348,6 +366,12 @@
|
|||||||
{{ scope.row.level === 3 ? scope.row.processName : '' }}
|
{{ scope.row.level === 3 ? scope.row.processName : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="指派对象" label="指派对象" width="120" align="center" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.level === 3 ? scope.row.指派对象 : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column prop="startTime" label="开始时间" width="150" align="center">
|
<el-table-column prop="startTime" label="开始时间" width="150" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -510,6 +534,7 @@ export default {
|
|||||||
materialCode: row.materialCode,
|
materialCode: row.materialCode,
|
||||||
processName: row.processName,
|
processName: row.processName,
|
||||||
operator: row.operator,
|
operator: row.operator,
|
||||||
|
指派对象: row.指派对象,
|
||||||
qty: row.qty,
|
qty: row.qty,
|
||||||
reportQty: row.reportQty,
|
reportQty: row.reportQty,
|
||||||
planStart: row.planStart,
|
planStart: row.planStart,
|
||||||
@@ -613,6 +638,7 @@ export default {
|
|||||||
productCode: row.productCode,
|
productCode: row.productCode,
|
||||||
productName: row.productName,
|
productName: row.productName,
|
||||||
processName: row.processName,
|
processName: row.processName,
|
||||||
|
指派对象: row.指派对象,
|
||||||
reportQty: row.reportQty,
|
reportQty: row.reportQty,
|
||||||
startTime: row.startTime,
|
startTime: row.startTime,
|
||||||
endTime: row.endTime,
|
endTime: row.endTime,
|
||||||
@@ -683,6 +709,7 @@ export default {
|
|||||||
productCode: row.productCode,
|
productCode: row.productCode,
|
||||||
processName: row.processName,
|
processName: row.processName,
|
||||||
operator: row.operator,
|
operator: row.operator,
|
||||||
|
指派对象: row.指派对象,
|
||||||
reportQty: row.reportQty,
|
reportQty: row.reportQty,
|
||||||
startTime: row.startTime,
|
startTime: row.startTime,
|
||||||
endTime: row.endTime,
|
endTime: row.endTime,
|
||||||
|
|||||||
@@ -230,7 +230,7 @@
|
|||||||
<el-table-column
|
<el-table-column
|
||||||
align="center"
|
align="center"
|
||||||
label="采购收货单"
|
label="采购收货单"
|
||||||
width="80"
|
width="100"
|
||||||
prop="采购收货单"
|
prop="采购收货单"
|
||||||
/>
|
/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -823,6 +823,7 @@ export default {
|
|||||||
param.push(["检测时间", this.receiveCheckData.检测时间]);
|
param.push(["检测时间", this.receiveCheckData.检测时间]);
|
||||||
param.push(["检测说明", this.receiveCheckData.检测说明]);
|
param.push(["检测说明", this.receiveCheckData.检测说明]);
|
||||||
param.push(["放行数量", this.receiveCheckData.放行数量]);
|
param.push(["放行数量", this.receiveCheckData.放行数量]);
|
||||||
|
param.push(["工位名称", this.receiveCheckData.工位名称]);
|
||||||
console.log(param);
|
console.log(param);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
@keyup.enter.native="searchTable"
|
@keyup.enter.native="searchTable"
|
||||||
/>
|
/>
|
||||||
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="searchTable">查询</el-button>
|
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="searchTable">查询</el-button>
|
||||||
|
<el-button :disabled="loading" icon="el-icon-download" plain type="success" @click="exportToExcel">导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
@@ -56,11 +57,17 @@
|
|||||||
element-loading-background="rgba(0, 0, 0, 0.2)"
|
element-loading-background="rgba(0, 0, 0, 0.2)"
|
||||||
element-loading-spinner="el-icon-loading"
|
element-loading-spinner="el-icon-loading"
|
||||||
highlight-current-row
|
highlight-current-row
|
||||||
|
:row-class-name="tableRowClassName"
|
||||||
size="mini"
|
size="mini"
|
||||||
style="width: 100%; margin-top: 20px"
|
style="width: 100%; margin-top: 20px"
|
||||||
tooltip-effect="dark"
|
tooltip-effect="dark"
|
||||||
>
|
>
|
||||||
<el-table-column align="center" label="序号" type="index" width="60" fixed />
|
<el-table-column align="center" label="序号" type="index" width="60" fixed />
|
||||||
|
<el-table-column align="center" prop="预计送检日期" label="预计送检日期" width="120" fixed show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ formatDate(scope.row.预计送检日期) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column align="center" prop="销售订单" label="销售订单" width="120" fixed show-overflow-tooltip />
|
<el-table-column align="center" prop="销售订单" label="销售订单" width="120" fixed show-overflow-tooltip />
|
||||||
<el-table-column align="center" prop="生产订单" label="生产订单" width="100" fixed />
|
<el-table-column align="center" prop="生产订单" label="生产订单" width="100" fixed />
|
||||||
<el-table-column align="center" prop="物料名称" label="物料名称" width="170" show-overflow-tooltip />
|
<el-table-column align="center" prop="物料名称" label="物料名称" width="170" show-overflow-tooltip />
|
||||||
@@ -76,6 +83,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import * as XLSX from 'xlsx'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TestAssemblyTask',
|
name: 'TestAssemblyTask',
|
||||||
data() {
|
data() {
|
||||||
@@ -93,6 +102,13 @@ export default {
|
|||||||
this.searchTable()
|
this.searchTable()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
formatDate(date) {
|
||||||
|
if (!date) return ''
|
||||||
|
return date.split(' ').length > 1 ? date.split(' ')[0] : date
|
||||||
|
},
|
||||||
|
tableRowClassName({ row }) {
|
||||||
|
return this.isInspectionUnfinished(row) ? 'inspection-unfinished-row' : ''
|
||||||
|
},
|
||||||
searchTable() {
|
searchTable() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
const param = []
|
const param = []
|
||||||
@@ -103,12 +119,106 @@ export default {
|
|||||||
param.push(['物料编码', this.materialCode])
|
param.push(['物料编码', this.materialCode])
|
||||||
const data = this.CreateData('11', '质量管理_测试装配任务_查询', param)
|
const data = this.CreateData('11', '质量管理_测试装配任务_查询', param)
|
||||||
this.ExecDatabase(data).then(response => {
|
this.ExecDatabase(data).then(response => {
|
||||||
this.tableData = response.data || []
|
this.tableData = this.sortTableData(response.data || [])
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
this.$message.error('查询失败:' + error.message)
|
this.$message.error('查询失败:' + error.message)
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
exportToExcel() {
|
||||||
|
if (this.tableData.length === 0) {
|
||||||
|
this.$message.warning('没有数据可导出')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const exportData = this.tableData.map((item, index) => ({
|
||||||
|
序号: index + 1,
|
||||||
|
预计送检日期: this.formatDate(item['预计送检日期']),
|
||||||
|
销售订单: item['销售订单'] || '',
|
||||||
|
生产订单: item['生产订单'] || '',
|
||||||
|
物料名称: item['物料名称'] || '',
|
||||||
|
物料编码: item['物料编码'] || '',
|
||||||
|
计划数量: item['计划数量'] || 0,
|
||||||
|
完成数量: item['完成数量'] || 0,
|
||||||
|
检验数量: item['检验数量'] || 0,
|
||||||
|
检验合格数量: item['检验合格数量'] || 0,
|
||||||
|
检验不合格数量: item['检验不合格数量'] || 0
|
||||||
|
}))
|
||||||
|
|
||||||
|
const wb = XLSX.utils.book_new()
|
||||||
|
const ws = XLSX.utils.json_to_sheet(exportData)
|
||||||
|
ws['!cols'] = [
|
||||||
|
{ wch: 8 },
|
||||||
|
{ wch: 15 },
|
||||||
|
{ wch: 15 },
|
||||||
|
{ wch: 15 },
|
||||||
|
{ wch: 24 },
|
||||||
|
{ wch: 20 },
|
||||||
|
{ wch: 12 },
|
||||||
|
{ wch: 12 },
|
||||||
|
{ wch: 12 },
|
||||||
|
{ wch: 16 },
|
||||||
|
{ wch: 18 }
|
||||||
|
]
|
||||||
|
XLSX.utils.book_append_sheet(wb, ws, '测试装配任务')
|
||||||
|
XLSX.writeFile(wb, `测试装配任务_${this.formatDateForFileName(new Date())}.xlsx`)
|
||||||
|
this.$message.success('导出成功')
|
||||||
|
} catch (error) {
|
||||||
|
console.error('导出失败:', error)
|
||||||
|
this.$message.error('导出失败')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sortTableData(data) {
|
||||||
|
return data.slice().sort((a, b) => {
|
||||||
|
const unfinishedA = this.isInspectionUnfinished(a)
|
||||||
|
const unfinishedB = this.isInspectionUnfinished(b)
|
||||||
|
|
||||||
|
if (unfinishedA !== unfinishedB) {
|
||||||
|
return unfinishedA ? -1 : 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const timeA = this.getDateTime(a['预计送检日期'])
|
||||||
|
const timeB = this.getDateTime(b['预计送检日期'])
|
||||||
|
|
||||||
|
if (timeA === timeB) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if (timeA === Infinity) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
if (timeB === Infinity) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return timeA - timeB
|
||||||
|
})
|
||||||
|
},
|
||||||
|
isInspectionUnfinished(row) {
|
||||||
|
return this.getNumber(row['完成数量']) > this.getNumber(row['检验数量'])
|
||||||
|
},
|
||||||
|
getNumber(value) {
|
||||||
|
if (value === null || value === undefined || value === '') {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
const number = Number(String(value).replace(/,/g, ''))
|
||||||
|
return Number.isNaN(number) ? 0 : number
|
||||||
|
},
|
||||||
|
getDateTime(value) {
|
||||||
|
if (!value) {
|
||||||
|
return Infinity
|
||||||
|
}
|
||||||
|
const time = new Date(String(value).replace(/-/g, '/')).getTime()
|
||||||
|
return Number.isNaN(time) ? Infinity : time
|
||||||
|
},
|
||||||
|
formatDateForFileName(date) {
|
||||||
|
const year = date.getFullYear()
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
||||||
|
const day = String(date.getDate()).padStart(2, '0')
|
||||||
|
const hours = String(date.getHours()).padStart(2, '0')
|
||||||
|
const minutes = String(date.getMinutes()).padStart(2, '0')
|
||||||
|
const seconds = String(date.getSeconds()).padStart(2, '0')
|
||||||
|
return `${year}${month}${day}_${hours}${minutes}${seconds}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,4 +239,9 @@ export default {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep .inspection-unfinished-row > td {
|
||||||
|
background-color: #e6a23c !important;
|
||||||
|
color: #1f1f1f;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
BIN
装配任务看板/dist.zip
Normal file
BIN
装配任务看板/dist.zip
Normal file
Binary file not shown.
@@ -15,6 +15,12 @@ const routes = [
|
|||||||
name: "root",
|
name: "root",
|
||||||
component: () => import("@/views/index.vue"),
|
component: () => import("@/views/index.vue"),
|
||||||
children: [],
|
children: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 测试任务看板
|
||||||
|
path: "/TestTaskDashboard",
|
||||||
|
name: "TestTaskDashboard",
|
||||||
|
component: () => import("@/views/TestTaskDashboard.vue"),
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
898
装配任务看板/src/views/TestTaskDashboard.vue
Normal file
898
装配任务看板/src/views/TestTaskDashboard.vue
Normal file
@@ -0,0 +1,898 @@
|
|||||||
|
<template>
|
||||||
|
<div class="assembly-dashboard"
|
||||||
|
:style="{ width: `${style.width}px`, height: `${style.height}px`, transform: style.transform }">
|
||||||
|
<div class="dashboard-shell">
|
||||||
|
<header class="dashboard-header">
|
||||||
|
<div class="brand"><img class="brand-logo" :src="clientLogoUrl" alt="RENLY" /></div>
|
||||||
|
<h1>质检测试任务看板</h1>
|
||||||
|
<div class="current-time">{{ currentTime }}</div>
|
||||||
|
</header>
|
||||||
|
<main class="dashboard-content">
|
||||||
|
<section class="summary-row">
|
||||||
|
<article v-for="item in summaryCards" :key="item.title" class="panel summary-card" :class="item.className">
|
||||||
|
<div>
|
||||||
|
<div class="summary-title">{{ item.title }}</div>
|
||||||
|
<div v-if="item.metrics" class="summary-metrics">
|
||||||
|
<div v-for="metric in item.metrics" :key="metric.label" class="summary-metric">
|
||||||
|
<span>{{ metric.label }}</span>
|
||||||
|
<b>{{ metric.value }}</b>
|
||||||
|
<small>{{ item.unit }}</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="summary-body">
|
||||||
|
<img class="summary-icon" :src="item.icon" :alt="item.title" />
|
||||||
|
<div class="summary-value" :class="item.valueClass"><span>{{ item.value }}</span><small
|
||||||
|
v-if="item.unit">{{ item.unit }}</small></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="item.people" class="people-list">
|
||||||
|
<div v-for="person in item.people" :key="person.name"><span>{{ person.name }}</span><b>{{ person.group
|
||||||
|
}}</b></div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
<section class="main-grid">
|
||||||
|
<div class="left-column">
|
||||||
|
<article class="panel table-panel">
|
||||||
|
<div class="panel-caption">发货状态列表</div>
|
||||||
|
<div class="scroll-wrap">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="idx-th">序号</th>
|
||||||
|
<th v-for="c in taskColumns2" :key="c.key">{{ c.label }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody :style="deliveryScrollStyle">
|
||||||
|
<tr v-for="(r, i) in deliveryDisplayRows" :key="i">
|
||||||
|
<td class="idx-td">{{ r._idx }}</td>
|
||||||
|
<td v-for="c in taskColumns2" :key="c.key">{{ r[c.key] }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<article class="panel table-panel task-panel">
|
||||||
|
<div class="panel-caption">测试装配任务列表</div>
|
||||||
|
<div class="scroll-wrap">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="idx-th">序号</th>
|
||||||
|
<th v-for="c in taskColumns" :key="c.key">{{ c.label }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody :style="taskScrollStyle">
|
||||||
|
<tr v-for="(r, i) in taskDisplayRows" :key="i" :class="{ warning: r.urgentQty > 0 }">
|
||||||
|
<td class="idx-td">{{ r._idx }}</td>
|
||||||
|
<td v-for="c in taskColumns" :key="c.key">{{ r[c.key] }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<aside class="right-column">
|
||||||
|
<article class="panel table-panel">
|
||||||
|
<div class="panel-caption">在制任务缺件明细</div>
|
||||||
|
<div class="scroll-wrap">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="idx-th">序号</th>
|
||||||
|
<th v-for="c in materialColumns" :key="c.key">{{ c.label }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody :style="materialScrollStyle">
|
||||||
|
<tr v-for="(r, i) in materialDisplayRows" :key="i">
|
||||||
|
<td class="idx-td">{{ r._idx }}</td>
|
||||||
|
<td v-for="c in materialColumns" :key="c.key">{{ r[c.key] }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<article class="panel table-panel">
|
||||||
|
<div class="panel-caption">已完工任务</div>
|
||||||
|
<div class="scroll-wrap">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="idx-th">序号</th>
|
||||||
|
<th v-for="c in doneColumns" :key="c.key">{{ c.label }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody :style="doneScrollStyle">
|
||||||
|
<tr v-for="(r, i) in doneDisplayRows" :key="i">
|
||||||
|
<td class="idx-td">{{ r._idx }}</td>
|
||||||
|
<td v-for="c in doneColumns" :key="c.key" :class="c.key === 'passRate' ? r.rateClass : ''">{{ r[c.key] }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</aside>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed, inject, nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'
|
||||||
|
const CreateData = inject('CreateData')
|
||||||
|
const ExecDatabase = inject('ExecDatabase')
|
||||||
|
defineOptions({ name: 'AssemblyCenterTaskDashboard' })
|
||||||
|
|
||||||
|
const now = ref(new Date('2026-05-06 10:10:10'))
|
||||||
|
let timer = null
|
||||||
|
let resizeHandler = null
|
||||||
|
let scrollTimers = []
|
||||||
|
const style = reactive({ width: 1920, height: 1080, transform: 'scaleY(1) scaleX(1) translate(-50%, -50%)' })
|
||||||
|
const setScale = () => { const s = getScale(); style.transform = `scaleY(${s.y}) scaleX(${s.x}) translate(-50%, -50%)` }
|
||||||
|
const getScale = () => ({ x: window.innerWidth / style.width, y: window.innerHeight / style.height })
|
||||||
|
const pad = v => String(v).padStart(2, '0')
|
||||||
|
const currentTime = computed(() => `${now.value.getFullYear()}-${pad(now.value.getMonth() + 1)}-${pad(now.value.getDate())} ${pad(now.value.getHours())}:${pad(now.value.getMinutes())}:${pad(now.value.getSeconds())}`)
|
||||||
|
const clientLogoUrl = './public/ClientLogo.png'
|
||||||
|
const icon = name => `./public/svg/${name}.svg`
|
||||||
|
const tableData = ref([])
|
||||||
|
const getFirstRow = rows => {
|
||||||
|
if (Array.isArray(rows) && rows.length > 0) {
|
||||||
|
return rows[0]
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
startClock();
|
||||||
|
setScale();
|
||||||
|
resizeHandler = setScale;
|
||||||
|
window.addEventListener('resize', resizeHandler)
|
||||||
|
searchDashboardData()
|
||||||
|
startAllScroll()
|
||||||
|
setInterval(function(){
|
||||||
|
searchDashboardData()
|
||||||
|
},600000)
|
||||||
|
|
||||||
|
})
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (timer) window.clearInterval(timer);
|
||||||
|
if (resizeHandler) window.removeEventListener('resize', resizeHandler)
|
||||||
|
stopAllScroll()
|
||||||
|
})
|
||||||
|
|
||||||
|
// ============ 滚动数据 ============
|
||||||
|
const deliveryRows = ref([])
|
||||||
|
const taskRows = ref([])
|
||||||
|
const materialRows = ref([])
|
||||||
|
const doneRows = ref([])
|
||||||
|
|
||||||
|
// 每个列表的滚动偏移
|
||||||
|
const deliveryOffset = ref(0)
|
||||||
|
const taskOffset = ref(0)
|
||||||
|
const materialOffset = ref(0)
|
||||||
|
const doneOffset = ref(0)
|
||||||
|
|
||||||
|
// 可见行数
|
||||||
|
const VISIBLE_ROWS = {
|
||||||
|
delivery: 8,
|
||||||
|
task: 7,
|
||||||
|
material: 8,
|
||||||
|
done: 7
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成带序号和循环滚动的显示行
|
||||||
|
const makeDisplayRows = (rows, offset, visibleCount) => {
|
||||||
|
if (!rows || rows.length === 0) return []
|
||||||
|
const len = rows.length
|
||||||
|
const result = []
|
||||||
|
for (let i = 0; i < visibleCount; i++) {
|
||||||
|
const idx = (offset + i) % len
|
||||||
|
result.push({ ...rows[idx], _idx: idx + 1 })
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
const deliveryDisplayRows = computed(() => makeDisplayRows(deliveryRows.value, deliveryOffset.value, VISIBLE_ROWS.delivery))
|
||||||
|
const taskDisplayRows = computed(() => makeDisplayRows(taskRows.value, taskOffset.value, VISIBLE_ROWS.task))
|
||||||
|
const materialDisplayRows = computed(() => makeDisplayRows(materialRows.value, materialOffset.value, VISIBLE_ROWS.material))
|
||||||
|
const doneDisplayRows = computed(() => makeDisplayRows(doneRows.value, doneOffset.value, VISIBLE_ROWS.done))
|
||||||
|
|
||||||
|
// 滚动样式(平滑过渡)
|
||||||
|
const deliveryScrollStyle = computed(() => ({ transition: 'none' }))
|
||||||
|
const taskScrollStyle = computed(() => ({ transition: 'none' }))
|
||||||
|
const materialScrollStyle = computed(() => ({ transition: 'none' }))
|
||||||
|
const doneScrollStyle = computed(() => ({ transition: 'none' }))
|
||||||
|
|
||||||
|
// 启动单个列表滚动
|
||||||
|
const startScroll = (rowsRef, offsetRef) => {
|
||||||
|
const id = window.setInterval(() => {
|
||||||
|
if (rowsRef.value.length > 0) {
|
||||||
|
offsetRef.value = (offsetRef.value + 1) % rowsRef.value.length
|
||||||
|
}
|
||||||
|
}, 2000)
|
||||||
|
scrollTimers.push(id)
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
const startAllScroll = () => {
|
||||||
|
startScroll(deliveryRows, deliveryOffset)
|
||||||
|
startScroll(taskRows, taskOffset)
|
||||||
|
startScroll(materialRows, materialOffset)
|
||||||
|
startScroll(doneRows, doneOffset)
|
||||||
|
}
|
||||||
|
|
||||||
|
const stopAllScroll = () => {
|
||||||
|
scrollTimers.forEach(id => window.clearInterval(id))
|
||||||
|
scrollTimers = []
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============ 数据查询 ============
|
||||||
|
const searchDashboardData = () => {
|
||||||
|
searchTestAssemblyTaskData()
|
||||||
|
searchQualityTimelinessData()
|
||||||
|
searchDoneTaskData()
|
||||||
|
searchMaterialshortageData()
|
||||||
|
searchDeliveryData()
|
||||||
|
}
|
||||||
|
const searchTestAssemblyTaskData = () => {
|
||||||
|
const param = [
|
||||||
|
['任务类型', '全部'],
|
||||||
|
['生产订单', ''],
|
||||||
|
['销售订单', ''],
|
||||||
|
['物料名称', ''],
|
||||||
|
['物料编码', '']
|
||||||
|
]
|
||||||
|
queryDashboardData('质量管理_测试装配任务_查询', applyTestAssemblyTaskData, param)
|
||||||
|
}
|
||||||
|
const searchQualityTimelinessData = () => {
|
||||||
|
const param = [
|
||||||
|
['任务类型', '全部'],
|
||||||
|
['生产订单', ''],
|
||||||
|
['销售订单', ''],
|
||||||
|
['物料名称', ''],
|
||||||
|
['物料编码', '']
|
||||||
|
]
|
||||||
|
queryDashboardData('质量管理_测试装配任务_质检及时率', applyQualityTimelinessData, param)
|
||||||
|
}
|
||||||
|
const searchDoneTaskData = () => {
|
||||||
|
const param = [
|
||||||
|
['任务类型', '全部'],
|
||||||
|
['生产订单', ''],
|
||||||
|
['销售订单', ''],
|
||||||
|
['物料名称', ''],
|
||||||
|
['物料编码', '']
|
||||||
|
]
|
||||||
|
queryDashboardData('质量管理_测试装配任务_完成查询', applyDoneTaskData, param)
|
||||||
|
}
|
||||||
|
const searchDeliveryData = () => {
|
||||||
|
queryDashboardData('装配中心任务看板_发货状态查询', applyDeliveryData)
|
||||||
|
}
|
||||||
|
const searchMaterialshortageData = () => {
|
||||||
|
queryDashboardData('装配中心任务看板_在制品缺件查询', applyMaterialshortageData)
|
||||||
|
}
|
||||||
|
const applyTestAssemblyTaskData = rows => {
|
||||||
|
const sortedRows = sortTestAssemblyTaskRows(rows)
|
||||||
|
const executableRows = sortedRows.filter(isInspectionUnfinished)
|
||||||
|
const valueRows = executableRows.filter(item => getTaskType(item) === '阀类')
|
||||||
|
const systemRows = executableRows.filter(item => getTaskType(item) === '系统类')
|
||||||
|
|
||||||
|
summaryCards[0].metrics[0].value = valueRows.length
|
||||||
|
summaryCards[0].metrics[1].value = systemRows.length
|
||||||
|
summaryCards[1].value = executableRows.filter(isReworkTask).length
|
||||||
|
summaryCards[3].value = executableRows.filter(item => getNumber(item.加急总数 || item.加急数量) > 0).length
|
||||||
|
summaryCards[4].value = sortedRows.reduce((sum, item) => sum + getNumber(item.异常未关闭数 || item.测试装配异常未关闭总数), 0)
|
||||||
|
|
||||||
|
applyTaskData(sortedRows)
|
||||||
|
}
|
||||||
|
const applyQualityTimelinessData = rows => {
|
||||||
|
const row = getFirstRow(rows)
|
||||||
|
summaryCards[2].value = `${getNumber(row.质检及时率).toFixed(2)}`
|
||||||
|
}
|
||||||
|
const applyDeliveryData = rows => {
|
||||||
|
deliveryRows.value = rows.map(item => {
|
||||||
|
let requiredDate = ''
|
||||||
|
if (item.要求发货日期) {
|
||||||
|
// 如果是字符串
|
||||||
|
if (typeof item.要求发货日期 === 'string') {
|
||||||
|
requiredDate = item.要求发货日期.split(' ')[0]
|
||||||
|
}
|
||||||
|
// 如果是 Date 对象
|
||||||
|
else if (item.要求发货日期 instanceof Date) {
|
||||||
|
requiredDate = item.要求发货日期.toISOString().split('T')[0]
|
||||||
|
}
|
||||||
|
// 如果是其他格式
|
||||||
|
else {
|
||||||
|
const dateStr = String(item.要求发货日期)
|
||||||
|
requiredDate = dateStr.split(' ')[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
productionOrder: item.订单编号,
|
||||||
|
salesOrder: item.合同号 || '',
|
||||||
|
materialName: item.物料描述 || '',
|
||||||
|
materialCode: item.物料编号 || '',
|
||||||
|
completeSet: item.齐套 === 1 ? '是' : '否',
|
||||||
|
issueStatus: item.发料状态 === '1' ? '发料齐套' : (item.发料状态 === '2' ? '发料缺件' : ''),
|
||||||
|
urgentQty: item.操作人,
|
||||||
|
assignQty: item.交货数量,
|
||||||
|
taskdate: requiredDate,
|
||||||
|
operator: item.任务状态 === 0 ? '待执行' : (item.发料状态 === 1 ? '可执行' : '已开工'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const applyDoneTaskData = rows => {
|
||||||
|
doneRows.value = rows.map(item => ({
|
||||||
|
productionOrder: item.生产订单?.toString() || item.计划号?.toString() || '',
|
||||||
|
materialName: item.物料名称 || item.零件名称 || '',
|
||||||
|
materialCode: item.物料编码 || item.零件编码 || '',
|
||||||
|
passRate: `${getPassRate(item)}%`,
|
||||||
|
rateClass: getPassRate(item) <= 70 ? 'orange-cell' : 'green-cell'
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
const applyTaskData = rows => {
|
||||||
|
taskRows.value = rows.map(item => ({
|
||||||
|
productionOrder: item.生产订单?.toString() || item.订单号?.toString() || item.计划号?.toString() || '',
|
||||||
|
salesOrder: item.销售订单 || item.合同号 || '',
|
||||||
|
materialName: item.物料名称 || item.零件名称 || '',
|
||||||
|
materialCode: item.物料编码 || item.零件编码 || '',
|
||||||
|
taskType: item.任务类型 || (String(item.自制件属性 || item.物料名称 || item.零件名称 || '').includes('系统') ? '系统类' : '阀类'),
|
||||||
|
urgentQty: getNumber(item.加急总数 || item.加急数量),
|
||||||
|
assignQty: getNumber(item.计划数量 || item.计划生产数 || item.分配数),
|
||||||
|
completeQty: getNumber(item.完成数量),
|
||||||
|
inspectQty: getNumber(item.检验数量),
|
||||||
|
expectedInspectionDate: formatDate(item.预计送检日期)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
const applyMaterialshortageData = rows => {
|
||||||
|
console.log(rows)
|
||||||
|
materialRows.value = rows.map(item => ({
|
||||||
|
wipOrder: item.DocEntry,
|
||||||
|
shortageStatus: item.U_Name,
|
||||||
|
finishTime: item.ItemCode,
|
||||||
|
owner: item.加急数量
|
||||||
|
}))
|
||||||
|
console.log(materialRows.value)
|
||||||
|
}
|
||||||
|
const queryDashboardData = (procedureName, applyData, param = []) => {
|
||||||
|
let data
|
||||||
|
data = CreateData('11', procedureName, param)
|
||||||
|
ExecDatabase(data).then(response => {
|
||||||
|
const rows = getResponseRows(response)
|
||||||
|
tableData.value = rows
|
||||||
|
applyData(rows)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const getResponseRows = response => {
|
||||||
|
if (response && Array.isArray(response.data)) {
|
||||||
|
return response.data
|
||||||
|
}
|
||||||
|
if (response && response.data && Array.isArray(response.data.result)) {
|
||||||
|
return response.data.result
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
const getNumber = value => {
|
||||||
|
if (value === null || value === undefined || value === '') return 0
|
||||||
|
const number = Number(String(value).replace(/,/g, ''))
|
||||||
|
return Number.isNaN(number) ? 0 : number
|
||||||
|
}
|
||||||
|
|
||||||
|
const formatDate = value => {
|
||||||
|
if (!value) return ''
|
||||||
|
return String(value).split(' ')[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
const getDateTime = value => {
|
||||||
|
if (!value) return Infinity
|
||||||
|
const time = new Date(String(value).replace(/-/g, '/')).getTime()
|
||||||
|
return Number.isNaN(time) ? Infinity : time
|
||||||
|
}
|
||||||
|
|
||||||
|
const getTaskType = item => item.任务类型 || (String(item.自制件属性 || item.物料名称 || item.零件名称 || '').includes('系统') ? '系统类' : '阀类')
|
||||||
|
|
||||||
|
const isInspectionUnfinished = item => getNumber(item.完成数量) > getNumber(item.检验数量)
|
||||||
|
|
||||||
|
const isReworkTask = item => String(item.检测说明 || '').includes('返工')
|
||||||
|
|
||||||
|
const sortTestAssemblyTaskRows = rows => rows.slice().sort((a, b) => {
|
||||||
|
const unfinishedA = isInspectionUnfinished(a)
|
||||||
|
const unfinishedB = isInspectionUnfinished(b)
|
||||||
|
if (unfinishedA !== unfinishedB) return unfinishedA ? -1 : 1
|
||||||
|
return getDateTime(a.预计送检日期) - getDateTime(b.预计送检日期)
|
||||||
|
})
|
||||||
|
|
||||||
|
const getPassRate = item => {
|
||||||
|
const inspectQty = getNumber(item.检验数量)
|
||||||
|
if (inspectQty <= 0) return 100
|
||||||
|
return Number(((getNumber(item.检验合格数量) * 100) / inspectQty).toFixed(2))
|
||||||
|
}
|
||||||
|
|
||||||
|
const startClock = () => { timer = window.setInterval(() => { now.value = new Date(now.value.getTime() + 1000) }, 1000) }
|
||||||
|
const svgData = svg => 'data:image/svg+xml;utf8,' + encodeURIComponent(svg)
|
||||||
|
const svgIcon = (from, to, body) => svgData(
|
||||||
|
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" fill="none">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
||||||
|
<stop offset="0" stop-color="${from}"/>
|
||||||
|
<stop offset="1" stop-color="${to}"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="shine" x1="0" y1="0" x2="0" y2="1">
|
||||||
|
<stop offset="0" stop-color="#fff" stop-opacity=".35"/>
|
||||||
|
<stop offset="1" stop-color="#fff" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<filter id="glow" x="-55%" y="-55%" width="210%" height="210%"><feGaussianBlur stdDeviation="4" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
|
||||||
|
</defs>
|
||||||
|
<rect x="7" y="7" width="58" height="58" rx="11" fill="url(#bg)" filter="url(#glow)"/>
|
||||||
|
<path d="M14 14h44v20c-10-4-29-4-44 1z" fill="url(#shine)"/>
|
||||||
|
<g transform="translate(36 36) scale(1.12) translate(-36 -36)" stroke="#fff" stroke-width="4.1" stroke-linecap="round" stroke-linejoin="round" opacity=".96">${body}</g>
|
||||||
|
</svg>`
|
||||||
|
)
|
||||||
|
const icons = {
|
||||||
|
pending: svgIcon('#37a9ff', '#0862f3', '<rect x="23" y="20" width="26" height="36" rx="4"/><path d="M29 20h14l-3-6h-8l-3 6zM29 34h14M29 43h14"/>'),
|
||||||
|
urgent: svgIcon('#ff7469', '#dc2524', '<path d="M21 55h30M25 50V34a11 11 0 0 1 22 0v16M36 13v8M18 21l6 6M54 21l-6 6M15 38h8M49 38h8"/>'),
|
||||||
|
cart: svgIcon('#28a8ff', '#0a58ff', '<path d="M16 22h7l5 25h27l5-17H28"/><circle cx="32" cy="56" r="2.8"/><circle cx="52" cy="56" r="2.8"/>'),
|
||||||
|
checklist: svgIcon('#49e89e', '#08a86e', '<rect x="21" y="17" width="32" height="42" rx="5"/><path d="M28 35l5 5 12-13M28 49h19"/>'),
|
||||||
|
returnDown: svgIcon('#ffb23f', '#fb7418', '<rect x="21" y="23" width="31" height="32" rx="4"/><path d="M36 14v24M27 31l9 9 9-9"/>'),
|
||||||
|
returnSales: svgIcon('#9867ff', '#6232e6', '<path d="M51 22H28a10 10 0 0 0 0 20h26M28 14l-11 9 11 9"/><rect x="35" y="37" width="18" height="18" rx="2"/>'),
|
||||||
|
finalCheck: svgIcon('#3a95ff', '#0a61e8', '<path d="M36 14l16 7v13c0 11-7 18-16 24-9-6-16-13-16-24V21z"/><path d="M27 37l6 6 13-15"/>'),
|
||||||
|
other: svgIcon('#4bd8ff', '#0a88cc', '<path d="M19 26l17-10 17 10-17 10zM19 26v19l17 10 17-10V26M36 36v19"/>'),
|
||||||
|
shield: svgIcon('#3a9aff', '#0861e8', '<path d="M36 14l16 7v13c0 11-7 18-16 24-9-6-16-13-16-24V21z"/><path d="M28 37l6 6 12-14"/>'),
|
||||||
|
done: svgIcon('#47eaa0', '#0da76b', '<rect x="19" y="19" width="34" height="34" rx="8"/><path d="M27 37l7 7 15-18"/>')
|
||||||
|
}
|
||||||
|
const summaryCards = [
|
||||||
|
{ title: '可执行任务数', unit: '条', className: 'executable-card', metrics: [{ label: '阀类', value: 0 }, { label: '系统类', value: 0 }] },
|
||||||
|
{ title: '待协助任务数', value: 0, unit: '条', icon: icons.pending , valueClass: 'red-text'},
|
||||||
|
{ title: '质检及时率', value: '100.00', icon: icons.finalCheck, valueClass: 'green-text full-value' },
|
||||||
|
{ title: '加急任务数', value: 125, unit: '条', icon: icons.urgent, valueClass: 'red-text' },
|
||||||
|
{ title: '异常未关闭消息数', value: 5, unit: '条', icon: icons.urgent, valueClass: 'red-text', className: 'exception-card' },
|
||||||
|
]
|
||||||
|
const taskColumns = [
|
||||||
|
{ label: '生产订单', key: 'productionOrder', width: '72px' },
|
||||||
|
{ label: '销售订单', key: 'salesOrder', width: '92px' },
|
||||||
|
{ label: '物料名称', key: 'materialName', width: '190px' },
|
||||||
|
{ label: '物料编码', key: 'materialCode', width: '176px' },
|
||||||
|
{ label: '任务类型', key: 'taskType', width: '62px' },
|
||||||
|
{ label: '加急数', key: 'urgentQty', width: '62px' },
|
||||||
|
{ label: '计划数', key: 'assignQty', width: '70px' },
|
||||||
|
{ label: '完成数', key: 'completeQty', width: '70px' },
|
||||||
|
{ label: '检验数', key: 'inspectQty', width: '70px' },
|
||||||
|
{ label: '预计送检', key: 'expectedInspectionDate', width: '88px' },
|
||||||
|
|
||||||
|
]
|
||||||
|
const taskColumns2 = [
|
||||||
|
{ label: '生产订单', key: 'productionOrder', width: '72px' },
|
||||||
|
{ label: '销售订单', key: 'salesOrder', width: '92px' },
|
||||||
|
{ label: '物料名称', key: 'materialName', width: '190px' },
|
||||||
|
{ label: '物料编码', key: 'materialCode', width: '176px' },
|
||||||
|
{ label: '数量', key: 'assignQty', width: '176px' },
|
||||||
|
{ label: '要求发货日期', key: 'taskdate', width: '176px' },
|
||||||
|
{ label: '齐套', key: 'completeSet', width: '52px' },
|
||||||
|
{ label: '发料状态', key: 'issueStatus', width: '88px' },
|
||||||
|
{ label: '操作人', key: 'urgentQty', width: '62px' },
|
||||||
|
{ label: '装配开工', key: 'operator', width: '82px' },
|
||||||
|
]
|
||||||
|
const materialColumns = [
|
||||||
|
{ label: '生产订单', key: 'wipOrder', width: '76px' },
|
||||||
|
{ label: '物料名称', key: 'shortageStatus', width: '105px' },
|
||||||
|
{ label: '物料编码', key: 'finishTime', width: '160px' },
|
||||||
|
{ label: '加急数量', key: 'owner', width: '90px' },
|
||||||
|
]
|
||||||
|
const doneColumns = [
|
||||||
|
{ label: '生产订单', key: 'productionOrder', width: '88px' },
|
||||||
|
{ label: '物料名称', key: 'materialName', width: '150px' },
|
||||||
|
{ label: '物料编码', key: 'materialCode', width: '165px' },
|
||||||
|
{ label: '合格率', key: 'passRate', width: '86px' },
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.assembly-dashboard {
|
||||||
|
position: fixed;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
width: 1920px;
|
||||||
|
height: 1080px;
|
||||||
|
transform-origin: 0 0;
|
||||||
|
transition: .3s;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #f3f9ff;
|
||||||
|
font-family: 'Microsoft YaHei', Arial, sans-serif;
|
||||||
|
background: #07001f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard-shell {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 15px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard-header {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 336px 1fr 442px;
|
||||||
|
align-items: center;
|
||||||
|
height: 95px;
|
||||||
|
border-bottom: 1px solid rgba(21, 162, 240, .7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand {
|
||||||
|
width: 300px;
|
||||||
|
height: 72px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow: visible;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-logo {
|
||||||
|
width: 224px;
|
||||||
|
height: 58px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 6px;
|
||||||
|
object-fit: contain;
|
||||||
|
object-position: left center;
|
||||||
|
filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.28));
|
||||||
|
}
|
||||||
|
.dashboard-header h1 {
|
||||||
|
margin: 0;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 55px;
|
||||||
|
font-weight: 900;
|
||||||
|
letter-spacing: .08em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.current-time {
|
||||||
|
padding-right: 40px;
|
||||||
|
color: #eef7ff;
|
||||||
|
font-size: 27px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: 126px 1fr;
|
||||||
|
gap: 17px;
|
||||||
|
height: calc(100% - 95px);
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1.28fr 1fr 1fr 1fr .82fr;
|
||||||
|
gap: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 2.05fr 1fr;
|
||||||
|
gap: 17px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-column {
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: 1.05fr .9fr;
|
||||||
|
gap: 17px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-column {
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: 1.05fr .9fr;
|
||||||
|
gap: 17px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
position: relative;
|
||||||
|
border: 1px solid rgba(29, 153, 229, .78);
|
||||||
|
background: rgba(3, 16, 48, .38);
|
||||||
|
box-shadow: inset 0 0 18px rgba(27, 130, 214, .24), 0 0 10px rgba(1, 132, 220, .18);
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel::before {
|
||||||
|
position: absolute;
|
||||||
|
inset: -1px;
|
||||||
|
content: '';
|
||||||
|
pointer-events: none;
|
||||||
|
background: linear-gradient(90deg, #2bd8ff 0 14px, transparent 14px) left top/14px 2px no-repeat, linear-gradient(180deg, #2bd8ff 0 14px, transparent 14px) left top/2px 14px no-repeat, linear-gradient(270deg, #2bd8ff 0 14px, transparent 14px) right top/14px 2px no-repeat, linear-gradient(180deg, #2bd8ff 0 14px, transparent 14px) right top/2px 14px no-repeat, linear-gradient(90deg, #2bd8ff 0 14px, transparent 14px) left bottom/14px 2px no-repeat, linear-gradient(0deg, #2bd8ff 0 14px, transparent 14px) left bottom/2px 14px no-repeat, linear-gradient(270deg, #2bd8ff 0 14px, transparent 14px) right bottom/14px 2px no-repeat, linear-gradient(0deg, #2bd8ff 0 14px, transparent 14px) right bottom/2px 14px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel::after {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
content: '';
|
||||||
|
pointer-events: none;
|
||||||
|
box-shadow: inset 0 0 12px rgba(43, 216, 255, .12);
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-card {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 0;
|
||||||
|
padding: 8px 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-card > div:first-child {
|
||||||
|
width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card > div:first-child {
|
||||||
|
width: auto;
|
||||||
|
padding-right: 22px;
|
||||||
|
border-right: 3px solid rgba(238, 247, 255, 0.92);
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card .summary-title {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card .summary-body {
|
||||||
|
display: flex;
|
||||||
|
gap: 26px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card .summary-value {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card .summary-value span {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.executable-card {
|
||||||
|
padding: 8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.executable-card .summary-title {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 21px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-metrics {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 14px;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-metric {
|
||||||
|
position: relative;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) auto;
|
||||||
|
grid-template-rows: 22px 48px;
|
||||||
|
align-items: baseline;
|
||||||
|
min-width: 0;
|
||||||
|
padding: 6px 10px 4px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-metric span {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
color: #89d4ff;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 22px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-metric b {
|
||||||
|
color: #18c65b;
|
||||||
|
font-size: 50px;
|
||||||
|
line-height: 1;
|
||||||
|
text-align: right;
|
||||||
|
text-shadow: 0 0 10px rgba(24, 198, 91, .32);
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-metric small {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: left;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card {
|
||||||
|
padding: 8px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-title {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-body {
|
||||||
|
grid-template-columns: 54px 150px;
|
||||||
|
column-gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-icon {
|
||||||
|
width: 54px;
|
||||||
|
height: 54px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-value {
|
||||||
|
grid-template-columns: 105px 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-value span {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exception-card .summary-value small {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-title {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
color: #89d4ff;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-body {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 66px 214px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
column-gap: 26px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-icon {
|
||||||
|
width: 66px;
|
||||||
|
height: 66px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-value {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 150px 32px;
|
||||||
|
align-items: baseline;
|
||||||
|
justify-content: center;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 900;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-value span {
|
||||||
|
font-size: 57px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-value small {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-value span {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.red-text span {
|
||||||
|
color: #ff1e2e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.green-text span {
|
||||||
|
color: #18c65b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.orange-text span {
|
||||||
|
color: #ff9c12;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absence-card .summary-value::before {
|
||||||
|
content: '总数:';
|
||||||
|
color: #fff;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.people-list {
|
||||||
|
min-width: 130px;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.people-list div {
|
||||||
|
display: flex;
|
||||||
|
gap: 18px;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-caption {
|
||||||
|
height: 38px;
|
||||||
|
color: #8cd3ff;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 38px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-panel {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-width: 0;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-wrap {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 9px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
table-layout: fixed;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
height: 48px;
|
||||||
|
border: 1px solid rgba(53, 149, 217, .54);
|
||||||
|
color: #f1f8ff;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.18;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
white-space: pre-line;
|
||||||
|
word-break: break-all;
|
||||||
|
background: rgba(4, 24, 57, .44);
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
height: 44px;
|
||||||
|
color: #bde9ff;
|
||||||
|
font-weight: 500;
|
||||||
|
background: rgba(12, 68, 119, .28);
|
||||||
|
}
|
||||||
|
|
||||||
|
.idx-th {
|
||||||
|
width: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idx-td {
|
||||||
|
width: 44px;
|
||||||
|
color: #89d4ff;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task-panel td {
|
||||||
|
height: 47px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning td {
|
||||||
|
color: #ff4949;
|
||||||
|
}
|
||||||
|
|
||||||
|
.green-cell {
|
||||||
|
color: #32ff32;
|
||||||
|
}
|
||||||
|
|
||||||
|
.orange-cell {
|
||||||
|
color: #ff7a1a;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user