feat: 完善计划发货与设计任务功能

This commit is contained in:
2026-07-21 09:20:19 +08:00
parent e31027aa9d
commit 8fdd0b6803
11 changed files with 1845 additions and 53 deletions

View File

@@ -0,0 +1,308 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE [dbo].[设计报工_工时报表_任务工时_查询]
@开始日期 nvarchar(30) = N'',
@结束日期 nvarchar(30) = N'',
@操作人 nvarchar(100) = N'',
@项目号 nvarchar(100) = N'',
@物料编码 nvarchar(100) = N'',
@类别 nvarchar(100) = N'',
@DID int = NULL,
@当前操作人 nvarchar(100) = N'',
@角色编号 nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @开始 datetime = TRY_CONVERT(datetime, NULLIF(@开始日期, N''));
DECLARE @结束 datetime = TRY_CONVERT(datetime, NULLIF(@结束日期, N''));
DECLARE @可查看全部 bit = CASE WHEN EXISTS
(
SELECT 1
FROM [dbo].[登录基础数据_角色信息]
WHERE CONVERT(nvarchar(100), [Roles_number]) = @角色编号
AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')
) THEN 1 ELSE 0 END;
;WITH base AS
(
SELECT
r.[RID],
r.[DID],
ISNULL(r.[操作人], N'') AS [操作人],
t.[项目号],
t.[物料编码],
t.[物料名称],
t.[图号],
t.[类别],
t.[任务描述],
r.[开始时间],
r.[结束时间],
ISNULL(r.[工时秒数], 0) AS [工时秒数],
r.[已校验],
r.[进度说明],
r.[备注]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
WHERE
r.[开始时间] IS NOT NULL
AND r.[结束时间] IS NOT NULL
AND (@开始 IS NULL OR r.[开始时间] >= @开始)
AND (@结束 IS NULL OR r.[开始时间] < DATEADD(day, 1, @结束))
AND (ISNULL(@操作人, N'') = N'' OR r.[操作人] LIKE N'%' + @操作人 + N'%')
AND (ISNULL(@项目号, N'') = N'' OR t.[项目号] LIKE N'%' + @项目号 + N'%')
AND (ISNULL(@物料编码, N'') = N'' OR t.[物料编码] LIKE N'%' + @物料编码 + N'%')
AND (ISNULL(@类别, N'') = N'' OR t.[类别] LIKE N'%' + @类别 + N'%')
AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
AND
(
@可查看全部 = 1
OR
(
NULLIF(LTRIM(RTRIM(@当前操作人)), N'') IS NOT NULL
AND
(
ISNULL(t.[创建人], N'') = LTRIM(RTRIM(@当前操作人))
OR ISNULL(r.[操作人], N'') = LTRIM(RTRIM(@当前操作人))
)
)
)
),
result AS
(
SELECT
1 AS [Level],
N't-' + CAST([DID] AS nvarchar(20)) AS [id],
CAST(N'' AS nvarchar(120)) AS [parentId],
CAST(N'' AS nvarchar(100)) AS [操作人],
CAST(N'' AS nvarchar(20)) AS [工作日期],
CAST(NULL AS int) AS [RID],
[DID],
ISNULL(MAX([项目号]), N'') AS [项目号],
ISNULL(MAX([物料编码]), N'') AS [物料编码],
ISNULL(MAX([物料名称]), N'') AS [物料名称],
ISNULL(MAX([图号]), N'') AS [图号],
ISNULL(MAX([类别]), N'') AS [类别],
ISNULL(MAX([任务描述]), N'') AS [任务描述],
CONVERT(varchar(19), MIN([开始时间]), 120) AS [开始时间],
CONVERT(varchar(19), MAX([结束时间]), 120) AS [结束时间],
COUNT(1) AS [报工次数],
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
CASE
WHEN SUM(CONVERT(int, [已校验])) = COUNT(1) THEN N'已校验'
WHEN SUM(CONVERT(int, [已校验])) = 0 THEN N'未校验'
ELSE N'部分校验'
END AS [校验状态],
ISNULL(STRING_AGG(
CASE WHEN NULLIF(LTRIM(RTRIM([进度说明])), N'') IS NOT NULL
THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [结束时间], 120) + NCHAR(13) + NCHAR(10) + [进度说明]) END,
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [进度说明],
ISNULL(STRING_AGG(
CASE WHEN NULLIF(LTRIM(RTRIM([备注])), N'') IS NOT NULL
THEN CONVERT(nvarchar(max), [备注]) END,
NCHAR(13) + NCHAR(10)
) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [备注]
FROM base
GROUP BY [DID]
UNION ALL
SELECT
2 AS [Level],
N't-' + CAST([DID] AS nvarchar(20)) + N'-o-' + [操作人] AS [id],
N't-' + CAST([DID] AS nvarchar(20)) AS [parentId],
[操作人],
CAST(N'' AS nvarchar(20)) AS [工作日期],
CAST(NULL AS int) AS [RID],
[DID],
CAST(N'' AS nvarchar(100)) AS [项目号],
CAST(N'' AS nvarchar(100)) AS [物料编码],
CAST(N'' AS nvarchar(200)) AS [物料名称],
CAST(N'' AS nvarchar(100)) AS [图号],
CAST(N'' AS nvarchar(100)) AS [类别],
CAST(N'' AS nvarchar(500)) AS [任务描述],
CONVERT(varchar(19), MIN([开始时间]), 120) AS [开始时间],
CONVERT(varchar(19), MAX([结束时间]), 120) AS [结束时间],
COUNT(1) AS [报工次数],
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
CASE
WHEN SUM(CONVERT(int, [已校验])) = COUNT(1) THEN N'已校验'
WHEN SUM(CONVERT(int, [已校验])) = 0 THEN N'未校验'
ELSE N'部分校验'
END AS [校验状态],
ISNULL(STRING_AGG(
CASE WHEN NULLIF(LTRIM(RTRIM([进度说明])), N'') IS NOT NULL
THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [结束时间], 120) + NCHAR(13) + NCHAR(10) + [进度说明]) END,
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [进度说明],
ISNULL(STRING_AGG(
CASE WHEN NULLIF(LTRIM(RTRIM([备注])), N'') IS NOT NULL
THEN CONVERT(nvarchar(max), [备注]) END,
NCHAR(13) + NCHAR(10)
) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [备注]
FROM base
GROUP BY [DID], [操作人]
)
SELECT *
FROM result
ORDER BY [DID] DESC, [Level], [操作人];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[设计报工_工时报表_作业者工时_查询]
@开始日期 nvarchar(30) = N'',
@结束日期 nvarchar(30) = N'',
@操作人 nvarchar(100) = N'',
@项目号 nvarchar(100) = N'',
@物料编码 nvarchar(100) = N'',
@类别 nvarchar(100) = N'',
@DID int = NULL,
@当前操作人 nvarchar(100) = N'',
@角色编号 nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @开始 datetime = TRY_CONVERT(datetime, NULLIF(@开始日期, N''));
DECLARE @结束 datetime = TRY_CONVERT(datetime, NULLIF(@结束日期, N''));
DECLARE @可查看全部 bit = CASE WHEN EXISTS
(
SELECT 1
FROM [dbo].[登录基础数据_角色信息]
WHERE CONVERT(nvarchar(100), [Roles_number]) = @角色编号
AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')
) THEN 1 ELSE 0 END;
;WITH base AS
(
SELECT
r.[RID],
r.[DID],
ISNULL(r.[操作人], N'') AS [操作人],
CONVERT(varchar(10), r.[开始时间], 120) AS [工作日期],
t.[项目号],
t.[物料编码],
t.[物料名称],
t.[图号],
t.[类别],
t.[任务描述],
r.[开始时间],
r.[结束时间],
ISNULL(r.[工时秒数], 0) AS [工时秒数],
r.[已校验],
r.[进度说明],
r.[备注]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
WHERE
r.[开始时间] IS NOT NULL
AND r.[结束时间] IS NOT NULL
AND (@开始 IS NULL OR r.[开始时间] >= @开始)
AND (@结束 IS NULL OR r.[开始时间] < DATEADD(day, 1, @结束))
AND (ISNULL(@操作人, N'') = N'' OR r.[操作人] LIKE N'%' + @操作人 + N'%')
AND (ISNULL(@项目号, N'') = N'' OR t.[项目号] LIKE N'%' + @项目号 + N'%')
AND (ISNULL(@物料编码, N'') = N'' OR t.[物料编码] LIKE N'%' + @物料编码 + N'%')
AND (ISNULL(@类别, N'') = N'' OR t.[类别] LIKE N'%' + @类别 + N'%')
AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
AND
(
@可查看全部 = 1
OR
(
NULLIF(LTRIM(RTRIM(@当前操作人)), N'') IS NOT NULL
AND
(
ISNULL(t.[创建人], N'') = LTRIM(RTRIM(@当前操作人))
OR ISNULL(r.[操作人], N'') = LTRIM(RTRIM(@当前操作人))
)
)
)
),
result AS
(
SELECT
1 AS [Level],
N'p-' + [操作人] AS [id],
CAST(N'' AS nvarchar(100)) AS [parentId],
[操作人],
CAST(N'' AS nvarchar(20)) AS [工作日期],
CAST(NULL AS int) AS [RID],
CAST(NULL AS int) AS [DID],
CAST(N'' AS nvarchar(100)) AS [项目号],
CAST(N'' AS nvarchar(100)) AS [物料编码],
CAST(N'' AS nvarchar(200)) AS [物料名称],
CAST(N'' AS nvarchar(100)) AS [图号],
CAST(N'' AS nvarchar(100)) AS [类别],
CAST(N'' AS nvarchar(500)) AS [任务描述],
CAST(N'' AS varchar(19)) AS [开始时间],
CAST(N'' AS varchar(19)) AS [结束时间],
COUNT(1) AS [报工次数],
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
CAST(N'' AS nvarchar(20)) AS [校验状态],
CAST(N'' AS nvarchar(500)) AS [进度说明],
CAST(N'' AS nvarchar(500)) AS [备注]
FROM base
GROUP BY [操作人]
UNION ALL
SELECT
2 AS [Level],
N'd-' + [操作人] + N'-' + [工作日期] AS [id],
N'p-' + [操作人] AS [parentId],
[操作人],
[工作日期],
CAST(NULL AS int) AS [RID],
CAST(NULL AS int) AS [DID],
CAST(N'' AS nvarchar(100)) AS [项目号],
CAST(N'' AS nvarchar(100)) AS [物料编码],
CAST(N'' AS nvarchar(200)) AS [物料名称],
CAST(N'' AS nvarchar(100)) AS [图号],
CAST(N'' AS nvarchar(100)) AS [类别],
CAST(N'' AS nvarchar(500)) AS [任务描述],
CAST(N'' AS varchar(19)) AS [开始时间],
CAST(N'' AS varchar(19)) AS [结束时间],
COUNT(1) AS [报工次数],
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
CAST(N'' AS nvarchar(20)) AS [校验状态],
CAST(N'' AS nvarchar(500)) AS [进度说明],
CAST(N'' AS nvarchar(500)) AS [备注]
FROM base
GROUP BY [操作人], [工作日期]
UNION ALL
SELECT
3 AS [Level],
N'r-' + CAST([RID] AS nvarchar(20)) AS [id],
N'd-' + [操作人] + N'-' + [工作日期] AS [parentId],
[操作人],
[工作日期],
[RID],
[DID],
ISNULL([项目号], N'') AS [项目号],
ISNULL([物料编码], N'') AS [物料编码],
ISNULL([物料名称], N'') AS [物料名称],
ISNULL([图号], N'') AS [图号],
ISNULL([类别], N'') AS [类别],
ISNULL([任务描述], N'') AS [任务描述],
CONVERT(varchar(19), [开始时间], 120) AS [开始时间],
CONVERT(varchar(19), [结束时间], 120) AS [结束时间],
1 AS [报工次数],
CAST([工时秒数] / 3600.0 AS decimal(18, 2)) AS [工时小时],
CASE WHEN [已校验] = 1 THEN N'已校验' ELSE N'未校验' END AS [校验状态],
ISNULL([进度说明], N'') AS [进度说明],
ISNULL([备注], N'') AS [备注]
FROM base
)
SELECT *
FROM result
ORDER BY [操作人], [工作日期], [Level], [RID];
END
GO

View File

@@ -0,0 +1,260 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE [dbo].[装配中心任务看板_发货状态查询]
@生产订单 nvarchar(4000) = N'0',
@销售订单 nvarchar(4000) = N'0',
@物料名称 nvarchar(4000) = N'0',
@物料编码 nvarchar(4000) = N'0',
@要求发货日期 datetime = NULL,
@齐套 nvarchar(20) = N'',
@发料状态 nvarchar(20) = N''
AS
BEGIN
SET NOCOUNT ON;
SELECT
d.[TaskAID],
STRING_AGG(CONVERT(nvarchar(max), d.[操作人]), N',')
WITHIN GROUP (ORDER BY d.[操作人]) AS [操作人]
INTO #当前加工操作人汇总
FROM
(
SELECT DISTINCT
[TaskAID],
NULLIF(LTRIM(RTRIM([操作人])), N'') AS [操作人]
FROM [dbo].[YL_加工中心_操作记录表]
WHERE [操作类别] = N'开始加工'
AND [结束时间] IS NULL
AND [工位名称] LIKE N'%装配%'
AND [操作数值] IS NOT NULL
AND NULLIF(LTRIM(RTRIM([操作人])), N'') IS NOT NULL
) AS d
GROUP BY d.[TaskAID];
CREATE UNIQUE CLUSTERED INDEX [IX_当前加工操作人汇总_TaskAID]
ON #当前加工操作人汇总 ([TaskAID]);
SELECT
[TaskAID],
SUM(CASE WHEN [质检类型] = N'终检' THEN ISNULL([合格数], 0) ELSE 0 END) AS [合格数量],
SUM(CASE WHEN [质检类型] = N'收检' THEN ISNULL([不合格数], 0) ELSE 0 END) AS [不合格数量]
INTO #质检汇总
FROM [dbo].[View_质量检验_质检记录]
WHERE [质检类型] IN (N'收检', N'终检')
GROUP BY [TaskAID];
CREATE UNIQUE CLUSTERED INDEX [IX_质检汇总_TaskAID]
ON #质检汇总 ([TaskAID]);
SELECT
gs.[合同号],
SUM(gs.[总时长]) AS [合同装配工时]
INTO #合同装配工时汇总
FROM [dbo].[View_生产工时视图] AS gs
INNER JOIN [dbo].[登录基础数据_人员信息] AS ry ON gs.[操作人] = ry.[Personnel_Name]
WHERE ry.[班组] = N'装配'
GROUP BY gs.[合同号];
CREATE INDEX [IX_合同装配工时汇总_合同号]
ON #合同装配工时汇总 ([合同号]);
;WITH 发货数据 AS
(
SELECT
c.[DocStatus] AS [发货单状态],
c.[项目号],
c.[物料编号],
CONVERT(nvarchar(4000), c.[物料名称]) AS [物料描述],
c.[交货数量],
c.[要求发货时间],
c.[生产单号],
a.[TaskAID],
COALESCE(a.[订单编号], c.[生产单号]) AS [订单编号],
COALESCE(
NULLIF(CONVERT(nvarchar(200), a.[合同号]), N''),
NULLIF(CONVERT(nvarchar(200), c.[项目号]), N'')
) AS [合同号],
a.[订单类型],
a.[订单状态],
a.[计划数量],
a.[计量单位],
a.[下达日期],
a.[计划开始],
a.[计划完成],
a.[项目代码],
a.[重量],
a.[占用情况],
a.[加急状态],
a.[排产状态],
a.[同步时间],
a.[任务状态],
a.[标准工艺],
a.[生产工艺],
a.[齐套],
CONVERT(date, a.[派工时间]) AS [派发],
a.[自制件属性],
a.[周转单打印次数],
a.[单据状态],
a.[发料状态],
a.[拣配状态],
a.[计划号],
a.[加急数量],
a.[发货状态],
c.[要求发货时间] AS [要求发货日期],
a.[加急总数],
a.[入库数量],
a.[完成数量],
b.[操作人],
ISNULL(h.[合同装配工时], 0) AS [合同装配工时],
ISNULL(q.[合格数量], 0) AS [合格数量]
FROM [SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES] AS c
LEFT JOIN [YL_MESDB].[dbo].[View_生产订单_MES] AS a ON c.[生产单号] = a.[订单编号]
LEFT JOIN #当前加工操作人汇总 AS b ON a.[TaskAID] = b.[TaskAID]
LEFT JOIN #质检汇总 AS q ON a.[TaskAID] = q.[TaskAID]
LEFT JOIN #合同装配工时汇总 AS h ON a.[合同号] = h.[合同号]
WHERE
(
a.[TaskAID] IS NULL
OR a.[计划数量] IS NULL
OR ISNULL(q.[合格数量], 0) + ISNULL(q.[不合格数量], 0) <> a.[计划数量]
OR ISNULL(q.[合格数量], 0) <> ISNULL(a.[入库数量], 0)
)
AND (@生产订单 = N'0' OR CONVERT(nvarchar(100), c.[生产单号]) LIKE N'%' + @生产订单 + N'%')
AND
(
@销售订单 = N'0'
OR COALESCE(
NULLIF(CONVERT(nvarchar(200), a.[合同号]), N''),
NULLIF(CONVERT(nvarchar(200), c.[项目号]), N'')
) LIKE N'%' + @销售订单 + N'%'
)
AND
(
@物料名称 = N'0'
OR ISNULL(CONVERT(nvarchar(4000), c.[物料名称]), N'') LIKE N'%' + @物料名称 + N'%'
)
AND (@物料编码 = N'0' OR ISNULL(c.[物料编号], N'') LIKE N'%' + @物料编码 + N'%')
AND (@要求发货日期 IS NULL OR CONVERT(date, c.[要求发货时间]) = CONVERT(date, @要求发货日期))
AND
(
ISNULL(@齐套, N'') = N''
OR (@齐套 = N'是' AND ISNULL(a.[齐套], 0) = 1)
OR (@齐套 = N'否' AND ISNULL(a.[齐套], 0) <> 1)
)
AND
(
ISNULL(@发料状态, N'') = N''
OR (@发料状态 = N'发料齐套' AND (a.[发料状态] = N'发料齐套' OR ISNULL(a.[发料状态], N'') = N'1'))
OR (@发料状态 = N'发料缺件' AND (a.[发料状态] = N'发料缺件' OR ISNULL(a.[发料状态], N'') = N'2'))
OR
(
@发料状态 = N'未发料'
AND ISNULL(a.[发料状态], N'') NOT IN (N'1', N'2', N'发料齐套', N'发料缺件')
)
)
UNION ALL
SELECT
CAST(NULL AS char(1)) AS [发货单状态],
a.[项目代码] AS [项目号],
a.[物料编号],
CONVERT(nvarchar(4000), a.[物料描述]) AS [物料描述],
CAST(NULL AS numeric(19, 6)) AS [交货数量],
CAST(NULL AS datetime) AS [要求发货时间],
CAST(NULL AS int) AS [生产单号],
a.[TaskAID],
a.[订单编号],
CONVERT(nvarchar(200), a.[合同号]) AS [合同号],
a.[订单类型],
a.[订单状态],
a.[计划数量],
a.[计量单位],
a.[下达日期],
a.[计划开始],
a.[计划完成],
a.[项目代码],
a.[重量],
a.[占用情况],
a.[加急状态],
a.[排产状态],
a.[同步时间],
a.[任务状态],
a.[标准工艺],
a.[生产工艺],
a.[齐套],
CONVERT(date, a.[派工时间]) AS [派发],
a.[自制件属性],
a.[周转单打印次数],
a.[单据状态],
a.[发料状态],
a.[拣配状态],
a.[计划号],
a.[加急数量],
a.[发货状态],
a.[要求发货日期],
a.[加急总数],
a.[入库数量],
a.[完成数量],
b.[操作人],
ISNULL(h.[合同装配工时], 0) AS [合同装配工时],
ISNULL(q.[合格数量], 0) AS [合格数量]
FROM [YL_MESDB].[dbo].[View_生产订单_MES] AS a
LEFT JOIN #当前加工操作人汇总 AS b ON a.[TaskAID] = b.[TaskAID]
LEFT JOIN #质检汇总 AS q ON a.[TaskAID] = q.[TaskAID]
LEFT JOIN #合同装配工时汇总 AS h ON a.[合同号] = h.[合同号]
WHERE
a.[优先级] = N'是'
AND a.[自制件属性] LIKE N'%装配%'
AND
(
a.[计划数量] IS NULL
OR ISNULL(q.[合格数量], 0) + ISNULL(q.[不合格数量], 0) <> a.[计划数量]
OR ISNULL(q.[合格数量], 0) <> ISNULL(a.[入库数量], 0)
)
AND NOT EXISTS
(
SELECT 1
FROM [SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES] AS c
WHERE c.[生产单号] = a.[订单编号]
)
AND (@生产订单 = N'0' OR CONVERT(nvarchar(100), a.[订单编号]) LIKE N'%' + @生产订单 + N'%')
AND (@销售订单 = N'0' OR ISNULL(CONVERT(nvarchar(200), a.[合同号]), N'') LIKE N'%' + @销售订单 + N'%')
AND (@物料名称 = N'0' OR ISNULL(a.[物料描述], N'') LIKE N'%' + @物料名称 + N'%')
AND (@物料编码 = N'0' OR ISNULL(a.[物料编号], N'') LIKE N'%' + @物料编码 + N'%')
AND (@要求发货日期 IS NULL OR CONVERT(date, a.[要求发货日期]) = CONVERT(date, @要求发货日期))
AND
(
ISNULL(@齐套, N'') = N''
OR (@齐套 = N'是' AND ISNULL(a.[齐套], 0) = 1)
OR (@齐套 = N'否' AND ISNULL(a.[齐套], 0) <> 1)
)
AND
(
ISNULL(@发料状态, N'') = N''
OR (@发料状态 = N'发料齐套' AND (a.[发料状态] = N'发料齐套' OR ISNULL(a.[发料状态], N'') = N'1'))
OR (@发料状态 = N'发料缺件' AND (a.[发料状态] = N'发料缺件' OR ISNULL(a.[发料状态], N'') = N'2'))
OR
(
@发料状态 = N'未发料'
AND ISNULL(a.[发料状态], N'') NOT IN (N'1', N'2', N'发料齐套', N'发料缺件')
)
)
)
SELECT *
FROM 发货数据
ORDER BY
CASE WHEN [要求发货日期] IS NULL THEN 1 ELSE 0 END,
[要求发货日期],
[派发],
[订单编号],
[物料编号];
END
GO

View File

@@ -0,0 +1,209 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE [dbo].[装配中心任务看板_发货状态查询]
@生产订单 nvarchar(4000) = N'0',
@销售订单 nvarchar(4000) = N'0',
@物料名称 nvarchar(4000) = N'0',
@物料编码 nvarchar(4000) = N'0',
@要求发货日期 datetime = NULL,
@齐套 nvarchar(20) = N'',
@发料状态 nvarchar(20) = N''
AS
BEGIN
SET NOCOUNT ON;
;WITH 操作人去重 AS
(
SELECT DISTINCT
[TaskAID],
NULLIF(LTRIM(RTRIM([操作人])), N'') AS [操作人]
FROM [dbo].[YL_加工中心_操作记录表]
WHERE NULLIF(LTRIM(RTRIM([操作人])), N'') IS NOT NULL
),
操作人汇总 AS
(
SELECT
[TaskAID],
STRING_AGG(CONVERT(nvarchar(max), [操作人]), N',')
WITHIN GROUP (ORDER BY [操作人]) AS [操作人]
FROM 操作人去重
GROUP BY [TaskAID]
),
质检汇总 AS
(
SELECT
[TaskAID],
SUM(ISNULL([合格数], 0)) AS [合格数量]
FROM [dbo].[View_质量检验_质检记录]
GROUP BY [TaskAID]
),
合同装配工时汇总 AS
(
SELECT
gs.[合同号],
SUM(gs.[总时长]) AS [合同装配工时]
FROM [dbo].[View_生产工时视图] AS gs
INNER JOIN [dbo].[登录基础数据_人员信息] AS ry ON gs.[操作人] = ry.[Personnel_Name]
WHERE ry.[班组] = N'装配'
GROUP BY gs.[合同号]
)
SELECT
c.[DocStatus] AS [发货单状态],
c.[项目号],
c.[物料编号],
CONVERT(nvarchar(4000), c.[物料名称]) AS [物料描述],
c.[交货数量],
c.[要求发货时间],
c.[生产单号],
a.[TaskAID],
COALESCE(a.[订单编号], c.[生产单号]) AS [订单编号],
COALESCE(
NULLIF(CONVERT(nvarchar(200), a.[合同号]), N''),
NULLIF(CONVERT(nvarchar(200), c.[项目号]), N'')
) AS [合同号],
a.[订单类型],
a.[订单状态],
a.[计划数量],
a.[计量单位],
a.[下达日期],
a.[计划开始],
a.[计划完成],
a.[项目代码],
a.[重量],
a.[占用情况],
a.[加急状态],
a.[排产状态],
a.[同步时间],
a.[任务状态],
a.[标准工艺],
a.[生产工艺],
a.[齐套],
a.[自制件属性],
a.[周转单打印次数],
a.[单据状态],
a.[发料状态],
a.[拣配状态],
a.[计划号],
a.[加急数量],
a.[发货状态],
c.[要求发货时间] AS [要求发货日期],
a.[加急总数],
a.[入库数量],
a.[完成数量],
b.[操作人],
ISNULL(h.[合同装配工时], 0) AS [合同装配工时],
ISNULL(q.[合格数量], 0) AS [合格数量]
FROM [SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES] AS c
LEFT JOIN [YL_MESDB].[dbo].[View_生产订单_MES] AS a ON c.[生产单号] = a.[订单编号]
LEFT JOIN 操作人汇总 AS b ON a.[TaskAID] = b.[TaskAID]
LEFT JOIN 质检汇总 AS q ON a.[TaskAID] = q.[TaskAID]
LEFT JOIN 合同装配工时汇总 AS h ON a.[合同号] = h.[合同号]
WHERE
(@生产订单 = N'0' OR CONVERT(nvarchar(100), c.[生产单号]) LIKE N'%' + @生产订单 + N'%')
AND
(
@销售订单 = N'0'
OR COALESCE(
NULLIF(CONVERT(nvarchar(200), a.[合同号]), N''),
NULLIF(CONVERT(nvarchar(200), c.[项目号]), N'')
) LIKE N'%' + @销售订单 + N'%'
)
AND
(
@物料名称 = N'0'
OR ISNULL(CONVERT(nvarchar(4000), c.[物料名称]), N'') LIKE N'%' + @物料名称 + N'%'
)
AND (@物料编码 = N'0' OR ISNULL(c.[物料编号], N'') LIKE N'%' + @物料编码 + N'%')
AND (@要求发货日期 IS NULL OR CONVERT(date, c.[要求发货时间]) = CONVERT(date, @要求发货日期))
AND
(
ISNULL(@齐套, N'') = N''
OR a.[TaskAID] IS NULL
OR (@齐套 = N'是' AND ISNULL(a.[齐套], 0) = 1)
OR (@齐套 = N'否' AND ISNULL(a.[齐套], 0) <> 1)
)
AND
(
ISNULL(@发料状态, N'') = N''
OR a.[TaskAID] IS NULL
OR (@发料状态 = N'发料齐套' AND (a.[发料状态] = N'发料齐套' OR ISNULL(a.[发料状态], N'') = N'1'))
OR (@发料状态 = N'发料缺件' AND (a.[发料状态] = N'发料缺件' OR ISNULL(a.[发料状态], N'') = N'2'))
OR
(
@发料状态 = N'未发料'
AND ISNULL(a.[发料状态], N'') NOT IN (N'1', N'2', N'发料齐套', N'发料缺件')
)
)
UNION ALL
SELECT
CAST(NULL AS char(1)) AS [发货单状态],
a.[项目代码] AS [项目号],
a.[物料编号],
CONVERT(nvarchar(4000), a.[物料描述]) AS [物料描述],
CAST(NULL AS numeric(19, 6)) AS [交货数量],
CAST(NULL AS datetime) AS [要求发货时间],
CAST(NULL AS int) AS [生产单号],
a.[TaskAID],
a.[订单编号],
CONVERT(nvarchar(200), a.[合同号]) AS [合同号],
a.[订单类型],
a.[订单状态],
a.[计划数量],
a.[计量单位],
a.[下达日期],
a.[计划开始],
a.[计划完成],
a.[项目代码],
a.[重量],
a.[占用情况],
a.[加急状态],
a.[排产状态],
a.[同步时间],
a.[任务状态],
a.[标准工艺],
a.[生产工艺],
a.[齐套],
a.[自制件属性],
a.[周转单打印次数],
a.[单据状态],
a.[发料状态],
a.[拣配状态],
a.[计划号],
a.[加急数量],
a.[发货状态],
a.[要求发货日期],
a.[加急总数],
a.[入库数量],
a.[完成数量],
b.[操作人],
ISNULL(h.[合同装配工时], 0) AS [合同装配工时],
ISNULL(q.[合格数量], 0) AS [合格数量]
FROM [YL_MESDB].[dbo].[View_生产订单_MES] AS a
LEFT JOIN 操作人汇总 AS b ON a.[TaskAID] = b.[TaskAID]
LEFT JOIN 质检汇总 AS q ON a.[TaskAID] = q.[TaskAID]
LEFT JOIN 合同装配工时汇总 AS h ON a.[合同号] = h.[合同号]
WHERE
a.[优先级] = N'是'
AND a.[自制件属性] LIKE N'%装配%'
AND NOT EXISTS
(
SELECT 1
FROM [SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES] AS c
WHERE c.[生产单号] = a.[订单编号]
)
AND (@生产订单 = N'0' OR CONVERT(nvarchar(100), a.[订单编号]) LIKE N'%' + @生产订单 + N'%')
AND (@销售订单 = N'0' OR ISNULL(CONVERT(nvarchar(200), a.[合同号]), N'') LIKE N'%' + @销售订单 + N'%')
AND (@物料名称 = N'0' OR ISNULL(a.[物料描述], N'') LIKE N'%' + @物料名称 + N'%')
AND (@物料编码 = N'0' OR ISNULL(a.[物料编号], N'') LIKE N'%' + @物料编码 + N'%')
AND (@要求发货日期 IS NULL OR CONVERT(date, a.[要求发货日期]) = CONVERT(date, @要求发货日期))
ORDER BY [要求发货日期], [订单编号], [物料编号];
END
GO