feat: 完善设计报工研发管理流程

This commit is contained in:
2026-07-10 17:43:23 +08:00
parent 68acbf76cb
commit e89cef4895
9 changed files with 1103 additions and 54 deletions

View File

@@ -0,0 +1,288 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF COL_LENGTH(N'dbo.MES_设计报工_记录', N'进度说明') IS NULL
BEGIN
ALTER TABLE [dbo].[MES_设计报工_记录] ADD [] nvarchar(500) NULL;
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_结束]
@DID int,
@ID nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(500) = N''
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT OFF;
DECLARE @ID nvarchar(100) = NULLIF(@ID, N'');
DECLARE @ nvarchar(100) = NULLIF(@, N'');
DECLARE @RID int;
DECLARE @ int = @@TRANCOUNT;
DECLARE @ sysname = N'DRT_Task_End';
IF @ID IS NULL AND @ IS NULL
BEGIN
SELECT CAST(0 AS int) AS [result], N'未获取到当前操作人,不能结束' AS [message];
RETURN;
END
BEGIN TRY
IF @ = 0 BEGIN TRANSACTION;
ELSE SAVE TRANSACTION @;
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WITH (UPDLOCK, HOLDLOCK) WHERE [DID] = @DID)
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE ROLLBACK TRANSACTION @;
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
SELECT TOP 1 @RID = [RID]
FROM [dbo].[MES_设计报工_记录] WITH (UPDLOCK, HOLDLOCK)
WHERE [DID] = @DID
AND [] IS NULL
AND (
(@ID IS NOT NULL AND ISNULL([ID], N'') = @ID)
OR (@ID IS NULL AND @ IS NOT NULL AND ISNULL([], N'') = @)
)
ORDER BY [] DESC, [RID] DESC;
IF @RID IS NULL
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE ROLLBACK TRANSACTION @;
SELECT CAST(0 AS int) AS [result], N'当前人员没有未结束的报工记录' AS [message];
RETURN;
END
UPDATE [dbo].[MES_设计报工_记录]
SET
[] = GETDATE(),
[] = DATEDIFF(second, [], GETDATE()),
[] = N'已结束',
[] = NULLIF(@, N'')
WHERE [RID] = @RID;
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = CASE
WHEN [] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = @,
[] = GETDATE()
WHERE [DID] = @DID;
IF @ = 0 COMMIT TRANSACTION;
SELECT CAST(1 AS int) AS [result], N'结束成功' AS [message], @RID AS [RID];
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE IF XACT_STATE() = 1 ROLLBACK TRANSACTION @;
END
SELECT CAST(0 AS int) AS [result], ERROR_MESSAGE() AS [message];
END CATCH
END
GO
CREATE OR ALTER PROCEDURE [dbo].[_记录_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ 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.[],
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.[],
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 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].[_工时报表_作业者工时_查询]
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(100) = 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.[],
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)
),
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

@@ -65,12 +65,19 @@ BEGIN
[] nvarchar(100) NULL,
[] datetime NULL,
[] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_记录_创建时间] DEFAULT (GETDATE()),
[] nvarchar(500) NULL,
[] nvarchar(500) NULL,
CONSTRAINT [FK_MES_设计报工_记录_任务] FOREIGN KEY ([DID]) REFERENCES [dbo].[MES_设计报工_任务]([DID])
);
END
GO
IF COL_LENGTH(N'dbo.MES_设计报工_记录', N'进度说明') IS NULL
BEGIN
ALTER TABLE [dbo].[MES_设计报工_记录] ADD [] nvarchar(500) NULL;
END
GO
IF OBJECT_ID(N'[dbo].[MES_设计报工_校验记录]', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[MES_设计报工_校验记录]
@@ -510,14 +517,18 @@ GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_结束]
@DID int,
@ID nvarchar(100) = N'',
@ nvarchar(100) = N''
@ nvarchar(100) = N'',
@ nvarchar(500) = N''
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT OFF;
DECLARE @ID nvarchar(100) = NULLIF(@ID, N'');
DECLARE @ nvarchar(100) = NULLIF(@, N'');
DECLARE @RID int;
DECLARE @ int = @@TRANCOUNT;
DECLARE @ sysname = N'DRT_Task_End';
IF @ID IS NULL AND @ IS NULL
BEGIN
@@ -525,53 +536,66 @@ BEGIN
RETURN;
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
BEGIN
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
BEGIN TRY
IF @ = 0 BEGIN TRANSACTION;
ELSE SAVE TRANSACTION @;
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 NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WITH (UPDLOCK, HOLDLOCK) WHERE [DID] = @DID)
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE ROLLBACK TRANSACTION @;
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
RETURN;
END
SELECT TOP 1 @RID = [RID]
FROM [dbo].[MES_设计报工_记录]
WHERE [DID] = @DID
AND [] IS NULL
AND (
(@ID IS NOT NULL AND ISNULL([ID], N'') = @ID)
OR (@ID IS NULL AND @ IS NOT NULL AND ISNULL([], N'') = @)
)
ORDER BY [] DESC, [RID] DESC;
SELECT TOP 1 @RID = [RID]
FROM [dbo].[MES_设计报工_记录] WITH (UPDLOCK, HOLDLOCK)
WHERE [DID] = @DID
AND [] IS NULL
AND (
(@ID IS NOT NULL AND ISNULL([ID], N'') = @ID)
OR (@ID IS NULL AND @ IS NOT NULL AND ISNULL([], N'') = @)
)
ORDER BY [] DESC, [RID] DESC;
IF @RID IS NULL
BEGIN
SELECT CAST(0 AS int) AS [result], N'当前人员没有未结束的报工记录' AS [message];
RETURN;
END
IF @RID IS NULL
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE ROLLBACK TRANSACTION @;
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
[] = GETDATE(),
[] = DATEDIFF(second, [], GETDATE()),
[] = N'已结束',
[] = NULLIF(@, N'')
WHERE [RID] = @RID;
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = CASE
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL)
THEN N'执行中'
ELSE N'已结束'
END,
[] = @,
[] = GETDATE()
WHERE [DID] = @DID AND [] <> N'已完成';
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = CASE
WHEN [] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = @,
[] = GETDATE()
WHERE [DID] = @DID;
SELECT CAST(1 AS int) AS [result], N'结束成功' AS [message], @RID AS [RID];
IF @ = 0 COMMIT TRANSACTION;
SELECT CAST(1 AS int) AS [result], N'结束成功' AS [message], @RID AS [RID];
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
IF @ = 0 ROLLBACK TRANSACTION;
ELSE IF XACT_STATE() = 1 ROLLBACK TRANSACTION @;
END
SELECT CAST(0 AS int) AS [result], ERROR_MESSAGE() AS [message];
END CATCH
END
GO
@@ -656,6 +680,7 @@ BEGIN
CASE WHEN r.[] = 1 THEN N'已校验' ELSE N'未校验' END AS [],
r.[],
CONVERT(varchar(19), r.[], 120) AS [],
r.[],
r.[],
t.[]
FROM [dbo].[MES_设计报工_记录] AS r
@@ -762,7 +787,21 @@ BEGIN
[] = NULLIF(@, N'')
WHERE [RID] = @RID;
SELECT CAST(1 AS int) AS [result], N'校验成功' AS [message];
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = CASE
WHEN [] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = NULLIF(@, N''),
[] = GETDATE()
WHERE [DID] = @DID;
SELECT
CAST(1 AS int) AS [result],
N'校验成功' AS [message],
(SELECT [] FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID) AS [];
END
GO
@@ -775,7 +814,9 @@ BEGIN
SET NOCOUNT ON;
DECLARE @RID表 table([RID] int PRIMARY KEY);
DECLARE @DID表 table([DID] int PRIMARY KEY);
DECLARE @xml xml;
DECLARE @ int;
SET @xml = TRY_CONVERT(xml, N'<r><i>' + REPLACE(ISNULL(@RIDs, N''), N',', N'</i><i>') + N'</i></r>');
@@ -790,6 +831,12 @@ BEGIN
RETURN;
END
INSERT INTO @DID表([DID])
SELECT DISTINCT r.[DID]
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;
INSERT INTO [dbo].[MES_设计报工_校验记录]
(
[RID], [DID], [], [],
@@ -814,7 +861,21 @@ BEGIN
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];
SET @ = @@ROWCOUNT;
UPDATE t
SET
[] = CASE
WHEN t.[] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = t.[DID] AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = NULLIF(@, N''),
[] = GETDATE()
FROM [dbo].[MES_设计报工_任务] AS t
INNER JOIN @DID表 AS ids ON t.[DID] = ids.[DID];
SELECT CAST(1 AS int) AS [result], N'批量校验成功' AS [message], @ AS [count];
END
GO
@@ -850,6 +911,7 @@ BEGIN
r.[],
ISNULL(r.[], 0) AS [],
r.[],
r.[],
r.[]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
@@ -885,6 +947,7 @@ BEGIN
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 []
@@ -910,6 +973,7 @@ BEGIN
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 [], []
@@ -935,6 +999,7 @@ BEGIN
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
)

View File

@@ -0,0 +1,158 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
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;
UPDATE [dbo].[MES_设计报工_任务]
SET
[] = CASE
WHEN [] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = NULLIF(@, N''),
[] = GETDATE()
WHERE [DID] = @DID;
SELECT
CAST(1 AS int) AS [result],
N'校验成功' AS [message],
(SELECT [] FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID) AS [];
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 @DID表 table([DID] int PRIMARY KEY);
DECLARE @xml xml;
DECLARE @ int;
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 @DID表([DID])
SELECT DISTINCT r.[DID]
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;
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;
SET @ = @@ROWCOUNT;
UPDATE t
SET
[] = CASE
WHEN t.[] = N'已完成' THEN N'已完成'
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = t.[DID] AND [] IS NULL) THEN N'执行中'
ELSE N'已结束'
END,
[] = NULLIF(@, N''),
[] = GETDATE()
FROM [dbo].[MES_设计报工_任务] AS t
INNER JOIN @DID表 AS ids ON t.[DID] = ids.[DID];
SELECT CAST(1 AS int) AS [result], N'批量校验成功' AS [message], @ AS [count];
END
GO

View File

@@ -0,0 +1,178 @@
USE [YL_MESDB];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @TargetAccount int = 1;
DECLARE @ResearchMenuId int;
DECLARE @PreferredResearchMenuId int = 9;
BEGIN TRANSACTION;
SELECT TOP (1)
@ResearchMenuId = [id]
FROM [dbo].[_二级菜单] WITH (UPDLOCK, HOLDLOCK)
WHERE [] = @TargetAccount
AND [pid] = 0
AND
(
[title] = N'研发管理'
OR [path] = '/ResearchManagement'
OR [name] = 'ResearchManagement'
)
ORDER BY
CASE WHEN [title] = N'研发管理' THEN 0 ELSE 1 END,
[id];
IF @ResearchMenuId IS NULL
BEGIN
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[_二级菜单] WITH (UPDLOCK, HOLDLOCK)
WHERE [] = @TargetAccount
AND [id] = @PreferredResearchMenuId
)
BEGIN
SET @ResearchMenuId = @PreferredResearchMenuId;
END
ELSE
BEGIN
SELECT @ResearchMenuId = ISNULL(MAX([id]), 0) + 1
FROM [dbo].[_二级菜单] WITH (UPDLOCK, HOLDLOCK)
WHERE [] = @TargetAccount;
END;
INSERT INTO [dbo].[_二级菜单]
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [], [], [], [])
VALUES
(@ResearchMenuId, 0, '/ResearchManagement', '/layout/Layout', NULL, 'ResearchManagement', N'研发管理', 'CreateProject', @TargetAccount, @ResearchMenuId, 1, GETDATE());
END
ELSE
BEGIN
UPDATE [dbo].[_二级菜单]
SET
[pid] = 0,
[path] = '/ResearchManagement',
[componet] = '/layout/Layout',
[redirect] = NULL,
[name] = 'ResearchManagement',
[title] = N'研发管理',
[icon] = 'CreateProject',
[] = [id],
[] = 1,
[] = GETDATE()
WHERE [] = @TargetAccount
AND [id] = @ResearchMenuId;
END;
DECLARE @Menus TABLE
(
rn int IDENTITY(1,1) PRIMARY KEY,
[path] varchar(100) NOT NULL,
[componet] varchar(100) NOT NULL,
[name] varchar(100) NOT NULL,
[title] varchar(100) NOT NULL,
[icon] varchar(100) NULL
);
INSERT INTO @Menus ([path], [componet], [name], [title], [icon])
VALUES
('DesignReportTask/Task/index', '/ProductionManagement/DesignReportTask/Task/index', 'DesignReportTask', N'设计任务', 'DocumentImport'),
('DesignReportTask/Report/index', '/ProductionManagement/DesignReportTask/Report/index', 'DesignReportWork', N'设计报工', 'DocumentImport'),
('DesignReportTask/Check/index', '/ProductionManagement/DesignReportTask/Check/index', 'DesignReportCheck', N'设计工时校验', 'PayStateSearch'),
('DesignReportTask/HoursReport/index', '/ProductionManagement/DesignReportTask/HoursReport/index', 'DesignReportHoursReport', N'设计工时报表', 'DimensionsSummaryReport');
DECLARE @BaseId int;
SELECT @BaseId = ISNULL(MAX([id]), 0)
FROM [dbo].[_二级菜单] WITH (UPDLOCK, HOLDLOCK)
WHERE [] = @TargetAccount;
;WITH MissingMenus AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY m.rn) AS new_rn,
m.[path],
m.[componet],
m.[name],
m.[title],
m.[icon]
FROM @Menus AS m
WHERE NOT EXISTS
(
SELECT 1
FROM [dbo].[_二级菜单] AS existing WITH (UPDLOCK, HOLDLOCK)
WHERE existing.[] = @TargetAccount
AND
(
existing.[path] = m.[path]
OR existing.[componet] = m.[componet]
OR existing.[title] = m.[title]
)
)
)
INSERT INTO [dbo].[_二级菜单]
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [], [], [], [])
SELECT
@BaseId + new_rn,
@ResearchMenuId,
[path],
[componet],
NULL,
[name],
[title],
[icon],
@TargetAccount,
@BaseId + new_rn,
1,
GETDATE()
FROM MissingMenus;
UPDATE target
SET
target.[pid] = @ResearchMenuId,
target.[path] = source.[path],
target.[componet] = source.[componet],
target.[redirect] = NULL,
target.[name] = source.[name],
target.[title] = source.[title],
target.[icon] = source.[icon],
target.[] = target.[id],
target.[] = 1,
target.[] = GETDATE()
FROM [dbo].[_二级菜单] AS target
INNER JOIN @Menus AS source
ON target.[] = @TargetAccount
AND
(
target.[path] = source.[path]
OR target.[componet] = source.[componet]
OR target.[title] = source.[title]
);
COMMIT TRANSACTION;
SELECT
[id],
[pid],
[path],
[componet],
[name],
[title],
[icon],
[],
[],
[]
FROM [dbo].[_二级菜单]
WHERE [] = @TargetAccount
AND
(
[id] = @ResearchMenuId
OR [path] IN (SELECT [path] FROM @Menus)
OR [componet] IN (SELECT [componet] FROM @Menus)
OR [title] IN (SELECT [title] FROM @Menus)
)
ORDER BY [pid], [id];
GO