feat: update production reporting workflows

This commit is contained in:
2026-07-07 17:30:12 +08:00
parent 1399b9a80a
commit c4a2f6e42e
24 changed files with 3713 additions and 35 deletions

View File

@@ -0,0 +1,773 @@
/*
设计报工任务模块
说明:
1. 新建独立设计报工表和独立存储过程。
2. 不写入现有生产报工表。
3. 不上传 SAP。
4. 不新增菜单权限,不写入菜单表和角色权限表。
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'[dbo].[MES_设计报工_任务]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[MES_设计报工_任务]
(
[DID] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
[] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] nvarchar(200) NULL,
[] nvarchar(100) NULL,
[] nvarchar(500) NULL,
[] nvarchar(100) NULL,
[] nvarchar(200) NULL,
[] nvarchar(max) NULL,
[] nvarchar(100) NULL,
[] nvarchar(500) NULL,
[ID] nvarchar(1000) NULL,
[] nvarchar(1000) NULL,
[] datetime NULL,
[] datetime NULL,
[] nvarchar(50) NOT NULL CONSTRAINT [DF_MES_设计报工_任务_单据状态] DEFAULT (N'待开始'),
[] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_任务_创建日期] DEFAULT (GETDATE()),
[] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] datetime NULL,
[] nvarchar(500) NULL
);
END
GO
IF OBJECT_ID(N'[dbo].[MES_设计报工_记录]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[MES_设计报工_记录]
(
[RID] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
[DID] int NOT NULL,
[ID] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] datetime NULL,
[] datetime NULL,
[] int NULL,
[] nvarchar(50) NOT NULL CONSTRAINT [DF_MES_设计报工_记录_报工状态] DEFAULT (N'执行中'),
[] bit NOT NULL CONSTRAINT [DF_MES_设计报工_记录_已校验] DEFAULT (0),
[ID] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] datetime NULL,
[] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_记录_创建时间] DEFAULT (GETDATE()),
[] nvarchar(500) NULL,
CONSTRAINT [FK_MES_设计报工_记录_任务] FOREIGN KEY ([DID]) REFERENCES [dbo].[MES_设计报工_任务]([DID])
);
END
GO
IF OBJECT_ID(N'[dbo].[MES_设计报工_校验记录]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[MES_设计报工_校验记录]
(
[VID] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
[RID] int NOT NULL,
[DID] int NOT NULL,
[] datetime NULL,
[] datetime NULL,
[] datetime NULL,
[] datetime NULL,
[] int NULL,
[ID] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_校验记录_校验时间] DEFAULT (GETDATE()),
[] nvarchar(500) NULL
);
END
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_MES_设计报工_任务_查询' AND object_id = OBJECT_ID(N'[dbo].[MES_设计报工_任务]'))
CREATE INDEX [IX_MES_设计报工_任务_查询] ON [dbo].[MES_设计报工_任务]([], [], [], [], []);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_MES_设计报工_记录_DID' AND object_id = OBJECT_ID(N'[dbo].[MES_设计报工_记录]'))
CREATE INDEX [IX_MES_设计报工_记录_DID] ON [dbo].[MES_设计报工_记录]([DID], [], [], []);
GO
CREATE OR ALTER PROCEDURE [dbo].[_物料查询]
@ nvarchar(200) = N''
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 100
CAST([] AS nvarchar(100)) AS [],
ISNULL(
NULLIF(CAST([] AS nvarchar(200)), N''),
CAST([] AS nvarchar(200))
) AS [],
CAST([] AS nvarchar(500)) AS [],
CAST([] AS nvarchar(200)) AS [],
CAST([] AS nvarchar(100)) AS []
FROM [SAP].[SBO_YL].[dbo].[UBT_OITM]
WHERE
ISNULL(@, N'') = N''
OR CAST([] AS nvarchar(100)) LIKE N'%' + @ + N'%'
OR CAST([] AS nvarchar(200)) LIKE N'%' + @ + N'%'
OR CAST([] AS nvarchar(500)) LIKE N'%' + @ + N'%'
ORDER BY CAST([] AS nvarchar(100));
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_人员查询]
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ table
(
[] int NULL,
[] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] nvarchar(100) NULL,
[] nvarchar(100) NULL
);
INSERT INTO @
EXEC [dbo].[_人员管理_所有有效人员查询];
SELECT TOP 200
CAST([] AS nvarchar(50)) AS [],
[],
[],
[],
[]
FROM @
WHERE
ISNULL(@, N'') = N''
OR CAST([] AS nvarchar(50)) LIKE N'%' + @ + N'%'
OR [] LIKE N'%' + @ + N'%'
OR [] LIKE N'%' + @ + N'%'
ORDER BY [];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_项目查询]
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT TOP 100
[]
FROM [dbo].[MES_设计报工_任务]
WHERE
ISNULL([], N'') <> N''
AND (ISNULL(@, N'') = N'' OR [] LIKE N'%' + @ + N'%')
ORDER BY [];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@_Start nvarchar(30) = N'',
@_End nvarchar(30) = N'',
@_Start nvarchar(30) = N'',
@_End nvarchar(30) = N'',
@ nvarchar(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @1 datetime = TRY_CONVERT(datetime, NULLIF(@_Start, N''));
DECLARE @2 datetime = TRY_CONVERT(datetime, NULLIF(@_End, N''));
DECLARE @1 datetime = TRY_CONVERT(datetime, NULLIF(@_Start, N''));
DECLARE @2 datetime = TRY_CONVERT(datetime, NULLIF(@_End, N''));
SELECT TOP 1000
t.[DID],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[ID],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
ISNULL(r.[], 0) AS [],
ISNULL(r.[], 0) AS [],
CONVERT(varchar(19), r.[], 120) AS [],
CONVERT(varchar(19), r.[], 120) AS []
FROM [dbo].[MES_设计报工_任务] AS t
OUTER APPLY
(
SELECT
COUNT(1) AS [],
SUM(CASE WHEN rr.[] IS NULL THEN 1 ELSE 0 END) AS [],
MAX(rr.[]) AS [],
MAX(rr.[]) AS []
FROM [dbo].[MES_设计报工_记录] AS rr
WHERE rr.[DID] = t.[DID]
) AS r
WHERE
(@DID IS NULL OR @DID = 0 OR t.[DID] = @DID)
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 (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR @ = N'全部' OR t.[] = @)
AND (@1 IS NULL OR t.[] >= @1)
AND (@2 IS NULL OR t.[] < DATEADD(day, 1, @2))
AND (@1 IS NULL OR t.[] >= @1)
AND (@2 IS NULL OR t.[] < DATEADD(day, 1, @2))
ORDER BY t.[DID] DESC;
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_新增]
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(max) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@ID nvarchar(1000) = N'',
@ nvarchar(1000) = N'',
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N''
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[MES_设计报工_任务]
(
[], [], [], [], [],
[], [], [],
[], [], [ID], [],
[], [], [],
[], [], [], []
)
VALUES
(
NULLIF(@, N''), NULLIF(@, N''), NULLIF(@, N''), NULLIF(@, N''), NULLIF(@, N''),
NULLIF(@, N''), NULLIF(@, N''), NULLIF(@, N''),
NULLIF(@, N''), NULLIF(@, N''), NULLIF(@ID, N''), NULLIF(@, N''),
TRY_CONVERT(datetime, NULLIF(@, N'')), TRY_CONVERT(datetime, NULLIF(@, N'')), N'待开始',
NULLIF(@, N''), NULLIF(@, N''), GETDATE(), NULLIF(@, N'')
);
SELECT CAST(1 AS int) AS [result], N'新增成功' AS [message], SCOPE_IDENTITY() AS [DID];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_编辑]
@DID int,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(max) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N'',
@ID nvarchar(1000) = N'',
@ nvarchar(1000) = N'',
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N''
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[] = NULLIF(@, N''),
[ID] = NULLIF(@ID, N''),
[] = NULLIF(@, N''),
[] = TRY_CONVERT(datetime, NULLIF(@, N'')),
[] = TRY_CONVERT(datetime, NULLIF(@, N'')),
[] = NULLIF(@, N''),
[] = GETDATE(),
[] = NULLIF(@, N'')
WHERE [DID] = @DID;
SELECT CAST(1 AS int) AS [result], N'编辑成功' AS [message];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_删除]
@DID int
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID)
BEGIN
SELECT CAST(0 AS int) AS [result], N'该任务已有设计报工记录,不能删除' AS [message];
RETURN;
END
DELETE FROM [dbo].[MES_设计报工_任务]
WHERE [DID] = @DID;
SELECT CAST(1 AS int) AS [result], N'删除成功' AS [message];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_开始]
@DID int,
@ID nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
IF EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID AND [] = N'已完成')
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务已完成,不能开始' AS [message];
RETURN;
END
IF EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL)
BEGIN
SELECT CAST(0 AS int) AS [result], N'该任务存在未结束的报工记录' AS [message];
RETURN;
END
INSERT INTO [dbo].[MES_设计报工_记录]([DID], [ID], [], [], [])
VALUES(@DID, NULLIF(@ID, N''), NULLIF(@, N''), GETDATE(), N'执行中');
UPDATE [dbo].[MES_设计报工_任务]
SET [] = N'执行中', [] = NULLIF(@, N''), [] = GETDATE()
WHERE [DID] = @DID;
SELECT CAST(1 AS int) AS [result], N'开始成功' AS [message], SCOPE_IDENTITY() AS [RID];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_结束]
@DID int,
@ID nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @RID int;
SELECT TOP 1 @RID = [RID]
FROM [dbo].[MES_设计报工_记录]
WHERE [DID] = @DID AND [] IS NULL
ORDER BY [] DESC, [RID] DESC;
IF @RID IS NULL
BEGIN
SELECT CAST(0 AS int) AS [result], N'没有未结束的报工记录' AS [message];
RETURN;
END
UPDATE [dbo].[MES_设计报工_记录]
SET
[] = GETDATE(),
[] = DATEDIFF(second, [], GETDATE()),
[] = N'已结束'
WHERE [RID] = @RID;
UPDATE [dbo].[MES_设计报工_任务]
SET [] = N'已结束', [] = NULLIF(@, N''), [] = GETDATE()
WHERE [DID] = @DID AND [] <> N'已完成';
SELECT CAST(1 AS int) AS [result], N'结束成功' AS [message], @RID AS [RID];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_完成]
@DID int,
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
IF EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务存在未结束报工,不能完成' AS [message];
RETURN;
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NOT NULL)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务未产生已结束报工,不能完成' AS [message];
RETURN;
END
UPDATE [dbo].[MES_设计报工_任务]
SET [] = N'已完成', [] = NULLIF(@, N''), [] = GETDATE()
WHERE [DID] = @DID;
SELECT CAST(1 AS int) AS [result], N'完成成功' AS [message];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_记录_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
SELECT TOP 1000
r.[RID],
r.[DID],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
r.[ID],
r.[],
CONVERT(varchar(19), r.[], 120) AS [],
CONVERT(varchar(19), r.[], 120) AS [],
r.[],
CAST(CAST(ISNULL(r.[], 0) / 3600.0 AS decimal(18, 2)) AS varchar(30)) AS [],
r.[],
r.[],
CASE WHEN r.[] = 1 THEN N'已校验' ELSE N'未校验' END AS [],
r.[],
CONVERT(varchar(19), r.[], 120) AS [],
r.[],
t.[]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
WHERE
(@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR r.[] LIKE N'%' + @ + N'%')
AND (@ IS NULL OR r.[] >= @)
AND (@ IS NULL OR r.[] < DATEADD(day, 1, @))
AND (
ISNULL(@, N'') = N''
OR @ = N'全部'
OR (@ = N'已校验' AND r.[] = 1)
OR (@ = N'未校验' AND r.[] = 0)
)
ORDER BY r.[RID] DESC;
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时校验_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(50) = N'未校验'
AS
BEGIN
SET NOCOUNT ON;
EXEC [dbo].[_记录_查询]
@DID = @DID,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @,
@ = @;
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时校验_保存]
@RID int,
@ nvarchar(30),
@ nvarchar(30),
@ID nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @DID int;
DECLARE @ datetime;
DECLARE @ datetime;
SELECT @DID = [DID], @ = [], @ = []
FROM [dbo].[MES_设计报工_记录]
WHERE [RID] = @RID;
IF @DID IS NULL
BEGIN
SELECT CAST(0 AS int) AS [result], N'报工记录不存在' AS [message];
RETURN;
END
IF @ IS NULL OR @ IS NULL OR @ <= @
BEGIN
SELECT CAST(0 AS int) AS [result], N'开始时间和结束时间不合法' AS [message];
RETURN;
END
INSERT INTO [dbo].[MES_设计报工_校验记录]
(
[RID], [DID], [], [],
[], [], [],
[ID], [], [], []
)
VALUES
(
@RID, @DID, @, @,
@, @, DATEDIFF(second, @, @),
NULLIF(@ID, N''), NULLIF(@, N''), GETDATE(), NULLIF(@, N'')
);
UPDATE [dbo].[MES_设计报工_记录]
SET
[] = @,
[] = @,
[] = DATEDIFF(second, @, @),
[] = N'已结束',
[] = 1,
[ID] = NULLIF(@ID, N''),
[] = NULLIF(@, N''),
[] = GETDATE(),
[] = NULLIF(@, N'')
WHERE [RID] = @RID;
SELECT CAST(1 AS int) AS [result], N'校验成功' AS [message];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时校验_批量保存]
@RIDs nvarchar(max),
@ID nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @RID表 table([RID] int PRIMARY KEY);
DECLARE @xml xml;
SET @xml = TRY_CONVERT(xml, N'<r><i>' + REPLACE(ISNULL(@RIDs, N''), N',', N'</i><i>') + N'</i></r>');
INSERT INTO @RID表([RID])
SELECT DISTINCT TRY_CONVERT(int, T.c.value(N'.', N'nvarchar(30)'))
FROM @xml.nodes(N'/r/i') AS T(c)
WHERE TRY_CONVERT(int, T.c.value(N'.', N'nvarchar(30)')) IS NOT NULL;
IF NOT EXISTS (SELECT 1 FROM @RID表)
BEGIN
SELECT CAST(0 AS int) AS [result], N'没有可校验记录' AS [message];
RETURN;
END
INSERT INTO [dbo].[MES_设计报工_校验记录]
(
[RID], [DID], [], [],
[], [], [],
[ID], [], [], []
)
SELECT
r.[RID], r.[DID], r.[], r.[],
r.[], r.[], r.[],
NULLIF(@ID, N''), NULLIF(@, N''), GETDATE(), N'批量校验'
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN @RID表 AS ids ON r.[RID] = ids.[RID]
WHERE r.[] IS NOT NULL AND r.[] IS NOT NULL;
UPDATE r
SET
[] = 1,
[ID] = NULLIF(@ID, N''),
[] = NULLIF(@, N''),
[] = GETDATE()
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN @RID表 AS ids ON r.[RID] = ids.[RID]
WHERE r.[] IS NOT NULL AND r.[] IS NOT NULL;
SELECT CAST(1 AS int) AS [result], N'批量校验成功' AS [message], @@ROWCOUNT AS [count];
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时报表_作业者工时_查询]
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@DID int = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
;WITH base AS
(
SELECT
r.[RID],
r.[DID],
ISNULL(r.[], N'') AS [],
CONVERT(varchar(10), r.[], 120) AS [],
t.[],
t.[],
t.[],
t.[],
t.[],
r.[],
r.[],
ISNULL(r.[], 0) AS [],
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 (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
),
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(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 []
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(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 []
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 [],
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 []
FROM base
)
SELECT *
FROM result
ORDER BY [], [], [Level], [RID];
END
GO

View File

@@ -0,0 +1,210 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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
CONVERT(nvarchar(100), t.) AS
FROM dbo.YL_加工中心_操作记录表 AS t
WHERE t. = N'开始加工'
AND t. IS NULL
AND t. LIKE N'%装配%'
AND t. IS NOT NULL
GROUP BY CONVERT(nvarchar(100), t.)
),
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
c.,
c.,
c.,
c.,
c.,
c.,
c.,
c.,
c.,
c.,
c.,
c.
FROM AS c
WHERE NOT EXISTS
(
SELECT 1
FROM AS u
WHERE u. = CONVERT(nvarchar(100), c.)
)
ORDER BY c.;
RETURN;
END
;WITH AS
(
SELECT
CONVERT(nvarchar(100), t.) AS
FROM dbo.YL_加工中心_操作记录表 AS t
WHERE t. = N'开始加工'
AND t. IS NULL
AND t. LIKE N'%装配%'
AND t. IS NOT NULL
GROUP BY CONVERT(nvarchar(100), t.)
)
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 EXISTS
(
SELECT 1
FROM AS u
WHERE u. = 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,280 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_结算工时_查询]
@ NVARCHAR(50) = NULL,
@ NVARCHAR(100) = NULL,
@ NVARCHAR(50) = NULL,
@ NVARCHAR(50) = NULL,
@ DATE = NULL,
@ DATE = NULL,
@ INT = 100
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TopCount INT = CASE WHEN ISNULL(@, 0) <= 0 THEN 100 ELSE @ END;
CREATE TABLE #基础数据
(
RowID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
TaskAID BIGINT NULL,
DATETIME NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL,
NVARCHAR(100) NULL,
INT NULL,
INT NULL,
NVARCHAR(100) NULL,
INT NOT NULL,
INT NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL,
NVARCHAR(100) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL
);
INSERT INTO #基础数据
(
TaskAID,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
)
SELECT TOP (@TopCount)
v.TaskAID,
v.,
v.,
v.,
v.,
v.,
v.,
v.,
q. AS ,
q.,
q. AS ,
q. AS ,
q.,
COALESCE(NULLIF(q., N''), v.) AS ,
p.,
p.
FROM dbo.MES_接口_生产计划 AS p
INNER JOIN dbo.MES_接口_生产计划_生产任务 AS q
ON q. = p.
AND q. = N'pit_Resource'
INNER JOIN dbo.View_生产工时视图 AS v
ON v.TaskAID = q.AID
WHERE p. IS NOT NULL
AND p. > 6000
AND (@ IS NULL OR @ = N'' OR v. >= @)
AND (@ IS NULL OR @ = N'' OR v. < DATEADD(DAY, 1, @))
AND (@ IS NULL OR @ = N'' OR v. LIKE N'%' + @ + N'%')
AND (@ IS NULL OR @ = N'' OR q. LIKE N'%' + @ + N'%')
AND (@ IS NULL OR @ = N'' OR CONVERT(NVARCHAR(50), q.) = @)
AND (@ IS NULL OR @ = N'' OR COALESCE(NULLIF(q., N''), v.) LIKE N'%' + @ + N'%')
ORDER BY q. DESC, q., v. DESC;
CREATE INDEX IX_基础数据_TaskStart ON #基础数据 (TaskAID, 开始时间);
CREATE TABLE #操作人拼接
(
TaskAID BIGINT NOT NULL,
VARCHAR(19) NOT NULL,
NVARCHAR(MAX) NULL,
PRIMARY KEY (TaskAID, )
);
INSERT INTO #操作人拼接 (TaskAID, 开始时间, 操作人)
SELECT
TaskAID,
,
STRING_AGG(CONVERT(NVARCHAR(MAX), ), N',') AS
FROM
(
SELECT DISTINCT
k.TaskAID,
k.,
LTRIM(RTRIM(s.value)) AS
FROM
(
SELECT DISTINCT
TaskAID,
CONVERT(VARCHAR(19), , 120) AS
FROM #基础数据
WHERE TaskAID IS NOT NULL
AND IS NOT NULL
) AS k
INNER JOIN dbo.View_生产工时视图全部 AS v2
ON v2.TaskAID = k.TaskAID
AND v2. >= CONVERT(DATETIME, k., 120)
AND v2. < DATEADD(SECOND, 1, CONVERT(DATETIME, k., 120))
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(v2., N''), N'', N','), N'', N','), N',') AS s
WHERE ISNULL(v2., 0) <= 0
AND NULLIF(LTRIM(RTRIM(s.value)), N'') IS NOT NULL
) AS x
GROUP BY TaskAID, ;
;WITH AS
(
SELECT
ISNULL(b., b.) AS ,
ISNULL(b., b.) AS ,
b.,
b.,
b.TaskAID,
b.,
b.,
ISNULL(o., N'') AS ,
CASE
WHEN ISNULL(b., N'') LIKE N'%辅助%' OR ISNULL(b., N'') LIKE N'%辅助%' THEN N'辅助结束'
ELSE N'报工'
END AS ,
CAST(ISNULL(b., 0) / 60.0 / 60.0 AS DECIMAL(18, 4)) AS ,
ISNULL(b., 0) AS
FROM #基础数据 AS b
LEFT JOIN #操作人拼接 AS o
ON o.TaskAID = b.TaskAID
AND o. = CONVERT(VARCHAR(19), b., 120)
),
AS
(
SELECT
,
,
,
,
MAX() AS ,
AS ,
COUNT(*) AS ,
SUM(CASE WHEN = N'报工' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'辅助结束' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'报工' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'辅助结束' THEN ELSE 0 END) AS ,
SUM() AS
FROM
GROUP BY , , , ,
),
AS
(
SELECT
,
,
ISNULL(, N'') AS ,
STRING_AGG(CONVERT(NVARCHAR(MAX), ), N',') AS
FROM
(
SELECT DISTINCT
j.,
j.,
ISNULL(j., N'') AS ,
LTRIM(RTRIM(s.value)) AS
FROM AS j
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(j., N''), N'', N','), N'', N','), N',') AS s
WHERE NULLIF(LTRIM(RTRIM(s.value)), N'') IS NOT NULL
) AS x
GROUP BY , , ISNULL(, N'')
),
AS
(
SELECT
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
ISNULL(o., N'') AS
FROM AS b
LEFT JOIN AS o
ON o. = b.
AND o. = b.
AND o. = ISNULL(b., N'')
),
AS
(
SELECT
,
,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS
FROM
GROUP BY ,
)
SELECT
1 AS [Level],
AS materialCode,
AS materialDesc,
ISNULL(, N'') + N' ' + ISNULL(, N'') AS taskDescription,
CAST(0 AS INT) AS productionOrderNo,
N'' AS station,
CAST( AS VARCHAR(20)) AS reportWorkHours,
CAST( AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST( AS VARCHAR(20)) AS reportFinishQty,
CAST( AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST( AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN > 0 THEN ( - 0 * ) / ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
N'' AS operatorNames,
CAST( AS VARCHAR(20)) AS recordCount,
CAST(0 AS INT) AS
FROM
UNION ALL
SELECT
2 AS [Level],
AS materialCode,
AS materialDesc,
ISNULL(, N'') + N' ' + ISNULL(, N'')
+ CASE WHEN NULLIF(ISNULL(, N''), N'') IS NULL THEN N'' ELSE N' ' + END
+ CASE WHEN IS NULL THEN N'' ELSE N'' + CAST( AS VARCHAR(20)) END AS taskDescription,
AS productionOrderNo,
ISNULL(, N'') AS station,
CAST( AS VARCHAR(20)) AS reportWorkHours,
CAST( AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST( AS VARCHAR(20)) AS reportFinishQty,
CAST( AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST( AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN > 0 THEN ( - 0 * ) / ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
ISNULL(, N'') AS operatorNames,
CAST( AS VARCHAR(20)) AS recordCount,
FROM
ORDER BY productionOrderNo, , materialCode, [Level], station;
END
GO

View File

@@ -0,0 +1,378 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_结算工时_查询]
@ NVARCHAR(50) = NULL,
@ NVARCHAR(100) = NULL,
@ NVARCHAR(50) = NULL,
@ NVARCHAR(50) = NULL,
@ DATE = NULL,
@ DATE = NULL,
@ INT = 100
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TopCount INT = CASE WHEN ISNULL(@, 0) <= 0 THEN 100 ELSE @ END;
CREATE TABLE #任务
(
TaskAID BIGINT NOT NULL PRIMARY KEY,
INT NOT NULL,
INT NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL,
NVARCHAR(100) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL
);
INSERT INTO #任务
(
TaskAID,
,
,
,
,
,
,
,
,
)
SELECT TOP (@TopCount)
q.AID AS TaskAID,
q.,
q.,
q. AS ,
q. AS ,
q.,
q. AS ,
p.,
p.,
p.
FROM dbo.MES_接口_生产计划 AS p
INNER JOIN dbo.MES_接口_生产计划_生产任务 AS q
ON q. = p.
AND q. = N'pit_Resource'
WHERE p. IS NOT NULL
AND p. > 6000
AND (@ IS NULL OR @ = N'' OR p. LIKE N'%' + @ + N'%')
AND (@ IS NULL OR @ = N'' OR q. LIKE N'%' + @ + N'%')
AND (@ IS NULL OR @ = N'' OR CONVERT(NVARCHAR(50), q.) = @)
AND (@ IS NULL OR @ = N'' OR q. LIKE N'%' + @ + N'%')
ORDER BY q. DESC, q.;
CREATE TABLE #基础数据
(
TaskAID BIGINT NULL,
DATETIME NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL,
NVARCHAR(100) NULL,
INT NULL,
INT NULL,
NVARCHAR(100) NULL,
INT NOT NULL,
INT NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(100) NULL,
NVARCHAR(100) NULL,
NVARCHAR(1000) NULL,
NVARCHAR(1000) NULL
);
INSERT INTO #基础数据
(
TaskAID,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
)
SELECT
t.TaskAID,
v.,
v.,
v.,
v.,
v.,
v.,
t. AS ,
t. AS ,
t.,
t.,
t.,
t.,
t.,
t.,
t.
FROM #任务 AS t
OUTER APPLY
(
SELECT
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS ,
ISNULL(c., o.) AS
FROM dbo.YL_加工中心_操作记录表 AS o
LEFT JOIN dbo._工时校验_校验工时表 AS c
ON o.AID = c.id
WHERE o.TaskAID = t.TaskAID
AND o. <> N'外协'
AND (o. <> N'报工' OR ISNULL(c., o.) IS NOT NULL)
AND (c.AID IS NOT NULL OR o. <> N'收料')
AND (
c.AID IS NOT NULL
OR o. NOT IN (N'开始加工', N'辅助开始')
OR o. IS NOT NULL
OR NOT EXISTS
(
SELECT 1
FROM dbo.YL_加工中心_操作记录表 AS t2
WHERE t2. IN (N'报工', N'辅助结束')
AND t2.TaskAID = o.TaskAID
AND t2. = o.
)
)
AND (
o. NOT IN (N'辅助结束')
OR NOT EXISTS
(
SELECT 1
FROM dbo.YL_加工中心_操作记录表 AS p
WHERE p. = N'辅助结束'
AND p.TaskAID = o.TaskAID
AND p. IS NULL
)
)
AND (
o. NOT IN (N'开始加工', N'辅助开始')
OR NOT EXISTS
(
SELECT 1
FROM dbo.YL_加工中心_操作记录表 AS p
WHERE p. = N'暂停'
AND p.TaskAID = o.TaskAID
AND p. = o.
AND p. = o.
)
)
AND (
o. IS NOT NULL
OR (o. IN (N'开始加工', N'辅助开始') AND o. IS NULL)
OR o. <> N''
)
) AS v
WHERE (@ IS NULL OR @ = N'' OR v. >= @)
AND (@ IS NULL OR @ = N'' OR v. < DATEADD(DAY, 1, @));
CREATE INDEX IX_基础数据_TaskStart ON #基础数据 (TaskAID, 开始时间);
CREATE TABLE #操作人拼接
(
TaskAID BIGINT NOT NULL,
VARCHAR(19) NOT NULL,
NVARCHAR(MAX) NULL,
PRIMARY KEY (TaskAID, )
);
INSERT INTO #操作人拼接 (TaskAID, 开始时间, 操作人)
SELECT
TaskAID,
,
STRING_AGG(CONVERT(NVARCHAR(MAX), ), N',') AS
FROM
(
SELECT DISTINCT
k.TaskAID,
k.,
LTRIM(RTRIM(s.value)) AS
FROM
(
SELECT DISTINCT
TaskAID,
CONVERT(VARCHAR(19), , 120) AS
FROM #基础数据
WHERE TaskAID IS NOT NULL
AND IS NOT NULL
) AS k
INNER JOIN dbo.YL_加工中心_操作记录表 AS o
ON o.TaskAID = k.TaskAID
AND o. >= CONVERT(DATETIME, k., 120)
AND o. < DATEADD(SECOND, 1, CONVERT(DATETIME, k., 120))
LEFT JOIN dbo._工时校验_校验工时表 AS c
ON o.AID = c.id
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(ISNULL(c., o.), N''), N'', N','), N'', N','), N',') AS s
WHERE ISNULL(ISNULL(c., o.), 0) <= 0
AND NULLIF(LTRIM(RTRIM(s.value)), N'') IS NOT NULL
) AS x
GROUP BY TaskAID, ;
;WITH AS
(
SELECT
ISNULL(b., b.) AS ,
ISNULL(b., b.) AS ,
b.,
b.,
b.TaskAID,
b.,
b.,
ISNULL(o., N'') AS ,
CASE
WHEN ISNULL(b., N'') LIKE N'%辅助%' OR ISNULL(b., N'') LIKE N'%辅助%' THEN N'辅助结束'
ELSE N'报工'
END AS ,
CAST(ISNULL(b., 0) / 60.0 / 60.0 AS DECIMAL(18, 4)) AS ,
ISNULL(b., 0) AS
FROM #基础数据 AS b
LEFT JOIN #操作人拼接 AS o
ON o.TaskAID = b.TaskAID
AND o. = CONVERT(VARCHAR(19), b., 120)
),
AS
(
SELECT
,
,
,
,
MAX() AS ,
AS ,
COUNT(*) AS ,
SUM(CASE WHEN = N'报工' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'辅助结束' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'报工' THEN ELSE 0 END) AS ,
SUM(CASE WHEN = N'辅助结束' THEN ELSE 0 END) AS ,
SUM() AS
FROM
GROUP BY , , , ,
),
AS
(
SELECT
,
,
ISNULL(, N'') AS ,
STRING_AGG(CONVERT(NVARCHAR(MAX), ), N',') AS
FROM
(
SELECT DISTINCT
j.,
j.,
ISNULL(j., N'') AS ,
LTRIM(RTRIM(s.value)) AS
FROM AS j
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(ISNULL(j., N''), N'', N','), N'', N','), N',') AS s
WHERE NULLIF(LTRIM(RTRIM(s.value)), N'') IS NOT NULL
) AS x
GROUP BY , , ISNULL(, N'')
),
AS
(
SELECT
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
b.,
ISNULL(o., N'') AS
FROM AS b
LEFT JOIN AS o
ON o. = b.
AND o. = b.
AND o. = ISNULL(b., N'')
),
AS
(
SELECT
,
,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS ,
SUM() AS
FROM
GROUP BY ,
)
SELECT
1 AS [Level],
AS materialCode,
AS materialDesc,
ISNULL(, N'') + N' ' + ISNULL(, N'') AS taskDescription,
CAST(0 AS INT) AS productionOrderNo,
N'' AS station,
CAST( AS VARCHAR(20)) AS reportWorkHours,
CAST( AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST( AS VARCHAR(20)) AS reportFinishQty,
CAST( AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST( AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN > 0 THEN ( - 0 * ) / ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
N'' AS operatorNames,
CAST( AS VARCHAR(20)) AS recordCount,
CAST(0 AS INT) AS
FROM
UNION ALL
SELECT
2 AS [Level],
AS materialCode,
AS materialDesc,
ISNULL(, N'') + N' ' + ISNULL(, N'')
+ CASE WHEN NULLIF(ISNULL(, N''), N'') IS NULL THEN N'' ELSE N' ' + END
+ CASE WHEN IS NULL THEN N'' ELSE N'' + CAST( AS VARCHAR(20)) END AS taskDescription,
AS productionOrderNo,
ISNULL(, N'') AS station,
CAST( AS VARCHAR(20)) AS reportWorkHours,
CAST( AS VARCHAR(20)) AS auxiliaryWorkHours,
CAST( AS VARCHAR(20)) AS reportFinishQty,
CAST( AS VARCHAR(20)) AS auxiliaryFinishQty,
CAST( AS VARCHAR(20)) AS totalWorkHours,
CAST(CASE WHEN > 0 THEN ( - 0 * ) / ELSE 0 END AS VARCHAR(20)) AS clampingTime,
CAST(0 AS VARCHAR(20)) AS programTime,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementReportPieceHours,
CAST(CASE WHEN > 0 THEN / ELSE 0 END AS VARCHAR(20)) AS settlementAuxiliaryPieceHours,
ISNULL(, N'') AS operatorNames,
CAST( AS VARCHAR(20)) AS recordCount,
FROM
ORDER BY productionOrderNo, , materialCode, [Level], station;
END
GO