feat: 完善设计报工研发管理流程
This commit is contained in:
288
db_backups/add_design_report_progress_note_20260710.sql
Normal file
288
db_backups/add_design_report_progress_note_20260710.sql
Normal 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
|
||||
@@ -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
|
||||
)
|
||||
|
||||
158
db_backups/fix_design_report_check_status_20260710.sql
Normal file
158
db_backups/fix_design_report_check_status_20260710.sql
Normal 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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user