Compare commits

...

11 Commits

Author SHA1 Message Date
meswork764
77d1a97e83 feat: update production kanban details 2026-07-20 18:47:17 +08:00
meswork764
b5bc8d7358 feat: add production task overview dashboard 2026-07-11 18:07:38 +08:00
meswork764
1e3f9299df fix quality details pagination 2026-06-25 08:57:43 +08:00
meswork764
20c6d587ad feat: update MES tracking and timesheet reports 2026-06-22 18:07:51 +08:00
meswork764
ab508369c9 feat: 更新装配任务和质量报表 2026-06-18 17:48:36 +08:00
meswork764
1a781b02c2 chore: update plan management views 2026-06-09 18:09:56 +08:00
meswork764
134f9d888a chore: update production plan views 2026-06-09 11:49:54 +08:00
meswork764
0bf5f3f704 chore: update project changes 2026-06-09 08:37:50 +08:00
meswork764
6f9f8fe148 chore: update project files 2026-06-05 18:05:35 +08:00
meswork764
6ecd0b5bd5 docs: add development plan and technical design 2026-05-27 18:36:20 +08:00
meswork764
acca29b36b docs: update MES workflow and user manual 2026-05-26 17:59:27 +08:00
128 changed files with 41726 additions and 1121 deletions

1
.gitignore vendored
View File

@@ -25,6 +25,7 @@ selenium-debug.log
**/.idea/
.vscode/
**/.vscode/
~$*.docx
*.suo
*.ntvs*
*.njsproj

View File

@@ -0,0 +1,7 @@
{
"folders": [
{
"path": ".."
}
]
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,81 @@
ALTER PROCEDURE [dbo].[_质检明细_查询]
@ nvarchar(4000) = '10',
@ datetime = NULL,
@ datetime = NULL,
@ nvarchar(4000) = '0',
@ nvarchar(4000) = '0',
@ nvarchar(4000) = '0',
@ nvarchar(4000) = '0',
@PageCurrent int = 1,
@PageSize int = 20,
@PageCount int OUTPUT,
@ItemCount int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tbname sysname = ' [dbo].[View_质检明细] '
DECLARE @fieldkey sysname = 'QT_AID'
DECLARE @where nvarchar(4000)
DECLARE @fieldshow nvarchar(1000)
DECLARE @fieldOrder nvarchar(1000) = ' 检测时间 DESC, QT_AID DESC '
SET @where = ' (1=1) '
IF @ = '10'
SET @where = @where + ' AND (1=1) '
ELSE IF @ = '0'
SET @where = @where + ' AND 质检类型 = ''收检'' '
ELSE IF @ = '1'
SET @where = @where + ' AND 质检类型 = ''终检'' '
ELSE IF @ = '2'
SET @where = @where + ' AND 质检类型 = ''来料检验'' '
ELSE IF @ = '3'
SET @where = @where + ' AND 质检类型 = ''退库检验'' '
IF @ <> '0'
SET @where = @where + ' AND 计划号 LIKE ''%' + @ + '%'' '
--IF @ <> '0'
-- SET @where = @where + ' AND 内部合同号 LIKE ''%' + @合同号 + '%'' '
IF @ <> '0'
SET @where = @where + ' AND 零件编码 LIKE ''%' + @ + '%'' '
IF @ <> '0'
SET @where = @where + ' AND 零件名称 LIKE ''%' + @ + '%'' '
IF @ IS NOT NULL
SET @where = @where + ' AND 检测时间 >= ''' + CONVERT(nvarchar(30), @, 120) + ''' '
IF @ IS NOT NULL
SET @where = @where + ' AND 检测时间 <= ''' + CONVERT(nvarchar(30), @, 120) + ''' '
SET @fieldshow = '
[QT_AID]
,[质检类型]
,[零件编码]
,[零件名称]
,[内部合同号]
,[计划号]
,[工序名称]
,[检验数量]
,[合格数]
,[不合格数]
,[检测人]
,[检测时间]
,[检测说明]
,[工位名称]
,[订单类型]'
EXEC [dbo].[sp_xt_pagesplit]
@tbname,
@fieldkey,
@where,
@fieldshow,
@fieldOrder,
@PageCurrent,
@PageSize,
@PageCount OUTPUT,
@ItemCount OUTPUT
END

View File

@@ -0,0 +1,94 @@
CREATE PROCEDURE [dbo].[sp_xt_pagesplit]
@tbname sysname,
@fieldkey sysname,
@where nvarchar(1000),
@fieldshow nvarchar(max),
@fieldOrder nvarchar(1000),
@PageCurrent int=1,
@PageSize int=30,
@PageCount int OUTPUT,
@ItemCount int output
AS
BEGIN
SET NOCOUNT ON
-- 参数检查
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
-- 处理排序
DECLARE @OrderBy nvarchar(1000)
IF ISNULL(@FieldOrder,N'')=N''
SET @OrderBy = N''
ELSE
SET @OrderBy = N'ORDER BY ' + LTRIM(@FieldOrder)
-- 处理条件 - 重要去掉WHERE关键字只保留条件内容
DECLARE @WhereCondition nvarchar(1000)
IF ISNULL(@Where,N'')=N''
SET @WhereCondition = N''
ELSE
SET @WhereCondition = @Where -- 只保存条件内容不加WHERE
-- 清理字段名
SET @fieldkey = LTRIM(RTRIM(@fieldkey))
DECLARE @quotedKey NVARCHAR(128) = QUOTENAME(@fieldkey)
-- 计算总记录数
DECLARE @sql nvarchar(MAX)
IF @WhereCondition = N''
SET @sql = N'SELECT @ItemCount = COUNT(*) FROM ' + @tbname
ELSE
SET @sql = N'SELECT @ItemCount = COUNT(*) FROM ' + @tbname + N' WHERE ' + @WhereCondition
EXEC sp_executesql @sql, N'@ItemCount int OUTPUT', @ItemCount OUTPUT
-- 计算总页数
SET @PageCount = CEILING((@ItemCount + 0.0) / @PageSize)
IF @PageCount = 0 SET @PageCount = 1
-- 返回当前页数据
DECLARE @TopRows INT = (@PageCurrent - 1) * @PageSize
IF @PageCurrent = 1
BEGIN
-- 第一页
IF @WhereCondition = N''
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N' ' + @OrderBy
ELSE
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N' WHERE ' + @WhereCondition + N' ' + @OrderBy
END
ELSE
BEGIN
-- 其他页
IF @WhereCondition = N''
BEGIN
-- 无条件的情况
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N'
WHERE ' + @quotedKey + N' NOT IN (
SELECT TOP ' + CONVERT(NVARCHAR, @TopRows) + N' ' + @quotedKey + N'
FROM ' + @tbname + N' ' + @OrderBy + N'
) ' + @OrderBy
END
ELSE
BEGIN
-- 有条件的情况
SET @sql = N'SELECT TOP ' + CONVERT(NVARCHAR, @PageSize) + N' ' + @FieldShow + N'
FROM ' + @tbname + N'
WHERE ' + @quotedKey + N' NOT IN (
SELECT TOP ' + CONVERT(NVARCHAR, @TopRows) + N' ' + @quotedKey + N'
FROM ' + @tbname + N' WHERE ' + @WhereCondition + N' ' + @OrderBy + N'
) AND ' + @WhereCondition + N' ' + @OrderBy
END
END
-- 调试用,可以注释掉
-- PRINT @sql
-- 执行
EXEC(@sql)
END

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,94 @@
-- 质量管理_质检明细_查询
CREATE PROCEDURE [dbo].[_质检明细_查询]
@ nvarchar(4000) = '10', -- 修改为字符串类型,因为传入的是字符串
@ datetime = NULL,
@ datetime = NULL,
@ nvarchar(4000) = '0', -- 修改为字符串类型,避免类型转换问题
@ nvarchar(4000) = '0',
@ nvarchar(4000) = '0',
@ nvarchar(4000) = '0',
@PageCurrent int = 1, -- 要显示的页码
@PageSize int = 20, -- 每页的大小(记录数)
@PageCount int OUTPUT, -- 总页数
@ItemCount int OUTPUT -- 数据总数
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tbname sysname = ' [dbo].[View_质检明细] ' -- 要分页显示的表名
DECLARE @fieldkey sysname = ' ' -- 用于定位记录的主键(惟一键)字段
DECLARE @where nvarchar(4000) -- 查询条件
DECLARE @fieldshow nvarchar(1000) -- 要显示的字段列表
DECLARE @fieldOrder nvarchar(1000) = ' 检测时间 DESC ' -- 排序字段
-- 构建查询条件使用参数化方式避免SQL注入
SET @where = ' (1=1) '
-- 质检类型过滤
IF @ = '10' -- 全部
SET @where = @where + ' AND (1=1) '
ELSE IF @ = '0'
SET @where = @where + ' AND 质检类型 = ''收检'' '
ELSE IF @ = '1'
SET @where = @where + ' AND 质检类型 = ''终检'' '
ELSE IF @ = '2'
SET @where = @where + ' AND 质检类型 = ''来料检验'' '
ELSE IF @ = '3'
SET @where = @where + ' AND 质检类型 = ''退库检验'' '
-- 订单号过滤条件修正使用LIKE时加引号
IF @ <> '0'
SET @where = @where + ' AND 计划号 LIKE ''%' + @ + '%'' '
-- 合同号过滤条件
--IF @ <> '0'
-- SET @where = @where + ' AND 内部合同号 LIKE ''%' + @合同号 + '%'' '
-- 零件编码过滤条件
IF @ <> '0'
SET @where = @where + ' AND 零件编码 LIKE ''%' + @ + '%'' '
-- 零件名称过滤条件
IF @ <> '0'
SET @where = @where + ' AND 零件名称 LIKE ''%' + @ + '%'' '
-- 日期范围过滤(如果提供了日期参数)
IF @ IS NOT NULL
SET @where = @where + ' AND 检测时间 >= ''' + CONVERT(nvarchar(30), @, 120) + ''' '
IF @ IS NOT NULL
SET @where = @where + ' AND 检测时间 <= ''' + CONVERT(nvarchar(30), @, 120) + ''' '
SET @fieldshow = '
[QT_AID]
,[质检类型]
,[零件编码]
,[零件名称]
,[内部合同号]
,[计划号]
,[工序名称]
,[检验数量]
,[合格数]
,[不合格数]
,[检测人]
,[检测时间]
,[检测说明]
,[工位名称]
,[订单类型]'
-- 调试用(可以注释掉)
PRINT @where
-- 执行分页存储过程
EXEC [dbo].[sp_xt_pagesplit]
@tbname,
@fieldkey,
@where,
@fieldshow,
@fieldOrder,
@PageCurrent,
@PageSize,
@PageCount OUTPUT,
@ItemCount OUTPUT
END

View File

@@ -0,0 +1,69 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_加急任务查询]
AS
BEGIN
SET NOCOUNT ON;
SELECT
[]
,[]
,[]
,[]
,[]
,[]
,[]
,[]
,[]
,[]
,[]
,[]
, as
,
,
,
,REPLACE(STUFF((
SELECT
' -> ' + ISNULL(d2., '') + '(' + ISNULL(d2., '') + ')'
+ '|' + ISNULL(CAST(d2. AS VARCHAR(10)), '0')
+ '|' + ISNULL(CAST(CAST(ISNULL((
SELECT SUM()
FROM [dbo].[YL_质量检验_质检记录]
WHERE TaskAID = d2.TaskAID
), 0) AS INT) AS VARCHAR(10)), '0')
+ '|' + ISNULL(CONVERT(VARCHAR(2), MONTH(d2.)) + '' + CONVERT(VARCHAR(2), DAY(d2.)) + '', '')
+ '|' + ISNULL(CAST(d2. AS VARCHAR(10)), '')
+ '|' + ISNULL(CAST(d2. AS NVARCHAR(50)), '')
+ '|' + ISNULL(CAST(CAST(ISNULL((
SELECT SUM()
FROM [dbo].[YL_加工中心_操作记录表]
WHERE TaskAID = d2.TaskAID
AND = '收料'
), 0) AS INT) AS VARCHAR(10)), '0')
+ '|' + ISNULL(CAST(CAST(ISNULL((
SELECT SUM()
FROM [dbo].[YL_质量检验_质检记录]
WHERE TaskAID = d2.TaskAID
), 0) AS INT) AS VARCHAR(10)), '0')
FROM [dbo].[View_生产订单_MES] d2
WHERE d2. = v.
ORDER BY d2.
FOR XML PATH('')
), 1, 6, ''), '&gt;', '>') AS
,(SELECT COUNT(DISTINCT ) FROM [YL_MESDB].[dbo].[View_生产订单_MES] WHERE > 0 AND NOT LIKE '%装配%') AS []
FROM [YL_MESDB].[dbo].[View_生产订单_MES] v
WHERE > 0
AND NOT LIKE '%装配%'
AND = (
SELECT MIN()
FROM [YL_MESDB].[dbo].[View_生产订单_MES]
WHERE = v.
)
END

Binary file not shown.

View 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

View File

@@ -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>

View File

@@ -0,0 +1,489 @@
<template>
<div class="app-container">
<el-card style="height: 850px">
<div style="margin-top: 7px; margin-bottom: 7px">
<span class="show-text">生产订单:</span>
<el-input
v-model="orderNo"
placeholder="请输入生产订单"
clearable
style="width: 150px; margin-right: 10px"
@change="searchTable()"
/>
<span class="show-text">计划号:</span>
<el-input
v-model="plannum"
placeholder="请输入生产订单"
clearable
style="width: 150px; margin-right: 10px"
/>
<span class="show-text">物料编码:</span>
<el-input
v-model="productCode"
placeholder="请输入物料编码"
clearable
style="width: 150px; margin-right: 10px"
/>
<span class="show-text">物料名称:</span>
<el-input
v-model="itemName"
placeholder="请输入物料名称"
clearable
style="width: 150px; margin-right: 10px"
/>
<span class="show-text">工序名称:</span>
<el-input
v-model="processName"
placeholder="请输入工序名称"
clearable
style="width: 150px; margin-right: 10px"
/>
<span class="show-text">执行状态:</span>
<el-select v-model="dostate" placeholder="请选择">
<el-option
v-for="item in dostateoptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-button
icon="el-icon-search"
plain
type="primary"
@click="searchTable()"
>查询</el-button
>
</div>
<el-table
:data="mergedTableData"
highlight-current-row
border
size="small"
style="margin-top: 10px"
height="75vh"
@selection-change="handleSelectionChange"
@row-click="handleRowClick">
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="序号" type="index" align="center" width="50"/>
<el-table-column label="生产订单" align="center" prop="订单号" width="80" />
<el-table-column label="计划号" align="center" prop="计划号" width="80" />
<el-table-column label="工序名称" align="center" prop="工序名称" width="120"/>
<el-table-column label="物料名称" align="center" prop="产品名称" width="200"/>
<el-table-column label="同步状态" align="center" width="100">
<template slot-scope="scope">
{{scope.row.派工状态 === 1 ? '已同步':'未同步'}}
</template>
</el-table-column>
<el-table-column label="上序合格数" align="center" prop="上序合格数" width="100"/>
<el-table-column label="指派数量" align="center" prop="指派数量" width="80"/>
<el-table-column label="打印数量" align="center" prop="打印数量" width="80"/>
<el-table-column label="发料数量" align="center" prop="收料数量" width="80"/>
<el-table-column label="收货数量" align="center" prop="完成数量" width="80"/>
<el-table-column label="备注" align="center" prop="外协备注" width="200"/>
<el-table-column label="单重" align="center" prop="单重" width="80"/>
<el-table-column label="物料编码" align="center" prop="产品编码" width="200"/>
<el-table-column label="打印次数" align="center" prop="外协打印次数" width="120"/>
<el-table-column label="计划开始时间" align="center" prop="计划开始时间" width="120">
<template slot-scope="scope">
{{formatDate(scope.row.计划开始时间)}}
</template>
</el-table-column>
<el-table-column label="计划完成时间" align="center" prop="计划完成时间" width="120">
<template slot-scope="scope">
{{formatDate(scope.row.计划完成时间)}}
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { postB1 } from '@/api/b1s';
import $ from 'jquery'
import QRCode from 'qrcode'
import { set } from 'nprogress';
import { MESDownFile } from '@/utils/request'
import { seepdf, initPDFKeyboardShortcuts, setZoom } from '@/utils/pdf';
export default {
data() {
return {
downPDF:MESDownFile,
seeVisible:false,
qrCodeDataUrl:'',
printDataList2:[],
historyVisible:false,
printdata2:[],
historydata:[],
dialogFormVisible1: false,
tableData: [], // 原始数据
mergedTableData: [], // 合并后的数据
selectedRow:'',
selectedRow2:'',
productCode:'',
orderNo:'',
plannum:'',
processName:'',
itemName:'',
sessionId:'',
currentTime:'',
receiveVisible:false,
receiveData: {},
receiveNum: 0,
doVisible:false,
doData: {},
doNum: 0,
// 新增:存储合并数据的原始信息
mergedDataMap: new Map(), // 用于存储合并数据对应的原始数据组
workstate:0,
orderstate:0,
dostate:1,
workstateoptions:[{
value: 0,
label: '未同步'
}, {
value: 1,
label: '已同步',
disabled: true
}],
stateoptions:[{
value: 0,
label: '未完成',
disabled: true
}, {
value: 1,
label: '已完成',
}],
dostateoptions:[{
value: 0,
label: '全部',
disabled: true
}, {
value: 1,
label: '可执行',
},{
value: 2,
label: '不可执行',
}],
multipleSelection: [],
printDataList: [] ,// 新增:存储多个打印数据
numname:'',
textweight:'',
textsum:'',
textcontent:'',
textData:{},
textVisible:false,
qrCodeCache: new Map(),
qrCodeUrl: '',
}
},
computed: {
...mapGetters([
'id',
'token'
]),
},
created() {
this.searchTable()
setInterval(this.getCurrentTime, 1000);
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val;
},
getCurrentTime() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, "0");
const day = String(now.getDate()).padStart(2, "0");
const hours = String(now.getHours()).padStart(2, "0");
const minutes = String(now.getMinutes()).padStart(2, "0");
const seconds = String(now.getSeconds()).padStart(2, "0");
this.currentTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
handleRowClick(row) {
this.selectedRow = row
},
handleRowClick2(row) {
this.selectedRow2 = row
},
searchTable() {
this.loading = true
var param = []
param.push(["订单号",this.orderNo])
param.push(["产品编码",this.productCode])
param.push(["产品名称",this.itemName])
param.push(["工序名称",this.processName])
param.push(["计划号",this.plannum])
var Data = this.CreateData('11', '异常提醒_外协及时开工_查询',param)
this.ExecDatabase(Data).then(response => {
this.tableData = response.data
this.mergeTableData() // 处理数据合并
})
},
// 合并表格数据的方法
mergeTableData() {
if (!this.tableData || this.tableData.length === 0) {
this.mergedTableData = [];
this.mergedDataMap.clear();
return;
}
const groupedByOrder = {};
this.tableData.forEach(item => {
const groupKey = `${item.订单号}_${item.拆分内码}`;
if (!groupedByOrder[groupKey]) {
groupedByOrder[groupKey] = [];
}
groupedByOrder[groupKey].push(item);
});
const mergedData = [];
this.mergedDataMap.clear();
Object.keys(groupedByOrder).forEach(orderNo => {
const orderItems = groupedByOrder[orderNo];
orderItems.sort((a, b) => a.订单行号 - b.订单行号);
let currentGroup = [orderItems[0]];
for (let i = 1; i < orderItems.length; i++) {
const currentItem = orderItems[i];
const lastItem = orderItems[i - 1];
if (currentItem.订单行号 === lastItem.订单行号 + 1 && currentItem.外协分组 === lastItem.外协分组 && currentItem.拆分内码 === lastItem.拆分内码) {
currentGroup.push(currentItem);
} else {
// 检查组内最小计划开始时间是否小于今天
if (this.checkGroupPlanStartValid(currentGroup)) {
if (this.checkGroupAllZero(currentGroup)) {
const mergedItem = this.mergeGroup(currentGroup);
if (this.shouldIncludeByExecutionStatus(mergedItem)) {
mergedData.push(mergedItem);
this.mergedDataMap.set(mergedItem.uniqueKey, currentGroup);
}
}
}
currentGroup = [currentItem];
}
}
// 处理最后一组
if (currentGroup.length > 0) {
if (this.checkGroupPlanStartValid(currentGroup)) {
if (this.checkGroupAllZero(currentGroup)) {
const mergedItem = this.mergeGroup(currentGroup);
if (this.shouldIncludeByExecutionStatus(mergedItem)) {
mergedData.push(mergedItem);
this.mergedDataMap.set(mergedItem.uniqueKey, currentGroup);
}
}
}
}
});
this.mergedTableData = mergedData;
},
// 新增:检查组内最小计划开始时间是否小于今天
checkGroupPlanStartValid(group) {
const today = new Date();
today.setHours(0, 0, 0, 0);
// 获取组内最小的计划开始时间
const minPlanStart = group.reduce((min, item) => {
if (!item.计划开始时间) return min;
const planDate = new Date(item.计划开始时间);
planDate.setHours(0, 0, 0, 0);
return planDate < min ? planDate : min;
}, new Date('2099-12-31'));
return minPlanStart < today;
},
// 新增检查组内所有数据的收料数量是否都为0
checkGroupAllZero(group) {
// 只有组内所有数据的收料数量都等于0才返回true
return group.every(item => {
const 收料数量 = Number(item.收料数量) || 0;
return 收料数量 === 0;
});
},
// 新增:根据执行状态筛选数据(纯前端筛选)
shouldIncludeByExecutionStatus(mergedItem) {
const 执行状态 = this.dostate; // 0=全部, 1=可执行, 2=不可执行
if (执行状态 === 0) {
return true; // 全部,不筛选
}
const itemExecutionStatus = mergedItem.执行状态 || 1; // 默认可执行
if (执行状态 === 1) {
return itemExecutionStatus === 1; // 只显示可执行
} else if (执行状态 === 2) {
return itemExecutionStatus === 2; // 只显示不可执行
}
return true;
},
// 合并单个组的数据
mergeGroup(group) {
if (group.length === 1) {
const item = group[0];
item.uniqueKey = `${item.订单号}_${item.订单行号}_${item.TaskAID}`;
// 确保TaskAID是字符串类型
item.TaskAID = String(item.TaskAID);
// 计算单条记录的执行状态
const 上序合格数 = item.上序合格数 || 0;
const 订单行号 = item.订单行号;
item.执行状态 = (订单行号 === 1 || 上序合格数 > 0) ? 1 : 2;
return item;
}
const mergedItem = { ...group[0] };
// 生成唯一标识key
mergedItem.uniqueKey = group.map(item => `${item.订单号}_${item.订单行号}_${item.TaskAID}`).join('|');
// 拼接工序名称(逗号间隔)
const processNames = group.map(item => item.工序名称);
mergedItem.工序名称 = processNames.join(',');
// 拼接TaskAID逗号间隔
const taskAIDs = [...new Set(group.map(item => String(item.TaskAID)))];
mergedItem.TaskAID = taskAIDs.join(',');
// 取计划开始时间的最小值
const startTimes = group.map(item => new Date(item.计划开始时间));
mergedItem.计划开始时间 = new Date(Math.min(...startTimes)).toISOString().slice(0, 19).replace('T', ' ');
// 取计划完成时间的最大值
const endTimes = group.map(item => new Date(item.计划完成时间));
mergedItem.计划完成时间 = new Date(Math.max(...endTimes)).toISOString().slice(0, 19).replace('T', ' ');
// 取最大值
const wcnum = group.map(item => item.完成数量);
mergedItem.完成数量 = Math.max(...wcnum);
const printnum = group.map(item => item.外协打印次数);
mergedItem.外协打印次数 = Math.max(...printnum);
const slnum = group.map(item => item.收料数量);
mergedItem.收料数量 = Math.max(...slnum);
// 计算上序合格数(取组内最大值)
const shxnum = group.map(item => item.上序合格数 || 0);
mergedItem.上序合格数 = Math.max(...shxnum);
// 计算执行状态:只要一组内包含订单行号=1 或者包含上序合格数>0都属于可执行
const hasFirstProcess = group.some(item => item.订单行号 === 1);
const hasPreviousQualified = group.some(item => (item.上序合格数 || 0) > 0);
mergedItem.执行状态 = (hasFirstProcess || hasPreviousQualified) ? 1 : 2;
// 存储原始组数据引用
mergedItem.originalGroup = group;
return mergedItem;
},
// 获取订单行号最大的TaskAID
getMaxOrderLineTaskAID(row) {
// 如果是单条数据直接返回TaskAID
if (typeof row.TaskAID === 'number' || !row.TaskAID.includes(',')) {
return String(row.TaskAID);
}
// 如果是合并数据从原始数据组中找订单行号最大的TaskAID
if (row.originalGroup) {
const maxOrderLineItem = row.originalGroup.reduce((max, item) => {
return item.订单行号 > max.订单行号 ? item : max;
}, row.originalGroup[0]);
return String(maxOrderLineItem.TaskAID);
}
// 如果没有原始组数据从TaskAID字符串中取最后一个
const taskAIDs = row.TaskAID.split(',');
return taskAIDs[taskAIDs.length - 1];
},
// 获取订单行号最小的TaskAID
getMinOrderLineTaskAID(row) {
// 如果是单条数据直接返回TaskAID
if (typeof row.TaskAID === 'number' || !row.TaskAID.includes(',')) {
return String(row.TaskAID);
}
// 如果是合并数据从原始数据组中找订单行号最大的TaskAID
console.log(row)
if (row.originalGroup) {
const minOrderLineItem = row.originalGroup.reduce((min, item) => {
return item.订单行号 < min.订单行号 ? item : min;
}, row.originalGroup[0]);
return String(minOrderLineItem.TaskAID);
}
// 如果没有原始组数据从TaskAID字符串中取最后一个
const taskAIDs = row.TaskAID.split(',');
return taskAIDs[taskAIDs.length - 1];
},
formatDate(date) {
if (!date) return ''
return date.split(' ').length > 1 ? date.split(' ')[0] : date
},
}
}
</script>
<style>
.field-container {
border: 1px solid #000;
border-bottom:0px
}
.field-row {
display: flex;
width: 100%;
border-bottom: 1px solid #000;
}
.field-group {
display: flex;
width: 25%;
align-items: stretch;
border-right: 1px solid #000;
}
.field-group:last-child {
border-right: none;
}
.field-label {
width: 40%;
color: #000;
text-align: right;
padding: 12px 5px;
border-right: 1px solid #000;
display: flex;
align-items: center;
justify-content: flex-end;
}
.field-value {
width: 60%;
color: #303133;
word-break: break-word;
overflow-wrap: break-word;
padding: 12px 10px;
display: flex;
align-items: center;
}
</style>

View File

@@ -64,6 +64,14 @@
<el-option label="已开工" value="2" />
<el-option label="已完成" value="4" />
</el-select>
<el-switch
v-model="stationFilterMode"
active-text="工位正选"
inactive-text="工位反选"
active-value="include"
inactive-value="exclude"
style="margin-left: 20px;"
/>
<el-button
:disabled="loading"
icon="el-icon-search"
@@ -76,6 +84,7 @@
<el-checkbox v-for="item in Doingoptions" :key="item.工位号" :label="item.指南工位号" :value="item.工位号"> </el-checkbox>
</el-checkbox-group>
</div>
<el-table
v-loading="loading"
@@ -320,6 +329,7 @@ export default {
],
Doing: [],
Doingoptions: [],
stationFilterMode: 'include',
// DoingData: {
// 订单编号: "",
// 合同号: "",
@@ -549,6 +559,7 @@ export default {
param.push(["生产状态", this.productionStatus2]||-1);
param.push(["工位名称", this.Doing]);
param.push(["工位筛选模式", this.stationFilterMode]);
param.push(["用户ID" , this.$store.state.user.id])
param.push(["计划号" , this.plannum])
param.push(["销售订单" , this.salenum])

View File

@@ -0,0 +1,966 @@
<template>
<div>
<el-card>
<div class="search-container" @keyup.enter="searchTable">
<span class="show-text">生产订单:</span>
<el-input v-model="orderNo" placeholder="请输入生产订单" clearable style="width: 150px;margin-right: 10px" />
<span class="show-text">销售订单:</span>
<el-input v-model="contractNo" placeholder="请输入销售订单" clearable style="width: 150px;margin-right: 10px" />
<span class="show-text">产品编码:</span>
<el-input v-model="productCode" placeholder="请输入产品编码" clearable style="width: 150px;margin-right: 10px" />
<span class="show-text">计划号:</span>
<el-input v-model="plannum" placeholder="请输入计划号" clearable style="width: 150px;margin-right: 10px" />
<span class="show-text">自制件属性:</span>
<el-select v-model="selfStatus" clearable placeholder="请选择自制件属性" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="机加" value="机加" />
<el-option label="装配" value="装配" />
</el-select>
<!-- 新增外协过滤 -->
<span class="show-text">外协状态:</span>
<el-select v-model="outsourceStatus" clearable placeholder="请选择外协状态" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="是" value="是" />
<el-option label="否" value="否" />
</el-select>
<!-- 新增加急过滤 -->
<span class="show-text">加急状态:</span>
<el-select v-model="urgentStatus" clearable placeholder="请选择加急状态" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="加急" value="加急" />
<el-option label="正常" value="正常" />
</el-select>
<span class="show-text">单据状态:</span>
<el-select v-model="orderStatus" clearable placeholder="请选择单据状态" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="关闭" value="关闭" />
<el-option label="正常" value="正常" />
</el-select>
<!-- 其他搜索条件保持不变 -->
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="searchTable()">查询</el-button>
</div>
<el-table v-loading="loading" :data="tableData" :height="'80vh'" 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: 20px;" tooltip-effect="dark" @row-click="handleRowClick">
<el-table-column type="expand">
<template slot-scope="scope">
<el-form label-position="left" class="demo-table-expand">
<el-table :data="scope.row.子数据" :row-class-name="getHeaderClass" border >
<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="外协" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.是否外协 ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column> -->
<el-table-column align="center" label="计划开始时间" prop="计划开始时间" width="100">
<template slot-scope="scope">{{ formatDate(scope.row.计划开始时间) }}</template>
</el-table-column>
<el-table-column align="center" label="计划结束时间" prop="计划完成时间" width="100">
<template slot-scope="scope">{{ formatDate(scope.row.计划完成时间) }}</template>
</el-table-column>
<el-table-column align="center" label="实际开始时间" prop="开始时间" width="100">
<template slot-scope="scope">{{ scope.row.开始时间 === '1900-01-01 00:00:00'? '':scope.row.开始时间}}</template>
</el-table-column>
<el-table-column align="center" label="实际结束时间" width="100">
<template slot-scope="scope">{{ scope.row.指派对象 === '外协' ? scope.row.外协结束时间 === '1900-01-01 00:00:00'? '':scope.row.外协结束时间 : scope.row.结束时间 === '1900-01-01 00:00:00'? '':scope.row.结束时间}}</template>
</el-table-column>
<el-table-column align="center" label="完成进度" prop="进度" width="100">
<template slot-scope="scope">{{ scope.row.进度}}%</template>
</el-table-column>
<el-table-column align="center" label="完成数量" prop="完成数量" width="100" />
<el-table-column align="center" label="外协发料数量" prop="收料数量" width="100" >
<template slot-scope="scope">{{scope.row.指派对象 === '外协' ? scope.row.收料数量:''}}</template>
</el-table-column>
<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>
</el-form>
</template>
</el-table-column>
<!-- 主表列定义 -->
<el-table-column align="center" label="序号" type="index" width="50" />
<el-table-column align="center" prop="合同号" label="销售订单" width="120" />
<el-table-column align="center" prop="订单号" label="生产订单" width="100" />
<el-table-column align="center" prop="产品编码" label="产品编码" width="220" />
<el-table-column align="center" prop="产品名称" label="产品名称" width="190" />
<el-table-column align="center" prop="计划数量订单" label="计划数量" width="80" />
<el-table-column align="center" label="加急数量" width="80">
<template slot-scope="scope">
<div @click="Urgent(scope.row)" style="color: aqua;">
{{ scope.row.加急总数 }}
</div>
</template>
</el-table-column>
<el-table-column align="center" label="工艺路线" width="550">
<template slot-scope="scope">
<div class="process-route" v-html="formatProcessRoute(scope.row)" />
</template>
</el-table-column>
<el-table-column align="center" prop="入库数量" label="入库数量" width="80" />
<el-table-column align="center" label="要求完工日" width="120">
<template slot-scope="scope">{{ formatDate(scope.row.要求完工日期) }}</template>
</el-table-column>
<!-- 主表显示外协状态 -->
<!-- <el-table-column align="center" label="外协" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.是否外协 ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column> -->
<!-- 其他状态列保持不变 -->
<el-table-column align="center" label="排产" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.排产状态 === 1 ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" label="拣配" width="80">
<template slot-scope="scope">
<div class="status-light" :class="Number(scope.row.拣配状态) === 1 ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" label="开工" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.开工时间 === 1 ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" label="终检" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.终检 === '是' ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" label="加急" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.加急状态 === '加急' ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" label="优先级" width="80">
<template slot-scope="scope">
<div class="status-light" :class="scope.row.优先级 === '是' ? 'status-light-green' : 'status-light-gray'" />
</template>
</el-table-column>
<el-table-column align="center" prop="当前序" label="当前序" width="80" />
<el-table-column align="center" prop="计划号" label="计划号" width="120" />
</el-table>
</el-card>
<el-dialog
:visible.sync="UrgentVisible"
title="加急明细"
width="1200px"
center
:close-on-click-modal="false"
>
<el-form ref="Urgentarr" :model="Urgentarr" size="mini">
<el-form-item v-for="item in Urgentarr" :key="item.订单编号" >
<div class="info-container" >
<div class="info-item">
<span class="info-label" style="width: 80px">生产订单</span>
<span class="info-value">
<el-input
v-model="item.订单编号"
size="mini"
readonly
style="width: 300px"
/>
</span>
</div>
<div class="info-item">
<span class="info-label" style="width: 80px">加急数量</span>
<span class="info-value">
<el-input
v-model="item.加急数量"
size="mini"
style="width: 150px"
readonly
/>
</span>
</div>
<div class="info-item">
<span class="info-label" style="width: 80px">物料编号</span>
<span class="info-value">
<el-input
v-model="item.物料编号"
size="mini"
style="width: 150px"
readonly
/>
</span>
</div>
</div>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="UrgentVisible = false">关闭</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
orderNo: '',
contractNo: '',
productCode: '',
plannum: '',
productName: '',
processName: '',
nature: '',
productionStatus: '全部',
selfStatus: '全部',
// 新增过滤字段
outsourceStatus: '全部', // 外协状态
urgentStatus: '全部', // 加急状态
orderStatus:'正常',
completionTime: [],
loading: false,
tableData: [],
selectedRow: null,
editDialogVisible: false,
editSubmitLoading: false,
currentRow: {},
editForm: {
优先级: '',
未完成说明: '',
派工特殊说明: ''
},
splitTaskDialogVisible: false,
splitTaskSubmitLoading: false,
stationOptions: [],
splitTaskForm: {
分配数量: 0,
指派对象: '',
指派对象编号: '',
派工特殊备注: '',
计划开始时间: '',
计划结束时间: '',
最晚开始时间: '',
任务概述: ''
},
planStartTime: [],
planendTime: [],
UrgentVisible: false,
Urgentarr: {}
}
},
created() {
var now = new Date()
var start = new Date(Date.UTC(now.getFullYear() - 2, now.getMonth(), now.getDate(), 0, 0, 0)).toISOString().replace('T', ' ').replace('.000Z', '')
var end = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59)).toISOString().replace('T', ' ').replace('.000Z', '')
this.searchTable()
},
methods: {
Urgent(row){
var param = []
param.push(["物料编号",row.产品编码])
this.UrgentVisible = true
var Data = this.CreateData("11", "加急订单_加急明细查询",param);
this.ExecDatabase(Data).then((response) => {
this.Urgentarr = response.data
});
},
getHeaderClass({ row, rowIndex }) {
if (row.绿 == 1) {
return 'warning-row'
} else if (row. === 1) {
return 'error-row'
} else if (row. === 1) {
return 'success-row'
} else {
return ''
}
},
formatDate(date) {
if (!date) return ''
return date.split(' ').length > 1 ? date.split(' ')[0] : date
},
formatProcessRouteDate(date) {
const formattedDate = this.formatDate(date)
const match = formattedDate.match(/^(\d{4})-(\d{2})-(\d{2})$/)
return match ? `${match[2]}-${match[3]}` : formattedDate
},
toProcessNumber(value) {
const num = Number(value)
return Number.isFinite(num) ? num : 0
},
escapeProcessHtml(value) {
return String(value == null ? '' : value)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
},
isOutsourceProcess(process) {
return process.指派对象 === '外协'
},
getProcessStatusNum(status) {
const statusNum = parseInt(status)
if (Number.isFinite(statusNum)) {
return statusNum
}
const statusMap = {
辅助开始: 2,
辅助结束: 3,
开始加工: 4,
暂停: 5,
报工: 6,
装配加工: 4
}
return statusMap[status] || 0
},
isBlueProcess(process) {
const statusNum = this.getProcessStatusNum(process.加工状态)
const countNum = parseInt(process.收检合格数)
return statusNum === 6 || statusNum === 3 || countNum > 0
},
isGreenProcess(process) {
console.log(process)
console.log( this.toProcessNumber(process.收料数量), this.toProcessNumber(process.完成数量),this.isOutsourceProcess(process))
return this.isOutsourceProcess(process) &&
this.toProcessNumber(process.收料数量) > this.toProcessNumber(process.完成数量) + this.toProcessNumber(process.收检不合格数)
},
getProcessBaseClass(process) {
if (this.isGreenProcess(process)) {
return 'process-route-green'
}
if (this.isBlueProcess(process)) {
return 'process-route-blue'
}
const statusNum = this.getProcessStatusNum(process.加工状态)
if (statusNum === 2 || statusNum === 4) {
return 'process-route-green'
}
return 'process-route-red'
},
getOutsourceGroupClassState(processes) {
const classes = new Map()
let currentIndexes = []
let lastProcess = null
const flushOutsourceRun = () => {
if (currentIndexes.length > 0 && lastProcess) {
const className = this.getProcessBaseClass(lastProcess)
currentIndexes.forEach(index => classes.set(index, className))
}
currentIndexes = []
lastProcess = null
}
const isSameContinuousGroup = process => {
if (!lastProcess) {
return true
}
const lineNo = this.toProcessNumber(process.订单行号)
const lastLineNo = this.toProcessNumber(lastProcess.订单行号)
return lineNo === lastLineNo + 1 &&
String(process.外协分组 || '') === String(lastProcess.外协分组 || '')
}
processes.forEach((process, index) => {
if (!this.isOutsourceProcess(process)) {
flushOutsourceRun()
return
}
if (!isSameContinuousGroup(process)) {
flushOutsourceRun()
}
currentIndexes.push(index)
lastProcess = process
})
flushOutsourceRun()
console.log(classes)
return classes
},
getProcessClass(process, index, outsourceGroupClasses) {
if (this.isOutsourceProcess(process)) {
return outsourceGroupClasses.get(index) || this.getProcessBaseClass(process)
}
return this.getProcessBaseClass(process)
},
getProcessRouteName(process) {
const name = String(process.工序名称 || '')
const assignee = String(process.指派对象 || '')
if (!assignee || name.includes(`(${assignee})`) || name.includes(`${assignee}`)) {
return name
}
return `${name}(${assignee})`
},
getRouteProcesses(row) {
if (Array.isArray(row.子数据) && row.子数据.length > 0) {
return row.子数据
}
return String(row.工艺路线 || '')
.split(',')
.map(name => name.trim())
.filter(Boolean)
.map(name => ({
工序名称: name,
加工状态: 0,
收检合格数: 0,
计划开始时间: '',
指派对象: '',
订单行号: 0,
收料数量: 0,
收检不合格数: 0
}))
},
formatProcessRoute(row) {
const processes = this.getRouteProcesses(row)
if (processes.length === 0) {
return ''
}
const outsourceGroupClasses = this.getOutsourceGroupClassState(processes)
const maxPerRow = 8
const rows = Math.ceil(processes.length / maxPerRow)
let tableHtml = '<div class="process-route-wrap"><table class="process-route-table"><tbody>'
for (let rowIndex = 0; rowIndex < rows; rowIndex++) {
const startIndex = rowIndex * maxPerRow
const endIndex = Math.min(startIndex + maxPerRow, processes.length)
const rowProcesses = processes.slice(startIndex, endIndex)
if (rowIndex > 0) {
tableHtml += '<tr class="process-route-spacer"><td colspan="' + (maxPerRow * 2 - 1) + '"></td></tr>'
}
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const planDate = this.formatProcessRouteDate(process.计划开始时间 || process.计划完成时间 || '')
tableHtml += `<td class="process-route-date ${className}">${this.escapeProcessHtml(planDate)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow-hidden"></td>'
}
})
tableHtml += '</tr>'
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const name = this.getProcessRouteName(process)
tableHtml += `<td class="${className}">${this.escapeProcessHtml(name)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow">→</td>'
}
})
tableHtml += '</tr>'
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const count = this.toProcessNumber(process.收检合格数)
tableHtml += `<td class="process-route-count ${className}">合格${this.escapeProcessHtml(count)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow-hidden"></td>'
}
})
tableHtml += '</tr>'
}
tableHtml += '</tbody></table></div>'
return tableHtml
},
mergeOrderData(dataList) {
// 第一步:先按照订单行号对原始数据进行排序
const sortedDataList = [...dataList].sort((a, b) => {
const rowA = parseInt(a.订单行号 || 0)
const rowB = parseInt(b.订单行号 || 0)
return rowA - rowB
})
const orderMap = new Map()
sortedDataList.forEach((item, index) => {
const orderNumber = item.订单号
if (!orderMap.has(orderNumber)) {
// 判断该工序是否外协
const isOutsource = item.指派对象 && item.指派对象.includes('外协')
orderMap.set(orderNumber, {
...item,
当前序: '',
开工时间: 0,
序检: item.序检,
是否外协: isOutsource, // 新增:记录订单是否包含外协
子数据: [{
工序名称: item.工序名称,
指派对象: item.指派对象,
计划完成时间: item.计划完成时间,
计划开始时间: item.计划开始时间,
进度: item.进度,
拆分内码: item.拆分内码,
计划数量: item.计划数量,
开工时间: item.开工时间,
完成数量: item.完成数量,
收料数量: item.收料数量,
收检合格数: item.收检合格数,
收检不合格数: item.收检不合格数,
任务状态: item.任务状态,
加工状态: item.加工状态,
终检: item.终检,
是否外协: isOutsource, // 新增:记录该工序是否外协
绿: 0,
: 0,
: 0,
订单行号: item.订单行号,
加急总数:item.加急总数,
外协结束时间:item.外协结束时间,
开始时间:item.开始时间,
外协分组: item.外协分组
}]
})
} else {
const existingItem = orderMap.get(orderNumber)
// 判断该工序是否外协
const isOutsource = item.指派对象 && item.指派对象.includes('外协')
// 如果发现外协工序,更新订单的外协状态
if (isOutsource) {
existingItem.是否外协 = true
}
// 插入子数据时保持排序
existingItem.子数据.push({
工序名称: item.工序名称,
指派对象: item.指派对象,
计划完成时间: item.计划完成时间,
计划开始时间: item.计划开始时间,
进度: item.进度,
拆分内码: item.拆分内码,
计划数量: item.计划数量,
开工时间: item.开工时间,
完成数量: item.完成数量,
收料数量: item.收料数量,
收检合格数: item.收检合格数,
收检不合格数: item.收检不合格数,
任务状态: item.任务状态,
加工状态: item.加工状态,
终检: item.终检,
是否外协: isOutsource, // 新增:记录该工序是否外协
绿: 0,
: 0,
: 0,
订单行号: item.订单行号,
加急总数:item.加急总数,
开始时间:item.开始时间,
结束时间:item.结束时间,
外协结束时间:item.外协结束时间,
外协分组: item.外协分组
})
// 对子数据按照订单行号排序
existingItem.子数据.sort((a, b) => {
const rowA = parseInt(a.订单行号 || 0)
const rowB = parseInt(b.订单行号 || 0)
return rowA - rowB
})
existingItem.子数据.forEach((element, index) => {
if (new Date(element.开工时间) > new Date('1900-01-01 00:00:00')) {
element.绿 = 1
} else {
element.绿 = 0
}
if (element.进度 == 100) {
element. = 1
element.绿 = 0
} else {
element. = 0
}
if (index > 0) {
if (new Date(element.开工时间) == new Date('1900-01-01 00:00:00') && existingItem.子数据[index - 1].进度 == 100) {
element. = 1
element.绿 = 0
} else {
element. = 0
}
}
})
if (item.收检合格数 > 0) {
existingItem.当前序 = item.工序名称
}
if (item.优先级 == '是') {
existingItem.优先级 = item.优先级
}
if (item.终检 == '是') {
existingItem.终检 = item.终检
}
if (new Date(item.开工时间) > new Date('1900-01-01 00:00:00')) {
existingItem.开工时间 = 1
}
// 确保加急状态正确传递
if (item.加急状态 === '加急') {
existingItem.加急状态 = '加急'
}
}
})
// 应用过滤条件
let filteredData = Array.from(orderMap.values()).map(item => ({
订单号: item.订单号,
合同号: item.合同号,
产品编码: item.产品编码,
产品名称: item.产品名称,
计划数量订单: item.计划数量订单,
要求完工日期: item.要求完工日期,
排产状态: item.排产状态,
优先级: item.优先级,
当前序: item.当前序,
工艺路线: item.工艺路线,
计划数量: item.计划数量,
开工时间: item.开工时间,
序检: item.序检,
子数据: item.子数据,
加急状态: item.加急状态,
终检: item.终检,
计划号: item.计划号,
拣配状态: item.拣配状态,
是否外协: item.是否外协, // 新增:是否外协订单
加急数量: item.加急数量,
加急总数: item.加急总数,
入库数量: item.入库数量,
}))
// 应用外协过滤
if (this.outsourceStatus !== '全部') {
const isOutsource = this.outsourceStatus === '是'
filteredData = filteredData.filter(item => item.是否外协 === isOutsource)
}
// 应用加急过滤
if (this.urgentStatus !== '全部') {
const isUrgent = this.urgentStatus === '加急'
filteredData = filteredData.filter(item =>
isUrgent ? item.加急状态 === '加急' : (!item.加急状态 || item.加急状态 !== '加急')
)
}
this.tableData = filteredData
},
searchTable() {
this.loading = true
this.tableData = []
var param = []
param.push(['订单号', this.orderNo || 0])
param.push(['物料类型', '自制件'])
param.push(['合同号', this.contractNo])
param.push(['产品编码', this.productCode])
param.push(['产品名称', this.productName])
param.push(['工序名称', this.processName])
param.push(['计划开始1', this.planStartTime[0]])
param.push(['计划开始2', this.planStartTime[1]])
param.push(['计划完成1', this.planendTime[0]])
param.push(['计划完成2', this.planendTime[1]])
param.push(['要求完工日期1', this.completionTime ? this.completionTime[0] : ''])
param.push(['要求完工日期2', this.completionTime ? this.completionTime[1] : ''])
param.push(['排产状态', this.productionStatus])
param.push(['自制件属性', this.selfStatus])
param.push(['指派对象', '全部'])
param.push(['计划号', this.plannum])
param.push(['加急状态', this.urgentStatus])
param.push(['单据状态', this.orderStatus])
// // 添加外协状态过滤条件
// if (this.outsourceStatus !== '全部') {
// param.push(['是否外协', this.outsourceStatus === '是' ? 1 : 0])
// }
var Data = this.CreateData('11', '生产管理_生产计划跟踪', param)
this.ExecDatabase(Data).then(response => {
this.loading = false
if (response.data.length !== 0) {
this.mergeOrderData(response.data)
}
}).catch(() => {
this.loading = false
})
},
// 其他方法保持不变...
handleRowClick(row) {
this.selectedRow = row
},
editTask(row) {
this.currentRow = row
this.editForm = {
优先级: row.优先级 || '',
未完成说明: row.未完成说明 || '',
派工特殊说明: row.派工特殊说明 || ''
}
this.editDialogVisible = true
},
submitEditForm() {
this.editSubmitLoading = true
const params = []
params.push(['订单号', this.currentRow.订单号])
params.push(['订单行号', this.currentRow.订单行号])
params.push(['订单拆分内码', this.currentRow.拆分内码])
params.push(['优先级', this.editForm.优先级])
params.push(['未完成说明', this.editForm.未完成说明])
params.push(['派工特殊说明', this.editForm.派工特殊说明])
params.push(['最后编辑人', this.$store.state.user.name])
const Data = this.CreateData('12', 'MES_OrderPlanned_DescriptionEdit', params)
this.ExecDatabase(Data).then(() => {
this.$message.success('保存成功')
this.editDialogVisible = false
this.searchTable()
}).catch(() => {
this.$message.error('保存失败')
}).finally(() => {
this.editSubmitLoading = false
})
},
handleOutsourceNotify(row) {
this.$confirm('确认同计划发起外协通知吗?', '确认', {
confirmButtonText: '是',
cancelButtonText: '否',
type: 'warning',
center: true
}).then(() => {
this.$message.success('外协通知已发送')
}).catch(() => {
})
},
openSplitTask() {
if (!this.selectedRow) {
this.$message.warning('请先选择需要操作的行')
return
}
this.getStationList()
this.splitTaskForm = {
分配数量: this.selectedRow.计划数量 || 0,
指派对象: this.selectedRow.指派对象 || '',
指派对象编号: this.selectedRow.指派对象编号 || '',
派工特殊备注: this.selectedRow.派工特殊说明 || '',
计划开始时间: this.selectedRow.计划开始时间 || '',
计划结束时间: this.selectedRow.计划完成时间 || '',
最晚开始时间: this.selectedRow.最晚开始时间 || '',
任务概述: this.selectedRow.计划数量 || ''
}
this.splitTaskDialogVisible = true
},
submitSplitTaskForm() {
this.splitTaskSubmitLoading = true
this.$confirm('确认要拆分子任务吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 空逻辑
this.splitTaskSubmitLoading = false
this.splitTaskDialogVisible = false
this.$message.success('操作成功')
this.searchTable()
}).catch(() => {
this.splitTaskSubmitLoading = false
this.$message.info('已取消操作')
})
},
getStationList() {
const params = []
const Data = this.CreateData('11', 'Prog_MES_LoadStations', params)
this.ExecDatabase(Data).then(response => {
if (response.data && response.data.length > 0) {
this.stationOptions = response.data.map(item => ({
label: item.OPName,
value: item.OPName,
code: item.VisCode
}))
}
})
},
handleStationChange(value) {
const selected = this.stationOptions.find(item => item.value === value)
if (selected) {
this.splitTaskForm.指派对象编号 = selected.code
}
}
}
}
</script>
<style scoped>
::v-deep .el-table th.el-table__cell>.cell{
white-space: pre-wrap;
}
.process{
width: 120px;
display: inline-flex;
}
.process-route {
line-height: 1.4;
white-space: normal;
word-break: break-all;
}
::v-deep .process-route-wrap {
width: 100%;
text-align: left;
}
::v-deep .process-route-table {
width: auto;
border-collapse: collapse;
text-align: left;
table-layout: auto;
}
::v-deep .process-route-table td {
text-align: left;
padding: 2px 2px;
font-size: 11px;
white-space: nowrap;
line-height: 1.4;
}
::v-deep .process-route-date {
font-size: 10px !important;
color: #8899aa !important;
padding: 2px 2px !important;
}
::v-deep .process-route-count {
font-weight: 700;
font-size: 12px !important;
}
::v-deep .process-route-spacer td {
height: 4px;
padding: 0 !important;
line-height: 1 !important;
}
::v-deep .process-route-green {
color: #28d961;
font-weight: 700;
}
::v-deep .process-route-blue {
color: #09a8ff;
font-weight: 700;
}
::v-deep .process-route-red {
color: #ff3f37;
font-weight: 700;
}
::v-deep .process-route-arrow {
color: rgba(0, 164, 255, 0.6) !important;
font-size: 10px !important;
padding: 2px 0 !important;
width: 8px;
text-align: center !important;
}
::v-deep .process-route-arrow-hidden {
padding: 2px 0 !important;
width: 8px;
}
.search-container {
margin-bottom: 20px;
}
.show-text {
margin-right: 5px;
line-height: 32px;
}
.status-light {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
}
.status-light-green {
background-color: #67C23A;
}
.status-light-gray {
background-color: #909399;
}
.dialog-footer {
text-align: right;
}
::v-deep .warning-row {
background-color: #67c23a !important;
}
::v-deep .error-row {
background-color: #409eff !important;
}
::v-deep .success-row {
background-color: #f2a201 !important;
}
::v-deep .el-table td.el-table__cell{
border: 0;
}
.info-container {
border: 1px solid #ccc;
display: flex;
}
.info-item {
display: flex;
flex: 1;
border-right: 1px solid #ccc;
}
.info-item:last-child {
border-right: none;
}
.info-label {
width: 30%;
padding: 8px;
background-color: #f5f7fa;
border-right: 1px solid #ccc;
}
.info-value {
flex: 1;
padding: 5px;
}
.info-label,
.info-value {
display: flex;
align-items: center;
}
.el-table tr{
background-color: initial;
}
</style>

View File

@@ -18,7 +18,7 @@
/>
&nbsp;&nbsp;
<span class="show-text">设备:</span>
<el-select v-model="equipmentType" placeholder="请选择设备" filterable size="small" style="width:200px" @change="searchTable" >
<el-select v-model="equipmentType" placeholder="请选择设备" filterable size="small" style="width:100px" @change="searchTable" >
<el-option
v-for="item in basedatalx"
:key="item.id"
@@ -43,7 +43,7 @@
</el-table-column>
<el-table-column label="参数值" align="center">
<template slot-scope="scope">
{{ scope.row.参数值 }}
{{ scope.row.参数值 }}{{ scope.row.参数单位 }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100px">
@@ -53,7 +53,7 @@
</el-table-column>
</el-table>
</div>
<div style="width: 600px;margin-left: 5px">
<div style="width: 800px;margin-left: 5px">
<el-table v-if="dataType === 1" :data="tableData1" v-loading="loading" border size="small" stripe highlight-current-row height="740px" >
<el-table-column label="开始时间" prop="Zone" align="center" width="150px" >
<template slot-scope="scope">
@@ -70,29 +70,130 @@
{{ scope.row.状态名称 }}
</template>
</el-table-column>
<el-table-column label="时长(m)" align="center">
<el-table-column label="时长(min)" align="center">
<template slot-scope="scope">
{{ scope.row.累计分钟数 }}
</template>
</el-table-column>
</el-table>
<el-table v-if="dataType === 2" :data="tableData1" border size="small" stripe highlight-current-row height="740px" >
<el-table-column label="订单编号" prop="Zone" align="center" width="150px" >
<div v-if="dataType === 2">
<span class="show-text">订单编号:</span>
<el-input
v-model="orderNo"
placeholder="请输入订单编号"
clearable
style="width: 150px; margin-right: 10px"
/>
<el-button type="primary" icon="el-icon-search" size="small" style="margin-left: 20px" plain @click="handleSearch(currentRow)">查询</el-button>
<el-table :data="tableData1" border size="small" stripe highlight-current-row height="700px" style="margin-top: 5px" >
<el-table-column label="订单编号" prop="Zone" align="center" width="100px" >
<template slot-scope="scope">
{{ scope.row.订单编号 }}
</template>
</el-table-column>
<el-table-column label="加工时长(min)" prop="TagName" align="center">
<template slot-scope="scope">
{{ scope.row.循环时间 }}
</template>
</el-table-column>
<el-table-column label="换件时长(min)" prop="TagName" align="center">
<template slot-scope="scope">
{{ scope.row.换件时间 }}
</template>
</el-table-column>
<el-table-column label="采集时间" align="center" width="150px" >
<template slot-scope="scope">
{{ scope.row.采集时间 }}
</template>
</el-table-column>
</el-table>
<div class="block" style="margin-top: 10px;">
<el-pagination
:current-page="pageCurrent"
:page-sizes="[20, 40, 50, 100]"
:page-size="pageSize"
:total="total"
:small="true"
layout="total, sizes, prev, pager, next"
@size-change="handleSizeChanges"
@current-change="handleCurrentChanges"/>
</div>
</div>
<el-table v-if="dataType === 3" :data="tableData1" border size="small" stripe highlight-current-row height="740px" >
<el-table-column label="订单编号" prop="Zone" align="center" width="100px" >
<template slot-scope="scope">
{{ scope.row.订单编号 }}
</template>
</el-table-column>
<el-table-column label="加工时长" prop="TagName" align="center">
<el-table-column label="程序时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
{{ scope.row.循环时间 }}
<span style="color: #0ba9e3">{{ scope.row.程序时长 }}</span>
</template>
</el-table-column>
<el-table-column label="采集时间" align="center" width="150px" >
<el-table-column label="最小时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
{{ scope.row.采集时间 }}
{{ scope.row.最小时长 }}
</template>
</el-table-column>
<el-table-column label="最大时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
{{ scope.row.最大时长 }}
</template>
</el-table-column>
<!-- <el-table-column label="频次/总数" prop="Zone" align="center" >-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.频次 }} / {{ scope.row.总记录数 }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="产品编码" prop="Zone" align="center">
<template slot-scope="scope">
{{ scope.row.产品编码 }}
</template>
</el-table-column>
<el-table-column label="产品名称" prop="Zone" align="center" >
<template slot-scope="scope">
{{ scope.row.产品名称 }}
</template>
</el-table-column>
</el-table>
<el-table v-if="dataType === 4" :data="tableData1" border size="small" stripe highlight-current-row height="740px" >
<el-table-column label="订单编号" prop="Zone" align="center" width="100px" >
<template slot-scope="scope">
{{ scope.row.订单编号 }}
</template>
</el-table-column>
<el-table-column label="换件时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
<span style="color: #0ba9e3">{{ scope.row.换件时长 }}</span>
</template>
</el-table-column>
<el-table-column label="最小时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
{{ scope.row.最小时长 }}
</template>
</el-table-column>
<el-table-column label="最大时长(min)" prop="Zone" align="center" width="120px" >
<template slot-scope="scope">
{{ scope.row.最大时长 }}
</template>
</el-table-column>
<!-- <el-table-column label="频次/总数" prop="Zone" align="center" >-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.频次 }} / {{ scope.row.总记录数 }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="产品编码" prop="Zone" align="center" >
<template slot-scope="scope">
{{ scope.row.产品编码 }}
</template>
</el-table-column>
<el-table-column label="产品名称" prop="Zone" align="center" >
<template slot-scope="scope">
{{ scope.row.产品名称 }}
</template>
</el-table-column>
</el-table>
</div>
</div>
@@ -120,6 +221,7 @@ export default {
completionTime: [],
routineCheckType: [],
dataType: 0,
orderNo: '',
loading: false,
dialogFormVisible: false,
title: '',
@@ -146,6 +248,7 @@ export default {
设备类型: [{ required: true, message: '请选择' }]
},
original: '',
currentRow: null,
total: 0, // 分页总数
tableData: [], // 设备信息表
tableData1: [], // 设备信息表
@@ -274,16 +377,31 @@ export default {
this.loading = true
this.tableData1 = []
this.dataType = row.数据类型
this.currentRow = row
var param = []
param.push(['PageCurrent', this.pageCurrent])
param.push(['PageSize', this.pageSize])
param.push(['PageCount', '1111', 'int', '1'])
param.push(['ItemCount', '1111', 'int', '1'])
param.push(['开始时间', this.completionTime[0]])
param.push(['结束时间', this.completionTime[1]])
param.push(['设备名称', this.equipmentType])
param.push(['参数名称', row.参数名称])
param.push(['数据类型', row.数据类型])
param.push(['订单编号', this.orderNo])
var Data = this.CreateData('11', '设备管理_设备数据_统计数据查询_通过类型', param)
this.ExecDatabase(Data).then(response => {
this.loading = false
this.tableData1 = row.数据类型 === 1 ? this.mergeContinuousStatus(response.data) : response.data
console.log(response.data)
if (row.数据类型 === 1) {
this.tableData1 = this.mergeContinuousStatus(response.data.result)
} else if (row.数据类型 === 2) {
this.tableData1 = response.data.result
this.total = parseInt(response.data.output[0].ItemCount)
} else {
this.tableData1 = response.data.result
}
// this.tableData = response.data.result
// this.total = parseInt(response.data.output[0].ItemCount)
}).catch(() => {
@@ -293,11 +411,11 @@ export default {
handleSizeChanges(val) {
this.pageCurrent = 1
this.pageSize = val
this.searchTable()
this.handleSearch(this.currentRow)
},
handleCurrentChanges(val) {
this.pageCurrent = val
this.searchTable()
this.handleSearch(this.currentRow)
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -213,7 +213,7 @@
</el-button>
</template>
</el-table-column>
<el-table-column align="center" prop="备注" label="备注" width="150" />
<el-table-column align="center" prop="备注" label="备注" width="150" show-overflow-tooltip />
<el-table-column align="center" prop="未完成说明" label="未完成说明" width="120" />
<el-table-column align="center" prop="派工特殊说明" label="派工特殊备注" width="120" />
<el-table-column align="center" label="编辑" width="120">
@@ -221,6 +221,8 @@
<el-button type="text" size="mini" @click="editRemark(scope.row)">编辑</el-button>
</template>
</el-table-column>
<el-table-column align="center" prop="行文本备注" label="工艺备注" width="120" />
<el-table-column align="center" prop="任务概述" label="工艺说明" width="120" />
<el-table-column align="center" label="二次派工" width="200">
<template slot-scope="scope">
<el-select

View File

@@ -15,16 +15,16 @@
<el-input v-model="doneprocessName" placeholder="请输入工序名称" clearable style="width: 150px;margin-right: 10px" />
<br>
<br>
<span class="show-text">排产状态:</span>
<!-- <span class="show-text">排产状态:</span>
<el-select v-model="doneproductionStatus" clearable placeholder="请选择状态" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="已完成" value="已完成" />
<el-option label="未完成" value="未完成" />
</el-select>
</el-select> -->
<span class="show-text">要求完工日期:</span>
<el-date-picker
v-model="completionTime"
:clearable="false"
end-placeholder="结束时间"
format="yyyy-MM-dd"
popper-class="virtual-cell-time-picker"
@@ -36,26 +36,21 @@
<span class="show-text">计划开始:</span>
<el-date-picker
v-model="planStartTime"
:clearable="false"
end-placeholder="结束时间"
format="yyyy-MM-dd"
popper-class="virtual-cell-time-picker"
range-separator="-"
start-placeholder="开始时间"
style="width: 280px;vertical-align: top"
type="datetimerange"
placeholder="计划开始时间"
style="width: 150px;
vertical-align: top"
type="date"
value-format="yyyy-MM-dd" />
<span class="show-text">计划完成:</span>
<el-date-picker
v-model="planendTime"
:clearable="false"
end-placeholder="结束时间"
format="yyyy-MM-dd"
popper-class="virtual-cell-time-picker"
range-separator="-"
start-placeholder="开始时间"
style="width: 280px;vertical-align: top"
type="datetimerange"
placeholder="计划完成时间"
style="width: 150px;
vertical-align: top"
type="date"
value-format="yyyy-MM-dd" />
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="donesearchTable()">查询</el-button>
</div>
@@ -185,8 +180,10 @@
@click="getitemdata(scope.row.订单号)">查看</el-button>
</template>
</el-table-column>
<el-table-column align="center" prop="备注" label="备注" width="150" />
<el-table-column align="center" label="最晚开始" width="160">
<el-table-column align="center" prop="备注" label="备注" width="150" show-overflow-tooltip/>
<el-table-column align="center" prop="行文本备注" label="工艺备注" width="120" />
<el-table-column align="center" prop="任务概述" label="工艺说明" width="120" />
<!-- <el-table-column align="center" label="最晚开始" width="160">
<el-date-picker
v-model="scope.row.最晚开始时间"
type="date"
@@ -197,7 +194,7 @@
value-format="yyyy-MM-dd"
@change = "editlateTask">
</el-date-picker>
</el-table-column>
</el-table-column> -->
<!-- <el-table-column align="center" label="派工" width="100">
<template slot-scope="scope">
<el-button type="primary" size="mini"
@@ -375,8 +372,8 @@ export default {
station:'全部',
completids:[],
completionTime: [],
planStartTime: [],
planendTime: [],
planStartTime: '',
planendTime: '',
loading: false,
tableData: [],
donetableData: [],
@@ -770,13 +767,11 @@ export default {
// param.push(['性质', this.nature])
param.push(['要求完工日期1', this.completionTime[0]])
param.push(['要求完工日期2', this.completionTime[1]])
param.push(['计划开始1', this.planStartTime[0]])
param.push(['计划开始2', this.planStartTime[1]])
param.push(['计划完成1', this.planendTime[0]])
param.push(['计划完成2', this.planendTime[1]])
param.push(['计划开始', this.planStartTime])
param.push(['计划完成', this.planendTime])
param.push(['排产状态', this.productionStatus])
param.push(['指派对象', this.station])
var Data = this.CreateData('11', 'MES_OrderPlanned_Query', param,this.pageSize, this.pageCurrent)
var Data = this.CreateData('11', '机加已排产_获取任务列表', param,this.pageSize, this.pageCurrent)
this.ExecDatabase(Data).then(response => {
this.loading = false
@@ -825,16 +820,13 @@ export default {
param.push(['产品编码', this.doneproductCode])
param.push(['产品名称', this.doneproductName])
param.push(['工序名称', this.doneprocessName])
// param.push(['性质', this.donenature])
param.push(['要求完工日期1', this.completionTime[0]])
param.push(['要求完工日期2', this.completionTime[1]])
param.push(['计划开始1', this.planStartTime[0]])
param.push(['计划开始2', this.planStartTime[1]])
param.push(['计划完成1', this.planendTime[0]])
param.push(['计划完成2', this.planendTime[1]])
param.push(['计划开始', this.planStartTime])
param.push(['计划完成', this.planendTime])
param.push(['排产状态', this.doneproductionStatus])
param.push(['指派对象', this.station])
var Data = this.CreateData('11', 'MES_OrderPlanned_Query', param,this.pageSize, this.pageCurrent)
var Data = this.CreateData('11', '机加已排产_获取任务列表', param,this.pageSize, this.pageCurrent)
this.ExecDatabase(Data).then(response => {
this.loading = false
@@ -1491,4 +1483,5 @@ export default {
.el-picker-panel__icon-btn{
padding: 0;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -734,6 +734,7 @@ export default {
var orderids = []
var ordernums = []
var orderitems = []
multipleSelection.forEach(item => {
if(item.标准工艺 == 1 & item.生产工艺 !=1 ){
orderids.push(item.订单编号)
@@ -749,7 +750,7 @@ export default {
param.push(['订单编号',orderids])
param.push(['零件图号',orderitems])
param.push(['计划数量',ordernums])
console.log(param)
var Data = this.CreateData('12', '工艺管理_零件工序_生产工艺_批量生成生产工艺', param)
this.ExecDatabase(Data).then(response => {
this.searchTable()
@@ -1141,6 +1142,7 @@ export default {
this.ExecDatabase(Data1).then(response => {
param1[0] = ['物料编号', this.selectedRow.物料编号]
param1[1] = ['订单编号', this.selectedRow.订单编号]
this.$message.success('操作成功')
// 参数数量与名称要与存储过程对应
// var Data3 = this.CreateData('11', '工艺管理_生产工艺_查询生产工艺', param1)
// this.ExecDatabase(Data3).then(response => {

View File

@@ -796,6 +796,7 @@ export default {
this.ExecDatabase(Data1).then(response => {
var param3 = []
param3[0] = ['物料编号', this.partNameValue3]
this.$message.success('保存成功')
// 参数数量与名称要与存储过程对应
// var Data3 = this.CreateData('11', '车间生产管理工艺_零件工序_查询工序信息_工艺库', param3)
// this.ExecDatabase(Data3).then(response => {

File diff suppressed because it is too large Load Diff

View File

@@ -43,6 +43,13 @@
clearable
style="width: 150px; margin-right: 10px"
/>
<span class="show-text">物料名称:</span>
<el-input
v-model="productname2"
placeholder="请输入零件名称"
clearable
style="width: 150px; margin-right: 10px"
/>
<!-- <span class="show-text">计划开工:</span>
<el-date-picker
v-model="completionTime"
@@ -259,6 +266,14 @@
prop="工序名称"
label="工序名称"
width="80"
/>
<el-table-column
align="center"
prop="上序合格数"
label="上序合格数"
width="80"
/>
<!-- <el-table-column align="center" label="开工时间" width="100">
<template slot-scope="scope">{{formatDate(scope.row.开工时间)}}</template>
@@ -1825,6 +1840,7 @@ export default {
salenum:'',
contractNo: "",
productCode2: "",
productname2: "",
process: "",
processList2: [],
nature: "",
@@ -2703,6 +2719,7 @@ getUserId() {
param.push(["TaskAID", this.TaskAID || 0]);
param.push(["订单号", this.orderNo2 || 0]);
param.push(["零件编号", this.productCode2]);
param.push(["零件名称", this.productname2]);
param.push(["计划开工_Start", ""]);
param.push(["计划开工_End", ""]);
param.push(["生产状态", this.productionStatus2 || -1]);

View File

@@ -87,6 +87,7 @@
@row-click="handleRowClick">
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="序号" type="index" align="center" width="50"/>
<el-table-column label="状态" align="center" prop="单据状态" width="80" />
<el-table-column label="生产订单" align="center" prop="订单号" width="80" />
<el-table-column label="计划号" align="center" prop="计划号" width="80" />
<el-table-column label="工序名称" align="center" prop="工序名称" width="120"/>

View File

@@ -32,6 +32,12 @@
<el-option label="加急" value="加急" />
<el-option label="正常" value="正常" />
</el-select>
<span class="show-text">单据状态:</span>
<el-select v-model="orderStatus" clearable placeholder="请选择单据状态" style="width: 150px;margin-right: 10px">
<el-option label="全部" value="全部" />
<el-option label="关闭" value="关闭" />
<el-option label="正常" value="正常" />
</el-select>
<!-- 其他搜索条件保持不变 -->
<el-button :disabled="loading" icon="el-icon-search" plain type="primary" @click="searchTable()">查询</el-button>
@@ -48,6 +54,7 @@
<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="外协" width="80">
@@ -86,7 +93,7 @@
<!-- 主表列定义 -->
<el-table-column align="center" label="序号" type="index" width="50" />
<el-table-column align="center" prop="合同号" label="销售订单" width="120" />
<el-table-column align="center" prop="计划号" label="计划号" width="120" />
<el-table-column align="center" prop="订单号" label="生产订单" width="100" />
<el-table-column align="center" prop="产品编码" label="产品编码" width="220" />
<el-table-column align="center" prop="产品名称" label="产品名称" width="190" />
@@ -142,7 +149,12 @@
</template>
</el-table-column>
<el-table-column align="center" prop="当前序" label="当前序" width="80" />
<el-table-column align="center" prop="工艺路线" label="工艺路线" width="180" />
<el-table-column align="center" label="工艺路线" width="550">
<template slot-scope="scope">
<div class="process-route" v-html="formatProcessRoute(scope.row)" />
</template>
</el-table-column>
<el-table-column align="center" prop="计划号" label="计划号" width="120" />
</el-table>
</el-card>
<el-dialog
@@ -214,6 +226,7 @@ export default {
// 新增过滤字段
outsourceStatus: '全部', // 外协状态
urgentStatus: '全部', // 加急状态
orderStatus:'正常',
completionTime: [],
loading: false,
tableData: [],
@@ -276,6 +289,199 @@ export default {
if (!date) return ''
return date.split(' ').length > 1 ? date.split(' ')[0] : date
},
formatProcessRouteDate(date) {
const formattedDate = this.formatDate(date)
const match = formattedDate.match(/^(\d{4})-(\d{2})-(\d{2})$/)
return match ? `${match[2]}-${match[3]}` : formattedDate
},
toProcessNumber(value) {
const num = Number(value)
return Number.isFinite(num) ? num : 0
},
escapeProcessHtml(value) {
return String(value == null ? '' : value)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
},
isOutsourceProcess(process) {
return process.指派对象 === '外协' ||
String(process.工序名称 || '').includes('(外协)') ||
String(process.工序名称 || '').includes('(外协)')
},
getProcessStatusNum(status) {
const statusNum = parseInt(status)
if (Number.isFinite(statusNum)) {
return statusNum
}
const statusMap = {
辅助开始: 2,
辅助结束: 3,
开始加工: 4,
暂停: 5,
报工: 6,
装配加工: 4
}
return statusMap[status] || 0
},
isBlueProcess(process) {
const statusNum = this.getProcessStatusNum(process.加工状态)
const countNum = parseInt(process.收检合格数)
return statusNum === 6 || statusNum === 3 || countNum > 0
},
isGreenProcess(process) {
return this.isOutsourceProcess(process) &&
this.toProcessNumber(process.收料数量) > this.toProcessNumber(process.收检合格数) + this.toProcessNumber(process.收检不合格数)
},
getProcessBaseClass(process) {
if (this.isGreenProcess(process)) {
return 'process-route-green'
}
if (this.isBlueProcess(process)) {
return 'process-route-blue'
}
const statusNum = this.getProcessStatusNum(process.加工状态)
if (statusNum === 2 || statusNum === 4) {
return 'process-route-green'
}
return 'process-route-red'
},
getOutsourceGroupClassState(processes) {
const classes = new Map()
let currentIndexes = []
let lastProcess = null
const flushOutsourceRun = () => {
if (currentIndexes.length > 0 && lastProcess) {
const className = this.getProcessBaseClass(lastProcess)
currentIndexes.forEach(index => classes.set(index, className))
}
currentIndexes = []
lastProcess = null
}
const isSameContinuousGroup = process => {
if (!lastProcess) {
return true
}
const lineNo = this.toProcessNumber(process.订单行号)
const lastLineNo = this.toProcessNumber(lastProcess.订单行号)
return lineNo === lastLineNo + 1 &&
String(process.外协分组 || '') === String(lastProcess.外协分组 || '')
}
processes.forEach((process, index) => {
if (!this.isOutsourceProcess(process)) {
flushOutsourceRun()
return
}
if (!isSameContinuousGroup(process)) {
flushOutsourceRun()
}
currentIndexes.push(index)
lastProcess = process
})
flushOutsourceRun()
return classes
},
getProcessClass(process, index, outsourceGroupClasses) {
if (this.isOutsourceProcess(process)) {
return outsourceGroupClasses.get(index) || this.getProcessBaseClass(process)
}
return this.getProcessBaseClass(process)
},
getProcessRouteName(process) {
const name = String(process.工序名称 || '')
const assignee = String(process.指派对象 || '')
if (!assignee || name.includes(`(${assignee})`) || name.includes(`${assignee}`)) {
return name
}
return `${name}(${assignee})`
},
getRouteProcesses(row) {
if (Array.isArray(row.子数据) && row.子数据.length > 0) {
return row.子数据
}
return String(row.工艺路线 || '')
.split(',')
.map(name => name.trim())
.filter(Boolean)
.map(name => ({
工序名称: name,
加工状态: 0,
收检合格数: 0,
计划开始时间: '',
指派对象: '',
订单行号: 0,
收料数量: 0,
收检不合格数: 0
}))
},
formatProcessRoute(row) {
const processes = this.getRouteProcesses(row)
if (processes.length === 0) {
return ''
}
const outsourceGroupClasses = this.getOutsourceGroupClassState(processes)
const maxPerRow = 8
const rows = Math.ceil(processes.length / maxPerRow)
let tableHtml = '<div class="process-route-wrap"><table class="process-route-table"><tbody>'
for (let rowIndex = 0; rowIndex < rows; rowIndex++) {
const startIndex = rowIndex * maxPerRow
const endIndex = Math.min(startIndex + maxPerRow, processes.length)
const rowProcesses = processes.slice(startIndex, endIndex)
if (rowIndex > 0) {
tableHtml += '<tr class="process-route-spacer"><td colspan="' + (maxPerRow * 2 - 1) + '"></td></tr>'
}
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const planDate = this.formatProcessRouteDate(process.计划开始时间 || process.计划完成时间 || '')
tableHtml += `<td class="process-route-date ${className}">${this.escapeProcessHtml(planDate)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow-hidden"></td>'
}
})
tableHtml += '</tr>'
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const name = this.getProcessRouteName(process)
tableHtml += `<td class="${className}">${this.escapeProcessHtml(name)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow">→</td>'
}
})
tableHtml += '</tr>'
tableHtml += '<tr>'
rowProcesses.forEach((process, index) => {
const className = this.getProcessClass(process, startIndex + index, outsourceGroupClasses)
const count = this.toProcessNumber(process.收检合格数)
tableHtml += `<td class="process-route-count ${className}">合格${this.escapeProcessHtml(count)}</td>`
if (index < rowProcesses.length - 1) {
tableHtml += '<td class="process-route-arrow-hidden"></td>'
}
})
tableHtml += '</tr>'
}
tableHtml += '</tbody></table></div>'
return tableHtml
},
mergeOrderData(dataList) {
// 第一步:先按照订单行号对原始数据进行排序
const sortedDataList = [...dataList].sort((a, b) => {
@@ -307,6 +513,7 @@ export default {
进度: item.进度,
拆分内码: item.拆分内码,
计划数量: item.计划数量,
标准工时: item.标准工时,
开工时间: item.开工时间,
完成数量: item.完成数量,
收料数量: item.收料数量,
@@ -322,7 +529,8 @@ export default {
订单行号: item.订单行号,
加急总数:item.加急总数,
外协结束时间:item.外协结束时间,
开始时间:item.开始时间
开始时间:item.开始时间,
外协分组: item.外协分组
}]
})
} else {
@@ -345,6 +553,7 @@ export default {
进度: item.进度,
拆分内码: item.拆分内码,
计划数量: item.计划数量,
标准工时: item.标准工时,
开工时间: item.开工时间,
完成数量: item.完成数量,
收料数量: item.收料数量,
@@ -362,6 +571,7 @@ export default {
开始时间:item.开始时间,
结束时间:item.结束时间,
外协结束时间:item.外协结束时间,
外协分组: item.外协分组
})
// 对子数据按照订单行号排序
@@ -477,6 +687,7 @@ export default {
param.push(['指派对象', '全部'])
param.push(['计划号', this.plannum])
param.push(['加急状态', this.urgentStatus])
param.push(['单据状态', this.orderStatus])
// // 添加外协状态过滤条件
// if (this.outsourceStatus !== '全部') {
// param.push(['是否外协', this.outsourceStatus === '是' ? 1 : 0])
@@ -606,6 +817,78 @@ export default {
width: 120px;
display: inline-flex;
}
.process-route {
line-height: 1.4;
white-space: normal;
word-break: break-all;
}
::v-deep .process-route-wrap {
width: 100%;
text-align: left;
}
::v-deep .process-route-table {
width: auto;
border-collapse: collapse;
text-align: left;
table-layout: auto;
}
::v-deep .process-route-table td {
text-align: left;
padding: 2px 2px;
font-size: 11px;
white-space: nowrap;
line-height: 1.4;
}
::v-deep .process-route-date {
font-size: 10px !important;
color: #8899aa !important;
padding: 2px 2px !important;
}
::v-deep .process-route-count {
font-weight: 700;
font-size: 12px !important;
}
::v-deep .process-route-spacer td {
height: 4px;
padding: 0 !important;
line-height: 1 !important;
}
::v-deep .process-route-green {
color: #28d961;
font-weight: 700;
}
::v-deep .process-route-blue {
color: #09a8ff;
font-weight: 700;
}
::v-deep .process-route-red {
color: #ff3f37;
font-weight: 700;
}
::v-deep .process-route-arrow {
color: rgba(0, 164, 255, 0.6) !important;
font-size: 10px !important;
padding: 2px 0 !important;
width: 8px;
text-align: center !important;
}
::v-deep .process-route-arrow-hidden {
padding: 2px 0 !important;
width: 8px;
}
.search-container {
margin-bottom: 20px;
}
@@ -679,4 +962,7 @@ export default {
display: flex;
align-items: center;
}
</style>
.el-table tr{
background-color: initial;
}
</style>

View File

@@ -97,6 +97,7 @@
@row-click="handleRowClick">
<el-table-column type="selection" width="50"></el-table-column>
<!-- <el-table-column label="序号" type="index" align="center" width="50"/> -->
<el-table-column label="单据状态" align="center" prop="单据状态" width="80" />
<el-table-column label="生产订单" align="center" prop="订单号" width="80" />
<!-- <el-table-column label="计划号" align="center" prop="计划号" width="80" /> -->
<el-table-column label="物料名称" align="center" prop="产品名称" width="120"/>

View File

@@ -80,6 +80,12 @@
{{ scope.row.level === 2 ? scope.row.operator : '' }}
</template>
</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" />
@@ -161,6 +167,12 @@
{{ scope.row.level === 3 ? scope.row.processName : '' }}
</template>
</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">
<template slot-scope="scope">
@@ -246,6 +258,12 @@
{{ scope.row.level === 2 ? scope.row.operator : '' }}
</template>
</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">
<template slot-scope="scope">
@@ -348,6 +366,12 @@
{{ scope.row.level === 3 ? scope.row.processName : '' }}
</template>
</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">
<template slot-scope="scope">
@@ -510,6 +534,7 @@ export default {
materialCode: row.materialCode,
processName: row.processName,
operator: row.operator,
指派对象: row.指派对象,
qty: row.qty,
reportQty: row.reportQty,
planStart: row.planStart,
@@ -613,6 +638,7 @@ export default {
productCode: row.productCode,
productName: row.productName,
processName: row.processName,
指派对象: row.指派对象,
reportQty: row.reportQty,
startTime: row.startTime,
endTime: row.endTime,
@@ -683,6 +709,7 @@ export default {
productCode: row.productCode,
processName: row.processName,
operator: row.operator,
指派对象: row.指派对象,
reportQty: row.reportQty,
startTime: row.startTime,
endTime: row.endTime,

View File

@@ -59,7 +59,10 @@
</el-select>
<el-button :disabled="!!loading" icon="el-icon-search" plain type="primary" @click="searchTable()">查询</el-button>
<el-button :disabled="!!multipleSelection.length === 0 || loading" icon="el-icon-check" plain type="success" style="width: 100px;" @click="batchValidate">一键校验</el-button>
<el-button :disabled=" uesrname != '付延辉'" icon="el-icon-check" plain type="danger" style="width: 100px;" @click="saveValidationRecord2(multipleSelection)">直接校验</el-button>
<el-button :disabled=" uesrname != '付延辉'" icon="el-icon-check" plain type="danger" style="position: absolute;
width: 100px;
right: 36px;
top: 70px;width: 100px;" @click="saveValidationRecord2(multipleSelection)">直接校验</el-button>
<!-- <el-button :disabled="!!loading" icon="el-icon-plus" plain type="warning" style="width: 130px;" @click="addWorkTimeRecord">新增工时记录</el-button> -->
</div>
@@ -728,6 +731,40 @@ async uploadToSAP(record, detail) {
// ========== 9. 提交工时单据到SAP ==========
if (params.length > 0) {
try {
await new Promise(resolve => setTimeout(resolve, 500))
const reorderResult = await getB1("/ProductionOrders", {
"$filter": `AbsoluteEntry eq ${record.订单编号}`
})
if (!reorderResult.success || !reorderResult.data?.value?.length) {
return { success: false, error: '重新获取生产订单失败' }
}
const updatedOrder = reorderResult.data.value[0]
const lines = updatedOrder.ProductionOrderLines || []
lines.forEach(line => {
const matched = params.find(param => Number(line.LineNumber) === Number(param.BaseLine))
if (matched) {
line.PlannedQuantity = Number(line.IssuedQuantity) + Number(matched.Quantity)
}
})
const patchResult = await patchB1(`ProductionOrders(${updatedOrder.AbsoluteEntry})`, {
ProductionOrderLines: lines,
ProductionOrdersStages: updatedOrder.ProductionOrdersStages || []
})
if (!patchResult.success) {
this.$message.error(patchResult.message)
return { success: false, error: patchResult.message || '更新生产订单PlannedQuantity失败' }
}
} catch (reorderError) {
console.warn(`重新获取订单数据失败:`, reorderError)
return { success: false, error: reorderError.message || '更新生产订单PlannedQuantity异常' }
}
try {
const startDate = record.开始时间 ? record.开始时间.split(' ')[0] : this.currentdate
const result = await postB1("/InventoryGenExits", {

View File

@@ -215,7 +215,7 @@
</el-input>
</el-form-item>
<el-form-item label="班次标准工时">
<el-input v-model="editForm.班次标准工时" readonly />
<el-input v-model="editForm.当日班次最小标准工时" />
</el-form-item>
<!-- <el-form-item label="工序顺序">
<el-input v-model="editForm.工艺顺序" readonly />
@@ -682,7 +682,7 @@ export default {
加工工时: row.加工工时 || 0,
总时长: row.总时长 || 0,
工艺顺序: row.订单行号 || 0,
当日班次最小标准工时 : row.当日班次最小标准工时 || 0
当日班次最小标准工时 : row.当日班次最小标准工时 || 8
}
this.editDialogVisible = true
},

View File

@@ -175,6 +175,7 @@
style="width: 100%; margin-top: 20px"
tooltip-effect="dark"
@row-click="handleRowClick"
:row-class-name="tableRowClassName"
>
<el-table-column
align="center"
@@ -743,6 +744,14 @@ export default {
this.loading = false;
if (response.data.rows && response.data.rows.length !== 0) {
this.tableData = response.data.rows;
this.tableData.sort((a, b) => {
const aIsUrgent = a.加急状态 === '1';
const bIsUrgent = b.加急状态 === '1';
if (aIsUrgent && !bIsUrgent) return -1;
if (!aIsUrgent && bIsUrgent) return 1;
return 0;
});
this.total = response.data.total
} else {
this.tableData = [];
@@ -1122,10 +1131,27 @@ export default {
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}${month}${day}_${hours}${minutes}${seconds}`;
},
tableRowClassName({ row, rowIndex }) {
const isUrgent = row.加急状态 == "1";
if (isUrgent) {
return "priority-row";
}
return "";
},
},
};
</script>
<style scoped>
::v-deep .priority-row {
background-color: #f56c6c !important;
color: #000000 !important;
}
::v-deep .priority-row td {
background-color: #f56c6c !important;
color: #000000 !important;
border: #f56c6c;
}
</style>
<style>
.search-container {
margin-bottom: 20px;
@@ -1343,4 +1369,4 @@ button {
width: 20px;
height: 20px;
}
</style>
</style>

View File

@@ -221,6 +221,18 @@
width="80"
prop="工位名称"
/>
<el-table-column
align="center"
label="供应商"
width="80"
prop="供应商"
/>
<el-table-column
align="center"
label="采购收货单"
width="100"
prop="采购收货单"
/>
<el-table-column
align="center"
label="加急数量"
@@ -273,7 +285,7 @@
width="180"
prop="检测说明"
/>
<el-table-column label="操作" align="center" width="250" fixed="right">
<el-table-column label="操作" align="center" width="350" fixed="right">
<template slot-scope="scope">
<el-button
class="operation-btn"
@@ -287,9 +299,15 @@
type="primary"
size="mini"
@click="getitemdraw(scope.row)"
>图纸</el-button
>零件图纸</el-button
>
<el-button
class="operation-btn"
type="primary"
size="mini"
@click="getitemdraw2(scope.row)"
>工艺图纸</el-button
>
</template>
</el-table-column>
@@ -586,31 +604,23 @@ export default {
this.$message.error('未上传图纸');
}
})
// this.ExecDatabase(Data).then(async (response) => {
// console.log(response);
// if (response.data.length > 0) {
// var pdfSrc = "" + this.downPDF + "" + response.data[0].uid + ".pdf";
// // 1. 先打开对话框
// this.seeVisible = true;
// // 2. 等待对话框完全渲染(使用 $nextTick 确保 DOM 已更新)
// await this.$nextTick();
// // 3. 等待一小段时间确保对话框内的容器完全渲染
// setTimeout(async () => {
// try {
// await seepdf(pdfSrc, 'see');
// } catch (error) {
// console.error('PDF 渲染失败:', error);
// this.$message.error('PDF 渲染失败: ' + error.message);
// }
// }, 300); // 增加延迟确保 DOM 完全渲染
// } else {
// this.$message.error('未上传图纸');
// }
// });
},
getitemdraw2(row) {
var param = [];
param[0] = ['物料编号', row.零件编码];
var Data = this.CreateData('11', '工艺管理_工艺维护_查看图纸', param);
this.ExecDatabase(Data).then(response => {
console.log(response)
if (response.data.length > 0) {
var pdfSrc =""+this.downPDF+""+ response.data[0].uid+".pdf"
window.open(pdfSrc,'_blank')
}else {
this.$message.error('未上传图纸');
}
})
},
Urgent(row){
var param = []
@@ -813,6 +823,7 @@ export default {
param.push(["检测时间", this.receiveCheckData.检测时间]);
param.push(["检测说明", this.receiveCheckData.检测说明]);
param.push(["放行数量", this.receiveCheckData.放行数量]);
param.push(["工位名称", this.receiveCheckData.工位名称]);
console.log(param);
try {

View File

@@ -965,6 +965,7 @@ export default {
return;
}
// 调用存储过程保存数据
this.receiveCheckVisible = false;
this.saveReceiveCheck();
});
},

View File

@@ -40,7 +40,7 @@
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
style="width: 150px; margin-right: 10px" />
<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="handleSearch">查询</el-button>
<el-button style="width: 100px;" icon="el-icon-download" type="primary" @click="exportExcel">Excel导出</el-button>
</div>
@@ -165,10 +165,10 @@ export default {
param.push(["质检类型", this.QualityStatus]);
param.push(["开始日期", this.startDate]);
param.push(["结束日期", this.endDate]);
param.push(["订单号", this.orderNo ]);
param.push(["合同号", this.contractNo ]);
param.push(["零件编码", this.productCode ]);
param.push(["零件名称", this.productName ]);
param.push(["订单号", this.normalizeQueryValue(this.orderNo) ]);
param.push(["合同号", this.normalizeQueryValue(this.contractNo) ]);
param.push(["零件编码", this.normalizeQueryValue(this.productCode) ]);
param.push(["零件名称", this.normalizeQueryValue(this.productName) ]);
this.exporting = true
const Data = this.CreateData('2001', '质量管理_质检明细_导出', param)
@@ -218,6 +218,11 @@ export default {
// ============ 分页方法 ============
handleSearch() {
this.pageCurrent = 1
this.searchTable()
},
handleSizeChanges(val) {
this.pageCurrent = 1
this.pageSize = val
@@ -236,12 +241,12 @@ export default {
param.push(["质检类型", this.QualityStatus]);
param.push(["开始日期", this.startDate]);
param.push(["结束日期", this.endDate]);
param.push(["订单号", this.orderNo ]);
param.push(["合同号", this.contractNo ]);
param.push(["零件编码", this.productCode ]);
param.push(["零件名称", this.productName ]);
param.push(["订单号", this.normalizeQueryValue(this.orderNo) ]);
param.push(["合同号", this.normalizeQueryValue(this.contractNo) ]);
param.push(["零件编码", this.normalizeQueryValue(this.productCode) ]);
param.push(["零件名称", this.normalizeQueryValue(this.productName) ]);
param.push(['PageCurrent', this.pageCurrent])
param.push(['pageSize', this.pageSize])
param.push(['PageSize', this.pageSize])
param.push(['PageCount', '1111', 'int', '1'])
param.push(['ItemCount', '1111', 'int', '1'])
@@ -258,6 +263,10 @@ export default {
// ============ 工具方法 ============
normalizeQueryValue(value) {
return value === null || value === undefined || value === '' ? '0' : value
},
getCurrentUser() {
return this.$store.state.user.name
@@ -305,4 +314,4 @@ export default {
background-color: #f56c6c !important;
color: #000000 !important;
} */
</style>
</style>

View File

@@ -0,0 +1,247 @@
<template>
<div class="test-assembly-task">
<el-card>
<div class="search-container">
<span class="show-text">任务类型:</span>
<el-select
v-model="taskType"
placeholder="请选择任务类型"
style="width: 150px; margin-right: 10px"
@change="searchTable"
>
<el-option label="全部" value="全部" />
<el-option label="阀类" value="阀类" />
<el-option label="系统类" value="系统类" />
</el-select>
<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="materialName"
placeholder="请输入物料名称"
clearable
style="width: 160px; 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"
/>
<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>
<el-table
v-loading="loading"
:data="tableData"
:height="'72vh'"
border
element-loading-background="rgba(0, 0, 0, 0.2)"
element-loading-spinner="el-icon-loading"
highlight-current-row
:row-class-name="tableRowClassName"
size="mini"
style="width: 100%; margin-top: 20px"
tooltip-effect="dark"
>
<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="100" fixed />
<el-table-column align="center" prop="物料名称" label="物料名称" width="170" show-overflow-tooltip />
<el-table-column align="center" prop="物料编码" label="物料编码" width="180" show-overflow-tooltip />
<el-table-column align="center" prop="计划数量" label="计划数量" width="100" />
<el-table-column align="center" prop="完成数量" label="完成数量" width="100" />
<el-table-column align="center" prop="检验数量" label="检验数量" width="100" />
<el-table-column align="center" prop="检验合格数量" label="检验合格数量" width="120" />
<el-table-column align="center" prop="检验不合格数量" label="检验不合格数量" width="130" />
</el-table>
</el-card>
</div>
</template>
<script>
import * as XLSX from 'xlsx'
export default {
name: 'TestAssemblyTask',
data() {
return {
taskType: '全部',
productionOrder: '',
salesOrder: '',
materialName: '',
materialCode: '',
loading: false,
tableData: []
}
},
mounted() {
this.searchTable()
},
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() {
this.loading = true
const param = []
param.push(['任务类型', this.taskType])
param.push(['生产订单', this.productionOrder])
param.push(['销售订单', this.salesOrder])
param.push(['物料名称', this.materialName])
param.push(['物料编码', this.materialCode])
const data = this.CreateData('11', '质量管理_测试装配任务_查询', param)
this.ExecDatabase(data).then(response => {
this.tableData = this.sortTableData(response.data || [])
}).catch(error => {
this.$message.error('查询失败:' + error.message)
}).finally(() => {
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}`
}
}
}
</script>
<style scoped>
.test-assembly-task {
padding: 10px;
}
.search-container {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.show-text {
font-size: 14px;
margin-right: 6px;
}
::v-deep .inspection-unfinished-row > td {
background-color: #e6a23c !important;
color: #1f1f1f;
}
</style>

View File

@@ -52,6 +52,11 @@
<span type="success">{{ scope.row.roles_function }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="班组" prop="班组" show-overflow-tooltip>
<template slot-scope="scope">
<span type="success">{{ scope.row.班组 }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="操作" min-width="450">
<template slot-scope="scope">
<el-button icon="el-icon-refresh-right" style="font-family: MiSans Regular,serif;color: #4d77d6"
@@ -111,6 +116,27 @@
<el-form-item label="工号" prop="account">
<el-input v-model="form1.account" placeholder="请输入工号" readonly style="width: 240px;border-radius: 4px" />
</el-form-item>
<el-form-item label="班组" prop="班组">
<el-select
v-model="form1.team"
clearable
placeholder="请选择"
style="width: 150px; margin-right: 10px"
>
<el-option label="装配" value="装配" />
<el-option label="电气" value="电气" />
<el-option label="机加" value="机加" />
<el-option label="质检" value="质检" />
<el-option label="技术" value="技术" />
<el-option label="计划" value="计划" />
<el-option label="库房" value="库房" />
<el-option label="采购" value="采购" />
<el-option label="销售" value="销售" />
<el-option label="售后" value="售后" />
<el-option label="工艺" value="工艺" />
<el-option label="其他" value="其他" />
</el-select>
</el-form-item>
<!-- <el-form-item label="密码" prop="password">-->
<!-- <el-input-->
<!-- v-model="form1.password"-->
@@ -167,7 +193,8 @@ export default {
PersonalName: '',
account: '',
password: '',
PersonalroleValue: ''
PersonalroleValue: '',
team:''
},
rules1: {
PersonalName: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
@@ -179,7 +206,8 @@ export default {
tableData: [],
total: 0, // 总条数
pageSize: 10, // 每页显示条数
pageList: 1 // 后台获取页
pageList: 1, // 后台获取页
team:''
}
},
created() {
@@ -251,7 +279,8 @@ export default {
password: response.data.result[i].password,
roles_number: parseInt(response.data.result[i].Roles_number),
roles_function: response.data.result[i].Roles_Function,
isClient: response.data.result[i].isClient
isClient: response.data.result[i].isClient,
班组:response.data.result[i].班组
})
}
}
@@ -270,6 +299,7 @@ export default {
this.form1.account = row.account
this.form1.password = row.password
this.form1.PersonalroleValue = row.roles_number
this.form1.team = row.班组
this.title1 = '编辑人员'
this.dialogFormVisible1 = true
},
@@ -284,6 +314,7 @@ export default {
param[2] = ['password', this.form1.password]
param[3] = ['Personnel_Name', this.form1.PersonalName]
param[4] = ['Roles_number', this.form1.PersonalroleValue]
param[5] = ['班组', this.form1.team]
if (this.form1.account === '' || this.form1.account === null) {
this.$message.error('请输入工号')
} else if (this.form1.password === '' || this.form1.password === null) {

View File

@@ -0,0 +1,77 @@
# 今后开发计划与新增需求分析记录
生成日期2026-05-27
项目MES_Manage_View_V20
## 一、排期口径
- 按“最终调整”数字从小到大排序。
- 从 2026-05-28 开始排期。
- 按工作日递推,跳过周六、周日。
- 跳过端午节、中秋节、国庆节法定放假日期。
- 调休日按工作日处理。
- 暂按单开发线串行排期。
节假日口径:
- 端午节2026-06-19 至 2026-06-21。
- 中秋节2026-09-25 至 2026-09-27。
- 国庆节2026-10-01 至 2026-10-07。
- 调休上班日2026-09-20、2026-10-10。
## 二、开发计划排期
| 顺序 | 需求 | 预估 | 开始 | 结束 | 备注 |
|---:|---|---:|---|---|---|
| 1 | 及时开工报表 | 1天 | 5.28 | 5.29 | 增加正选/反选查询 |
| 2 | 机加件排产-表单 | 4天 | 5.29 | 6.04 | 日期筛选优化 + 历史工时查询SAP新增字段不算MES开发 |
| 3 | 装配已排产需求 | 12天 | 6.04 | 6.23 | 大需求,建议分阶段交付 |
| 4 | 生产日报-送检(机加/装配) | 3天 | 6.23 | 6.26 | 建议统一报表,部门做筛选维度 |
| 5 | 及时齐套跟踪结果报表 | 5天 | 6.26 | 7.03 | 依赖SAP缺件明细实时接口 |
| 6 | 生产计划跟踪 | 3天 | 7.03 | 7.08 | 工序状态、颜色、标准工时、订单状态 |
| 7 | 外协任务检验 | 3天 | 7.08 | 7.13 | 增加指派对象、供应商、SAP采购收货单号 |
| 8 | 异常管控 | 5天 | 7.13 | 7.20 | 报工页面直接报异常,多审批人可见一人处理 |
| 9 | 机加班次产量表 | 3天 | 7.20 | 7.23 | 新增报表 |
| 10 | 发货通知列表 | 1天 | 7.23 | 7.24 | SAP数据已提供可新增查询报表 |
| 11 | 质检任务早知道 | 1天 | 7.24 | 7.27 | 依赖“装配已排产需求”的装配完成时间 |
| 12 | 生产工艺 | 2天 | 7.27 | 7.29 | 无生产工艺时自动带出标准工艺 |
| 13 | 工时报表 + 备注类小改 | 2天 | 7.29 | 7.31 | 指派对象、机加领料备注、机加/装配退库备注、保存提示等合并处理 |
| 14 | 生产订单关闭 | 4天 | 7.31 | 8.06 | 批量更新SAP订单状态风险较高 |
| 15 | 及时检验报表 | 4天 | 8.06 | 8.12 | 报工超过2天未检验 |
| 16 | 工序流转卡 | 1天 | 8.12 | 8.13 | 增加打印原料编码 |
| 17 | 一楼质检大屏幕 | 4天 | 8.13 | 8.19 | 及时率、关键工序 |
| 18 | 机加现场大屏幕 | 3天 | 8.19 | 8.24 | 缺勤、关键工序 |
| 19 | 装配现场大屏幕 | 4天 | 8.24 | 8.28 | 缺勤、及时送检 |
| 20 | 编程任务清单 | 4天 | 8.28 | 9.03 | 按装配类似逻辑做编程报工 |
| 21 | 设备档案管理 | 2天 | 9.03 | 9.07 | 需先确认字段归属 |
| 22 | 设备数据采集 | 8天 | 9.07 | 9.17 | 采集接口、落库、状态汇总 |
| 23 | 设备指标/OEE | 6天 | 9.17 | 9.24 | 依赖设备采集和标准工时口径 |
| 24 | 工时查询-设备采集联动 | 2天 | 9.24 | 9.29 | 程序工时字段对接采集数据 |
| 25 | 手续确认报表 | 3天 | 9.29 | 10.09 | 装配/电气齐套列表 + 手续确认 |
| 26 | 产品合格率(工位) | 3天 | 10.09 | 10.13 | 需确认良品/总产量口径 |
| 27 | 让步接收记录 | 2天 | 10.13 | 10.15 | 新增查询页面 |
| 28 | 设计任务报工模块 | 6天 | 10.15 | 10.23 | MES自建设计任务、设计工时 |
| 29 | 工时异常报表 | 2天 | 10.23 | 10.27 | 依赖标准工时和实际单件工时 |
| 30 | 正在加工状态 | 1天 | 10.27 | 10.28 | 机加正在进行中状态 |
## 三、暂不直接排期 / 需等前置条件
| 需求 | 原因 |
|---|---|
| 及时拣配机加MES | 等SAP数据、条码规则、状态写回规则 |
| 及时拣配装配MES | 等SAP数据、条码规则、状态写回规则 |
| 及时送检报表 | 需确认发料齐套时间/SAP字段是否稳定若SAP数据已到可插入0.5天 |
| 工艺内容修改 | 已开工任务怎么处理未定 |
| 标牌打印操作 | 需求未确定 |
| 首检、巡检 | 需求内容为空,无法估时 |
| 外协采购订单收检结果 | 需求内容为空,无法估时 |
| 不合格品单据打印 | 需求内容为空,无法估时 |
## 四、排期结论
按以上单线工作日计划,已明确可做事项预计到 2026-10-28 完成。
实际执行建议先做 5.28 到 6.23 的前三项,因为它们优先级最高,且“装配已排产需求”会影响后面的质检早知道、日计划、及时送检等需求。
## 五、新增需求分析与开发记录原文

View File

@@ -0,0 +1,143 @@
# 元利 MES 项目 — 今日工作汇报
日期2026-05-26
项目MES_Manage_View_V20
## 一、今日主要工作
### 1. 丰富并修改元利项目详细流程图
今日继续完善 `元利项目详细流程图.md`,在原有系统级流程基础上,进一步补充页面级、业务级流程说明。
重点补充内容:
- 登录、菜单权限、动态路由生成流程。
- 工艺、图纸、生产订单、排产、生产执行、质检、外协、工时校验、生产订单关闭等模块之间的衔接关系。
- 机加排产、装配排产、机加中心、装配中心、质量中心、工时校验等关键页面的详细业务流。
- SAP 回写、SAP 查询、WMS/库存任务、MES 存储过程之间的数据流转关系。
- 将流程图尽量调整为“框 + 箭头 + 文字”的形式,减少字母节点指引,便于培训和现场讲解。
本次调整后,流程图更适合用于:
- 给客户讲解整体 MES 业务闭环。
- 给实施人员定位页面与数据流关系。
- 给开发人员判断新增需求影响范围。
### 2. 工时校验数据对接梳理
今日继续梳理工时校验页面与 MES/SAP 数据之间的对接关系,重点围绕 `ProductionManagement/WorkHoursCheck`
已梳理内容:
- 对接数据时发现装配人员工时数据错误,经检查由于用户重复提交导致的问题
- 在排查过程中发现装配人员报工加班时,同时生成了正常报工的工时
### 3. 生产订单关闭培训与相关数据处理
今日进行了生产订单关闭相关培训和数据处理,重点说明生产订单关闭页面的使用边界。
培训内容:
- 生产订单关闭前需要先确认订单在 MES 中的任务完成情况。
- 关闭前需要核对生产订单状态、入库情况、报工情况和 SAP 状态。
- 批量关闭时要区分已成功关闭、关闭失败、不能关闭三类结果。
- SAP 关闭失败时不应重复点击,应先确认 SAP 返回原因。
数据处理内容:
- 协助检查生产订单关闭相关数据。
- 梳理关闭条件与当前订单状态之间的关系。
- 对异常数据进行核对,避免误关或重复关闭。
### 4. 沟通报工结果数据上传到 SAP 的影响
今日围绕报工结果上传 SAP 的影响进行了沟通和确认。
沟通重点:
- 超过班次工作时间部分的工时 如果不选择加班,系统自动记录这段工时
- 这段工时如果上次到SAP会导致其他生成订单工时不准确的问题,因为计算方法核算的是当日总报工时间记为8小时
- 这段时间如果上传,就会导致其他工时减少
- 休息日/法定时选择不加班工时记录的问题讨论结果是MES正常记录 但是不传输给SAP
### 5. 修改装配报工数据重复问题
今日处理装配报工数据重复问题。
处理重点:
- 排查装配报工过程中可能重复写入的数据链路。
- 核对装配任务、报工记录、质检/送检记录之间的关联关系。
- 调整重复数据产生场景,避免同一任务重复形成报工结果。
- 修改后重点关注装配中心报工、送检、任务完成状态的回显是否一致。
处理结果:
- 已针对装配报工重复问题进行修正。
- 后续需要继续观察现场报工数据,确认是否仍存在重复写入或重复统计。
### 6. 丰富并修改用户使用说明书
今日重点丰富 `元利项目详细用户使用说明书.md`
主要修改内容:
- 将第 21 章逐页说明整体扩展,不再只写笼统功能说明。
- 对 78 个页面按源码逐页补充:
- 页面用途
- 具体操作步骤
- 查询条件/输入项
- 结果表重点列
- 页面按钮/状态/页签
- 弹窗/表单重点项
- 后台处理/外部接口
- 操作注意事项
- 将第 21 章页面标题从英文页面名改为中文页面名,例如:
- `WorkHoursCheck` 改为 `工时校验`
- `SelfMakePlandone` 改为 `机加已排产`
- `MachiningCenter` 改为 `机加中心`
- `QualityCenter` 改为 `质量中心`
-`机加已排产` 章节进行了重点细化补充日程拖拽、指派数量、拆分派工、二次派工、原料状态、图纸、外协分组、最晚开始、红色加急排序、SAP 日期同步等操作。
说明书修改后更适合:
- 现场用户培训。
- 新员工快速熟悉页面。
- 实施人员按页面排查问题。
- 后续新增需求评审时对照现有功能。
### 7. 修改原料退库检,增加加急显示
今日处理原料退库检页面加急显示需求。
涉及页面:
- `QualityManagement/CheckTask/materialReturn.vue`
处理内容:
- 在原料退库检任务中增加加急状态/加急信息显示。
- 方便质检人员优先识别加急退库检任务。
- 便于后续按加急任务排序、提醒或优先处理。
业务影响:
- 质检人员在原料退库检页面可以更直观看到加急任务。
- 加急退库检任务可优先处理,减少对生产或后续流程的影响。
## 二、今日产出与修改文件
| 文件 | 今日处理内容 |
|---|---|
| `元利项目详细流程图.md` | 丰富业务流程图,补充多页面、多模块数据流 |
| `元利项目详细用户使用说明书.md` | 扩展第 21 章逐页操作说明,标题改为中文页面名 |
| `ProductionManagement/WorkHoursCheck` | 梳理工时校验与 SAP 上传关系 |
| `PlanManagement/PlannOrderClose` | 生产订单关闭培训与数据处理 |
| 装配报工相关页面/数据 | 修正装配报工重复数据问题 |
| `QualityManagement/CheckTask/materialReturn.vue` | 原料退库检增加加急显示 |
## 三、今日沟通事项
1. 与相关人员沟通工时校验数据上传 SAP 的影响明确报工结果、工时、SAP 工序资源之间的关系。
2. 对生产订单关闭进行培训,说明关闭前校验、关闭失败处理和数据风险。
3. 结合装配报工重复问题,沟通现场报工操作和后台数据写入逻辑。
4. 结合用户说明书和流程图,明确后续培训资料需要按页面逐步讲解,不能只写功能概述。
## 四、当前风险与注意事项
| 风险点 | 影响 | 处理建议 |
|---|---|---|
| 工时上传 SAP 重复提交 | 可能造成 SAP 工时或库存单据重复 | 上传失败时先查失败原因,不要连续重复提交 |
| 生产订单关闭条件不一致 | 可能误关订单或关闭失败 | 关闭前核对 MES 任务、入库、报工和 SAP 状态 |
| 装配报工重复 | 影响工时、任务进度、质检/送检统计 | 修复后继续观察现场数据 |
| 加急任务未突出显示 | 质检处理优先级不明确 | 原料退库检已增加加急显示,后续可扩展排序 |
| 用户手册仍需继续细化 | 培训时可能仍有页面操作细节不足 | 后续按重点业务页面继续逐页补强 |

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

731
analyze_mes_v20_views.js Normal file
View File

@@ -0,0 +1,731 @@
const fs = require('fs');
const path = require('path');
const root = path.resolve('MES_Manage_View_V20');
const viewsRoot = path.join(root, 'src', 'views');
const outFile = path.join(root, 'MES_Manage_View_V20_src_views_逐页面详细分析.md');
function existingSqlFiles() {
return fs.readdirSync(root)
.filter(x => x.toLowerCase().endsWith('.sql'))
.map(x => path.join(root, x));
}
function readText(file) {
const buf = fs.readFileSync(file);
if (buf.length >= 2 && buf[0] === 0xff && buf[1] === 0xfe) return buf.slice(2).toString('utf16le');
if (buf.length >= 2 && buf[0] === 0xfe && buf[1] === 0xff) {
const swapped = Buffer.alloc(buf.length - 2);
for (let i = 2; i + 1 < buf.length; i += 2) {
swapped[i - 2] = buf[i + 1];
swapped[i - 1] = buf[i];
}
return swapped.toString('utf16le');
}
if (buf.length >= 3 && buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf) return buf.slice(3).toString('utf8');
return buf.toString('utf8');
}
function walk(dir, exts, result = []) {
if (!fs.existsSync(dir)) return result;
for (const item of fs.readdirSync(dir, { withFileTypes: true })) {
const p = path.join(dir, item.name);
if (item.isDirectory()) walk(p, exts, result);
else if (exts.includes(path.extname(item.name).toLowerCase())) result.push(p);
}
return result;
}
function rel(file) {
return path.relative(root, file).replace(/\\/g, '/');
}
function lineOf(text, index) {
return text.slice(0, index).split(/\r?\n/).length;
}
function uniq(arr) {
return [...new Set((arr || []).filter(Boolean))];
}
function clean(s) {
return (s || '')
.replace(/<[^>]*>/g, '')
.replace(/\{\{.*?\}\}/g, '')
.replace(/\s+/g, ' ')
.trim();
}
function escapeReg(s) {
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function isInComment(text, index) {
const lineStart = text.lastIndexOf('\n', index) + 1;
const beforeOnLine = text.slice(lineStart, index);
if (/^\s*\/\//.test(beforeOnLine)) return true;
const blockStart = text.lastIndexOf('/*', index);
const blockEnd = text.lastIndexOf('*/', index);
return blockStart > blockEnd;
}
function moduleNameFromPath(relPath) {
const parts = relPath.split('/');
if (parts[0] !== 'src' || parts[1] !== 'views') return '其他';
if (parts.length <= 3) return parts[2] || '根页面';
return `${parts[2]} / ${parts.slice(3, -1).join(' / ') || path.basename(relPath)}`;
}
function extractLabels(text) {
const labels = [];
const patterns = [
/<el-button\b[^>]*>([\s\S]*?)<\/el-button>/g,
/\blabel="([^"]+)"/g,
/\bplaceholder="([^"]+)"/g,
/\btitle="([^"]+)"/g
];
for (const re of patterns) {
let m;
while ((m = re.exec(text))) {
const value = clean(m[1]);
if (value && !/[{};]/.test(value) && value.length <= 48) labels.push(value);
}
}
return uniq(labels).slice(0, 30);
}
function extractFrontendFields(text) {
const vModels = [];
const tableColumns = [];
const pushedParams = [];
let m;
const vmRe = /\bv-model(?:\.[\w-]+)?="([^"]+)"/g;
while ((m = vmRe.exec(text))) vModels.push(clean(m[1]));
const colRe = /<el-table-column\b([^>]*)>/g;
while ((m = colRe.exec(text))) {
const attrs = m[1];
const label = /label="([^"]+)"/.exec(attrs)?.[1] || '';
const prop = /prop="([^"]+)"/.exec(attrs)?.[1] || '';
if (label || prop) tableColumns.push({ label: clean(label), prop: clean(prop) });
}
const paramRe = /\.(?:push|unshift)\s*\(\s*\[\s*['"]([^'"]+)['"]\s*,\s*([^\]\n]+)\]/g;
while ((m = paramRe.exec(text))) pushedParams.push({ name: clean(m[1]), expr: clean(m[2]) });
return {
vModels: uniq(vModels).slice(0, 80),
tableColumns: uniq(tableColumns.map(x => `${x.label}|${x.prop}`))
.map(x => {
const [label, prop] = x.split('|');
return { label, prop };
})
.slice(0, 120),
pushedParams: uniq(pushedParams.map(x => `${x.name}|${x.expr}`))
.map(x => {
const [name, expr] = x.split('|');
return { name, expr };
})
.slice(0, 120)
};
}
function extractMethods(text) {
const methods = [];
const methodBlock = /methods\s*:\s*\{([\s\S]*?)\n\s*\}/m.exec(text);
const src = methodBlock ? methodBlock[1] : text;
const re = /^\s*([A-Za-z_$\u4e00-\u9fa5][\w$\u4e00-\u9fa5]*)\s*\([^)]*\)\s*\{/gm;
let m;
while ((m = re.exec(src))) methods.push(m[1]);
return uniq(methods).slice(0, 30);
}
function extractCreateData(text) {
const calls = [];
const re = /CreateData\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]/g;
let m;
while ((m = re.exec(text))) {
if (isInComment(text, m.index)) continue;
calls.push({ type: m[1], name: m[2], line: lineOf(text, m.index) });
}
return calls;
}
function extractSapCalls(text) {
const calls = [];
const re = /(getB1|postB1|patchB1|posttm)\s*\(\s*([`'"])([\s\S]*?)\2/g;
let m;
while ((m = re.exec(text))) {
if (isInComment(text, m.index)) continue;
const snippet = text.slice(m.index, m.index + 1200);
const keys = [];
const keyRe = /["']?([\u4e00-\u9fa5A-Za-z_][\u4e00-\u9fa5A-Za-z0-9_$]*)["']?\s*:/g;
let km;
while ((km = keyRe.exec(snippet)) && keys.length < 24) {
if (!['if', 'for', 'while', 'switch', 'catch', 'function'].includes(km[1])) keys.push(km[1]);
}
calls.push({ fn: m[1], url: clean(m[3]), line: lineOf(text, m.index), payloadKeys: uniq(keys) });
}
return calls;
}
function extractApiImports(text) {
const imports = [];
const re = /from\s+['"](@\/api\/[^'"]+)['"]/g;
let m;
while ((m = re.exec(text))) imports.push(m[1]);
return uniq(imports);
}
function stripSqlComments(sql) {
return sql.replace(/\/\*[\s\S]*?\*\//g, ' ').replace(/--.*$/gm, ' ');
}
function compactSqlLine(s) {
return clean(s)
.replace(/\s*,\s*/g, ', ')
.replace(/\s*=\s*/g, ' = ')
.replace(/\s+/g, ' ')
.slice(0, 240);
}
function extractSqlLines(body, regex, limit) {
return uniq(stripSqlComments(body)
.split(/\r?\n/)
.map(x => x.trim())
.filter(x => regex.test(x))
.map(compactSqlLine))
.slice(0, limit);
}
function extractSelectColumns(body, limit = 10) {
const noComments = stripSqlComments(body);
const m = /\bSELECT\b([\s\S]{0,2500}?)\bFROM\b/i.exec(noComments);
if (!m) return [];
return uniq(m[1].split(/\r?\n/)
.map(x => compactSqlLine(x.replace(/^\s*,/, '')))
.filter(x => x && !/^(TOP|DISTINCT)$/i.test(x)))
.slice(0, limit);
}
function objectRegex(name) {
return new RegExp(`(?:\\[dbo\\]\\.\\[${escapeReg(name)}\\]|dbo\\.\\[${escapeReg(name)}\\]|\\[${escapeReg(name)}\\]|\\b${escapeReg(name)}\\b)`, 'i');
}
function extractParams(body) {
const header = body.split(/\bAS\b/i)[0] || body.slice(0, 1000);
const params = [];
const re = /@([\u4e00-\u9fa5A-Za-z0-9_]+)\s+([A-Za-z0-9_\[\]\(\),]+)/g;
let m;
while ((m = re.exec(header))) params.push(`@${m[1]} ${m[2]}`);
return uniq(params).slice(0, 24);
}
function summarizeProc(name, body) {
const verbs = [];
if (/\bSELECT\b/i.test(body)) verbs.push('查询');
if (/\bINSERT\s+INTO\b/i.test(body)) verbs.push('新增');
if (/\bUPDATE\b/i.test(body)) verbs.push('更新');
if (/\bDELETE\s+FROM\b/i.test(body)) verbs.push('删除');
if (/\bOPENJSON\b|JSON_VALUE|JSON_QUERY/i.test(body)) verbs.push('解析 JSON 批量数据');
if (/ROW_NUMBER|OFFSET|@PageSize|@PageCurrent/i.test(body)) verbs.push('分页');
if (/SAP\.SBO_YL/i.test(body)) verbs.push('读取 SAP B1 数据库对象');
if (/报工|工时/.test(name + body)) verbs.push('处理报工/工时');
if (/质检|检验|不合格/.test(name + body)) verbs.push('处理质检数据');
if (/排产|派工|计划/.test(name + body)) verbs.push('处理计划/派工');
if (/外协/.test(name + body)) verbs.push('处理外协业务');
return uniq(verbs).join('、') || '执行数据库业务逻辑';
}
function extractSqlModel() {
const sql = existingSqlFiles().map(f => `\n-- FILE: ${path.basename(f)}\n${readText(f)}`).join('\n');
const objects = [];
const objectRe = /CREATE\s+(TABLE|VIEW)\s+(?:\[dbo\]\.)?\[([^\]]+)\]/gi;
let m;
while ((m = objectRe.exec(sql))) objects.push({ type: m[1].toUpperCase(), name: m[2] });
const markers = [];
const procRe = /(?:CREATE|ALTER)\s+(?:\s*PROCEDURE|\s*PROC)\s+(?:\[dbo\]\.)?\[([^\]]+)\]/gi;
while ((m = procRe.exec(sql))) markers.push({ index: m.index, name: m[1] });
const procByName = {};
for (let i = 0; i < markers.length; i++) {
const start = markers[i].index;
const nextGo = sql.slice(start).search(/\r?\nGO\r?\n/i);
const nextProc = i + 1 < markers.length ? markers[i + 1].index : sql.length;
const end = nextGo >= 0 ? Math.min(start + nextGo, nextProc) : nextProc;
const body = sql.slice(start, end);
const deps = [];
for (const obj of objects) {
if (objectRegex(obj.name).test(body)) deps.push(`${obj.type}:${obj.name}`);
}
const sapRefs = uniq(body.match(/SAP\.SBO_YL\.dbo\.[A-Za-z0-9_]+/g) || []);
for (const s of sapRefs) deps.push(`SAP:${s}`);
const writes = [];
for (const obj of objects) {
const n = escapeReg(obj.name);
const hit = new RegExp(`\\b(INSERT\\s+INTO|UPDATE|DELETE\\s+FROM|MERGE\\s+INTO)\\s+(?:\\[dbo\\]\\.\\[${n}\\]|dbo\\.\\[${n}\\]|\\[${n}\\]|${n})`, 'i').test(body);
if (hit) writes.push(obj.name);
}
const noComments = stripSqlComments(body);
procByName[markers[i].name] = {
name: markers[i].name,
body,
params: extractParams(body),
deps: uniq(deps),
writes: uniq(writes),
sapRefs,
summary: summarizeProc(markers[i].name, body),
features: {
selectColumns: extractSelectColumns(body),
filters: extractSqlLines(body, /\b(WHERE|AND|OR)\b/i, 10),
updates: extractSqlLines(body, /\b(UPDATE|SET|INSERT\s+INTO|DELETE\s+FROM|MERGE\s+INTO)\b/i, 12),
statusLines: extractSqlLines(body, /状态|排产|派工|加工|任务|质检|关闭|完成|已报工|DocEntry|SAP/i, 18),
grouping: extractSqlLines(body, /\b(GROUP\s+BY|HAVING|ORDER\s+BY|ROW_NUMBER|OFFSET|FETCH\s+NEXT)\b/i, 8),
tempTables: uniq(noComments.match(/#[\u4e00-\u9fa5A-Za-z0-9_]+/g) || []).slice(0, 10),
hasJson: /\bOPENJSON\b|JSON_VALUE|JSON_QUERY/i.test(noComments),
hasTransaction: /\bBEGIN\s+TRAN|COMMIT\s+TRAN|ROLLBACK\s+TRAN/i.test(noComments),
hasTryCatch: /\bTRY\b|\bCATCH\b/i.test(noComments),
hasPagination: /@PageCurrent|@PageSize|ROW_NUMBER|OFFSET\s+.*FETCH/i.test(noComments),
hasSap: /SAP\.SBO_YL/i.test(noComments)
}
};
}
return { objects, procByName };
}
function operationByType(type) {
return {
'1': '旧版查询',
'2': '旧版增删改',
'7': '旧版批量/JSON',
'11': '当前通用存储过程查询/执行',
'12': '当前通用存储过程写入/业务动作',
'2001': '导出/报表类过程'
}[type] || `自定义类型 ${type}`;
}
function procPurpose(name) {
const rules = [
[/查询|Get|Load|Query|Search|读取|查看/, '查询/读取数据'],
[/新增|增加|Add|Insert/, '新增业务数据'],
[/修改|编辑|Edit|Update|更新|保存|Save/, '更新/保存业务数据'],
[/删除|Delete/, '删除业务数据'],
[/Finish|确认|关闭|Close/, '确认/关闭/完成业务动作'],
[/派工|Planned|排产|计划/, '计划排产或派工'],
[/报工|工时|WorkTime|ProdReport/, '报工或工时处理'],
[/质检|检验|Check|Quality/, '质量检验处理'],
[/外协/, '外协业务处理'],
[/登录|人员|角色|菜单|权限/, '基础权限/人员数据处理'],
[/设备|工位|资源|Station|Resource/, '设备/工位/资源数据处理']
];
for (const [re, purpose] of rules) if (re.test(name)) return purpose;
return '业务存储过程调用';
}
function businessDomainFromName(name) {
const rules = [
[/登录|人员|角色|菜单|权限|部门|工位管理/, '系统基础资料/权限'],
[/设备|报警|CaChe|StationStatus|工位设备/, '设备与实时数据'],
[/排产|派工|OrderPlanned|计划/, '计划排产'],
[/ProductCenter|ProductTask|加工中心|装配中心|报工|收料|开工|退库|发料|工时/, '生产执行/工时'],
[/外协/, '外协协同'],
[/图纸|工艺|Process|Drawing|Procedure|产品结构|标准/, '工艺与图纸'],
[/质检|检验|质量|不合格|Check/, '质量检验'],
[/销售/, '销售/订单状态'],
[/班次/, '班次与人员排班'],
[/加急/, '加急任务']
];
for (const [re, domain] of rules) if (re.test(name)) return domain;
return '通用业务';
}
function pageBusinessNarrative(page) {
const p = page.relPath;
const labels = page.labels.slice(0, 10);
const procNames = uniq(page.procs.map(x => x.name)).slice(0, 6);
const common = [];
if (labels.length) common.push(`页面可见的操作/字段包括 ${labels.map(x => `${x}`).join('、')},这些是判断页面业务范围的主要线索。`);
if (procNames.length) common.push(`后端主要围绕 ${procNames.map(x => `\`${x}\``).join('、')}${page.procs.length > 6 ? ' 等过程' : ''} 取数或提交业务动作。`);
const rules = [
[/PunctualWork/, '该页面用于发现“计划应开工但现场未及时开工”的任务。用户按任务状态、工位、工序、异常原因等条件筛选,页面展示生产订单、销售订单、物料、工序、指派对象、分配数量、上序合格数、加工/收料状态和加急数量,服务于生产异常提醒和催办。'],
[/CraftMaintain/, '该页面维护产品结构树。用户可以新增、编辑、删除产品结构节点查询现有产品结构并为后续工艺、物料、BOM 或生产任务提供层级基础数据。'],
[/DeviceDataHistory/, '该页面查询设备历史采集数据。用户按工位/设备、参数名称、起止时间分页查询历史记录,用于追溯设备运行参数。'],
[/DeviceInformation/, '该页面维护设备台账和设备相关基础资料。用户可以查询设备信息,新增、修改、删除设备,维护维修记录、工时记录或点检配置。'],
[/DeviceRealData/, '该页面展示设备实时或近实时数据。用户按工位和数据类型查询当前采集值、统计值或状态,通常用于设备运行监控。'],
[/Devicedata/, '该页面面向设备采集数据管理,查询缓存变量和设备数据,支持按设备、参数、时间等维度查看实时或历史采集结果。'],
[/InstallMakePlanDo|InstallMakePlan/, '该页面处理装配件排产。用户查询待排产/已排产装配任务,选择工位和人员,修改计划开工/完成时间、优先级、说明,执行单条派工、二次派工、批量确认排产,并在确认时同步 SAP 生产订单状态或创建相关请求。'],
[/SelfMakePlandone|SelfMakePlando|SelfMakePlan/, '该页面处理自制件/机加件排产。用户查询生产订单工序任务,筛选订单、合同、物料、工序、计划时间、排产状态和指派对象,完成工位派工、人员二次派工、外协分组、计划说明维护和排产确认。'],
[/PlannOrderClose/, '该页面用于生产订单关闭。用户筛选 SAP 未关闭或 MES 待确认订单,执行 SAP 生产订单关闭,并调用 MES 过程记录或确认订单关闭状态。'],
[/PlanShell/, '该页面是计划外壳/计划跟踪类页面,按缺料、发货通知、完成状态等条件查询计划或装配相关任务,用于计划人员集中查看订单齐套、发货和关闭情况。'],
[/priorityinstall/, '该页面用于装配优先级调整。用户查询装配计划任务,修改计划开工/完成时间、派工对象或优先级,用于插单和重点订单排序。'],
[/PartDrawing/, '该页面维护零件图纸。用户按物料查询图纸、查看文件、验证名称、删除图纸并保留删除记录。'],
[/PartDrawlook/, '该页面偏只读查看零件图纸,通常给生产或质检人员按物料快速打开图纸。'],
[/ProcurementDrawlook/, '该页面提供采购场景的图纸查看。用户按采购物料查询图纸,查看或删除图纸记录,支持采购、外协、来料检验时查阅技术文件。'],
[/ProcessDrawing/, '该页面维护工艺图纸。用户按物料/工艺条件查询工艺图,验证名称,查看或删除工艺图纸。'],
[/ProcedureManagement/, '该页面维护工序/路线阶段主数据。新增或修改工序时会同步 SAP B1 的 RouteStages保证 MES 工序与 SAP 工艺阶段一致。'],
[/ProcessesDevelop/, '该页面用于工艺开发和生产工艺路线维护。用户围绕物料、工序、顺序、工艺参数、图纸等信息维护标准或生产用工艺路线。'],
[/ProcessInquiry/, '该页面用于工艺路线查询。用户按物料、产品、工序等条件查看标准工艺或生产工艺,服务于排产、生产和质检核对。'],
[/ProcessProduct/, '该页面维护产品与工艺/图纸的关系,使产品、物料、工序、图纸等基础数据形成可查询的工艺资料。'],
[/ProductionOrder/, '该页面处理生产订单资料。用户查询 ERP/MES 生产订单,并通过过程把 SAP 生产订单同步成 MES 生产计划和工序任务。'],
[/MachiningCenter/, '该页面是机加生产执行主界面。操作员按工位查看可执行任务和进行中任务,完成收料、开始加工、暂停/恢复、报工、辅助工序、首检/巡检/序检、生产发料查询、退库、图纸查看等动作,并写入加工中心操作记录和报工记录。'],
[/AssemblyCenter/, '该页面是装配生产执行主界面。装配人员按工位查询装配任务,处理开工、结束/报工、送检、缺料查询、收检记录、图纸查看和退库等动作,并会读取 SAP 生产订单信息辅助判断。'],
[/AssembleTaskManage/, '该页面管理装配任务。用户查询装配生产任务、查看工时汇总,进行派工、任务说明维护和外协/生产通知。'],
[/ProductionTaskManage/, '该页面管理生产任务。用户按工位、订单、工序查询任务,查看工时汇总,执行派工、修改计划字段、维护任务说明和通知状态。'],
[/ProductionTasksSum/, '该页面做生产任务汇总。用户按订单、工序、工位、时间等维度查询生产任务和工时汇总,并可编辑计划说明或派工信息。'],
[/ProductionPlanTrack/, '该页面跟踪生产计划执行。用户查看计划任务的开工、完工、进度、延期或异常情况,用于计划员追踪订单。'],
[/AssemblePlanTrack/, '该页面跟踪装配计划执行,展示装配任务进度、计划完成情况和异常。'],
[/AssembleTasksSum/, '该页面汇总装配任务,按订单、工位、人员或状态统计装配执行情况。'],
[/AssembleStatus/, '该页面查看装配现场状态,重点展示进行中任务和当前工位状态。'],
[/DeviceStatus/, '该页面查看设备/工位生产状态,通常用于判断设备是否在加工、待机、报警或空闲。'],
[/OutsourceMange/, '该页面管理外协任务。用户查询可外协工序,按供应商/订单/工序分组,执行外协派工并同步 SAP 采购请求或相关单据,维护外协发料、收料、质检记录、打印次数和备注。'],
[/SaleOutsourceMange/, '该页面管理销售相关外协任务。业务与外协管理类似,但面向销售订单或销售外协场景,包含派工同步 SAP、外协发料、历史记录和质检记录查询。'],
[/OutsourceSheet/, '该页面输出外协报表。用户按订单、合同、产品、计划号、供应商、状态分页查询外协报表,也可导出,用于外协进度、发料、收料、质检、开票等跟踪。'],
[/PickingTask/, '该页面处理拣配任务。用户查询生产订单相关拣配/领料任务,并可能联动 SAP 生产订单或库存出入库状态。'],
[/PersonnelBinding/, '该页面维护工位与人员绑定关系。用于限制或提示哪些人员可在指定工位报工、开工或执行任务。'],
[/ShiftManagement/, '该页面维护班次和班次人员绑定。用户新增、修改、删除班次,给班次绑定人员,为工时计算和报工归属提供基础数据。'],
[/Timesheet/, '该页面统计工时。用户按项目、作业者、设备、任务等维度查询工时数据,并可导出报表。'],
[/WorkHoursCheck/, '该页面用于工时校验。质检/管理人员查询待校验报工记录,系统计算标准/实际工时,保存单条或批量校验结果;通过校验后可把工序资源或工时/出库类单据上传到 SAP。'],
[/WorkhoursEdit/, '该页面用于编辑已产生的工时/报工记录,修正异常工时或补录说明。'],
[/Workhours/, '该页面用于工时查询,按工序、人员、设备、时间等条件查看工序工时。'],
[/Urgent/, '该页面维护加急任务。用户查询加急订单明细,并更新完成、转至等字段,用于生产/质检优先级管理。'],
[/AbnormalControl/, '该页面管理生产异常。用户查询异常记录,推进异常处理、关闭或记录处理结果。'],
[/login/, '该页面是登录入口负责账号密码登录、角色选择、Token/Cookie 写入、路由权限初始化和密码修改入口。'],
[/dashboard/, '该页面是系统首页或欢迎页,用于承载看板入口或基础统计展示。'],
[/404/, '该页面是 404 错误页,用于路由不存在时展示错误信息。'],
[/purchaseIncoming/, '该页面处理采购/来料检验。质检人员查询待检任务,查看图纸、字典和检验人员,录入合格数、不合格数、检测数据,调用过程更新来料检验结果。'],
[/processReceive/, '该页面处理序检收检。质检人员接收工序检验任务,查询加急和字典信息,读取 SAP 工序状态,新增序检收检记录。'],
[/processSpecial/, '该页面处理过程/特殊检验。用户按工序任务录入特殊检验结果和检测明细。'],
[/firstSpecial/, '该页面处理首检/特殊首件检验。用户按工序和工位选择任务,录入首检数据。'],
[/final/, '该页面处理终检任务。质检人员查询终检任务,录入终检结果,并预留 SAP 生产订单状态回写。'],
[/materialReturn/, '该页面处理原材料退库检验。用户查询退库检验任务,读取 SAP 生产订单辅助信息,录入并更新检验结果。'],
[/salesReturn/, '该页面处理销售退货检验。用户查询销售退货待检任务,录入检验结果并更新质检记录。'],
[/OtherInbound/, '该页面处理其他入库检验。用户查询其他入库待检任务,录入检验结果并更新质检记录。'],
[/QualityCenter/, '该页面是质量综合处理中心。用户集中查询质检任务、收检记录、终检/入库任务和质检明细,录入检测数据、不合格处理,并读取 SAP 生产订单信息辅助校验。'],
[/QualityDetails/, '该页面查询质检明细。用户按订单、物料、检验类型、时间等条件查询和导出检测明细。'],
[/QualityStandardQuery/, '该页面维护/查询检验标准。用户按物料、工序、检测项目维护理论值、上下限、量具和启用状态。'],
[/Unqualified/, '该页面处理不合格品。用户查询不合格记录,查看处置流程和节点,推进让步放行、返工、报废等处理。'],
[/saleorderstatus/, '该页面查询销售订单状态。用户按销售订单、合同、物料等条件查看销售订单在 SAP/MES 中的履约、生产、发货或关闭状态。'],
[/MenuManagement/, '该页面维护菜单和权限。管理员查询、增加、修改、删除菜单/角色权限配置,用于动态路由和按钮权限。'],
[/OperationLog/, '该页面查询操作日志或报工操作记录,用于审计用户操作和追踪异常。'],
[/OrgManagement/, '该页面维护组织/角色类基础数据,支持新增、修改、删除和查询。'],
[/PersonnelManagement/, '该页面维护人员账号。管理员维护人员、部门、角色、启用状态等登录和权限基础数据。'],
[/SystemRrolemaintenance/, '该页面维护系统角色。管理员查询、新增、修改、删除角色数据。'],
[/WorkstationManagement/, '该页面维护工位资源。管理员在 MES 侧新增、修改、删除工位,同时调用 SAP B1 Resources 新增或更新资源主数据。'],
[/layout|Sidebar|Navbar|TagsView|AppMain|ResizeHandler/, '该文件属于系统布局组件,负责菜单、导航、标签页、内容承载或窗口自适应,不承载具体业务流程。'],
[/login/, '该页面是登录入口负责账号密码登录、角色选择、Token/Cookie 写入、路由权限初始化和密码修改入口。'],
[/dashboard/, '该页面是系统首页或欢迎页,用于承载看板入口或基础统计展示。'],
[/404/, '该页面是 404 错误页,用于路由不存在时展示错误信息。']
];
const found = rules.find(([re]) => re.test(p));
return [found ? found[1] : '该页面为业务页面,具体功能由表单字段、按钮和存储过程调用共同决定。', ...common].join('\n\n');
}
function pageFlow(page) {
const p = page.relPath;
const flows = [
[/SelfMakePlandone|SelfMakePlando|SelfMakePlan/,
'自制/机加排产流程:\n\n```mermaid\nflowchart LR\n A[输入订单/合同/物料/工序/时间条件] --> B[调用 MES_OrderPlanned_Query 查询待排产任务]\n B --> C[选择任务行]\n C --> D{派工方式}\n D --> E[MES_OrderPlanned_SingleTaskPlanned 单任务派工]\n D --> F[计划排产_二次派工 绑定人员]\n D --> G[计划排产_外协分组]\n E --> H[MES_OrderPlanned_EditTaskPlanned/DescriptionEdit 修改计划字段]\n F --> H\n G --> H\n H --> I[MES_OrderPlanned_Finish 确认排产]\n I --> J[PATCH /ProductionOrders(...) 回写 SAP 生产订单状态]\n J --> K[页面刷新任务状态]\n```\n'],
[/InstallMakePlanDo|InstallMakePlan/,
'装配排产流程:\n\n```mermaid\nflowchart LR\n A[输入订单/合同/物料/工序/时间条件] --> B[MES_OrderPlanned_Queryzp 查询装配任务]\n B --> C[选择任务]\n C --> D[Prog_MES_LoadStations 选择工位]\n D --> E[系统管理_人员管理_所有有效人员查询 选择人员]\n E --> F[计划排产_派工 或 MES_OrderPlanned_SingleTaskPlanned]\n F --> G[计划排产_二次派工]\n G --> H[MES_OrderPlanned_Finish 确认排产]\n H --> I[PATCH /ProductionOrders(...) 或 POST SAP 请求]\n I --> J[刷新排产结果]\n```\n'],
[/MachiningCenter/,
'机加中心执行流程:\n\n```mermaid\nflowchart LR\n A[选择工位/人员/任务条件] --> B[MES_ProductCenter_GetTask 查询可执行任务]\n B --> C[选择任务]\n C --> D[收料 MES_ProductTask_MaterialRecieved]\n D --> E[开始加工 MES_ProductTask_WorkingStart]\n E --> F{生产过程}\n F --> G[暂停/恢复 MES_ProductTask_Rest]\n F --> H[首检/巡检/序检]\n F --> I[报工 MES_ProductTask_ProdReport]\n I --> J[写入操作记录/报工记录]\n J --> K[必要时读取 SAP ProductionOrders]\n K --> L[刷新任务和进行中状态]\n```\n'],
[/AssemblyCenter/,
'装配中心执行流程:\n\n```mermaid\nflowchart LR\n A[选择工位/人员] --> B[MES_ProductCenter_GetTask_zp 查询装配任务]\n B --> C[查看缺料/图纸/工序]\n C --> D[MES_人员工时记录_开始 或生产任务开始]\n D --> E[执行装配]\n E --> F[MES_ProductTask_SendInspection 送检/报工]\n F --> G[收检记录/质检数据]\n G --> H[读取 SAP ProductionOrders 辅助判断]\n H --> I[刷新装配任务]\n```\n'],
[/WorkHoursCheck/,
'工时校验流程:\n\n```mermaid\nflowchart LR\n A[选择人员/订单/工序/日期] --> B[工时校验_获取昨日之前操作记录列表]\n B --> C[选择待校验记录]\n C --> D[usp_ValidateWorkTime 或 usp_BatchValidateWorkTime 计算工时]\n D --> E{校验结果}\n E --> F[工时校验_保存校验记录]\n E --> G[工时校验_批量保存校验记录]\n F --> H[更新校验状态]\n G --> H\n H --> I[GET/PATCH /ProductionOrders 补工序资源]\n I --> J[POST /InventoryGenExits 上传 SAP]\n J --> K[标记已上传/失败留痕]\n```\n'],
[/purchaseIncoming|processReceive|processSpecial|firstSpecial|final|materialReturn|salesReturn|OtherInbound|QualityCenter/,
'质检业务流程:\n\n```mermaid\nflowchart LR\n A[选择检验类型/订单/物料/工序] --> B[查询待检任务]\n B --> C[查看图纸/字典/检验人员]\n C --> D[录入检测数量、合格数、不合格数和检测明细]\n D --> E{检验类型}\n E --> F[来料/入库/退货检验更新]\n E --> G[序检收检新增或更新]\n E --> H[终检/首检/特殊检验保存]\n F --> I[写入 YL_质量检验_质检记录及明细]\n G --> I\n H --> I\n I --> J[必要时查询/回写 SAP 生产订单或单据]\n```\n'],
[/OutsourceMange|SaleOutsourceMange|OutsourceSheet/,
'外协业务流程:\n\n```mermaid\nflowchart LR\n A[输入订单/合同/供应商/工序条件] --> B[查询外协任务或外协报表]\n B --> C[选择外协工序/供应商]\n C --> D[计划排产_派工 或外协分组]\n D --> E[POST SAP 采购/外协相关请求]\n E --> F[外协发料查询/保存]\n F --> G[外协收料/质检记录]\n G --> H[更新打印次数/备注/报表状态]\n```\n']
];
const found = flows.find(([re]) => re.test(p));
if (found) return found[1];
if (!page.procs.length) return '该页面未发现后端存储过程调用,通常不形成完整业务流程。';
const procChain = uniq(page.procs.map(x => x.name)).slice(0, 8).map(x => `\`${x}\``).join(' -> ');
return `通用流程:用户输入查询/维护条件 -> 调用 ${procChain} -> 后端读写 SQL Server -> 页面刷新表格或弹窗结果。`;
}
function fieldMappingTable(page) {
const rows = [
'| 类型 | 前端字段/显示列 | 存储过程参数或表达式 | SQL返回字段/数据库字段线索 |',
'|---|---|---|---|'
];
const mappings = [];
for (const p of page.fields.pushedParams || []) {
const relatedProc = page.procs.find(proc => proc.sqlInfo?.params?.some(x => x.includes(`@${p.name}`)));
const sqlField = relatedProc?.sqlInfo?.features?.selectColumns?.find(x => x.includes(p.name)) || '';
mappings.push(['参数', p.expr, `@${p.name}`, sqlField]);
}
for (const c of page.fields.tableColumns || []) {
if (!c.label && !c.prop) continue;
const sqlField = page.procs
.flatMap(proc => proc.sqlInfo?.features?.selectColumns || [])
.find(x => (c.prop && x.includes(c.prop)) || (c.label && x.includes(c.label))) || '';
mappings.push(['显示列', c.label || c.prop, '', sqlField || c.prop || c.label]);
}
for (const v of page.fields.vModels || []) {
const name = v.split('.').pop();
const param = page.fields.pushedParams.find(x => x.expr.includes(v) || x.expr.includes(name));
mappings.push(['输入字段', v, param ? `@${param.name}` : '', '']);
}
const uniqRows = uniq(mappings.map(x => x.join('|'))).slice(0, 40);
if (!uniqRows.length) return '未从页面模板中抽取到明确的 `v-model`、表格列或 `param.push` 字段映射。';
for (const item of uniqRows) {
const [type, front, param, sql] = item.split('|');
rows.push(`| ${type} | \`${front || '-'}\` | ${param ? `\`${param}\`` : '-'} | ${sql ? `\`${sql}\`` : '-'} |`);
}
return rows.join('\n');
}
function statusFlow(page) {
const lines = [];
for (const proc of page.procs) {
const info = proc.sqlInfo;
if (!info) continue;
const status = info.features.statusLines || [];
const useful = status.filter(x => /状态|排产|派工|加工|任务|质检|关闭|完成|已报工|DocEntry|SAP/i.test(x));
if (useful.length) lines.push(`- \`${proc.name}\`${useful.slice(0, 8).map(x => `\`${x}\``).join('')}`);
}
if (!lines.length) return '未从当前 SQL 静态解析到明确的状态字段变更。';
return lines.join('\n');
}
function sapInterfaceList(page) {
if (!page.sapCalls.length) return '页面无直接 SAP Service Layer 调用。';
const lines = ['| 行号 | 方法 | 接口 | 调用时机/影响判断 | 提交字段线索 |', '|---:|---|---|---|---|'];
for (const c of page.sapCalls) {
const timing = c.url.includes('ProductionOrders')
? '读取或更新 SAP 生产订单。失败会导致 MES 与 SAP 订单状态/工序资源不同步。'
: c.url.includes('InventoryGenExits')
? '上传库存发出/工时相关单据。失败会导致 SAP 未生成对应业务单据。'
: c.url.includes('Resources')
? '新增或更新 SAP 资源主数据。失败会导致 MES 工位与 SAP 资源不一致。'
: c.url.includes('RouteStages')
? '新增或更新 SAP 工序阶段。失败会导致 MES 工序与 SAP RouteStages 不一致。'
: '调用外部接口,失败会影响对应外部系统同步。';
lines.push(`| ${c.line} | \`${c.fn}\` | \`${c.url}\` | ${timing} | ${mdList(c.payloadKeys.slice(0, 12))} |`);
}
return lines.join('\n');
}
function dbCallChain(page) {
if (!page.procs.length) return '无数据库调用链。';
const lines = [];
for (const proc of page.procs) {
const deps = proc.sqlInfo ? depsMd(proc.sqlInfo.deps) : '过程体未解析';
const result = proc.purpose;
lines.push(`- \`${page.relPath}\` -> \`${proc.name}\` -> ${deps} -> ${result}`);
}
return lines.join('\n');
}
function mdList(items, empty = '无') {
if (!items || !items.length) return empty;
return items.map(x => `\`${x}\``).join('、');
}
function depsMd(deps) {
if (!deps || !deps.length) return '未在 SQL 中解析到明确依赖';
const tables = deps.filter(x => x.startsWith('TABLE:')).map(x => x.slice(6));
const views = deps.filter(x => x.startsWith('VIEW:')).map(x => x.slice(5));
const sap = deps.filter(x => x.startsWith('SAP:')).map(x => x.slice(4));
const parts = [];
if (tables.length) parts.push(`表:${mdList(tables)}`);
if (views.length) parts.push(`视图:${mdList(views)}`);
if (sap.length) parts.push(`SAP/链接库:${mdList(sap)}`);
return parts.join('') || '未在 SQL 中解析到明确依赖';
}
function explainProc(proc) {
const info = proc.sqlInfo;
const lines = [];
lines.push(`\`${proc.name}\` 属于 ${businessDomainFromName(proc.name)},前端以 type=${proc.type}${proc.op})调用,页面用途是 ${proc.purpose}`);
if (!info) {
lines.push('当前工作区 SQL 中没有解析到该过程体,因此只能确认前端调用关系,不能准确说明内部读写表、过滤条件和状态变更。');
return lines.join(' ');
}
const f = info.features;
lines.push(`数据库处理摘要:${info.summary}`);
lines.push(`读取/关联对象:${depsMd(info.deps)}`);
if (info.writes.length) lines.push(`写入或更新对象:${mdList(info.writes)}`);
if (info.params.length) lines.push(`入参/分页参数:${mdList(info.params)}`);
if (f.selectColumns.length) lines.push(`主要返回字段线索:${mdList(f.selectColumns)}`);
if (f.filters.length) lines.push(`关键过滤/匹配条件:${f.filters.map(x => `\`${x}\``).join('')}`);
if (f.updates.length) lines.push(`关键写入/状态处理语句线索:${f.updates.map(x => `\`${x}\``).join('')}`);
if (f.grouping.length) lines.push(`排序/分组/分页线索:${f.grouping.map(x => `\`${x}\``).join('')}`);
const flags = [];
if (f.hasPagination) flags.push('分页');
if (f.hasJson) flags.push('JSON 批量解析');
if (f.hasTransaction) flags.push('事务控制');
if (f.hasTryCatch) flags.push('异常捕获');
if (f.hasSap) flags.push('读取 SAP 数据库对象');
if (f.tempTables.length) flags.push(`临时表 ${mdList(f.tempTables)}`);
if (flags.length) lines.push(`实现特征:${flags.join('、')}`);
return lines.join(' ');
}
function procTable(procs) {
if (!procs.length) return '未发现 `CreateData(...)` 存储过程调用。';
const rows = [
'| 行号 | type | 存储过程 | 前端用途 | SQL摘要 | 依赖对象 |',
'|---:|---|---|---|---|---|'
];
for (const p of procs) {
const info = p.sqlInfo;
rows.push(`| ${p.line} | ${p.type}${p.op} | \`${p.name}\` | ${p.purpose} | ${info ? info.summary : '未找到过程体'} | ${info ? depsMd(info.deps) : '未知'} |`);
}
return rows.join('\n');
}
function sapTable(calls, procs) {
const procSap = [];
for (const p of procs) {
if (p.sqlInfo && p.sqlInfo.sapRefs.length) procSap.push(`${p.name}: ${p.sqlInfo.sapRefs.join(', ')}`);
}
if (!calls.length && !procSap.length) return '未发现页面直接调用 SAP B1 Service Layer相关存储过程也未解析到 `SAP.SBO_YL` 链接库引用。';
const lines = [];
if (calls.length) {
lines.push('页面直接 SAP/接口调用:');
for (const c of calls) lines.push(`- 第 ${c.line} 行:\`${c.fn}("${c.url}")\``);
}
if (procSap.length) {
lines.push('存储过程内读取 SAP B1 数据库对象:');
for (const s of procSap) lines.push(`- ${s}`);
}
return lines.join('\n');
}
function techFlags(page) {
const flags = ['Vue 2 Options API', 'Element UI'];
if (page.procs.length) flags.push('`CreateData` + `ExecDatabase` 调用后端过程');
else flags.push('未发现页面级后端存储过程调用');
if (page.sapCalls.length) flags.push('SAP B1 Service Layer`src/api/b1s.js`');
if (page.imports.includes('@/api/tm') || page.sapCalls.some(x => x.fn === 'posttm')) flags.push('TM/OpenAPI 接口(`src/api/tm.js`');
if (page.hasEcharts) flags.push('ECharts');
if (page.hasFullCalendar) flags.push('FullCalendar');
if (page.hasMqtt) flags.push('MQTT');
if (page.hasPdf) flags.push('PDF/图纸预览或导出');
if (page.hasExcel) flags.push('Excel/报表导出');
return flags;
}
function moduleSummary(pages) {
const groups = {};
for (const p of pages) {
const top = p.relPath.split('/')[2] || '其他';
groups[top] ||= [];
groups[top].push(p);
}
const lines = ['| 模块 | 页面数 | 主要能力 |', '|---|---:|---|'];
for (const [mod, ps] of Object.entries(groups)) {
const allProcs = uniq(ps.flatMap(p => p.procs.map(x => x.name)));
const allSap = ps.reduce((n, p) => n + p.sapCalls.length, 0);
const ability = [];
if (allProcs.length) ability.push(`过程 ${allProcs.length}`);
if (allSap) ability.push(`直接 SAP 调用 ${allSap}`);
if (ps.some(p => p.hasEcharts)) ability.push('图表');
if (ps.some(p => p.hasMqtt)) ability.push('设备实时通信');
lines.push(`| ${mod} | ${ps.length} | ${ability.join('、') || '布局/静态页面'} |`);
}
return lines.join('\n');
}
const sqlModel = extractSqlModel();
const pages = walk(viewsRoot, ['.vue', '.js']).sort().map(file => {
const text = readText(file);
const relPath = rel(file);
const procs = extractCreateData(text).map(p => ({
...p,
op: operationByType(p.type),
purpose: procPurpose(p.name),
sqlInfo: sqlModel.procByName[p.name]
}));
const page = {
file,
relPath,
module: moduleNameFromPath(relPath),
lines: text.split(/\r?\n/).length,
labels: extractLabels(text),
methods: extractMethods(text),
fields: extractFrontendFields(text),
procs,
sapCalls: extractSapCalls(text),
imports: extractApiImports(text),
hasMqtt: /mqtt|MQTT/.test(text),
hasEcharts: /echarts|ECharts|\$echarts/.test(text),
hasFullCalendar: /FullCalendar|@fullcalendar/.test(text),
hasPdf: /pdfjs|jspdf|html2canvas|pdf/i.test(text),
hasExcel: /xlsx|exportExcel|Excel|导出/.test(text)
};
page.functionDesc = pageBusinessNarrative(page);
return page;
});
const now = new Date().toISOString().slice(0, 10);
let md = '';
md += `# MES_Manage_View_V20 src/views 逐页面详细分析\n\n`;
md += `生成日期:${now}\n\n`;
md += `分析范围:\`MES_Manage_View_V20/src/views\`${pages.length} 个 .vue/.js 文件;辅助读取 \`src/api\`\`config/index.js\`\`static/config.js\` 和 SQL 脚本。\n\n`;
md += `## 重要说明\n\n`;
md += `- 页面功能不是只按文件名猜测,报告同时参考页面路径、按钮/字段文案、方法名、存储过程名和 SQL 过程体。\n`;
md += `- 存储过程处理说明来自 SQL 静态解析读写对象、参数、返回字段、过滤条件、更新语句、分组分页、JSON、事务、SAP 链接库等。\n`;
md += `- 如果某个过程没有解析到过程体,报告会明确说明不能准确判断内部表/视图和处理逻辑。\n\n`;
md += `## 技术路线总览\n\n`;
md += `- 前端Vue 2.7、Vue Router、Vuex、Element UI页面以 Options API 为主。\n`;
md += `- 数据访问:页面调用 \`this.CreateData(type, procedureName, params[, pageSize, pageCurrent])\` 组包,再调用 \`this.ExecDatabase(data)\` 访问后端。\n`;
md += `- 后端:统一接口接收 type/name/param执行 SQL Server 存储过程,返回 \`response.data\` 和分页信息。\n`;
md += `- 数据库:\`YL_MESDB\`,核心对象包括生产计划/生产任务、加工中心操作记录、质检记录、设备数据、权限菜单等表和视图。\n`;
md += `- SAP\`src/api/b1s.js\` 通过 \`window.dt_Config.baseURLB1\` 访问 B1 Service Layer部分过程也跨库读取 \`SAP.SBO_YL.dbo.*\`\n\n`;
md += `## 模块汇总\n\n${moduleSummary(pages)}\n\n`;
const allSapCalls = [];
for (const p of pages) {
for (const c of p.sapCalls) allSapCalls.push({ page: p.relPath, ...c });
}
if (allSapCalls.length) {
md += `## SAP 交互总清单\n\n`;
md += `| 页面 | 行号 | 方法 | 接口 | 提交字段线索 |\n|---|---:|---|---|---|\n`;
for (const c of allSapCalls) {
md += `| \`${c.page}\` | ${c.line} | \`${c.fn}\` | \`${c.url}\` | ${mdList(c.payloadKeys.slice(0, 10))} |\n`;
}
md += `\n`;
}
for (let i = 0; i < pages.length; i++) {
const p = pages[i];
md += `## ${i + 1}. ${p.relPath}\n\n`;
md += `**页面位置**\`${p.relPath}\` \n`;
md += `**所属模块**${p.module} \n`;
md += `**源码行数**${p.lines}\n\n`;
md += `### 页面功能\n\n${p.functionDesc}\n\n`;
md += `### 页面流程图\n\n${pageFlow(p)}\n\n`;
md += `### 用户操作与页面线索\n\n`;
md += `可见按钮/字段线索:${mdList(p.labels.slice(0, 18))}\n\n`;
md += `主要方法线索:${mdList(p.methods.slice(0, 18))}\n\n`;
md += `### 字段映射表\n\n${fieldMappingTable(p)}\n\n`;
md += `### 技术路线\n\n${techFlags(p).map(x => `- ${x}`).join('\n')}\n\n`;
md += `### 调用的存储过程总览\n\n${procTable(p.procs)}\n\n`;
md += `### 与 SAP 的交互\n\n${sapTable(p.sapCalls, p.procs)}\n\n`;
md += `### SAP 接口级说明\n\n${sapInterfaceList(p)}\n\n`;
md += `### 状态流转说明\n\n${statusFlow(p)}\n\n`;
md += `### 数据库调用链\n\n${dbCallChain(p)}\n\n`;
md += `### 存储过程处理逻辑明细\n\n`;
if (!p.procs.length) {
md += `无页面级存储过程调用。\n\n`;
} else {
for (const proc of p.procs) md += `- ${explainProc(proc)}\n`;
md += `\n`;
}
}
md += `## SQL 对象总览\n\n`;
md += `脚本中解析到表/视图 ${sqlModel.objects.length} 个、存储过程 ${Object.keys(sqlModel.procByName).length} 个。\n\n`;
md += `### 表/视图清单\n\n`;
for (const obj of sqlModel.objects) md += `- ${obj.type === 'TABLE' ? '表' : '视图'}\`${obj.name}\`\n`;
fs.writeFileSync(outFile, md, 'utf8');
console.log(outFile);

View File

@@ -0,0 +1,9 @@
IF COL_LENGTH(N'dbo.MES_接口_生产计划', N'预计送检日期') IS NULL
BEGIN
ALTER TABLE [dbo].[MES_接口_生产计划] ADD [] datetime NULL;
END;
IF COL_LENGTH(N'dbo.MES_接口_生产计划', N'销售要求日期') IS NULL
BEGIN
ALTER TABLE [dbo].[MES_接口_生产计划] ADD [] datetime NULL;
END;

View File

@@ -0,0 +1,17 @@
ALTER VIEW dbo.View_生产订单_MES
AS
SELECT a., a., b., a., a., a., a., b. AS , a., a.,
a., a., a., a., a., a., a., a., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b., b., b., b.,
b.AID AS TaskAID, b., b., b., b., b., b., b., b.,
a. AS , b., a., b., a., b., b., b., a., a.,
a., a., a. AS Expr1, b., dbo.MES_资源主数据.VisCode, a., a., a., b.,
a., a., a., a., b., a., dbo._零件图纸.worker, b., b., a.,
a., a., a., a.
FROM dbo.MES_接口_生产计划_生产任务 AS b LEFT OUTER JOIN
dbo._零件图纸 ON b. = dbo._零件图纸.num LEFT OUTER JOIN
dbo.MES_资源主数据 ON b. = dbo.MES_资源主数据.Name RIGHT OUTER JOIN
dbo.MES_接口_生产计划 AS a ON b. = a.
WHERE (b. = 'pit_Resource') AND (a. IS NULL)

View File

@@ -0,0 +1,17 @@
CREATE VIEW dbo.View_生产订单_MES
AS
SELECT a., a., b., a., a., a., a., b. AS , a., a.,
a., a., a., a., a., a., a., a., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b.,
b., b., b., b., b., b., b., b., b., b., b., b., b., b.,
b.AID AS TaskAID, b., b., b., b., b., b., b., b.,
a. AS , b., a., b., a., b., b., b., a., a.,
a., a., a. AS Expr1, b., dbo.MES_资源主数据.VisCode, a., a., a., b.,
a., a., a., a., b., a., dbo._零件图纸.worker, b., b., a.,
a., a.
FROM dbo.MES_接口_生产计划_生产任务 AS b LEFT OUTER JOIN
dbo._零件图纸 ON b. = dbo._零件图纸.num LEFT OUTER JOIN
dbo.MES_资源主数据 ON b. = dbo.MES_资源主数据.Name RIGHT OUTER JOIN
dbo.MES_接口_生产计划 AS a ON b. = a.
WHERE (b. = 'pit_Resource') AND (a. IS NULL)

View File

@@ -0,0 +1,30 @@
CREATE OR ALTER PROCEDURE [dbo].[_可执行任务数]
AS
BEGIN
SET NOCOUNT ON;
;WITH base AS (
SELECT
CASE WHEN LIKE '%系统%' THEN 1 ELSE 0 END AS ,
ISNULL(, 0) AS ,
,
ISNULL(,
CASE
WHEN LIKE '%系统%' THEN DATEADD(DAY, 3, )
ELSE DATEADD(DAY, 3, )
END
) AS
FROM [dbo].[View_生产订单_MES]
WHERE [] = 'pit_Resource'
AND [] LIKE '%装配%'
AND ISNULL(, 0) < 4
AND [] NOT LIKE '%软管总成%'
AND [] NOT LIKE '%发货部件%'
AND [] <> ''
)
SELECT
SUM(CASE WHEN = 0 AND = 1 THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN = 1 AND IS NOT NULL THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN CAST( AS date) < CAST(GETDATE() AS date) THEN 1 ELSE 0 END) AS
FROM base;
END;

View File

@@ -0,0 +1,21 @@
CREATE OR ALTER PROCEDURE [dbo].[_可执行任务数]
AS
BEGIN
SET NOCOUNT ON;
SELECT
SUM(CASE WHEN NOT LIKE '%系统%' AND ISNULL(, 0) = 1 THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN LIKE '%系统%' AND IS NOT NULL THEN 1 ELSE 0 END) AS ,
SUM(CASE
WHEN NOT LIKE '%系统%' AND ISNULL(, 0) = 1 THEN 1
WHEN LIKE '%系统%' AND IS NOT NULL THEN 1
ELSE 0
END) AS
FROM [dbo].[View_生产订单_MES]
WHERE [] = 'pit_Resource'
AND [] LIKE '%装配%'
AND ISNULL(, 0) < 4
AND [] NOT LIKE '%软管总成%'
AND [] NOT LIKE '%发货部件%'
AND [] <> '';
END;

View File

@@ -0,0 +1,21 @@
CREATE PROCEDURE [dbo].[_可执行任务数]
AS
BEGIN
SET NOCOUNT ON;
SELECT
SUM(CASE WHEN NOT LIKE '%系统%' AND ISNULL(, 0) = 1 THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN LIKE '%系统%' AND IS NOT NULL THEN 1 ELSE 0 END) AS ,
SUM(CASE
WHEN NOT LIKE '%系统%' AND ISNULL(, 0) = 1 THEN 1
WHEN LIKE '%系统%' AND IS NOT NULL THEN 1
ELSE 0
END) AS
FROM [dbo].[View_生产订单_MES]
WHERE [] = 'pit_Resource'
AND [] LIKE '%装配%'
AND ISNULL(, 0) < 4
AND [] NOT LIKE '%软管总成%'
AND [] NOT LIKE '%发货部件%'
AND [] <> '';
END;

View File

@@ -0,0 +1,21 @@
CREATE OR ALTER PROCEDURE [dbo].[_可执行任务数]
AS
BEGIN
SET NOCOUNT ON;
SELECT
SUM(CASE WHEN NOT LIKE '%系统%' AND IS NOT NULL THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN LIKE '%系统%' AND IS NOT NULL THEN 1 ELSE 0 END) AS ,
SUM(CASE
WHEN NOT LIKE '%系统%' AND IS NOT NULL THEN 1
WHEN LIKE '%系统%' AND IS NOT NULL THEN 1
ELSE 0
END) AS
FROM [dbo].[View_生产订单_MES]
WHERE [] = 'pit_Resource'
AND [] LIKE '%装配%'
AND ISNULL(, 0) < 4
AND [] NOT LIKE '%软管总成%'
AND [] NOT LIKE '%发货部件%'
AND [] <> '';
END;

View File

@@ -0,0 +1,129 @@
ALTER PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,ISNULL(预计送检日期, DATEADD(DAY, 3, 钣金预达时间)) as 预计送检日期,销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
ALTER PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
ALTER PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,ISNULL(预计送检日期, DATEADD(DAY, 3, 钣金预达时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,133 @@
ALTER PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,ISNULL(预计送检日期, DATEADD(DAY, 3, 钣金预达时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join (
SELECT 项目号, 物料号, MIN(交货日期理论齐套日期) as 交货日期理论齐套日期
FROM SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2
GROUP BY 项目号, 物料号
) s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,98 @@
CREATE PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(4000)
declare @selectStrWhere nvarchar(4000)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,ISNULL(预计送检日期, DATEADD(DAY, 3, 钣金预达时间)) as 预计送检日期,销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[_系统类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,钣金预达时间,ISNULL(预计送检日期, DATEADD(DAY, 3, 钣金预达时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END,
钣金预达时间,v.[合同号] '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,213 @@
ALTER PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), v.销售要求日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
ALTER PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), v.销售要求日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
ALTER PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,217 @@
ALTER PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN (
SELECT 项目号, 物料号, MIN(交货日期理论齐套日期) as 交货日期理论齐套日期
FROM SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2
GROUP BY 项目号, 物料号
) s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
CREATE PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), DATEADD(DAY, 3, CONVERT(date, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), s.交货日期理论齐套日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
CREATE PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), v.销售要求日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
CREATE PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), v.销售要求日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
CREATE PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.钣金预达时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,213 @@
CREATE PROCEDURE [dbo].[_系统类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '系统类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*18 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*8 AS ,
256*12 AS ,
256*18 AS ,
256*12 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.钣金预达时间, 120) AS 钣金预达时间,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
[二次派工] AS 二次派工,
CONVERT(varchar(10), DATEADD(DAY, 3, CONVERT(date, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), s.交货日期理论齐套日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 钣金预达时间 IS NULL THEN 1 ELSE 0 END, 钣金预达时间, v.计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,40 @@
CREATE OR ALTER PROCEDURE [dbo].[_系统类装配任务_修改预计送检日期]
@editstr nvarchar(100),
@ int=0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @whereStr nvarchar(max)=' where 1=1 ';
DECLARE @updateStr nvarchar(max)='update [MES_接口_生产计划] set ';
DECLARE @selStr nvarchar(max)='';
IF(@>0) SET @whereStr=@whereStr + ' and [订单编号]='+CONVERT(varchar(10),@);
IF(@editstr<>'') SET @updateStr = @updateStr + @editstr;
SET @selStr=@updateStr+@whereStr;
PRINT @selStr;
EXEC sp_executesql @selStr;
SELECT '1' AS result;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[_系统类装配任务_修改销售要求日期]
@editstr nvarchar(100),
@ int=0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @whereStr nvarchar(max)=' where 1=1 ';
DECLARE @updateStr nvarchar(max)='update [MES_接口_生产计划] set ';
DECLARE @selStr nvarchar(max)='';
IF(@>0) SET @whereStr=@whereStr + ' and [订单编号]='+CONVERT(varchar(10),@);
IF(@editstr<>'') SET @updateStr = @updateStr + @editstr;
SET @selStr=@updateStr+@whereStr;
PRINT @selStr;
EXEC sp_executesql @selStr;
SELECT '1' AS result;
END;

View File

@@ -0,0 +1,26 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
create PROCEDURE [dbo].[_系统类装配任务_修改钣金预达时间]
@editstr nvarchar(50),
@ int=0
AS
declare @whereStr nvarchar(max)=' where 1=1 '
declare @updateStr nvarchar(max)='update [MES_接口_生产计划] set '
declare @selStr nvarchar(max)=''
-- update [MES_接口_生产计划_生产任务] set [计划数量] = @未指派数量_剩余 where 订单编号=@订单号 and 订单行号=@订单行号 and 订单拆分内码<>@订单拆分内码 and isnull(派工状态,0)=0
if(@>0)set @whereStr=@whereStr + ' and [订单编号]='+Convert(VARCHAR(10),@)
if(@editstr<>'')set @updateStr = @updateStr + @editstr
set @selStr=@updateStr+@whereStr
print @selStr
EXEC sp_executesql @selStr

View File

@@ -0,0 +1,102 @@
ALTER PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
ALTER PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,133 @@
ALTER PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,ISNULL(预计送检日期, DATEADD(DAY, 3, 齐套时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join (
SELECT 项目号, 物料号, MIN(交货日期理论齐套日期) as 交货日期理论齐套日期
FROM SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2
GROUP BY 项目号, 物料号
) s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
ALTER PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,ISNULL(预计送检日期, DATEADD(DAY, 3, 齐套时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,98 @@
CREATE PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(4000)
declare @selectStrWhere nvarchar(4000)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,102 @@
CREATE PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,ISNULL(预计送检日期, DATEADD(DAY, 3, 齐套时间)) as 预计送检日期,ISNULL(销售要求日期, s.交货日期理论齐套日期) as 销售要求日期,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,129 @@
CREATE PROCEDURE [dbo].[_阀类任务查询]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
declare @selectStr nvarchar(max)
declare @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT [计划数量订单],isnull(开工时间,0) as 开工时间,isnull(进度,0) as 进度,[TaskAID],v.[合同号],v.[订单编号] as 订单号,
[订单行号],[订单拆分内码] as 拆分内码,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[计划完成] as 要求完工日期,[工序名称],完成数量,v.计划号,收料数量,外协分组,v.任务状态,v.齐套时间,v.派工时间,v.齐套,v.要求发货日期,
case when [加急状态]=1 then ''加急'' else '''' end as 加急状态,性质,isnull(总工时,0) as 总工时,[占用情况]
,[排产状态],[工序计划数量],指派对象编号,指派对象,TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS VARCHAR(30)))) AS 指派数量,计划开始时间,计划完成时间,最晚开始时间,
[派工状态],[外协通知],[优先级],[未完成说明],[派工特殊说明],[最后编辑人],[最后编辑时间],[二次派工],s.交货日期理论齐套日期 as 交货日期,
case when zj.计划号 is not null then '''' else '''' end as 终检,ISNULL(g.标准工时, 0) as 标准工时,
ISNULL(zp.装配工时, 0) as 任务装配工时,
ISNULL(zj1.质检工时, 0) as 任务质检工时,
ISNULL(htzp.合同装配工时, 0) as 合同装配工时,
ISNULL(htzj.合同质检工时, 0) as 合同质检工时,
ISNULL(zp.装配工序说明, '''') as 装配工序说明,
ISNULL(zj1.质检工序说明, '''') as 质检工序说明,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') as 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') as 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') as 质检进行中 FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT DISTINCT 计划号
FROM dbo.YL_质量检验_质检记录
WHERE 质检类型 = ''终检''
) zj ON v.[订单编号] = zj.计划号
LEFT JOIN [dbo].[车间生产管理工艺_零件生产工艺_工艺库] g -- 新增LEFT JOIN
ON v.[订单编号] = g.订单编号
AND v.[订单行号] = g.工艺顺序
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 装配工时,max(gs.工序说明) as 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) as 质检工时,max(gs.工序说明) as 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
left join SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
on v.合同号 = s.项目号 and v.物料编号 = s.物料号'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and v.[合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间,计划开始时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,210 @@
ALTER PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '阀类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*12 AS ,
256*18 AS ,
256*12 AS ,
256*8 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
[二次派工] AS 二次派工,
CONVERT(varchar(10), DATEADD(DAY, 3, CONVERT(date, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), s.交货日期理论齐套日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END, 齐套时间, 计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,214 @@
ALTER PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '阀类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*12 AS ,
256*18 AS ,
256*12 AS ,
256*8 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN (
SELECT 项目号, 物料号, MIN(交货日期理论齐套日期) as 交货日期理论齐套日期
FROM SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2
GROUP BY 项目号, 物料号
) s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END, 齐套时间, 计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,210 @@
ALTER PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '阀类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*12 AS ,
256*18 AS ,
256*12 AS ,
256*8 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END, 齐套时间, 计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,65 @@
CREATE PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
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*20 AS , 256*10 AS , 256*10 AS ,
256*10 AS , 256*40 AS , 256*20 AS , 256*10 AS , 256*10 AS , 256*20 AS , 256*20 AS ,
256*20 AS
-- 是否计算列
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
-- 导出数据:每行都填满完整信息
declare @selectStr nvarchar(4000)
declare @selectStrWhere nvarchar(4000)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4'
if(@='自制件') --
set @selectStr='
SELECT v.齐套时间,计划开始时间,v.派工时间,v.齐套,[合同号],v.[订单编号] as 订单号,[物料编号] as 产品编码,[物料描述] as 产品名称,TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS VARCHAR(30)))) AS 计划数量,
[二次派工],DATEADD(DAY, 3, CONVERT(DATE, v.齐套时间)),1,要求发货日期
FROM [View_生产订单_MES] v'
if(@>0)set @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+Convert(VARCHAR(10),@)
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%'''
if(@ = '不含')set @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%'''
if(@<>'')set @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+''''
if(@1 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+''''
if(@2 <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+''''
if(@ <>'')set @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+''''
if(@='未完成')set @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0'
else if(@='已完成')set @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1'
if(@='自制件') set @selectStrWhere=@selectStrWhere + ' and [不装配] <> '''''
if(@='装配件') set @selectStrWhere=@selectStrWhere + ' and [不装配] = '''''
if(@<>'全部') set @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))'
set @selectStrWhere = @selectStrWhere+ 'ORDER BY
CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END,
齐套时间 '
set @selectStr=@selectStr+@selectStrWhere
print @selectStr
EXEC sp_executesql @selectStr
END

View File

@@ -0,0 +1,210 @@
CREATE PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '阀类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*12 AS ,
256*18 AS ,
256*12 AS ,
256*8 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
[二次派工] AS 二次派工,
CONVERT(varchar(10), ISNULL(v.预计送检日期, DATEADD(DAY, 3, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), ISNULL(v.销售要求日期, s.交货日期理论齐套日期), 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 3600.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 3600.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 3600.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 3600.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END, 齐套时间, 计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,210 @@
CREATE PROCEDURE [dbo].[_阀类任务查询_导出]
@ int=0,
@ nvarchar(50)='', --
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@1 nvarchar(50)='',
@2 nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='',
@ nvarchar(50)='全部' , --
@ nvarchar(50)='全部',
@ nvarchar(50)='不含'
AS
BEGIN
SET NOCOUNT ON;
SELECT '阀类任务_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT 256*12 AS ,
256*18 AS ,
256*12 AS ,
256*8 AS ,
256*14 AS ,
256*10 AS ,
256*24 AS ,
256*24 AS ,
256*10 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*40 AS ,
256*40 AS ,
256*40 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*14 AS ,
256*24 AS ,
256*24 AS ,
256*14 AS ,
256*12 AS ,
256*10 AS ,
256*18 AS ,
256*12 AS ,
256*10 AS ,
256*20 AS ,
256*20 AS ,
256*14 AS ,
256*14 AS ,
256*20 AS ;
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 ,
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 ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ,
0 AS ;
DECLARE @selectStr nvarchar(max);
DECLARE @selectStrWhere nvarchar(max)=' where [物料类型]=''pit_Resource'' and [自制件属性] like ''%装配%'' and 物料描述 not like ''%系统%'' and isnull(任务状态,0)<4';
IF(@='自制件')
SET @selectStr='
SELECT
CONVERT(varchar(10), v.齐套时间, 120) AS 发料齐套,
CONVERT(varchar(10), v.计划开始时间, 120) AS 计划开始,
CONVERT(varchar(10), v.派工时间, 120) AS 派工时间,
CASE WHEN v.齐套 = 1 THEN '''' ELSE '''' END AS 齐套,
v.[合同号] AS 销售订单,
v.[订单编号] AS 生产订单,
v.[物料编号] AS 物料编码,
v.[物料描述] AS 物料名称,
TRIM(''.'' FROM TRIM(''0'' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数,
[二次派工] AS 二次派工,
CONVERT(varchar(10), DATEADD(DAY, 3, CONVERT(date, v.齐套时间)), 120) AS 预计送检日期,
CONVERT(varchar(10), s.交货日期理论齐套日期, 120) AS 销售要求日期,
CONVERT(varchar(10), v.要求发货日期, 120) AS 发货要求日期,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), lc.流程描述), N'','') WITHIN GROUP (ORDER BY lc.流程ID)
FROM [YL_MESDB].[dbo].[流程表] lc
WHERE lc.已关联计划号 = v.[订单编号]
), '''') AS 异常报警信息,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''装配''
) jxz
), '''') AS 装配进行中,
ISNULL((
SELECT STRING_AGG(CONVERT(nvarchar(max), jxz.UserName + '': '' + CONVERT(varchar(19), jxz.StartTime, 120)), N'','') WITHIN GROUP (ORDER BY jxz.StartTime DESC)
FROM (
SELECT DISTINCT t.操作人 AS UserName, t.开始时间 AS StartTime
FROM [dbo].[YL_加工中心_操作记录表] t
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] pt ON t.TaskAID = pt.AID
INNER JOIN [YL_MESDB].[dbo].[登录基础数据_人员信息] ry ON t.操作人 = ry.Personnel_Name
WHERE t.操作类别 = ''开始加工''
AND t.结束时间 IS NULL
AND t.操作数值 IS NOT NULL
AND pt.订单编号 = v.[订单编号]
AND ry.班组 = ''质检''
) jxz
), '''') AS 质检进行中,
CAST(ISNULL(zp.装配工时, 0) / 60.0 AS decimal(18,2)) AS 任务装配工时,
CAST(ISNULL(zj1.质检工时, 0) / 60.0 AS decimal(18,2)) AS 任务质检工时,
CAST(ISNULL(htzp.合同装配工时, 0) / 60.0 AS decimal(18,2)) AS 合同装配工时,
CAST(ISNULL(htzj.合同质检工时, 0) / 60.0 AS decimal(18,2)) AS 合同质检工时,
ISNULL(zp.装配工序说明, '''') AS 装配工序说明,
ISNULL(zj1.质检工序说明, '''') AS 质检工序说明,
CONVERT(varchar(10), [计划完成], 120) AS 要求完工日期,
[工序名称] AS 工序名称,
v.计划号 AS 计划号,
指派对象 AS 指派对象,
TRIM(''.'' FROM TRIM(''0'' FROM CAST([指派数量] AS varchar(30)))) AS 指派数量,
[优先级] AS 优先级,
[未完成说明] AS 未完成说明,
[派工特殊说明] AS 派工特殊备注,
[占用情况] AS 占用情况,
[最后编辑人] AS 最后编辑人,
CONVERT(varchar(19), [最后编辑时间], 120) AS 最后编辑时间
FROM [View_生产订单_MES] v
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 装配工时, MAX(gs.工序说明) AS 装配工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.订单号
) zp ON v.[订单编号] = zp.订单号
LEFT JOIN (
SELECT gs.订单号, SUM(gs.总时长) AS 质检工时, MAX(gs.工序说明) AS 质检工序说明
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.订单号
) zj1 ON v.[订单编号] = zj1.订单号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同装配工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''装配''
GROUP BY gs.合同号
) htzp ON v.[合同号] = htzp.合同号
LEFT JOIN (
SELECT gs.合同号, SUM(gs.总时长) AS 合同质检工时
FROM [dbo].[View_生产工时视图] gs
INNER JOIN [dbo].[登录基础数据_人员信息] ry ON gs.操作人 = ry.Personnel_Name
WHERE ry.班组 = ''质检''
GROUP BY gs.合同号
) htzj ON v.[合同号] = htzj.合同号
LEFT JOIN SAP.SBO_YL.dbo.UBT_MES_ORDROPEN2 s
ON v.合同号 = s.项目号 AND v.物料编号 = s.物料号';
IF(@>0) SET @selectStrWhere=@selectStrWhere + ' and v.[订单编号]='+CONVERT(varchar(10),@);
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [合同号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料编号] like ''%'+@+'%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] like ''%'+@+'%''';
IF(@ = '不含') SET @selectStrWhere=@selectStrWhere + ' and [物料描述] not like ''%软管总成%'' and [物料描述] not like ''%发货部件%''';
IF(@<>'') SET @selectStrWhere=@selectStrWhere + ' and [工序名称] = '''+@+'''';
IF(@1 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] >= '''+@1+'''';
IF(@2 <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成] <= '''+@2+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划开始时间] >= '''+@+'''';
IF(@ <>'') SET @selectStrWhere=@selectStrWhere + ' and [计划完成时间] <= '''+@+'''';
IF(@='未完成') SET @selectStrWhere=@selectStrWhere + ' and isnull([排产状态],0) = 0';
ELSE IF(@='已完成') SET @selectStrWhere=@selectStrWhere + ' and [排产状态] = 1';
IF(@='自制件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] <> ''''';
IF(@='装配件') SET @selectStrWhere=@selectStrWhere + ' and [不装配] = ''''';
IF(@<>'全部') SET @selectStrWhere=@selectStrWhere + ' and [指派对象] in (SELECT value FROM STRING_SPLIT('''+@+''', '',''))';
SET @selectStrWhere = @selectStrWhere + ' ORDER BY CASE WHEN 齐套时间 IS NULL THEN 1 ELSE 0 END, 齐套时间, 计划开始时间';
SET @selectStr=@selectStr+@selectStrWhere;
PRINT @selectStr;
EXEC sp_executesql @selectStr;
END

View File

@@ -0,0 +1,40 @@
CREATE OR ALTER PROCEDURE [dbo].[_阀类装配任务_修改预计送检日期]
@editstr nvarchar(100),
@ int=0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @whereStr nvarchar(max)=' where 1=1 ';
DECLARE @updateStr nvarchar(max)='update [MES_接口_生产计划] set ';
DECLARE @selStr nvarchar(max)='';
IF(@>0) SET @whereStr=@whereStr + ' and [订单编号]='+CONVERT(varchar(10),@);
IF(@editstr<>'') SET @updateStr = @updateStr + @editstr;
SET @selStr=@updateStr+@whereStr;
PRINT @selStr;
EXEC sp_executesql @selStr;
SELECT '1' AS result;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[_阀类装配任务_修改销售要求日期]
@editstr nvarchar(100),
@ int=0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @whereStr nvarchar(max)=' where 1=1 ';
DECLARE @updateStr nvarchar(max)='update [MES_接口_生产计划] set ';
DECLARE @selStr nvarchar(max)='';
IF(@>0) SET @whereStr=@whereStr + ' and [订单编号]='+CONVERT(varchar(10),@);
IF(@editstr<>'') SET @updateStr = @updateStr + @editstr;
SET @selStr=@updateStr+@whereStr;
PRINT @selStr;
EXEC sp_executesql @selStr;
SELECT '1' AS result;
END;

View File

@@ -0,0 +1,206 @@
param(
[Parameter(Mandatory = $true)]
[string]$PlanMarkdown,
[Parameter(Mandatory = $true)]
[string]$SourceMarkdown,
[Parameter(Mandatory = $true)]
[string]$OutputDocx
)
$ErrorActionPreference = 'Stop'
function Escape-XmlText {
param([AllowNull()][string]$Text)
if ($null -eq $Text) { return '' }
return [System.Security.SecurityElement]::Escape($Text)
}
function Add-Paragraph {
param(
[System.Collections.Generic.List[string]]$Parts,
[string]$Text,
[string]$Style = $null
)
$styleXml = ''
if ($Style) {
$styleXml = "<w:pPr><w:pStyle w:val=`"$Style`"/></w:pPr>"
}
$Parts.Add("<w:p>$styleXml<w:r><w:t xml:space=`"preserve`">$(Escape-XmlText $Text)</w:t></w:r></w:p>")
}
function Add-Table {
param(
[System.Collections.Generic.List[string]]$Parts,
[string[]]$Headers,
[object[]]$Rows
)
$tbl = New-Object System.Text.StringBuilder
[void]$tbl.Append('<w:tbl>')
[void]$tbl.Append('<w:tblPr><w:tblStyle w:val="TableGrid"/><w:tblW w:w="0" w:type="auto"/><w:tblBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tblBorders></w:tblPr>')
[void]$tbl.Append('<w:tr>')
foreach ($h in $Headers) {
[void]$tbl.Append('<w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="D9EAF7"/></w:tcPr><w:p><w:r><w:rPr><w:b/></w:rPr><w:t xml:space="preserve">')
[void]$tbl.Append((Escape-XmlText $h))
[void]$tbl.Append('</w:t></w:r></w:p></w:tc>')
}
[void]$tbl.Append('</w:tr>')
foreach ($row in $Rows) {
[void]$tbl.Append('<w:tr>')
foreach ($cell in $row) {
[void]$tbl.Append('<w:tc><w:p><w:r><w:t xml:space="preserve">')
[void]$tbl.Append((Escape-XmlText ([string]$cell)))
[void]$tbl.Append('</w:t></w:r></w:p></w:tc>')
}
[void]$tbl.Append('</w:tr>')
}
[void]$tbl.Append('</w:tbl>')
$Parts.Add($tbl.ToString())
}
function Flush-TableBuffer {
param(
[System.Collections.Generic.List[string]]$Parts,
[System.Collections.Generic.List[string]]$Buffer
)
if ($Buffer.Count -lt 2) {
foreach ($line in $Buffer) {
Add-Paragraph -Parts $Parts -Text $line
}
$Buffer.Clear()
return
}
$header = $Buffer[0].Trim('|').Split('|') | ForEach-Object { $_.Trim() }
$rows = @()
for ($i = 2; $i -lt $Buffer.Count; $i++) {
$rows += ,($Buffer[$i].Trim('|').Split('|') | ForEach-Object { $_.Trim() })
}
Add-Table -Parts $Parts -Headers $header -Rows $rows
$Buffer.Clear()
}
function Add-MarkdownContent {
param(
[System.Collections.Generic.List[string]]$Parts,
[string]$MarkdownPath
)
$lines = [System.IO.File]::ReadAllLines($MarkdownPath, [System.Text.Encoding]::UTF8)
$tableBuffer = New-Object System.Collections.Generic.List[string]
$inCode = $false
foreach ($line in $lines) {
if ($line.TrimStart().StartsWith('```')) {
if ($tableBuffer.Count -gt 0) { Flush-TableBuffer -Parts $Parts -Buffer $tableBuffer }
$inCode = -not $inCode
Add-Paragraph -Parts $Parts -Text $line -Style 'Code'
continue
}
if ($inCode) {
Add-Paragraph -Parts $Parts -Text $line -Style 'Code'
continue
}
if ($line.TrimStart().StartsWith('|') -and $line.TrimEnd().EndsWith('|')) {
$tableBuffer.Add($line)
continue
}
if ($tableBuffer.Count -gt 0) { Flush-TableBuffer -Parts $Parts -Buffer $tableBuffer }
if ($line.StartsWith('### ')) {
Add-Paragraph -Parts $Parts -Text $line.Substring(4) -Style 'Heading3'
} elseif ($line.StartsWith('## ')) {
Add-Paragraph -Parts $Parts -Text $line.Substring(3) -Style 'Heading2'
} elseif ($line.StartsWith('# ')) {
Add-Paragraph -Parts $Parts -Text $line.Substring(2) -Style 'Heading1'
} elseif ($line.Trim().StartsWith('- ')) {
Add-Paragraph -Parts $Parts -Text ('· ' + $line.Trim().Substring(2))
} elseif ([string]::IsNullOrWhiteSpace($line)) {
Add-Paragraph -Parts $Parts -Text ''
} else {
Add-Paragraph -Parts $Parts -Text $line
}
}
if ($tableBuffer.Count -gt 0) { Flush-TableBuffer -Parts $Parts -Buffer $tableBuffer }
}
if (-not (Test-Path -LiteralPath $PlanMarkdown)) { throw "Plan markdown not found: $PlanMarkdown" }
if (-not (Test-Path -LiteralPath $SourceMarkdown)) { throw "Source markdown not found: $SourceMarkdown" }
$outputDir = Split-Path -Path $OutputDocx -Parent
if (-not (Test-Path -LiteralPath $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
$tempRoot = Join-Path $env:TEMP ("docx_" + [Guid]::NewGuid().ToString('N'))
$wordDir = Join-Path $tempRoot 'word'
$relsDir = Join-Path $tempRoot '_rels'
$wordRelsDir = Join-Path $wordDir '_rels'
New-Item -ItemType Directory -Path $wordDir, $relsDir, $wordRelsDir | Out-Null
$parts = New-Object System.Collections.Generic.List[string]
Add-MarkdownContent -Parts $parts -MarkdownPath $PlanMarkdown
Add-MarkdownContent -Parts $parts -MarkdownPath $SourceMarkdown
$documentXml = @"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
$($parts -join "`n")
<w:sectPr>
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1440" w:right="1080" w:bottom="1440" w:left="1080" w:header="720" w:footer="720" w:gutter="0"/>
</w:sectPr>
</w:body>
</w:document>
"@
$stylesXml = @'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:style w:type="paragraph" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts w:ascii="Microsoft YaHei" w:eastAsia="Microsoft YaHei" w:hAnsi="Microsoft YaHei"/><w:sz w:val="21"/></w:rPr></w:style>
<w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:before="360" w:after="120"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Microsoft YaHei" w:eastAsia="Microsoft YaHei" w:hAnsi="Microsoft YaHei"/><w:b/><w:sz w:val="30"/></w:rPr></w:style>
<w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:before="280" w:after="100"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Microsoft YaHei" w:eastAsia="Microsoft YaHei" w:hAnsi="Microsoft YaHei"/><w:b/><w:sz w:val="26"/></w:rPr></w:style>
<w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:before="220" w:after="80"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Microsoft YaHei" w:eastAsia="Microsoft YaHei" w:hAnsi="Microsoft YaHei"/><w:b/><w:sz w:val="23"/></w:rPr></w:style>
<w:style w:type="paragraph" w:styleId="Code"><w:name w:val="Code"/><w:basedOn w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts w:ascii="Consolas" w:eastAsia="Microsoft YaHei" w:hAnsi="Consolas"/><w:sz w:val="18"/></w:rPr></w:style>
<w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:uiPriority w:val="59"/><w:tblPr><w:tblBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tblBorders></w:tblPr></w:style>
</w:styles>
'@
$contentTypesXml = @'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
<Default Extension="xml" ContentType="application/xml"/>
<Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
<Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>
</Types>
'@
$relsXml = @'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
</Relationships>
'@
$docRelsXml = @'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
</Relationships>
'@
[System.IO.File]::WriteAllText((Join-Path $tempRoot '[Content_Types].xml'), $contentTypesXml, [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllText((Join-Path $relsDir '.rels'), $relsXml, [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllText((Join-Path $wordDir 'document.xml'), $documentXml, [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllText((Join-Path $wordDir 'styles.xml'), $stylesXml, [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllText((Join-Path $wordRelsDir 'document.xml.rels'), $docRelsXml, [System.Text.Encoding]::UTF8)
if (Test-Path -LiteralPath $OutputDocx) {
Remove-Item -LiteralPath $OutputDocx -Force
}
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory($tempRoot, $OutputDocx)
Remove-Item -LiteralPath $tempRoot -Recurse -Force
Write-Output $OutputDocx

View File

@@ -0,0 +1,101 @@
const fs = require('fs');
const path = require('path');
const file = path.join(process.cwd(), 'MES_Manage_View_V20', '元利项目详细用户使用说明书.md');
const text = fs.readFileSync(file, 'utf8');
const names = {
'404.vue': '404 页面',
PunctualWork: '及时开工异常',
CraftMaintain: '产品结构维护',
Devicedata: '设备采集数据',
DeviceDataHistory: '设备历史数据',
DeviceInformation: '设备信息维护',
DeviceRealData: '设备实时数据',
InstallMakePlan: '装配排产',
InstallMakePlanDo: '装配已排产',
PlannOrderClose: '生产订单关闭',
PlanShell: '计划外壳跟踪',
priorityinstall: '装配优先级调整',
SelfMakePlan: '机加排产',
SelfMakePlando: '机加待排产',
SelfMakePlandone: '机加已排产',
PartDrawing: '零件图纸维护',
PartDrawlook: '零件图纸查看',
ProcedureManagement: '工序维护',
ProcessDrawing: '工艺图纸维护',
ProcessesDevelop: '工艺开发',
ProcessInquiry: '工艺查询',
ProcessProduct: '生产工艺维护',
ProcurementDrawlook: '采购图纸查看',
ProductionOrder: '生产订单',
AbnormalControl: '异常管控',
AssemblePlanTrack: '装配计划跟踪',
AssembleStatus: '装配状态',
AssembleTaskManage: '装配任务管理',
AssembleTasksSum: '装配任务汇总',
AssemblyCenter: '装配中心',
DeviceStatus: '设备状态',
MachiningCenter: '机加中心',
OutsourceMange: '外协管理',
OutsourceSheet: '外协报表',
PersonnelBinding: '人员绑定',
PickingTask: '拣配任务',
ProductionPlanTrack: '生产计划跟踪',
ProductionTaskManage: '生产任务管理',
ProductionTasksSum: '生产任务汇总',
SaleOutsourceMange: '销售外协管理',
ShiftManagement: '班次管理',
Timesheet: '工时报表',
Urgent: '加急任务',
Workhours: '工时查询',
'index - 副本.vue': '工时校验(副本)',
WorkHoursCheck: '工时校验',
WorkhoursEdit: '工时编辑',
'final.vue': '终检',
'firstSpecial.vue': '首检',
'materialReturn.vue': '原材料退库检',
'OtherInbound.vue': '其他入库检',
'processReceive.vue': '序检收检',
'processSpecial.vue': '过程特殊检验',
'purchaseIncoming.vue': '采购入库检',
'salesReturn.vue': '销售退货检',
QualityCenter: '质量中心',
QualityDetails: '质检明细',
'index copy.vue': '质量标准查询(副本)',
QualityStandardQuery: '质量标准查询',
Unqualified: '不合格品处理',
saleorderstatus: '销售订单状态',
MenuManagement: '菜单管理',
OperationLog: '操作日志',
OrgManagement: '组织管理',
PersonnelManagement: '人员管理',
SystemRrolemaintenance: '系统角色维护',
WorkstationManagement: '工位管理',
dashboard: '首页看板',
'AppMain.vue': '内容区域',
'index.js': '布局组件索引',
'Navbar.vue': '顶部导航',
Sidebar: '侧边栏',
'Item.vue': '侧边栏菜单项',
'SidebarItem.vue': '侧边栏菜单节点',
'TagsView.vue': '标签页导航',
'Layout.vue': '系统布局',
'ResizeHandler.js': '窗口自适应',
login: '系统登录'
};
const updated = text.replace(/^### (21\.\d+) (.+)$/gm, (match, num, oldName) => {
const nextName = names[oldName.trim()];
return nextName ? `### ${num} ${nextName}` : match;
});
fs.writeFileSync(file, updated, 'utf8');
const missing = [...text.matchAll(/^### (21\.\d+) (.+)$/gm)]
.map(m => m[2].trim())
.filter(name => !names[name]);
if (missing.length) {
console.log(`missing mappings: ${[...new Set(missing)].join(', ')}`);
}
console.log('chapter 21 titles renamed');

View File

@@ -0,0 +1,573 @@
const fs = require('fs');
const path = require('path');
const repoRoot = process.cwd();
const projectRoot = path.join(repoRoot, 'MES_Manage_View_V20');
const viewsRoot = path.join(projectRoot, 'src', 'views');
const manualPath = path.join(projectRoot, '元利项目详细用户使用说明书.md');
function readText(file) {
const buf = fs.readFileSync(file);
if (buf.length >= 3 && buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf) {
return buf.slice(3).toString('utf8');
}
if (buf.length >= 2 && buf[0] === 0xff && buf[1] === 0xfe) {
return buf.slice(2).toString('utf16le');
}
return buf.toString('utf8');
}
function writeText(file, text) {
fs.writeFileSync(file, text, 'utf8');
}
function walk(dir, out = []) {
if (!fs.existsSync(dir)) return out;
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) walk(full, out);
else if (/\.(vue|js)$/i.test(entry.name)) out.push(full);
}
return out;
}
function rel(file) {
return path.relative(projectRoot, file).replace(/\\/g, '/');
}
function clean(value) {
return (value || '')
.replace(/<!--[\s\S]*?-->/g, ' ')
.replace(/<[^>]+>/g, ' ')
.replace(/\{\{[\s\S]*?\}\}/g, ' ')
.replace(/&nbsp;/g, ' ')
.replace(/\s+/g, ' ')
.trim();
}
function uniq(values) {
const seen = new Set();
const out = [];
for (const value of values) {
const v = String(value || '').trim();
if (!v || seen.has(v)) continue;
seen.add(v);
out.push(v);
}
return out;
}
function stripNoise(values) {
return uniq(values)
.filter(x => x.length <= 42)
.filter(x => !/[{};]/.test(x))
.filter(x => !/^(scope|row|item|index|true|false|null|undefined)$/i.test(x))
.filter(x => !/^\d+$/.test(x));
}
function extractAll(re, text, map) {
const out = [];
let match;
while ((match = re.exec(text))) out.push(map(match));
return out;
}
function attr(attrs, name) {
const m = new RegExp(`${name}="([^"]*)"`).exec(attrs);
return m ? clean(m[1]) : '';
}
function extractTemplate(text) {
const start = text.search(/<template\b[^>]*>/i);
if (start < 0) return text;
const open = /<template\b[^>]*>/i.exec(text.slice(start));
if (!open) return text;
const contentStart = start + open.index + open[0].length;
const scriptStart = text.search(/<script\b/i);
const searchEnd = scriptStart >= 0 ? scriptStart : text.length;
const close = text.lastIndexOf('</template>', searchEnd);
if (close > contentStart) return text.slice(contentStart, close);
return text.slice(contentStart, searchEnd);
}
function extractScript(text) {
const m = /<script\b[^>]*>([\s\S]*?)<\/script>/i.exec(text);
return m ? m[1] : text;
}
function extractPage(file) {
const text = readText(file);
const template = extractTemplate(text);
const script = extractScript(text);
const relative = rel(file);
const parts = relative.split('/');
const module = parts[2] || '根页面';
const name = path.basename(file) === 'index.vue'
? parts[parts.length - 2]
: path.basename(file);
const labels = extractAll(/\blabel="([^"]+)"/g, template, m => clean(m[1]));
const placeholders = extractAll(/\bplaceholder="([^"]+)"/g, template, m => clean(m[1]));
const titles = extractAll(/\btitle="([^"]+)"/g, template, m => clean(m[1]));
const formLabels = extractAll(/<el-form-item\b([^>]*)>/g, template, m => attr(m[1], 'label'));
const tabLabels = extractAll(/<el-tab-pane\b([^>]*)>/g, template, m => attr(m[1], 'label'));
const options = extractAll(/<el-option\b([^>]*)>/g, template, m => attr(m[1], 'label'));
const buttons = extractAll(/<el-button\b([^>]*)>([\s\S]*?)<\/el-button>/g, template, m => {
const textValue = clean(m[2]) || attr(m[1], 'title') || attr(m[1], 'aria-label');
const click = attr(m[1], '@click') || attr(m[1], 'v-on:click');
return textValue ? { text: textValue, click } : null;
})
.filter(Boolean)
.filter(b => b.text.length <= 42)
.filter(b => !/[{};]/.test(b.text));
const tableColumns = extractAll(/<el-table-column\b([^>]*)>/g, template, m => {
const label = attr(m[1], 'label');
const prop = attr(m[1], 'prop');
const type = attr(m[1], 'type');
return label || prop || type ? { label, prop, type } : null;
}).filter(Boolean);
const vModels = extractAll(/\bv-model(?:\.[\w-]+)?="([^"]+)"/g, template, m => clean(m[1]));
const params = extractAll(/\.(?:push|unshift)\s*\(\s*\[\s*['"]([^'"]+)['"]\s*,\s*([^\]\n]+)\]/g, script, m => ({
name: clean(m[1]),
expr: clean(m[2])
}));
const procs = extractAll(/CreateData\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]/g, script, m => ({
type: m[1],
name: clean(m[2])
}));
const sapCalls = extractAll(/\b(getB1|postB1|patchB1|posttm)\s*\(\s*([`'"])([\s\S]*?)\2/g, script, m => ({
method: m[1],
url: clean(m[3]).slice(0, 90)
}));
const dialogs = extractAll(/<el-dialog\b([\s\S]*?)>/g, template, m => {
const title = attr(m[1], 'title') || clean((/:title="([^"]+)"/.exec(m[1]) || [])[1]);
return title;
});
const methods = extractAll(/^\s*([A-Za-z_$\u4e00-\u9fa5][\w$\u4e00-\u9fa5]*)\s*\([^)]*\)\s*\{/gm, script, m => m[1]);
const hasCalendar = /FullCalendar|@fullcalendar|eventDrop|eventResize/.test(text);
const hasPagination = /el-pagination|pageSize|pageCurrent/.test(text);
const hasUpload = /el-upload|上传|upload/i.test(text);
const hasTree = /el-tree|treeData|Tree/.test(text);
return {
file,
relative,
module,
name,
text,
labels: stripNoise(labels),
placeholders: stripNoise(placeholders),
titles: stripNoise(titles),
formLabels: stripNoise(formLabels),
tabLabels: stripNoise(tabLabels),
options: stripNoise(options),
buttons,
tableColumns,
vModels: stripNoise(vModels),
params,
procs,
sapCalls,
dialogs: stripNoise(dialogs),
methods: stripNoise(methods),
hasCalendar,
hasPagination,
hasUpload,
hasTree
};
}
function roleFor(page) {
if (/SystemMaintenance|layout|login|dashboard|404/.test(page.relative)) return '系统管理员/相关用户';
if (/QualityManagement/.test(page.relative)) return '质检员/质量主管';
if (/PlanManagement/.test(page.relative)) return '计划员/生产主管';
if (/ProductionManagement/.test(page.relative)) return '操作工/班组长/生产主管';
if (/ProcessManagement|CraftManagement/.test(page.relative)) return '工艺员/技术人员';
if (/DeviceManagement/.test(page.relative)) return '设备管理员/生产主管';
if (/SaleManagement/.test(page.relative)) return '销售/计划/生产跟单人员';
if (/AnomalousManagement/.test(page.relative)) return '班组长/生产主管/计划员';
return '相关业务人员';
}
function moduleName(page) {
const map = {
AnomalousManagement: '异常管理',
CraftManagement: '产品结构维护',
DeviceManagement: '设备管理',
PlanManagement: '计划排产',
ProcessManagement: '工艺与图纸管理',
ProductionManagement: '生产执行管理',
QualityManagement: '质量管理',
SaleManagement: '销售与交付查询',
SystemMaintenance: '系统维护',
dashboard: '首页与看板',
layout: '布局与导航',
login: '登录',
};
if (page.relative === 'src/views/404.vue') return '错误页';
return map[page.module] || page.module;
}
function purpose(page) {
const p = page.relative;
const rules = [
[/404\.vue$/, '该页面用于路由不存在或无效地址访问时展示 404 提示,帮助用户返回首页或重新选择菜单。'],
[/login/, '该页面是系统登录入口,用户输入工号、密码并选择角色后进入 MES同时提供修改密码功能。'],
[/dashboard/, '该页面是系统首页/看板入口,用户登录后查看系统概览或进入各业务模块。'],
[/PunctualWork/, '该页面用于查看未及时开工、待执行、可执行、已开工和已完成任务,帮助班组长或计划员催办生产开工。'],
[/CraftMaintain/, '该页面用于维护产品结构树支持新增、编辑、删除产品结构节点为工艺、BOM 和生产任务提供层级基础资料。'],
[/DeviceDataHistory/, '该页面用于查询设备历史采集数据,按工位、设备、参数和时间追溯设备运行记录。'],
[/DeviceInformation/, '该页面用于维护设备台账、设备属性、维修/工时/点检相关信息。'],
[/DeviceRealData|Devicedata/, '该页面用于查看设备实时数据或采集缓存数据,判断设备当前运行、报警和参数状态。'],
[/SelfMakePlandone[\\/]/, '该页面用于机加/自制件已排产任务查看和调整,支持计划时间、指派对象、指派数量、最晚开始、二次派工和备注维护。'],
[/SelfMakePlando[\\/]/, '该页面用于机加/自制件待排产任务处理,支持表单排产、日程拖拽调整、部分派工、批量排产、二次派工、原料状态和图纸查看。'],
[/SelfMakePlan[\\/]/, '该页面用于机加/自制件排产前准备,查询生产订单工序任务并维护计划、工位、数量和说明后确认排产。'],
[/InstallMakePlanDo|InstallMakePlan/, '该页面用于装配件排产,维护装配工位、人员、计划开始/完成、优先级、说明,并在排产完成时同步 SAP 或生成相关请求。'],
[/PlanShell/, '该页面用于计划外壳和计划跟踪,集中查看订单计划、齐套、缺料、发货或关闭相关信息。'],
[/PlannOrderClose/, '该页面用于关闭生产订单,用户查询待关闭订单后执行 MES/SAP 关闭动作。'],
[/priorityinstall/, '该页面用于装配计划优先级和日程调整,支持表单和日程方式查看重点任务。'],
[/ProductionOrder/, '该页面用于查询和同步生产订单,把 SAP/ERP 生产订单转成 MES 生产计划与工序任务。'],
[/PartDrawing/, '该页面用于维护零件图纸,支持按物料查询、查看、上传/验证和删除图纸。'],
[/PartDrawlook|ProcurementDrawlook/, '该页面用于按物料查看零件图纸,供生产、采购、外协或质检快速查阅技术文件。'],
[/ProcessDrawing/, '该页面用于维护工艺图纸,支持查询、查看、上传/验证和删除工艺图纸。'],
[/ProcedureManagement/, '该页面用于维护工序/路线阶段主数据,并与 SAP B1 RouteStages 保持一致。'],
[/ProcessInquiry/, '该页面用于查询标准工艺或生产工艺,供排产、生产、质检核对工序路线。'],
[/ProcessProduct|ProcessesDevelop/, '该页面用于维护产品工艺资料、工序路线、参数和图纸关系。'],
[/MachiningCenter/, '该页面是机加生产执行主界面,操作工按工位执行收料、开工、暂停、报工、检验、退库、发料和图纸查看。'],
[/AssemblyCenter/, '该页面是装配生产执行主界面,装配人员按工位执行开工、报工、送检、退库、缺料查询和图纸查看。'],
[/ProductionTaskManage|AssembleTaskManage/, '该页面用于生产/装配任务管理,查询任务、查看工时、维护派工和任务说明。'],
[/ProductionTasksSum|AssembleTasksSum/, '该页面用于生产/装配任务汇总,按订单、人员、工位、状态和时间统计任务执行情况。'],
[/ProductionPlanTrack|AssemblePlanTrack/, '该页面用于跟踪生产/装配计划执行进度,查看计划、完成、延期和异常情况。'],
[/AssembleStatus|DeviceStatus/, '该页面用于查看现场状态,关注工位、设备、任务是否开工、进行中或完成。'],
[/OutsourceMange|SaleOutsourceMange/, '该页面用于外协任务管理,处理外协派工、供应商、发料、收料、质检记录和 SAP 采购请求。'],
[/OutsourceSheet/, '该页面用于外协报表查询和导出,跟踪外协订单、供应商、数量、质检和结算状态。'],
[/PickingTask/, '该页面用于生产领料/拣配任务查询与处理,核对订单物料和库存任务。'],
[/PersonnelBinding/, '该页面用于维护人员与工位绑定关系,控制或提示人员可操作的工位。'],
[/ShiftManagement/, '该页面用于维护班次、班次人员和排班基础数据。'],
[/Timesheet|Workhours$/, '该页面用于查询工时记录,按人员、设备、任务、订单和日期统计工时。'],
[/WorkhoursEdit/, '该页面用于修正或补录工时/报工记录,处理异常工时。'],
[/WorkHoursCheck/, '该页面用于工时校验和 SAP 提交,用户核对报工记录后批量或单条校验并上传相关单据。'],
[/Urgent/, '该页面用于维护加急任务,跟踪加急订单、加急数量和完成情况。'],
[/AbnormalControl/, '该页面用于生产异常管理,查询异常、处理异常、转办、查看进度和关闭异常。'],
[/QualityCenter/, '该页面是质量综合处理中心,集中处理待检、收检、检测明细、不合格和 SAP/WMS 联动。'],
[/QualityDetails/, '该页面用于查询质检明细,按订单、物料、检验类型和时间追溯检测记录。'],
[/QualityStandardQuery/, '该页面用于查询或维护质量检验标准、检测项目、上下限和启用状态。'],
[/Unqualified/, '该页面用于不合格品处理,记录处置方式、责任、原因和处理结果。'],
[/CheckTask[\\/].*purchaseIncoming/, '该页面用于采购/来料检验,质检人员录入来料检验数量、合格数、不合格数和检测明细。'],
[/CheckTask[\\/].*processReceive/, '该页面用于工序收检/序检收检,质检人员接收工序检验任务并录入检验结果。'],
[/CheckTask[\\/].*firstSpecial/, '该页面用于首检或特殊首件检验,录入首件检测结果。'],
[/CheckTask[\\/].*final/, '该页面用于终检任务处理,录入最终检验结果。'],
[/CheckTask[\\/].*materialReturn/, '该页面用于材料退库检验,核对退库物料并录入检验结论。'],
[/CheckTask[\\/].*salesReturn/, '该页面用于销售退货检验,录入退货质检结果。'],
[/CheckTask[\\/].*OtherInbound/, '该页面用于其他入库检验,录入其他入库质检结果。'],
[/CheckTask[\\/].*processSpecial/, '该页面用于过程特殊检验,录入特殊检验项目和结果。'],
[/saleorderstatus/, '该页面用于查询销售订单状态,跟踪销售订单在生产、交付和关闭过程中的状态。'],
[/MenuManagement/, '该页面用于维护系统菜单、按钮权限和路由配置。'],
[/OperationLog/, '该页面用于查询操作日志,追溯用户操作、报工或业务变更记录。'],
[/OrgManagement/, '该页面用于维护组织、部门或组织树基础资料。'],
[/PersonnelManagement/, '该页面用于维护人员账号、部门、角色和启用状态。'],
[/SystemRrolemaintenance/, '该页面用于维护系统角色和角色权限。'],
[/WorkstationManagement/, '该页面用于维护工位/资源主数据,并同步 SAP B1 Resources。'],
[/layout|Sidebar|Navbar|TagsView|AppMain|ResizeHandler/, '该文件属于系统布局和导航组件,用户通过它切换菜单、标签页、折叠菜单或退出登录,不维护具体业务单据。'],
];
const found = rules.find(([re]) => re.test(p));
if (found) return found[1];
return '该页面为业务页面,用户按查询条件筛选数据,在列表或弹窗中查看明细,并按页面按钮完成维护、提交或状态更新。';
}
function actionVerb(button) {
const text = button.text;
if (/查询|搜索|全部|待执行|可执行|已开工|已完成|未完成/.test(text)) return '查询/筛选';
if (/新增|添加|新建|创建/.test(text)) return '新增';
if (/编辑|修改|保存|确定|确 定/.test(text)) return '编辑/保存';
if (/删除|移除/.test(text)) return '删除';
if (/导出|打印/.test(text)) return '导出/打印';
if (/查看|详情|图纸|明细|进度/.test(text)) return '查看';
if (/排产|派工|开工|报工|送检|收料|发料|退库|关闭|提交|处理|转办|完结|校验|上传/.test(text)) return '业务提交';
if (/取消|关闭|返回/.test(text)) return '取消/关闭';
return '操作';
}
function fieldName(value) {
return value
.replace(/^.*\./, '')
.replace(/\[[^\]]+\]/g, '')
.replace(/Form$/, '')
.replace(/Time$/, '时间')
.replace(/No$/, '编号');
}
function queryItems(page) {
const fromParams = page.params
.filter(p => !/任务列表|操作人|最后编辑人|editstr|personnel|TaskAID/.test(p.name))
.map(p => p.name);
const fromModels = page.vModels
.filter(v => !/^scope\.row|^item\.|^row\.|multipleSelection|loading|dialog|Visible|activeTab/.test(v))
.map(fieldName);
const fromPlaceholders = page.placeholders
.map(x => x.replace(/^请输入/, '').replace(/^请选择/, '').replace(/起始|结束/g, '').trim())
.filter(Boolean);
return stripNoise([...fromParams, ...fromModels, ...fromPlaceholders]).slice(0, 22);
}
function tableItems(page) {
return stripNoise(page.tableColumns.map(c => c.label || c.prop || c.type)).slice(0, 34);
}
function buttonItems(page) {
return stripNoise(page.buttons.map(b => b.text)).slice(0, 30);
}
function procItems(page) {
return uniq(page.procs.map(p => p.name)).slice(0, 20);
}
function sapItems(page) {
return uniq(page.sapCalls.map(s => `${s.method} ${s.url}`)).slice(0, 12);
}
function lineList(values, fallback) {
if (!values.length) return `- ${fallback}`;
return values.map(v => `- \`${v}\``).join('\n');
}
function detailedSteps(page) {
const steps = [];
const queries = queryItems(page);
const tabs = page.tabLabels;
const columns = tableItems(page);
const buttons = page.buttons.slice(0, 24);
const dialogs = page.dialogs;
const forms = page.formLabels;
const procs = procItems(page);
const pathText = page.relative;
steps.push(`从左侧菜单进入该页,确认页面标题、当前账号和业务角色正确。`);
if (tabs.length) {
steps.push(`先查看页签:${tabs.map(x => `\`${x}\``).join('、')};需要表格处理时进入表单/列表页签,需要看时间排布时进入日程/看板页签。`);
}
if (queries.length) {
steps.push(`在查询区按需要填写筛选条件:${queries.slice(0, 12).map(x => `\`${x}\``).join('、')}`);
if (queries.length > 12) steps.push(`如果仍查不到数据,继续补充条件:${queries.slice(12, 22).map(x => `\`${x}\``).join('、')},或清空过窄条件后重新查询。`);
} else {
steps.push(`该页没有识别到固定查询区,按页面提示直接查看信息或使用菜单/按钮进入下一步。`);
}
const queryButtons = buttons.filter(b => actionVerb(b) === '查询/筛选');
if (queryButtons.length) {
steps.push(`点击 ${stripNoise(queryButtons.map(b => b.text)).slice(0, 8).map(x => `\`${x}\``).join('、')} 刷新列表;状态按钮会切换任务范围。`);
} else if (buttons.length) {
steps.push(`点击页面上的查询或刷新类按钮获取最新数据;如果页面自动加载,则先核对默认列表是否符合当前业务范围。`);
}
if (page.hasPagination) {
steps.push(`列表较多时使用分页区切换页码或调整每页条数,避免只检查第一页。`);
}
if (columns.length) {
steps.push(`查询后先核对关键列:${columns.slice(0, 12).map(x => `\`${x}\``).join('、')}`);
if (columns.length > 12) steps.push(`继续横向滚动或展开表格,核对:${columns.slice(12, 26).map(x => `\`${x}\``).join('、')}`);
}
if (page.hasTree) {
steps.push(`如果页面左侧或上方有树形结构,先选中组织、物料、菜单或产品节点,再查看右侧列表;新增子节点前确认父节点选中正确。`);
}
const nonQueryButtons = buttons.filter(b => !['查询/筛选', '取消/关闭'].includes(actionVerb(b)));
for (const button of nonQueryButtons.slice(0, 10)) {
const verb = actionVerb(button);
if (verb === '新增') steps.push(`需要新增时点击 \`${button.text}\`,在弹窗中逐项填写必填字段,确认编码、名称、状态等基础信息后保存。`);
else if (verb === '编辑/保存') steps.push(`需要维护已有记录时先选中目标行,再点击或触发表格内 \`${button.text}\`,修改字段后保存并等待成功提示。`);
else if (verb === '删除') steps.push(`需要删除时先确认该记录没有正在使用的业务数据,再点击 \`${button.text}\`,按确认提示执行。`);
else if (verb === '导出/打印') steps.push(`需要留存或流转时点击 \`${button.text}\`,导出/打印前确认当前查询条件和选中记录正确。`);
else if (verb === '查看') steps.push(`需要查看明细时点击 \`${button.text}\`,在弹窗或新区域核对图纸、明细、进度、记录或关联单据。`);
else if (verb === '业务提交') steps.push(`需要推进业务时先选中目标行并核对数量、时间、人员、工位、物料和备注,再点击 \`${button.text}\` 提交。`);
else steps.push(`按业务需要点击 \`${button.text}\`,操作前先确认选中行和输入内容。`);
}
if (dialogs.length) {
steps.push(`出现弹窗时按弹窗标题处理:${dialogs.slice(0, 8).map(x => `\`${x}\``).join('、')};弹窗关闭前确认必填项已保存。`);
}
if (forms.length) {
steps.push(`弹窗或表单内重点填写:${forms.slice(0, 14).map(x => `\`${x}\``).join('、')},提交前逐项核对。`);
}
if (page.hasUpload) {
steps.push(`涉及上传时先选择正确文件,再点击上传/保存;上传后重新查询,确认文件名、版本、上传时间或预览内容已显示。`);
}
if (page.hasCalendar) {
steps.push(`进入日程页后,单击任务查看详情;拖拽任务可调整计划开始时间,拉伸任务可调整计划完成时间,系统提示确认后才会保存。`);
steps.push(`日程保存失败或取消时任务会恢复原日期;保存成功后回到表单页重新查询,核对计划开始和计划完成是否同步。`);
}
if (procs.length) {
steps.push(`保存或提交成功后重新点击查询,确认页面数据已通过 ${procs.slice(0, 5).map(x => `\`${x}\``).join('、')} 等后台过程更新。`);
}
if (page.sapCalls.length) {
steps.push(`涉及 SAP/WMS 接口时,必须查看页面成功或失败提示;失败时先记录错误信息,不要连续重复提交同一单据。`);
}
if (/SelfMakePlando[\\/]/.test(pathText)) {
steps.push(`\`指派数量\` 中输入小于计划数的数量时,表示本次只派出部分数量,剩余数量需要继续跟踪和后续派工。`);
steps.push(`点击 \`批量排产\` 前应选择同一生产订单的多道工序,系统会按订单行号排序并继承上一道工序的部分计划信息。`);
steps.push(`点击 \`排产完成\` 后,系统校验指派对象、指派数量、计划开始、计划完成,并同步生产订单最早开始和最晚完成。`);
}
if (/SelfMakePlandone[\\/]/.test(pathText)) {
steps.push(`已排产列表中仍可调整指派对象、指派数量、计划开始、计划完成、外协分组、最晚开始和二次派工;调整后要重新查询确认。`);
}
if (/MachiningCenter|AssemblyCenter/.test(pathText)) {
steps.push(`现场执行类操作必须按实际顺序处理:先确认任务和工位,再收料/开工,完成加工或装配后再报工/送检。`);
}
if (/QualityManagement/.test(pathText)) {
steps.push(`录入检验结果时先核对检验类型、订单、物料、批次/工序,再填写合格数、不合格数和检测明细,避免检验记录挂错任务。`);
}
if (/WorkHoursCheck/.test(pathText)) {
steps.push(`工时校验前先比对 MES 报工、设备工时和 SAP 工序资源;只对核对无误的记录执行提交。`);
}
if (/WorkstationManagement/.test(pathText)) {
steps.push(`工位新增或修改会影响 SAP 资源、派工、报工和看板,保存后要用排产或生产执行页面验证工位是否可选。`);
}
if (/MenuManagement|SystemRrolemaintenance|PersonnelManagement/.test(pathText)) {
steps.push(`权限类修改保存后,需要让相关用户重新登录或刷新权限,再验证菜单、按钮和数据范围是否生效。`);
}
return steps.map((s, i) => `${i + 1}. ${s}`).join('\n');
}
function notes(page) {
const values = [];
if (/PlanManagement/.test(page.relative)) values.push('排产、派工和计划时间会影响生产看板、及时开工统计和 SAP 生产订单日期,提交前必须核对。');
if (/ProductionManagement/.test(page.relative)) values.push('生产执行页面的数据会直接影响报工、工时、质检和库存任务,现场操作必须与实际加工进度一致。');
if (/QualityManagement/.test(page.relative)) values.push('质检结果保存后会影响合格入库、不合格处理和后续工序,提交前必须核对数量。');
if (/ProcessManagement|CraftManagement/.test(page.relative)) values.push('工艺、图纸和结构资料会被排产、生产、质检引用,版本错误会直接影响现场执行。');
if (/DeviceManagement/.test(page.relative)) values.push('设备和采集数据用于看板、OEE 和报工分析,发现异常时应先确认设备编码和采集点位。');
if (/SystemMaintenance/.test(page.relative)) values.push('系统维护类数据会影响登录、权限、菜单和业务可选项,修改后需要验证。');
if (page.sapCalls.length) values.push('该页存在 SAP/WMS 调用,失败时应记录返回提示并确认是否已经生成外部单据。');
if (page.hasCalendar) values.push('日程拖拽属于直接改计划时间的操作,拖拽前应确认任务未被现场执行锁定。');
if (!values.length) values.push('操作后建议重新查询页面,确认列表、状态和明细已经刷新。');
return values.map(v => `- ${v}`).join('\n');
}
function section(page, index) {
const query = queryItems(page);
const columns = tableItems(page);
const buttons = buttonItems(page);
const procs = procItems(page);
const sap = sapItems(page);
return `### 21.${index} ${page.name}
页面路径:\`${page.relative}\`
所属模块:${moduleName(page)}
建议使用人员:${roleFor(page)}
页面用途:${purpose(page)}
**具体操作步骤**
${detailedSteps(page)}
**查询条件/输入项**
${lineList(query, '未识别到固定输入项,按现场页面提示操作。')}
**结果表重点列**
${lineList(columns, '未识别到固定表格列,以页面实际显示为准。')}
**页面按钮/状态/页签**
${lineList([...buttons, ...page.tabLabels].slice(0, 36), '未识别到明确按钮,以页面实际显示为准。')}
**弹窗/表单重点项**
${lineList([...page.dialogs, ...page.formLabels].slice(0, 30), '未识别到固定弹窗或表单项。')}
**后台处理/外部接口**
${lineList([...procs.map(x => `存储过程:${x}`), ...sap.map(x => `接口:${x}`)].slice(0, 30), '未发现页面级后台提交动作。')}
**操作注意事项**
${notes(page)}
`;
}
function moduleOrder(page) {
const order = [
'404.vue',
'AnomalousManagement',
'CraftManagement',
'DeviceManagement',
'PlanManagement',
'ProcessManagement',
'ProductionManagement',
'QualityManagement',
'SaleManagement',
'SystemMaintenance',
'dashboard',
'layout',
'login'
];
const key = page.relative === 'src/views/404.vue' ? '404.vue' : page.module;
const idx = order.indexOf(key);
return idx >= 0 ? idx : 99;
}
function moduleHeading(page) {
const key = page.relative === 'src/views/404.vue' ? '404.vue' : page.module;
const headings = {
'404.vue': '错误页',
AnomalousManagement: '异常管理',
CraftManagement: '产品结构维护',
DeviceManagement: '设备管理',
PlanManagement: '计划排产',
ProcessManagement: '工艺与图纸管理',
ProductionManagement: '生产执行管理',
QualityManagement: '质量管理',
SaleManagement: '销售与交付查询',
SystemMaintenance: '系统维护',
dashboard: '首页与看板',
layout: '布局与导航',
login: '登录'
};
return headings[key] || key;
}
function buildChapter(pages) {
const sorted = pages.sort((a, b) => {
const m = moduleOrder(a) - moduleOrder(b);
if (m !== 0) return m;
return a.relative.localeCompare(b.relative, 'zh-Hans-CN');
});
const lines = [];
lines.push('## 二十一、逐页详细操作说明(按 src/views 页面)');
lines.push('');
lines.push('本章按源码页面逐页编写。每个页面都从实际 `v-model`、表格列、按钮、弹窗、页签、存储过程和 SAP/WMS 调用中提取操作线索,转换成用户可执行的步骤。');
lines.push('');
lines.push('通用阅读方法:');
lines.push('- `查询条件/输入项` 是用户进入页面后可以填写、选择或用于筛选的字段。');
lines.push('- `结果表重点列` 是查询后需要核对的表格列,表格可横向滚动时应继续向右查看。');
lines.push('- `页面按钮/状态/页签` 是页面上能触发查询、查看、编辑、提交、导出、状态切换或页面切换的入口。');
lines.push('- `后台处理/外部接口` 用于说明保存后可能调用的存储过程、SAP 或 WMS 接口,业务人员主要关注成功/失败提示。');
lines.push('- 涉及排产、报工、质检、外协、SAP/WMS 的操作,提交前必须核对订单、物料、数量、人员、工位和日期。');
lines.push('');
let current = '';
let moduleIndex = 0;
sorted.forEach((page, i) => {
const heading = moduleHeading(page);
if (heading !== current) {
moduleIndex += 1;
current = heading;
lines.push(`## 21-${moduleIndex} ${heading}`);
lines.push('');
}
lines.push(section(page, i + 1).trimEnd());
lines.push('');
});
return lines.join('\n').trimEnd() + '\n';
}
function main() {
const pages = walk(viewsRoot)
.filter(file => !/node_modules/.test(file))
.map(extractPage);
const chapter = buildChapter(pages);
const manual = readText(manualPath);
const marker = '## 二十一、逐页详细操作说明(按 src/views 页面)';
const idx = manual.indexOf(marker);
if (idx < 0) throw new Error(`找不到章节标记:${marker}`);
const nextChapter = manual.slice(idx + marker.length).search(/\n## 二十二、/);
const head = manual.slice(0, idx).trimEnd() + '\n\n';
const tail = nextChapter >= 0 ? manual.slice(idx + marker.length + nextChapter) : '';
writeText(manualPath, head + chapter + (tail ? '\n' + tail.trimStart() : ''));
console.log(`rewrote chapter 21 for ${pages.length} pages`);
}
main();

Some files were not shown because too many files have changed in this diff Show More