feat: update MES tracking and reporting workflows

This commit is contained in:
2026-06-30 17:41:40 +08:00
parent e0e1b5d2bb
commit 1399b9a80a
47 changed files with 4465 additions and 90 deletions

View File

@@ -0,0 +1,147 @@
USE [YL_MESDB]
GO
SET NOCOUNT ON;
DECLARE @Title nvarchar(100) = N'产品合格率(工位)';
DECLARE @Path nvarchar(300) = N'ProductPassRateWorkstation/index';
DECLARE @Component nvarchar(300) = N'/ProductionManagement/ProductPassRateWorkstation/index';
DECLARE @Name nvarchar(100) = N'ProductPassRateWorkstation';
DECLARE @SourcePath nvarchar(300) = N'ProductionPlanTrack/index';
DECLARE @SourceComponent nvarchar(300) = N'/ProductionManagement/ProductionPlanTrack/index';
DECLARE @TargetRole int = NULL;
IF OBJECT_ID(N'dbo.登录基础数据_二级菜单', N'U') IS NULL
BEGIN
RAISERROR(N'未找到表 dbo.登录基础数据_二级菜单。', 16, 1);
RETURN;
END;
DECLARE @IdIsIdentity bit = ISNULL(COLUMNPROPERTY(OBJECT_ID(N'dbo.登录基础数据_二级菜单'), N'id', 'IsIdentity'), 0);
IF @IdIsIdentity = 1
BEGIN
;WITH SourceRows AS
(
SELECT
src.[],
COALESCE(prodParent.[id], src.[pid]) AS [pid],
src.[icon],
src.[AddData],
src.[DeleteData],
src.[EditData],
src.[SearchData]
FROM [dbo].[_二级菜单] AS src
OUTER APPLY
(
SELECT TOP (1) rp.[id]
FROM [dbo].[_二级菜单] AS rp
WHERE rp.[] = src.[]
AND rp.[] = 1
AND rp.[title] = N'生产管理'
ORDER BY rp.[id]
) AS prodParent
WHERE src.[] = 1
AND (@TargetRole IS NULL OR src.[] = @TargetRole)
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
AND NOT EXISTS
(
SELECT 1
FROM [dbo].[_二级菜单] AS existing
WHERE existing.[] = src.[]
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
)
)
INSERT INTO [dbo].[_二级菜单]
([pid], [path], [componet], [redirect], [name], [title], [icon], [], [], [AddData], [DeleteData], [EditData], [SearchData])
SELECT
[pid],
@Path,
@Component,
NULL,
@Name,
@Title,
[icon],
[],
1,
[AddData],
[DeleteData],
[EditData],
[SearchData]
FROM SourceRows;
END
ELSE
BEGIN
;WITH SourceRows AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY src.[], src.[id]) AS rn,
src.[],
COALESCE(prodParent.[id], src.[pid]) AS [pid],
src.[icon],
src.[AddData],
src.[DeleteData],
src.[EditData],
src.[SearchData]
FROM [dbo].[_二级菜单] AS src
OUTER APPLY
(
SELECT TOP (1) rp.[id]
FROM [dbo].[_二级菜单] AS rp
WHERE rp.[] = src.[]
AND rp.[] = 1
AND rp.[title] = N'生产管理'
ORDER BY rp.[id]
) AS prodParent
WHERE src.[] = 1
AND (@TargetRole IS NULL OR src.[] = @TargetRole)
AND (src.[path] = @SourcePath OR src.[componet] = @SourceComponent OR src.[title] = N'生产计划跟踪')
AND NOT EXISTS
(
SELECT 1
FROM [dbo].[_二级菜单] AS existing
WHERE existing.[] = src.[]
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
)
),
BaseId AS
(
SELECT ISNULL(MAX([id]), 0) AS maxId
FROM [dbo].[_二级菜单]
)
INSERT INTO [dbo].[_二级菜单]
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [], [], [AddData], [DeleteData], [EditData], [SearchData])
SELECT
BaseId.maxId + SourceRows.rn,
SourceRows.[pid],
@Path,
@Component,
NULL,
@Name,
@Title,
SourceRows.[icon],
SourceRows.[],
1,
SourceRows.[AddData],
SourceRows.[DeleteData],
SourceRows.[EditData],
SourceRows.[SearchData]
FROM SourceRows
CROSS JOIN BaseId;
END;
UPDATE [dbo].[_二级菜单]
SET
[path] = @Path,
[componet] = @Component,
[name] = @Name,
[title] = @Title,
[] = [id],
[] = 1
WHERE [title] = @Title OR [componet] = @Component OR [path] = @Path;
SELECT [id], [pid], [path], [componet], [name], [title], [icon], [], [], [SearchData]
FROM [dbo].[_二级菜单]
WHERE [path] = @Path OR [componet] = @Component OR [title] = @Title
ORDER BY [], [id];

View File

@@ -0,0 +1,172 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'dbo.生产管理_产品合格率工位_查询', N'P') IS NULL
BEGIN
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_产品合格率工位_查询] AS BEGIN SET NOCOUNT ON; END');
END
GO
ALTER PROCEDURE [dbo].[_产品合格率工位_查询]
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(200) = N'',
@_Start nvarchar(50) = N'',
@_End nvarchar(50) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(20) = N'不合格'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ date = TRY_CONVERT(date, NULLIF(@_Start, N''));
DECLARE @ date = TRY_CONVERT(date, NULLIF(@_End, N''));
IF @ IS NULL AND @ IS NULL AND @ = N''
BEGIN
SET @ = DATEADD(day, -30, CONVERT(date, GETDATE()));
SET @ = CONVERT(date, GETDATE());
END;
CREATE TABLE #已关闭订单
(
[] nvarchar(100) NOT NULL PRIMARY KEY,
[] datetime NULL,
[] nvarchar(200) NULL,
[] nvarchar(50) NULL,
[] decimal(18, 4) NULL
);
DECLARE @SapSql nvarchar(max) =
N'SELECT 生产订单号, 实际结算日期, 产品名称, 产品编码, 产品计划数量, 单据状态 FROM SBO_YL.dbo.UBT_OWOR WHERE 单据状态 IS NOT NULL';
IF @ <> N''
SET @SapSql += N' AND 生产订单号 = ''' + REPLACE(@, N'''', N'''''') + N'''';
IF @ IS NOT NULL
SET @SapSql += N' AND 实际结算日期 >= ''' + CONVERT(nvarchar(10), @, 120) + N'''';
IF @ IS NOT NULL
SET @SapSql += N' AND 实际结算日期 < ''' + CONVERT(nvarchar(10), DATEADD(day, 1, @), 120) + N'''';
DECLARE @OpenQuerySql nvarchar(max) =
N'INSERT INTO #已关闭订单
([生产订单号], [关闭日期], [物料名称], [物料编码], [计划数量])
SELECT CONVERT(nvarchar(100), [生产订单号]) AS [生产订单号],
[实际结算日期] AS [关闭日期],
[产品名称] AS [物料名称],
[产品编码] AS [物料编码],
CAST(ISNULL([产品计划数量], 0) AS decimal(18, 4)) AS [计划数量]
FROM OPENQUERY([SAP], ''' + REPLACE(@SapSql, N'''', N'''''') + N''')
WHERE (@物料编码 = N'''' OR [产品编码] LIKE N''%'' + @物料编码 + N''%'')
AND (@物料名称 = N'''' OR [产品名称] LIKE N''%'' + @物料名称 + N''%'')';
EXEC sp_executesql
@OpenQuerySql,
N'@物料编码 nvarchar(200), @物料名称 nvarchar(200)',
@ = @,
@ = @;
CREATE TABLE #明细汇总
(
[] nvarchar(100) NOT NULL,
[] int NULL,
[] nvarchar(200) NOT NULL,
[] nvarchar(200) NOT NULL,
[] decimal(18, 4) NOT NULL,
[] decimal(18, 4) NOT NULL,
[] decimal(18, 2) NULL,
[] nvarchar(max) NULL
);
;WITH AS
(
SELECT
o.[],
COALESCE(t.[], q.[]) AS [],
COALESCE(NULLIF(q.[], N''), NULLIF(t.[], N''), N'') AS [],
COALESCE(NULLIF(q.[], N''), NULLIF(t.[], N''), N'空白') AS [],
CAST(ISNULL(q.[], ISNULL(q.[], 0) + ISNULL(q.[], 0)) AS decimal(18, 4)) AS [],
CAST(ISNULL(q.[], 0) AS decimal(18, 4)) AS [],
NULLIF(LTRIM(RTRIM(CONVERT(nvarchar(max), q.[]))), N'') AS []
FROM #已关闭订单 AS o
INNER JOIN [dbo].[YL_质量检验_质检记录] AS q
ON CONVERT(nvarchar(100), q.[]) = o.[]
LEFT JOIN [dbo].[MES_接口_生产计划_生产任务] AS t
ON q.[TaskAID] = t.[AID]
WHERE q.[] = N'收检'
AND (@ = N'' OR COALESCE(NULLIF(q.[], N''), NULLIF(t.[], N''), N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR COALESCE(NULLIF(q.[], N''), NULLIF(t.[], N''), N'空白') LIKE N'%' + @ + N'%')
)
INSERT INTO #明细汇总
([], [], [], [], [], [], [], [])
SELECT
[],
[],
[],
[],
SUM([]) AS [],
SUM([]) AS [],
CAST(
CASE
WHEN SUM([]) = 0 THEN NULL
ELSE (SUM([]) - SUM([])) * 100.0 / SUM([])
END AS decimal(18, 2)
) AS [],
STRING_AGG(CONVERT(nvarchar(max), []), N'') AS []
FROM
GROUP BY [], [], [], [];
;WITH AS
(
SELECT
[],
SUM([]) AS [],
SUM([]) AS [],
CAST(
CASE
WHEN SUM([]) = 0 THEN NULL
ELSE (SUM([]) - SUM([])) * 100.0 / SUM([])
END AS decimal(18, 2)
) AS []
FROM #明细汇总
GROUP BY []
)
SELECT
o.[],
o.[],
o.[],
o.[],
o.[],
a.[],
a.[],
a.[],
(
SELECT
d.[],
d.[],
d.[],
d.[],
d.[],
d.[],
ISNULL(d.[], N'') AS []
FROM #明细汇总 AS d
WHERE d.[] = o.[]
ORDER BY d.[], d.[], d.[]
FOR JSON PATH
) AS [JSON]
FROM #已关闭订单 AS o
INNER JOIN AS a
ON o.[] = a.[]
WHERE (@ = N'' OR @ = N'全部'
OR (@ = N'合格' AND ISNULL(a.[], 0) >= 100)
OR (@ = N'不合格' AND ISNULL(a.[], 0) < 100))
ORDER BY o.[] DESC, TRY_CONVERT(int, o.[]) DESC, o.[] DESC;
END
GO

View File

@@ -0,0 +1,188 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
2026-06-30
生产订单关闭查询:可关闭订单补充“无工时但满足其他可关闭条件”的特殊情况。
规则:
1. 有工时订单:继续要求 View_生产工时视图 中所有工时记录已校验。
2. 无工时订单:必须在 MES_接口_生产计划 中存在,且 View_生产工时视图 中没有任何工时记录。
3. 无工时订单不做工时全部校验,但仍必须满足原有可关闭条件:
- 单据状态为空;
- 终检/收检/计划数量/入库数量满足原过程 HAVING 条件;
- 入库数量等于终检合格数。
*/
ALTER PROCEDURE [dbo].[_生产订单关闭_查询全部订单]
@ nvarchar(100) = N'',
@ nvarchar(100) = N'', -- 可选值:'已关闭'、'未关闭'、'可关闭'
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
IF (@ = N'可关闭')
BEGIN
CREATE TABLE #工时订单
(
nvarchar(100) NOT NULL PRIMARY KEY
);
INSERT INTO #工时订单 (订单号)
SELECT DISTINCT CONVERT(nvarchar(100), )
FROM dbo.View_生产工时视图
WHERE IS NOT NULL;
;WITH AS
(
SELECT
,
SUM(ISNULL(, 0)) AS ,
SUM(ISNULL(, 0)) AS
FROM dbo.YL_质量检验_质检记录
WHERE = N'收检'
GROUP BY
),
AS
(
SELECT
,
SUM(ISNULL(, 0)) AS ,
SUM(ISNULL(, 0)) AS
FROM dbo.YL_质量检验_质检记录
WHERE = N'终检'
GROUP BY
),
AS
(
SELECT
v. AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(.) AS ,
MAX(.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(.) AS ,
MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) AS
FROM dbo.View_生产工时视图 AS v
LEFT JOIN ON v. = .
LEFT JOIN ON v. = .
WHERE v. IS NULL
AND (@ = N'' OR v. = @)
AND (
@ NOT IN (N'机加', N'装配')
OR (@ = N'机加' AND v. = N'机加件')
OR (@ = N'装配' AND v. LIKE N'%装配%')
)
GROUP BY v.
HAVING
MIN(CASE WHEN v.Expr1 IS NULL THEN 0 ELSE 1 END) = 1
AND (
MAX(.) + MAX(.) = MAX(v.)
OR MAX(v.) = MAX(v.)
OR MAX(.) = MAX(v.)
)
AND MAX(ISNULL(v., 0)) = MAX(ISNULL(., 0))
UNION ALL
SELECT
CONVERT(nvarchar(100), p.) AS ,
MAX(p.) AS ,
MAX(p.) AS ,
MAX(p.) AS ,
MAX(p.) AS ,
MAX(.) AS ,
MAX(.) AS ,
MAX(p.) AS ,
MAX(p.) AS ,
MAX(p.) AS ,
MAX(.) AS ,
1 AS
FROM dbo.MES_接口_生产计划 AS p
LEFT JOIN ON CONVERT(nvarchar(100), p.) = CONVERT(nvarchar(100), .)
LEFT JOIN ON CONVERT(nvarchar(100), p.) = CONVERT(nvarchar(100), .)
LEFT JOIN #工时订单 AS wh ON wh.订单号 = CONVERT(nvarchar(100), p.订单编号)
WHERE p. IS NULL
AND wh. IS NULL
AND (@ = N'' OR CONVERT(nvarchar(100), p.) = @)
AND (
@ NOT IN (N'机加', N'装配')
OR (@ = N'机加' AND p. = N'机加件')
OR (@ = N'装配' AND p. LIKE N'%装配%')
)
GROUP BY p.
HAVING
(
MAX(.) + MAX(.) = MAX(p.)
OR MAX(p.) = MAX(p.)
OR MAX(.) = MAX(p.)
)
AND MAX(ISNULL(p., 0)) = MAX(ISNULL(., 0))
)
SELECT
,
,
,
,
,
,
,
,
,
,
,
FROM
ORDER BY ;
RETURN;
END
SELECT TOP 100
v.,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(zj_终检数量.) AS ,
MAX(zj_终检数量.) AS ,
MAX(v.) AS ,
MAX(v.) AS ,
MAX(v.) AS
FROM dbo.MES_接口_生产计划 AS v
LEFT JOIN
(
SELECT
,
SUM(ISNULL(, 0)) AS ,
SUM(ISNULL(, 0)) AS
FROM dbo.YL_质量检验_质检记录
WHERE = N'终检'
GROUP BY
) AS zj_终检数量 ON v. = zj_终检数量.
WHERE 1 = 1
AND (@ = N'' OR CONVERT(nvarchar(100), v.) = @)
AND (
@ NOT IN (N'SAP未关闭', N'已关闭', N'未关闭')
OR (@ = N'SAP未关闭' AND v. = N'已关闭')
OR (@ = N'已关闭' AND (v. = N'已关闭' OR v. = N'已取消'))
OR (@ = N'未关闭' AND v. IS NULL)
)
AND (
@ NOT IN (N'机加', N'装配')
OR (@ = N'机加' AND v. = N'机加件')
OR (@ = N'装配' AND v. LIKE N'%装配%')
)
GROUP BY v.;
END
GO

View File

@@ -0,0 +1,409 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
BEGIN
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_及时齐套跟踪结果_查询]
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部'
AS
BEGIN
SET NOCOUNT ON;
;WITH SAP缺件源 AS (
SELECT
s.DocEntry,
s.Project COLLATE DATABASE_DEFAULT AS Project,
s.[],
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
ISNULL(s.[] COLLATE DATABASE_DEFAULT, N'') AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
s.[],
ISNULL(s.[], 0) AS ,
ISNULL(s.[稿], 0) AS 稿
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
WHERE ISNULL(s.[], 0) > 0
),
SAP缺件 AS (
SELECT TOP (2000)
src.*
FROM (
SELECT
SAP缺件源.*,
ROW_NUMBER() OVER (
PARTITION BY
SAP缺件源.DocEntry,
SAP缺件源.Project,
SAP缺件源.ItemCode,
SAP缺件源.
ORDER BY
SAP缺件源.[] DESC,
SAP缺件源.[]
) AS rn
FROM SAP缺件源
) AS src
WHERE src.rn = 1
),
AS (
SELECT
ISNULL(v.[], N'') AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
v.[] AS [],
v.[] AS [],
v.[],
v.[],
v.[] AS [],
v.[],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已发货'
ELSE N'未发货'
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N''
ELSE N''
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已拣配'
ELSE N'未拣配'
END AS [],
CASE
WHEN ISNULL(v.[], N'') = N'1' THEN N'发料齐套'
WHEN ISNULL(v.[], N'') = N'2' THEN N'发料缺件'
ELSE N'未发料'
END AS [],
CASE
WHEN ISNULL(v.[], 0) IN (2, 4) OR v.[] > '1900-01-01' THEN N'已开工'
ELSE N'待执行'
END AS [],
v.[],
CASE
WHEN final_check.[] IS NOT NULL THEN N''
ELSE N''
END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'' ELSE N'' END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
sap.ItemCode AS [],
sap.U_Name AS [],
sap.[] AS [],
sap.[] AS [],
CASE WHEN sap.[] = N'' THEN N'外购' ELSE sap.[] END AS [],
CASE
WHEN sap.[] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[稿], 0)), N'')
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[]), N'')
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(current_step.[], N'') END AS [],
CASE
WHEN sap.[] = N'' THEN
N'未清数量:' + CONVERT(nvarchar(30), sap.[]) +
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[稿]) +
N' / 质检状态:' + ISNULL(purchase_check.[], N'未完成')
ELSE ISNULL(route.[线], N'')
END AS [线],
CASE
WHEN sap.[] = N'' THEN sap.[]
ELSE route.[]
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(route.[线], N'[]') END AS [线],
sap.[],
sap.[稿],
ISNULL(purchase_check.[], CASE WHEN sap.[] = N'' THEN N'未完成' ELSE N'' END) AS [],
sap.DocEntry AS [SAP单据],
sap.[] AS [SAP行号]
FROM SAP缺件 AS sap
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] = sap.DocEntry
ORDER BY m.[]
) AS v
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] <> v.[]
AND (
(sap.[] = N'机加件' AND m.[] = sap.ItemCode)
OR (sap.[] LIKE N'%装配%' AND m.[] = sap.ItemCode AND ISNULL(m.[], N'') = ISNULL(sap.Project, N''))
)
ORDER BY m.[] DESC, m.[]
) AS detail_order
OUTER APPLY (
SELECT TOP (1) q.[]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = N'终检'
AND q.[] = v.[]
) AS final_check
OUTER APPLY (
SELECT
MAX(p.[]) AS [],
STUFF((
SELECT N'' + p2.[] +
CASE WHEN ISNULL(p2.[], N'') = N'' THEN N'' ELSE N'(' + p2.[] + N')' END
FROM [dbo].[View_生产订单_MES] AS p2
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR XML PATH(N''), TYPE
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [线],
(
SELECT
p2.[],
p2.[],
p2.[],
p2.[],
p2.[],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
p2.[],
ISNULL(check_qty.[], 0) AS [],
ISNULL(check_qty.[], 0) AS []
FROM [dbo].[View_生产订单_MES] AS p2
OUTER APPLY (
SELECT
SUM(ISNULL(q.[], 0)) AS [],
SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[TaskAID] = p2.[TaskAID]
AND q.[] = N'收检'
) AS check_qty
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR JSON PATH
) AS [线]
FROM [dbo].[View_生产订单_MES] AS p
WHERE p.[] = detail_order.[]
AND p.[] = N'pit_Resource'
) AS route
OUTER APPLY (
SELECT TOP (1)
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[]
FROM [dbo].[View_生产订单_MES] AS pending
WHERE pending.[] = detail_order.[]
AND pending.[] = N'pit_Resource'
AND NOT (
ISNULL(pending.[], 0) >= 100
OR (ISNULL(pending.[], 0) > 0 AND ISNULL(pending.[], 0) >= ISNULL(pending.[], 0))
)
ORDER BY pending.[]
) AS pending
OUTER APPLY (
SELECT TOP (1) prev.[]
FROM [dbo].[View_生产订单_MES] AS prev
WHERE prev.[] = detail_order.[]
AND prev.[] = N'pit_Resource'
AND prev.[] < pending.[]
ORDER BY prev.[] DESC
) AS prev_step
OUTER APPLY (
SELECT TOP (1) last_step.[]
FROM [dbo].[View_生产订单_MES] AS last_step
WHERE last_step.[] = detail_order.[]
AND last_step.[] = N'pit_Resource'
ORDER BY last_step.[] DESC
) AS last_step
OUTER APPLY (
SELECT
CASE
WHEN detail_order.[] IS NULL THEN N''
WHEN pending.[] IS NULL THEN ISNULL(last_step.[], N'') + N''
WHEN ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) IN (2, 3, 4, 5, 6)
OR pending.[] > '1900-01-01'
THEN ISNULL(pending.[], N'') + N''
WHEN prev_step.[] IS NULL THEN N''
ELSE prev_step.[] + N'毕待' + ISNULL(pending.[], N'')
END AS []
) AS current_step
OUTER APPLY (
SELECT
CASE
WHEN sap.[] <> N'' THEN N''
WHEN EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND ISNULL(task.[], 0) > 0
)
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND (
ISNULL(task.[], 0) <= 0
OR ISNULL(checked_qty.[], 0) < ISNULL(task.[], 0)
)
) THEN N'已完成'
ELSE N'未完成'
END AS []
) AS purchase_check
WHERE
v.[] IS NOT NULL
AND (@ <= 0 OR v.[] = @)
AND (@ = N'' OR ISNULL(v.[], N'') = @)
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS fp
WHERE fp.[] = v.[]
AND fp.[] = @
))
AND (@ = N'' OR v.[] >= TRY_CONVERT(datetime, @))
AND (@ = N'' OR v.[] <= TRY_CONVERT(datetime, @))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已完成' AND ISNULL(v.[], 0) = 1) OR
(@ = N'未完成' AND ISNULL(v.[], 0) = 0)
)
AND (@ = N'全部' OR @ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS ap
WHERE ap.[] = v.[]
AND ap.[] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@, N','))
))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已发货' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'未发货' AND ISNULL(v.[], N'0') <> N'1')
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'' AND ISNULL(v.[], 0) = 1) OR
(@ = N'' AND ISNULL(v.[], 0) <> 1)
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'发料齐套' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'发料缺件' AND ISNULL(v.[], N'0') = N'2') OR
(@ = N'未发料' AND ISNULL(v.[], N'0') NOT IN (N'1', N'2'))
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'机加' AND (sap.[] = N'机加件' OR v.[] = N'机加件')) OR
(@ = N'装配' AND (sap.[] LIKE N'%装配%' OR v.[] LIKE N'%装配%'))
)
AND (@ = N'' OR (sap.[] = N'' AND ISNULL(purchase_check.[], N'') = @))
)
SELECT TOP (1000)
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[线],
[],
[线],
[],
[稿],
[],
[SAP单据],
[SAP行号]
FROM (
SELECT
.*,
ROW_NUMBER() OVER (
PARTITION BY
[],
CASE
WHEN ISNULL([], N'') <> N'' THEN []
ELSE [] + N':' + CONVERT(nvarchar(30), [SAP行号])
END
ORDER BY [] DESC, [SAP单据], [SAP行号]
) AS rn
FROM
) AS dedup
WHERE rn = 1
ORDER BY
[],
[],
[],
[];
END
GO

View File

@@ -0,0 +1,423 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
BEGIN
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_及时齐套跟踪结果_查询]
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部'
AS
BEGIN
SET NOCOUNT ON;
;WITH SAP缺件源 AS (
SELECT
s.DocEntry,
s.Project COLLATE DATABASE_DEFAULT AS Project,
s.[],
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
ISNULL(s.[] COLLATE DATABASE_DEFAULT, N'') AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.DocNum, 0) AS DocNum,
s.[] COLLATE DATABASE_DEFAULT AS ,
s.[],
ISNULL(s.[], 0) AS ,
ISNULL(s.[稿], 0) AS 稿
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
WHERE ISNULL(s.[], 0) > 0
),
SAP缺件 AS (
SELECT TOP (2000)
src.*
FROM (
SELECT
SAP缺件源.*,
ROW_NUMBER() OVER (
PARTITION BY
SAP缺件源.DocEntry,
SAP缺件源.Project,
SAP缺件源.ItemCode,
SAP缺件源.
ORDER BY
SAP缺件源.[] DESC,
SAP缺件源.[]
) AS rn
FROM SAP缺件源
) AS src
WHERE src.rn = 1
),
AS (
SELECT
ISNULL(v.[], N'') AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
v.[] AS [],
v.[] AS [],
v.[],
v.[],
v.[] AS [],
v.[],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已发货'
ELSE N'未发货'
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N''
ELSE N''
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已拣配'
ELSE N'未拣配'
END AS [],
CASE
WHEN ISNULL(v.[], N'') = N'1' THEN N'发料齐套'
WHEN ISNULL(v.[], N'') = N'2' THEN N'发料缺件'
ELSE N'未发料'
END AS [],
CASE
WHEN ISNULL(v.[], 0) IN (2, 4) OR v.[] > '1900-01-01' THEN N'已开工'
ELSE N'待执行'
END AS [],
v.[],
CASE
WHEN final_check.[] IS NOT NULL THEN N''
ELSE N''
END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'' ELSE N'' END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
sap.ItemCode AS [],
sap.U_Name AS [],
sap.[] AS [],
sap.[] AS [],
CASE WHEN sap.[] = N'' THEN N'外购' ELSE sap.[] END AS [],
CASE
WHEN sap.[] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[], 0)), N'')
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[]), N'')
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(current_step.[], N'') END AS [],
CASE
WHEN sap.[] = N'' THEN
N'采购员:' + ISNULL(NULLIF(sap.[], N''), N'-') +
N' / 未清数量:' + CONVERT(nvarchar(30), sap.[]) +
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[稿]) +
N' / 质检状态:' + ISNULL(purchase_check.[], N'未完成')
ELSE ISNULL(route.[线], N'')
END AS [线],
CASE
WHEN sap.[] = N'' THEN sap.[]
ELSE route.[]
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(route.[线], N'[]') END AS [线],
sap.[],
sap.[稿],
ISNULL(purchase_check.[], CASE WHEN sap.[] = N'' THEN N'未完成' ELSE N'' END) AS [],
sap.DocEntry AS [SAP单据],
sap.[] AS [SAP行号]
FROM SAP缺件 AS sap
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] = sap.DocEntry
ORDER BY m.[]
) AS v
OUTER APPLY (
SELECT m.*
FROM (
SELECT
m.*,
ROW_NUMBER() OVER (
PARTITION BY m.[]
ORDER BY m.[]
) AS rn
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] <> v.[]
AND (
(sap.[] = N'机加件' AND (
m.[] = sap.ItemCode
OR (sap.DocNum > 0 AND m.[] = sap.DocNum)
))
OR (sap.[] LIKE N'%装配%' AND m.[] = sap.ItemCode AND ISNULL(m.[], N'') = ISNULL(sap.Project, N''))
)
) AS m
WHERE m.rn = 1
) AS detail_order
OUTER APPLY (
SELECT TOP (1) q.[]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = N'终检'
AND q.[] = v.[]
) AS final_check
OUTER APPLY (
SELECT
MAX(p.[]) AS [],
STUFF((
SELECT N'' + p2.[] +
CASE WHEN ISNULL(p2.[], N'') = N'' THEN N'' ELSE N'(' + p2.[] + N')' END
FROM [dbo].[View_生产订单_MES] AS p2
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR XML PATH(N''), TYPE
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [线],
(
SELECT
p2.[],
p2.[],
p2.[],
p2.[],
p2.[],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
p2.[],
ISNULL(check_qty.[], 0) AS [],
ISNULL(check_qty.[], 0) AS []
FROM [dbo].[View_生产订单_MES] AS p2
OUTER APPLY (
SELECT
SUM(ISNULL(q.[], 0)) AS [],
SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[TaskAID] = p2.[TaskAID]
AND q.[] = N'收检'
) AS check_qty
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR JSON PATH
) AS [线]
FROM [dbo].[View_生产订单_MES] AS p
WHERE p.[] = detail_order.[]
AND p.[] = N'pit_Resource'
) AS route
OUTER APPLY (
SELECT TOP (1)
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[]
FROM [dbo].[View_生产订单_MES] AS pending
WHERE pending.[] = detail_order.[]
AND pending.[] = N'pit_Resource'
AND NOT (
ISNULL(pending.[], 0) >= 100
OR (ISNULL(pending.[], 0) > 0 AND ISNULL(pending.[], 0) >= ISNULL(pending.[], 0))
)
ORDER BY pending.[]
) AS pending
OUTER APPLY (
SELECT TOP (1) prev.[]
FROM [dbo].[View_生产订单_MES] AS prev
WHERE prev.[] = detail_order.[]
AND prev.[] = N'pit_Resource'
AND prev.[] < pending.[]
ORDER BY prev.[] DESC
) AS prev_step
OUTER APPLY (
SELECT TOP (1) last_step.[]
FROM [dbo].[View_生产订单_MES] AS last_step
WHERE last_step.[] = detail_order.[]
AND last_step.[] = N'pit_Resource'
ORDER BY last_step.[] DESC
) AS last_step
OUTER APPLY (
SELECT
CASE
WHEN detail_order.[] IS NULL THEN N''
WHEN pending.[] IS NULL THEN ISNULL(last_step.[], N'') + N''
WHEN ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) IN (2, 3, 4, 5, 6)
OR pending.[] > '1900-01-01'
THEN ISNULL(pending.[], N'') + N''
WHEN prev_step.[] IS NULL THEN N''
ELSE prev_step.[] + N'毕待' + ISNULL(pending.[], N'')
END AS []
) AS current_step
OUTER APPLY (
SELECT
CASE
WHEN sap.[] <> N'' THEN N''
WHEN EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND ISNULL(task.[], 0) > 0
)
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND (
ISNULL(task.[], 0) <= 0
OR ISNULL(checked_qty.[], 0) < ISNULL(task.[], 0)
)
) THEN N'已完成'
ELSE N'未完成'
END AS []
) AS purchase_check
WHERE
v.[] IS NOT NULL
AND (@ <= 0 OR v.[] = @)
AND (@ = N'' OR ISNULL(v.[], N'') = @)
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS fp
WHERE fp.[] = v.[]
AND fp.[] = @
))
AND (@ = N'' OR v.[] >= TRY_CONVERT(datetime, @))
AND (@ = N'' OR v.[] <= TRY_CONVERT(datetime, @))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已完成' AND ISNULL(v.[], 0) = 1) OR
(@ = N'未完成' AND ISNULL(v.[], 0) = 0)
)
AND (@ = N'全部' OR @ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS ap
WHERE ap.[] = v.[]
AND ap.[] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@, N','))
))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已发货' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'未发货' AND ISNULL(v.[], N'0') <> N'1')
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'' AND ISNULL(v.[], 0) = 1) OR
(@ = N'' AND ISNULL(v.[], 0) <> 1)
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'发料齐套' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'发料缺件' AND ISNULL(v.[], N'0') = N'2') OR
(@ = N'未发料' AND ISNULL(v.[], N'0') NOT IN (N'1', N'2'))
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'机加' AND (sap.[] = N'机加件' OR v.[] = N'机加件')) OR
(@ = N'装配' AND (sap.[] LIKE N'%装配%' OR v.[] LIKE N'%装配%'))
)
AND (@ = N'' OR (sap.[] = N'' AND ISNULL(purchase_check.[], N'') = @))
)
SELECT TOP (1000)
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[线],
[],
[线],
[],
[稿],
[],
[SAP单据],
[SAP行号]
FROM (
SELECT
.*,
ROW_NUMBER() OVER (
PARTITION BY
[],
CASE
WHEN ISNULL([], N'') <> N'' THEN []
ELSE [] + N':' + CONVERT(nvarchar(30), [SAP行号])
END
ORDER BY [] DESC, [SAP单据], [SAP行号]
) AS rn
FROM
) AS dedup
WHERE rn = 1
ORDER BY
[],
[],
[],
[];
END
GO

View File

@@ -0,0 +1,418 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'dbo.生产管理_及时齐套跟踪结果_查询', N'P') IS NULL
BEGIN
EXEC(N'CREATE PROCEDURE [dbo].[生产管理_及时齐套跟踪结果_查询] AS BEGIN SET NOCOUNT ON; END');
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_及时齐套跟踪结果_查询]
@ int = 0,
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'',
@ nvarchar(50) = N'全部',
@ nvarchar(50) = N'全部'
AS
BEGIN
SET NOCOUNT ON;
;WITH SAP缺件源 AS (
SELECT
s.DocEntry,
s.Project COLLATE DATABASE_DEFAULT AS Project,
s.[],
s.ItemCode COLLATE DATABASE_DEFAULT AS ItemCode,
s.U_Name COLLATE DATABASE_DEFAULT AS U_Name,
ISNULL(s.[] COLLATE DATABASE_DEFAULT, N'') AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.[], 0) AS ,
ISNULL(s.DocNum, 0) AS DocNum,
s.[] COLLATE DATABASE_DEFAULT AS ,
s.[],
ISNULL(s.[], 0) AS ,
ISNULL(s.[稿], 0) AS 稿
FROM [SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] AS s
WHERE ISNULL(s.[], 0) > 0
),
SAP缺件 AS (
SELECT TOP (2000)
src.*
FROM (
SELECT
SAP缺件源.*,
ROW_NUMBER() OVER (
PARTITION BY
SAP缺件源.DocEntry,
SAP缺件源.Project,
SAP缺件源.ItemCode,
SAP缺件源.
ORDER BY
SAP缺件源.[] DESC,
SAP缺件源.[]
) AS rn
FROM SAP缺件源
) AS src
WHERE src.rn = 1
),
AS (
SELECT
ISNULL(v.[], N'') AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
v.[] AS [],
v.[] AS [],
v.[],
v.[],
v.[] AS [],
v.[],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已发货'
ELSE N'未发货'
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N''
ELSE N''
END AS [],
CASE
WHEN ISNULL(v.[], 0) = 1 THEN N'已拣配'
ELSE N'未拣配'
END AS [],
CASE
WHEN ISNULL(v.[], N'') = N'1' THEN N'发料齐套'
WHEN ISNULL(v.[], N'') = N'2' THEN N'发料缺件'
ELSE N'未发料'
END AS [],
CASE
WHEN ISNULL(v.[], 0) IN (2, 4) OR v.[] > '1900-01-01' THEN N'已开工'
ELSE N'待执行'
END AS [],
v.[],
CASE
WHEN final_check.[] IS NOT NULL THEN N''
ELSE N''
END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'' ELSE N'' END AS [],
CASE WHEN ISNULL(v.[], 0) = 1 THEN N'已排产' ELSE N'未排产' END AS [],
ISNULL(v.[], N'') AS [],
v.[] AS [],
sap.ItemCode AS [],
sap.U_Name AS [],
sap.[] AS [],
sap.[] AS [],
CASE WHEN sap.[] = N'' THEN N'外购' ELSE sap.[] END AS [],
CASE
WHEN sap.[] = N'' THEN ISNULL(CONVERT(nvarchar(50), NULLIF(sap.[], 0)), N'')
ELSE ISNULL(CONVERT(nvarchar(50), detail_order.[]), N'')
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(current_step.[], N'') END AS [],
CASE
WHEN sap.[] = N'' THEN
N'采购员:' + ISNULL(NULLIF(sap.[], N''), N'-') +
N' / 未清数量:' + CONVERT(nvarchar(30), sap.[]) +
N' / 到货草稿:' + CONVERT(nvarchar(30), sap.[稿]) +
N' / 质检状态:' + ISNULL(purchase_check.[], N'未完成')
ELSE ISNULL(route.[线], N'')
END AS [线],
CASE
WHEN sap.[] = N'' THEN sap.[]
ELSE route.[]
END AS [],
CASE WHEN sap.[] = N'' THEN N'' ELSE ISNULL(route.[线], N'[]') END AS [线],
sap.[],
sap.[稿],
ISNULL(purchase_check.[], CASE WHEN sap.[] = N'' THEN N'未完成' ELSE N'' END) AS [],
sap.DocEntry AS [SAP单据],
sap.[] AS [SAP行号]
FROM SAP缺件 AS sap
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] = sap.DocEntry
ORDER BY m.[]
) AS v
OUTER APPLY (
SELECT TOP (1) m.*
FROM [dbo].[View_生产订单_MES] AS m
WHERE m.[] = N'pit_Resource'
AND ISNULL(m.[], 0) = 1
AND m.[] <> v.[]
AND (
(sap.[] = N'机加件' AND (
(sap.DocNum > 0 AND m.[] = sap.DocNum)
OR (sap.DocNum <= 0 AND m.[] = sap.ItemCode)
))
OR (sap.[] LIKE N'%装配%' AND m.[] = sap.ItemCode AND ISNULL(m.[], N'') = ISNULL(sap.Project, N''))
)
ORDER BY
CASE WHEN sap.DocNum > 0 AND m.[] = sap.DocNum THEN 0 ELSE 1 END,
m.[] DESC,
m.[]
) AS detail_order
OUTER APPLY (
SELECT TOP (1) q.[]
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = N'终检'
AND q.[] = v.[]
) AS final_check
OUTER APPLY (
SELECT
MAX(p.[]) AS [],
STUFF((
SELECT N'' + p2.[] +
CASE WHEN ISNULL(p2.[], N'') = N'' THEN N'' ELSE N'(' + p2.[] + N')' END
FROM [dbo].[View_生产订单_MES] AS p2
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR XML PATH(N''), TYPE
).value(N'.', N'nvarchar(max)'), 1, 1, N'') AS [线],
(
SELECT
p2.[],
p2.[],
p2.[],
p2.[],
p2.[],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
ISNULL(p2.[], 0) AS [],
p2.[],
ISNULL(check_qty.[], 0) AS [],
ISNULL(check_qty.[], 0) AS []
FROM [dbo].[View_生产订单_MES] AS p2
OUTER APPLY (
SELECT
SUM(ISNULL(q.[], 0)) AS [],
SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[TaskAID] = p2.[TaskAID]
AND q.[] = N'收检'
) AS check_qty
WHERE p2.[] = detail_order.[]
AND p2.[] = N'pit_Resource'
ORDER BY p2.[]
FOR JSON PATH
) AS [线]
FROM [dbo].[View_生产订单_MES] AS p
WHERE p.[] = detail_order.[]
AND p.[] = N'pit_Resource'
) AS route
OUTER APPLY (
SELECT TOP (1)
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[],
pending.[]
FROM [dbo].[View_生产订单_MES] AS pending
WHERE pending.[] = detail_order.[]
AND pending.[] = N'pit_Resource'
AND NOT (
ISNULL(pending.[], 0) >= 100
OR (ISNULL(pending.[], 0) > 0 AND ISNULL(pending.[], 0) >= ISNULL(pending.[], 0))
)
ORDER BY pending.[]
) AS pending
OUTER APPLY (
SELECT TOP (1) prev.[]
FROM [dbo].[View_生产订单_MES] AS prev
WHERE prev.[] = detail_order.[]
AND prev.[] = N'pit_Resource'
AND prev.[] < pending.[]
ORDER BY prev.[] DESC
) AS prev_step
OUTER APPLY (
SELECT TOP (1) last_step.[]
FROM [dbo].[View_生产订单_MES] AS last_step
WHERE last_step.[] = detail_order.[]
AND last_step.[] = N'pit_Resource'
ORDER BY last_step.[] DESC
) AS last_step
OUTER APPLY (
SELECT
CASE
WHEN detail_order.[] IS NULL THEN N''
WHEN pending.[] IS NULL THEN ISNULL(last_step.[], N'') + N''
WHEN ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) > 0
OR ISNULL(pending.[], 0) IN (2, 3, 4, 5, 6)
OR pending.[] > '1900-01-01'
THEN ISNULL(pending.[], N'') + N''
WHEN prev_step.[] IS NULL THEN N''
ELSE prev_step.[] + N'毕待' + ISNULL(pending.[], N'')
END AS []
) AS current_step
OUTER APPLY (
SELECT
CASE
WHEN sap.[] <> N'' THEN N''
WHEN EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND ISNULL(task.[], 0) > 0
)
AND NOT EXISTS (
SELECT 1
FROM [dbo].[_质检任务_SAP] AS task
OUTER APPLY (
SELECT SUM(ISNULL(q.[], 0)) AS []
FROM [dbo].[YL_质量检验_质检记录] AS q
WHERE q.[] = 5
AND q.[] = task.[]
AND q.[] = task.[]
AND q.[] = task.[]
) AS checked_qty
WHERE sap.[稿] > 0
AND task.[] = N'20'
AND task.[] = sap.[稿]
AND (
ISNULL(task.[], 0) <= 0
OR ISNULL(checked_qty.[], 0) < ISNULL(task.[], 0)
)
) THEN N'已完成'
ELSE N'未完成'
END AS []
) AS purchase_check
WHERE
v.[] IS NOT NULL
AND (@ <= 0 OR v.[] = @)
AND (@ = N'' OR ISNULL(v.[], N'') = @)
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR ISNULL(v.[], N'') LIKE N'%' + @ + N'%')
AND (@ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS fp
WHERE fp.[] = v.[]
AND fp.[] = @
))
AND (@ = N'' OR v.[] >= TRY_CONVERT(datetime, @))
AND (@ = N'' OR v.[] <= TRY_CONVERT(datetime, @))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已完成' AND ISNULL(v.[], 0) = 1) OR
(@ = N'未完成' AND ISNULL(v.[], 0) = 0)
)
AND (@ = N'全部' OR @ = N'' OR EXISTS (
SELECT 1
FROM [dbo].[View_生产订单_MES] AS ap
WHERE ap.[] = v.[]
AND ap.[] IN (SELECT LTRIM(RTRIM(value)) FROM STRING_SPLIT(@, N','))
))
AND (@ = N'全部' OR @ = N'' OR
(@ = N'已发货' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'未发货' AND ISNULL(v.[], N'0') <> N'1')
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'' AND ISNULL(v.[], 0) = 1) OR
(@ = N'' AND ISNULL(v.[], 0) <> 1)
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'发料齐套' AND ISNULL(v.[], N'0') = N'1') OR
(@ = N'发料缺件' AND ISNULL(v.[], N'0') = N'2') OR
(@ = N'未发料' AND ISNULL(v.[], N'0') NOT IN (N'1', N'2'))
)
AND (@ = N'全部' OR @ = N'' OR
(@ = N'机加' AND (sap.[] = N'机加件' OR v.[] = N'机加件')) OR
(@ = N'装配' AND (sap.[] LIKE N'%装配%' OR v.[] LIKE N'%装配%'))
)
AND (@ = N'' OR (sap.[] = N'' AND ISNULL(purchase_check.[], N'') = @))
)
SELECT TOP (1000)
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[线],
[],
[线],
[],
[稿],
[],
[SAP单据],
[SAP行号]
FROM (
SELECT
.*,
ROW_NUMBER() OVER (
PARTITION BY
[],
CASE
WHEN ISNULL([], N'') <> N'' THEN []
ELSE [] + N':' + CONVERT(nvarchar(30), [SAP行号])
END
ORDER BY [] DESC, [SAP单据], [SAP行号]
) AS rn
FROM
) AS dedup
WHERE rn = 1
ORDER BY
[],
[],
[],
[];
END
GO