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,
|
[校验人] nvarchar(100) NULL,
|
||||||
[校验时间] datetime NULL,
|
[校验时间] datetime NULL,
|
||||||
[创建时间] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_记录_创建时间] DEFAULT (GETDATE()),
|
[创建时间] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_记录_创建时间] DEFAULT (GETDATE()),
|
||||||
|
[进度说明] nvarchar(500) NULL,
|
||||||
[备注] nvarchar(500) NULL,
|
[备注] nvarchar(500) NULL,
|
||||||
CONSTRAINT [FK_MES_设计报工_记录_任务] FOREIGN KEY ([DID]) REFERENCES [dbo].[MES_设计报工_任务]([DID])
|
CONSTRAINT [FK_MES_设计报工_记录_任务] FOREIGN KEY ([DID]) REFERENCES [dbo].[MES_设计报工_任务]([DID])
|
||||||
);
|
);
|
||||||
END
|
END
|
||||||
GO
|
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
|
IF OBJECT_ID(N'[dbo].[MES_设计报工_校验记录]', N'U') IS NULL
|
||||||
BEGIN
|
BEGIN
|
||||||
CREATE TABLE [dbo].[MES_设计报工_校验记录]
|
CREATE TABLE [dbo].[MES_设计报工_校验记录]
|
||||||
@@ -510,14 +517,18 @@ GO
|
|||||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_结束]
|
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_结束]
|
||||||
@DID int,
|
@DID int,
|
||||||
@操作人ID nvarchar(100) = N'',
|
@操作人ID nvarchar(100) = N'',
|
||||||
@操作人 nvarchar(100) = N''
|
@操作人 nvarchar(100) = N'',
|
||||||
|
@进度说明 nvarchar(500) = N''
|
||||||
AS
|
AS
|
||||||
BEGIN
|
BEGIN
|
||||||
SET NOCOUNT ON;
|
SET NOCOUNT ON;
|
||||||
|
SET XACT_ABORT OFF;
|
||||||
|
|
||||||
DECLARE @当前操作人ID nvarchar(100) = NULLIF(@操作人ID, N'');
|
DECLARE @当前操作人ID nvarchar(100) = NULLIF(@操作人ID, N'');
|
||||||
DECLARE @当前操作人 nvarchar(100) = NULLIF(@操作人, N'');
|
DECLARE @当前操作人 nvarchar(100) = NULLIF(@操作人, N'');
|
||||||
DECLARE @RID int;
|
DECLARE @RID int;
|
||||||
|
DECLARE @初始事务数 int = @@TRANCOUNT;
|
||||||
|
DECLARE @保存点名称 sysname = N'DRT_Task_End';
|
||||||
|
|
||||||
IF @当前操作人ID IS NULL AND @当前操作人 IS NULL
|
IF @当前操作人ID IS NULL AND @当前操作人 IS NULL
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -525,20 +536,20 @@ BEGIN
|
|||||||
RETURN;
|
RETURN;
|
||||||
END
|
END
|
||||||
|
|
||||||
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
|
BEGIN TRY
|
||||||
|
IF @初始事务数 = 0 BEGIN TRANSACTION;
|
||||||
|
ELSE SAVE TRANSACTION @保存点名称;
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WITH (UPDLOCK, HOLDLOCK) WHERE [DID] = @DID)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
IF @初始事务数 = 0 ROLLBACK TRANSACTION;
|
||||||
|
ELSE ROLLBACK TRANSACTION @保存点名称;
|
||||||
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
|
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
|
||||||
RETURN;
|
RETURN;
|
||||||
END
|
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
|
|
||||||
|
|
||||||
SELECT TOP 1 @RID = [RID]
|
SELECT TOP 1 @RID = [RID]
|
||||||
FROM [dbo].[MES_设计报工_记录]
|
FROM [dbo].[MES_设计报工_记录] WITH (UPDLOCK, HOLDLOCK)
|
||||||
WHERE [DID] = @DID
|
WHERE [DID] = @DID
|
||||||
AND [结束时间] IS NULL
|
AND [结束时间] IS NULL
|
||||||
AND (
|
AND (
|
||||||
@@ -549,6 +560,8 @@ BEGIN
|
|||||||
|
|
||||||
IF @RID IS NULL
|
IF @RID IS NULL
|
||||||
BEGIN
|
BEGIN
|
||||||
|
IF @初始事务数 = 0 ROLLBACK TRANSACTION;
|
||||||
|
ELSE ROLLBACK TRANSACTION @保存点名称;
|
||||||
SELECT CAST(0 AS int) AS [result], N'当前人员没有未结束的报工记录' AS [message];
|
SELECT CAST(0 AS int) AS [result], N'当前人员没有未结束的报工记录' AS [message];
|
||||||
RETURN;
|
RETURN;
|
||||||
END
|
END
|
||||||
@@ -557,21 +570,32 @@ BEGIN
|
|||||||
SET
|
SET
|
||||||
[结束时间] = GETDATE(),
|
[结束时间] = GETDATE(),
|
||||||
[工时秒数] = DATEDIFF(second, [开始时间], GETDATE()),
|
[工时秒数] = DATEDIFF(second, [开始时间], GETDATE()),
|
||||||
[报工状态] = N'已结束'
|
[报工状态] = N'已结束',
|
||||||
|
[进度说明] = NULLIF(@进度说明, N'')
|
||||||
WHERE [RID] = @RID;
|
WHERE [RID] = @RID;
|
||||||
|
|
||||||
UPDATE [dbo].[MES_设计报工_任务]
|
UPDATE [dbo].[MES_设计报工_任务]
|
||||||
SET
|
SET
|
||||||
[单据状态] = CASE
|
[单据状态] = CASE
|
||||||
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [结束时间] IS NULL)
|
WHEN [单据状态] = N'已完成' THEN N'已完成'
|
||||||
THEN N'执行中'
|
WHEN EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_记录] WHERE [DID] = @DID AND [结束时间] IS NULL) THEN N'执行中'
|
||||||
ELSE N'已结束'
|
ELSE N'已结束'
|
||||||
END,
|
END,
|
||||||
[最后编辑人] = @当前操作人,
|
[最后编辑人] = @当前操作人,
|
||||||
[最后编辑时间] = GETDATE()
|
[最后编辑时间] = GETDATE()
|
||||||
WHERE [DID] = @DID AND [单据状态] <> N'已完成';
|
WHERE [DID] = @DID;
|
||||||
|
|
||||||
|
IF @初始事务数 = 0 COMMIT TRANSACTION;
|
||||||
SELECT CAST(1 AS int) AS [result], N'结束成功' AS [message], @RID AS [RID];
|
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
|
END
|
||||||
GO
|
GO
|
||||||
|
|
||||||
@@ -656,6 +680,7 @@ BEGIN
|
|||||||
CASE WHEN r.[已校验] = 1 THEN N'已校验' ELSE N'未校验' END AS [校验状态],
|
CASE WHEN r.[已校验] = 1 THEN N'已校验' ELSE N'未校验' END AS [校验状态],
|
||||||
r.[校验人],
|
r.[校验人],
|
||||||
CONVERT(varchar(19), r.[校验时间], 120) AS [校验时间],
|
CONVERT(varchar(19), r.[校验时间], 120) AS [校验时间],
|
||||||
|
r.[进度说明],
|
||||||
r.[备注],
|
r.[备注],
|
||||||
t.[单据状态]
|
t.[单据状态]
|
||||||
FROM [dbo].[MES_设计报工_记录] AS r
|
FROM [dbo].[MES_设计报工_记录] AS r
|
||||||
@@ -762,7 +787,21 @@ BEGIN
|
|||||||
[备注] = NULLIF(@校验备注, N'')
|
[备注] = NULLIF(@校验备注, N'')
|
||||||
WHERE [RID] = @RID;
|
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
|
END
|
||||||
GO
|
GO
|
||||||
|
|
||||||
@@ -775,7 +814,9 @@ BEGIN
|
|||||||
SET NOCOUNT ON;
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
DECLARE @RID表 table([RID] int PRIMARY KEY);
|
DECLARE @RID表 table([RID] int PRIMARY KEY);
|
||||||
|
DECLARE @DID表 table([DID] int PRIMARY KEY);
|
||||||
DECLARE @xml xml;
|
DECLARE @xml xml;
|
||||||
|
DECLARE @更新记录数 int;
|
||||||
|
|
||||||
SET @xml = TRY_CONVERT(xml, N'<r><i>' + REPLACE(ISNULL(@RIDs, N''), N',', N'</i><i>') + N'</i></r>');
|
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;
|
RETURN;
|
||||||
END
|
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_设计报工_校验记录]
|
INSERT INTO [dbo].[MES_设计报工_校验记录]
|
||||||
(
|
(
|
||||||
[RID], [DID], [校验前开始时间], [校验前结束时间],
|
[RID], [DID], [校验前开始时间], [校验前结束时间],
|
||||||
@@ -814,7 +861,21 @@ BEGIN
|
|||||||
INNER JOIN @RID表 AS ids ON r.[RID] = ids.[RID]
|
INNER JOIN @RID表 AS ids ON r.[RID] = ids.[RID]
|
||||||
WHERE r.[开始时间] IS NOT NULL AND r.[结束时间] IS NOT NULL;
|
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
|
END
|
||||||
GO
|
GO
|
||||||
|
|
||||||
@@ -850,6 +911,7 @@ BEGIN
|
|||||||
r.[结束时间],
|
r.[结束时间],
|
||||||
ISNULL(r.[工时秒数], 0) AS [工时秒数],
|
ISNULL(r.[工时秒数], 0) AS [工时秒数],
|
||||||
r.[已校验],
|
r.[已校验],
|
||||||
|
r.[进度说明],
|
||||||
r.[备注]
|
r.[备注]
|
||||||
FROM [dbo].[MES_设计报工_记录] AS r
|
FROM [dbo].[MES_设计报工_记录] AS r
|
||||||
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
|
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
|
||||||
@@ -885,6 +947,7 @@ BEGIN
|
|||||||
COUNT(1) AS [报工次数],
|
COUNT(1) AS [报工次数],
|
||||||
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
||||||
CAST(N'' AS nvarchar(20)) AS [校验状态],
|
CAST(N'' AS nvarchar(20)) AS [校验状态],
|
||||||
|
CAST(N'' AS nvarchar(500)) AS [进度说明],
|
||||||
CAST(N'' AS nvarchar(500)) AS [备注]
|
CAST(N'' AS nvarchar(500)) AS [备注]
|
||||||
FROM base
|
FROM base
|
||||||
GROUP BY [操作人]
|
GROUP BY [操作人]
|
||||||
@@ -910,6 +973,7 @@ BEGIN
|
|||||||
COUNT(1) AS [报工次数],
|
COUNT(1) AS [报工次数],
|
||||||
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
||||||
CAST(N'' AS nvarchar(20)) AS [校验状态],
|
CAST(N'' AS nvarchar(20)) AS [校验状态],
|
||||||
|
CAST(N'' AS nvarchar(500)) AS [进度说明],
|
||||||
CAST(N'' AS nvarchar(500)) AS [备注]
|
CAST(N'' AS nvarchar(500)) AS [备注]
|
||||||
FROM base
|
FROM base
|
||||||
GROUP BY [操作人], [工作日期]
|
GROUP BY [操作人], [工作日期]
|
||||||
@@ -935,6 +999,7 @@ BEGIN
|
|||||||
1 AS [报工次数],
|
1 AS [报工次数],
|
||||||
CAST([工时秒数] / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
CAST([工时秒数] / 3600.0 AS decimal(18, 2)) AS [工时小时],
|
||||||
CASE WHEN [已校验] = 1 THEN N'已校验' ELSE N'未校验' END AS [校验状态],
|
CASE WHEN [已校验] = 1 THEN N'已校验' ELSE N'未校验' END AS [校验状态],
|
||||||
|
ISNULL([进度说明], N'') AS [进度说明],
|
||||||
ISNULL([备注], N'') AS [备注]
|
ISNULL([备注], N'') AS [备注]
|
||||||
FROM base
|
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
|
||||||
@@ -2724,3 +2724,280 @@ pm run build:通过,仅有既有警告。
|
|||||||
7. 执行 `git push origin snapshot/local-save-20260625-154806` 推送到远程。
|
7. 执行 `git push origin snapshot/local-save-20260625-154806` 推送到远程。
|
||||||
8. 推送成功,远程分支 `snapshot/local-save-20260625-154806` 从 `bd9ca09` 更新到 `a6a92ff`。
|
8. 推送成功,远程分支 `snapshot/local-save-20260625-154806` 从 `bd9ca09` 更新到 `a6a92ff`。
|
||||||
9. 推送后执行 `git status -sb`,确认本地分支仍跟踪 `origin/snapshot/local-save-20260625-154806`。
|
9. 推送后执行 `git status -sb`,确认本地分支仍跟踪 `origin/snapshot/local-save-20260625-154806`。
|
||||||
|
10. 执行 `git rev-list --left-right --count HEAD...'@{u}'`,确认本地与远程差异为 `0 0`。
|
||||||
|
11. 执行 `git log -1 --oneline`,确认当前最新提交为 `a6a92ff chore: 上传当前工作区修改`。
|
||||||
|
12. 为补充记录推送成功结果,追加本条日志;本条日志将作为单独的日志补充提交继续推送到同一远程分支。
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
- 用户要求上传的当前工作区全部修改已提交并推送到远程分支。
|
||||||
|
- 首次推送成功的提交号为 `a6a92ff`。
|
||||||
|
- 推送后本地与远程分支一致,差异为 `0 0`。
|
||||||
|
|
||||||
|
## 2026-07-10 DesignReportTask 工时校验补结束后任务状态回写
|
||||||
|
|
||||||
|
### 用户提问
|
||||||
|
- 用户反馈:`ProductionManagement/DesignReportTask/Check/index` 中,已经点击开始但没有结束的任务,在校验页点击“校验”并输入结束时间后可以校验完成,但任务状态没有改变,仍然是“执行中”。
|
||||||
|
|
||||||
|
### 执行过程
|
||||||
|
1. 检查 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`,确认校验保存调用的是 `设计报工_工时校验_保存`。
|
||||||
|
2. 检查完整建库脚本 `db_backups/create_design_report_task_module_20260630.sql`,确认 `设计报工_工时校验_保存` 原逻辑只更新 `MES_设计报工_记录`:
|
||||||
|
- 写入 `开始时间`、`结束时间`、`工时秒数`。
|
||||||
|
- 将 `报工状态` 改为 `已结束`。
|
||||||
|
- 将 `已校验` 改为 `1`。
|
||||||
|
- 写入校验人、校验时间和备注。
|
||||||
|
3. 确认原过程没有同步更新 `MES_设计报工_任务.[单据状态]`,这是校验页手工补结束时间后任务仍为“执行中”的原因。
|
||||||
|
4. 检查 `Report/index.vue` 和需求文档,确认设计报工状态规则:
|
||||||
|
- “结束”后任务状态应为 `已结束`。
|
||||||
|
- “完成”是单独动作,完成后任务状态才变为 `已完成`。
|
||||||
|
5. 决定本次修复口径:
|
||||||
|
- 校验页手工补结束时间后,如果该 DID 已无未结束报工记录,则任务状态回写为 `已结束`。
|
||||||
|
- 如果该 DID 仍有其他未结束报工记录,则任务状态保持 `执行中`。
|
||||||
|
- 如果任务已经是 `已完成`,校验保存不回退任务状态。
|
||||||
|
6. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`:
|
||||||
|
- 在校验表格中增加“任务状态”列,直接显示 `单据状态`。
|
||||||
|
- 增加 `getStatusType` 方法,按 `已完成`、`执行中`、`已结束` 显示不同标签类型。
|
||||||
|
- 单条校验成功后改为 `await this.searchTable()`,确保校验后刷新完成再结束流程。
|
||||||
|
- 批量校验成功后也改为 `await this.searchTable()`。
|
||||||
|
7. 修改 `db_backups/create_design_report_task_module_20260630.sql` 中 `设计报工_工时校验_保存`:
|
||||||
|
- 保存校验记录并更新报工记录后,新增任务状态回写逻辑。
|
||||||
|
- 状态回写规则为:已完成保持已完成;仍有未结束记录则为执行中;否则为已结束。
|
||||||
|
- 返回结果中增加 `任务状态` 字段,便于调用方确认状态。
|
||||||
|
8. 修改 `db_backups/create_design_report_task_module_20260630.sql` 中 `设计报工_工时校验_批量保存`:
|
||||||
|
- 增加受影响 DID 集合。
|
||||||
|
- 批量校验后按相同规则回写任务状态。
|
||||||
|
- 将记录更新条数保存到变量,避免后续任务更新覆盖返回的 `count`。
|
||||||
|
9. 新增增量脚本 `db_backups/fix_design_report_check_status_20260710.sql`:
|
||||||
|
- 用于直接发布现有数据库。
|
||||||
|
- 重建 `设计报工_工时校验_保存` 和 `设计报工_工时校验_批量保存`。
|
||||||
|
10. 将增量脚本发布到目标库 `192.168.2.92 / YL_MESDB`,日志中不记录数据库明文密码。
|
||||||
|
11. 使用事务构造临时数据验证单条校验:
|
||||||
|
- 新建一个状态为 `执行中` 的临时任务和一条未结束报工记录。
|
||||||
|
- 调用 `设计报工_工时校验_保存` 传入开始时间和结束时间。
|
||||||
|
- 返回 `result=1`、`message=校验成功`、`任务状态=已结束`。
|
||||||
|
- 查询确认任务状态为 `已结束`,报工记录状态为 `已结束`,`已校验=1`。
|
||||||
|
- 回滚事务后确认测试任务残留数量为 `0`。
|
||||||
|
12. 使用事务构造多人未结束场景验证:
|
||||||
|
- 新建一个状态为 `执行中` 的临时任务和两条未结束报工记录。
|
||||||
|
- 只对其中一条记录调用 `设计报工_工时校验_保存` 补结束时间并校验。
|
||||||
|
- 返回 `result=1`、`任务状态=执行中`。
|
||||||
|
- 查询确认仍有 `1` 条未结束记录,任务状态保持 `执行中`。
|
||||||
|
- 回滚事务后确认测试任务残留数量为 `0`。
|
||||||
|
13. 批量校验测试第一次执行时报错:
|
||||||
|
- 错误为使用 XML 方法时 `QUOTED_IDENTIFIER` 设置不正确。
|
||||||
|
- 原因是新增增量脚本未显式设置 `SET QUOTED_IDENTIFIER ON`。
|
||||||
|
14. 检查完整建库脚本,确认完整脚本已有 `SET ANSI_NULLS ON` 和 `SET QUOTED_IDENTIFIER ON`。
|
||||||
|
15. 修改 `db_backups/fix_design_report_check_status_20260710.sql`,在过程创建前补充:
|
||||||
|
- `SET ANSI_NULLS ON`
|
||||||
|
- `SET QUOTED_IDENTIFIER ON`
|
||||||
|
16. 重新发布增量脚本到目标库。
|
||||||
|
17. 重新使用事务验证批量校验:
|
||||||
|
- 新建一个状态为 `执行中` 的临时任务和两条已有结束时间的报工记录。
|
||||||
|
- 调用 `设计报工_工时校验_批量保存`。
|
||||||
|
- 返回 `result=1`、`message=批量校验成功`、`count=2`。
|
||||||
|
- 查询确认两条记录均已校验,任务状态变为 `已结束`。
|
||||||
|
- 回滚事务后确认测试任务残留数量为 `0`。
|
||||||
|
18. 第一次执行 `npm run build` 时 124 秒超时,没有得到构建结论。
|
||||||
|
19. 使用更长超时时间重新执行 `npm run build`,构建通过。
|
||||||
|
20. 构建输出仅有项目既有的大资源体积 warning,以及 Browserslist / baseline-browser-mapping 数据过期提示。
|
||||||
|
21. 检查 Git 状态,确认构建未额外修改 `dist`,当前变更只包含本次源码、数据库脚本和本日志。
|
||||||
|
|
||||||
|
### 修改文件
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
|
||||||
|
- `db_backups/create_design_report_task_module_20260630.sql`
|
||||||
|
- `db_backups/fix_design_report_check_status_20260710.sql`
|
||||||
|
- `gptlog-process/gpdlog.md`
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
- 设计工时校验页手工补结束时间并保存校验后,任务状态会按报工记录自动回写。
|
||||||
|
- 单个任务所有报工记录都已有结束时间时,任务状态会从 `执行中` 改为 `已结束`。
|
||||||
|
- 同一任务仍有其他未结束报工记录时,任务状态保持 `执行中`。
|
||||||
|
- 已完成任务不会因为工时校验被回退状态。
|
||||||
|
- 校验页现在直接显示“任务状态”,便于校验后确认状态变化。
|
||||||
|
|
||||||
|
### 验证结果
|
||||||
|
- 单条补结束时间校验:通过,任务状态变为 `已结束`。
|
||||||
|
- 多人仍有未结束记录:通过,任务状态保持 `执行中`。
|
||||||
|
- 批量校验:通过,任务状态变为 `已结束`,返回 `count=2`。
|
||||||
|
- 所有数据库验证均在事务中回滚,测试数据无残留。
|
||||||
|
- `npm run build` 构建通过,仅有项目既有 warning。
|
||||||
|
|
||||||
|
## 2026-07-10 DesignReportTask 新建设计任务取消物料编码必填
|
||||||
|
|
||||||
|
### 用户提问
|
||||||
|
- 用户要求修改 `ProductionManagement/DesignReportTask/Task/index`,新建设计任务时去掉“物料编码”必填规则。
|
||||||
|
|
||||||
|
### 执行过程
|
||||||
|
1. 检查当前 Git 工作区,确认已有上一轮未提交的 `DesignReportTask` 校验状态回写相关改动和日志改动。
|
||||||
|
2. 检查 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`。
|
||||||
|
3. 搜索 `物料编码`、`rules`、`新增`、`保存` 等关键字,定位到表单校验规则:
|
||||||
|
- 原规则中 `物料编码` 存在 `{ required: true, message: '请选择物料编码', trigger: 'change' }`。
|
||||||
|
- `任务描述` 仍为必填。
|
||||||
|
4. 检查 `db_backups/create_design_report_task_module_20260630.sql`,确认数据库表字段 `[物料编码]` 允许为空,新增过程 `设计报工_任务_新增` 也使用 `NULLIF(@物料编码, N'')`,后端没有强制物料编码必填。
|
||||||
|
5. 使用 `apply_patch` 修改 `Task/index.vue`:
|
||||||
|
- 删除 `rules` 中的 `物料编码` 必填校验。
|
||||||
|
- 保留 `任务描述` 必填校验。
|
||||||
|
6. 复核 `Task/index.vue` 中 `rules` 片段,确认当前只剩:
|
||||||
|
- `任务描述: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]`
|
||||||
|
7. 注意到 `Task/index.vue` 中还有本轮之前已经存在的未提交差异,例如“研发目的”布局和人员显示格式调整;本次未回退这些既有改动。
|
||||||
|
8. 执行 `npm run build` 验证前端构建。
|
||||||
|
9. 构建通过,仅有项目既有的大资源体积 warning,以及 Browserslist / baseline-browser-mapping 数据过期提示。
|
||||||
|
10. 检查 Git 状态,确认构建未额外修改 `dist` 输出文件。
|
||||||
|
11. 追加本条中文执行日志。
|
||||||
|
|
||||||
|
### 修改文件
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
|
||||||
|
- `gptlog-process/gpdlog.md`
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
- 新建设计任务时,“物料编码”不再必填。
|
||||||
|
- 保存时仍会按原逻辑传递 `物料编码`,为空时后端按空值处理。
|
||||||
|
- “任务描述”必填规则保持不变。
|
||||||
|
|
||||||
|
### 验证结果
|
||||||
|
- `Task/index.vue` 表单规则已不包含 `物料编码` 必填校验。
|
||||||
|
- `npm run build` 构建通过,仅有项目既有 warning。
|
||||||
|
|
||||||
|
## 2026-07-10 DesignReportTask 移到研发管理主菜单
|
||||||
|
|
||||||
|
### 用户提问
|
||||||
|
- 用户要求增加主菜单“研发管理”,并将 `DesignReportTask` 下四个页面都放到“研发管理”下面。
|
||||||
|
- 用户说明:“研发管理”和“生产管理”平级,属于主菜单。
|
||||||
|
|
||||||
|
### 执行过程
|
||||||
|
1. 检查当前 Git 工作区,确认已有前几轮未提交改动:
|
||||||
|
- `db_backups/create_design_report_task_module_20260630.sql`
|
||||||
|
- `gptlog-process/gpdlog.md`
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
|
||||||
|
- `db_backups/fix_design_report_check_status_20260710.sql`
|
||||||
|
2. 查询目标库 `192.168.2.92 / YL_MESDB` 的 `[dbo].[登录基础数据_二级菜单]`,日志中不记录数据库明文密码。
|
||||||
|
3. 查询 `DesignReportTask` 当前菜单分布:
|
||||||
|
- 账号代码 `1` 下存在四个页面,均挂在 `pid=3` 的“生产管理”下。
|
||||||
|
- 账号代码 `2010` 下只存在 `Task` 和 `Report` 两个页面,均挂在 `pid=3`。
|
||||||
|
4. 查询主菜单,确认当前没有“研发管理”主菜单。
|
||||||
|
5. 查询账号代码 `1` 的主菜单,确认:
|
||||||
|
- `id=3` 为“生产管理”。
|
||||||
|
- 当前主菜单最大 id 为 `8`。
|
||||||
|
- 账号代码 `1` 下 `id=9` 未被占用。
|
||||||
|
6. 考虑到用户本轮未指定其他账号,且账号 `2010` 下并不具备四个 `DesignReportTask` 页面,本次按前序操作口径处理账号代码 `1`,避免无意给其他账号新增页面权限。
|
||||||
|
7. 检查前端动态路由逻辑:
|
||||||
|
- `src/router/getTreeData.js` 按 `pid` 构造菜单树。
|
||||||
|
- 主菜单使用 `path` 和 `/layout/Layout` 作为布局路由。
|
||||||
|
- 子菜单使用原有 `componet=/ProductionManagement/DesignReportTask/...` 加载真实页面组件。
|
||||||
|
8. 新增数据库增量脚本 `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql`:
|
||||||
|
- 若账号 `1` 下不存在“研发管理”,则插入主菜单:
|
||||||
|
- `id=9`
|
||||||
|
- `pid=0`
|
||||||
|
- `path=/ResearchManagement`
|
||||||
|
- `componet=/layout/Layout`
|
||||||
|
- `name=ResearchManagement`
|
||||||
|
- `title=研发管理`
|
||||||
|
- `icon=CreateProject`
|
||||||
|
- `账号代码=1`
|
||||||
|
- `模块代码=9`
|
||||||
|
- `是否启用=1`
|
||||||
|
- 若“研发管理”已存在,则更新为上述主菜单配置并启用。
|
||||||
|
- 定义 `DesignReportTask` 四个子菜单:
|
||||||
|
- `DesignReportTask/Task/index`:设计任务
|
||||||
|
- `DesignReportTask/Report/index`:设计报工
|
||||||
|
- `DesignReportTask/Check/index`:设计工时校验
|
||||||
|
- `DesignReportTask/HoursReport/index`:设计工时报表
|
||||||
|
- 如果四个子菜单缺失则补录;如果已存在则移动到“研发管理”下并启用。
|
||||||
|
- 子菜单 `componet` 保持 `/ProductionManagement/DesignReportTask/...` 不变,避免影响页面组件加载路径。
|
||||||
|
9. 执行 `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql` 发布到目标库。
|
||||||
|
10. 发布结果返回:
|
||||||
|
- `id=9`,`pid=0`,`title=研发管理`。
|
||||||
|
- `id=248`,`pid=9`,`title=设计任务`。
|
||||||
|
- `id=249`,`pid=9`,`title=设计报工`。
|
||||||
|
- `id=250`,`pid=9`,`title=设计工时校验`。
|
||||||
|
- `id=251`,`pid=9`,`title=设计工时报表`。
|
||||||
|
11. 再次查询账号代码 `1` 的主菜单,确认“研发管理”已与“生产管理”同级,均为 `pid=0`。
|
||||||
|
12. 再次查询账号代码 `1` 的 `DesignReportTask` 四个页面,确认四条均为 `pid=9`。
|
||||||
|
13. 查询账号代码 `1` 下 `pid=3` 的 `DesignReportTask` 数量,结果为 `0`,确认生产管理下已无设计报工页面残留。
|
||||||
|
14. 本次不修改前端页面代码;动态菜单通过数据库菜单表生效。
|
||||||
|
|
||||||
|
### 修改文件
|
||||||
|
- `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql`
|
||||||
|
- `gptlog-process/gpdlog.md`
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
- 账号代码 `1` 已新增“研发管理”主菜单。
|
||||||
|
- “研发管理”与“生产管理”平级,均为主菜单,`研发管理.id=9`,`pid=0`。
|
||||||
|
- 账号代码 `1` 的 `DesignReportTask` 四个页面已全部移动到“研发管理”下。
|
||||||
|
- 生产管理下不再包含账号代码 `1` 的 `DesignReportTask` 页面。
|
||||||
|
|
||||||
|
### 验证结果
|
||||||
|
- `研发管理`:`id=9`,`pid=0`,`path=/ResearchManagement`,`componet=/layout/Layout`,`是否启用=1`。
|
||||||
|
- `设计任务`:`id=248`,`pid=9`,`是否启用=1`。
|
||||||
|
- `设计报工`:`id=249`,`pid=9`,`是否启用=1`。
|
||||||
|
- `设计工时校验`:`id=250`,`pid=9`,`是否启用=1`。
|
||||||
|
- `设计工时报表`:`id=251`,`pid=9`,`是否启用=1`。
|
||||||
|
- 账号代码 `1` 下生产管理 `pid=3` 的 `DesignReportTask` 页面数量为 `0`。
|
||||||
|
|
||||||
|
## 2026-07-10 设计报工结束弹框增加进度说明
|
||||||
|
|
||||||
|
### 用户提问
|
||||||
|
- 用户要求修改 `ResearchManagement/DesignReportTask/Report/index`。
|
||||||
|
- 点击“结束”时先弹框,弹框显示:
|
||||||
|
- id 号
|
||||||
|
- 物料名称
|
||||||
|
- 物料编码
|
||||||
|
- 任务描述
|
||||||
|
- 新增字段“进度说明”
|
||||||
|
- 点击弹框里的“确认”后,才执行结束报工。
|
||||||
|
|
||||||
|
### 执行过程
|
||||||
|
1. 根据当前菜单配置确认:虽然菜单已经挂到“研发管理”,真实前端组件仍使用原路径 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`,因此本次修改该组件。
|
||||||
|
2. 检查 `Report/index.vue` 现有逻辑:
|
||||||
|
- “结束”按钮原来直接调用 `endTask(row)`。
|
||||||
|
- `endTask(row)` 会先查询最新任务状态和当前操作人未结束报工记录。
|
||||||
|
- 校验通过后直接调用存储过程 `设计报工_任务_结束`。
|
||||||
|
3. 查询目标库 `192.168.2.92 / YL_MESDB` 的表结构和存储过程定义,日志中不记录数据库明文密码。
|
||||||
|
4. 确认 `[dbo].[MES_设计报工_记录]` 原来没有 `[进度说明]` 字段,存储过程 `[dbo].[设计报工_任务_结束]` 原来没有 `@进度说明` 参数。
|
||||||
|
5. 采用持久化方案:结束报工弹框录入的“进度说明”写入报工记录表,并在查询和工时报表中返回该字段。
|
||||||
|
6. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`:
|
||||||
|
- 新增“结束报工”弹框。
|
||||||
|
- 弹框内展示 `DID`、`物料编码`、`物料名称`、`任务描述`。
|
||||||
|
- 新增可编辑字段 `进度说明`,最大长度 500。
|
||||||
|
- 点击列表“结束”时只打开弹框,不立即结束。
|
||||||
|
- 点击弹框“确认”后才调用 `设计报工_任务_结束`。
|
||||||
|
- 调用结束存储过程时传入 `进度说明`。
|
||||||
|
- 调整 `runAction()`,使其成功返回 `true`、失败返回 `false`,便于确认后关闭弹框。
|
||||||
|
7. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`:
|
||||||
|
- 在报工记录列表增加 `进度说明` 列,便于校验页面查看结束说明。
|
||||||
|
8. 修改 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`:
|
||||||
|
- 在工时报表中增加 `进度说明` 列。
|
||||||
|
9. 修改初始化脚本 `db_backups/create_design_report_task_module_20260630.sql`:
|
||||||
|
- `MES_设计报工_记录` 增加 `[进度说明] nvarchar(500) NULL`。
|
||||||
|
- 增加字段补齐脚本,字段不存在时自动添加。
|
||||||
|
- 重建 `设计报工_任务_结束`,增加 `@进度说明` 参数并写入记录表。
|
||||||
|
- 重建 `设计报工_记录_查询`,返回 `进度说明`。
|
||||||
|
- 重建 `设计报工_工时报表_作业者工时_查询`,返回 `进度说明`。
|
||||||
|
10. 新增数据库增量脚本 `db_backups/add_design_report_progress_note_20260710.sql`:
|
||||||
|
- 补齐 `[进度说明]` 字段。
|
||||||
|
- 重建 `设计报工_任务_结束`。
|
||||||
|
- 重建 `设计报工_记录_查询`。
|
||||||
|
- 重建 `设计报工_工时报表_作业者工时_查询`。
|
||||||
|
11. 执行增量脚本发布到目标库 `192.168.2.92 / YL_MESDB`,执行成功。
|
||||||
|
12. 使用数据库事务做验证,验证后回滚测试数据:
|
||||||
|
- 临时插入一条设计任务。
|
||||||
|
- 临时插入一条当前用户未结束报工记录。
|
||||||
|
- 执行 `设计报工_任务_结束` 并传入 `进度说明`。
|
||||||
|
- 返回 `1, 结束成功`。
|
||||||
|
- 查询确认任务状态变为 `已结束`。
|
||||||
|
- 查询确认报工记录状态变为 `已结束`,结束时间已写入,`进度说明` 已保存。
|
||||||
|
- 查询确认 `设计报工_记录_查询` 可以返回 `进度说明`。
|
||||||
|
- 查询确认 `设计报工_工时报表_作业者工时_查询` 可以返回 `进度说明`。
|
||||||
|
- 回滚事务后确认测试任务无残留。
|
||||||
|
13. 执行 `npm run build`,构建通过。
|
||||||
|
|
||||||
|
### 修改文件
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
|
||||||
|
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
|
||||||
|
- `db_backups/create_design_report_task_module_20260630.sql`
|
||||||
|
- `db_backups/add_design_report_progress_note_20260710.sql`
|
||||||
|
- `gptlog-process/gpdlog.md`
|
||||||
|
|
||||||
|
### 结论
|
||||||
|
- 设计报工点击“结束”后会先弹出确认窗口。
|
||||||
|
|||||||
@@ -71,6 +71,11 @@
|
|||||||
<el-table-column type="selection" width="50" align="center" />
|
<el-table-column type="selection" width="50" align="center" />
|
||||||
<el-table-column align="center" fixed label="RID" prop="RID" width="70" />
|
<el-table-column align="center" fixed label="RID" prop="RID" width="70" />
|
||||||
<el-table-column align="center" fixed label="DID" prop="DID" width="70" />
|
<el-table-column align="center" fixed label="DID" prop="DID" width="70" />
|
||||||
|
<el-table-column align="center" label="任务状态" prop="单据状态" width="90">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag :type="getStatusType(scope.row.单据状态)" size="mini">{{ scope.row.单据状态 }}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column align="center" label="校验状态" width="90">
|
<el-table-column align="center" label="校验状态" width="90">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag :type="scope.row.已校验 ? 'success' : 'info'" size="mini">{{ scope.row.校验状态 }}</el-tag>
|
<el-tag :type="scope.row.已校验 ? 'success' : 'info'" size="mini">{{ scope.row.校验状态 }}</el-tag>
|
||||||
@@ -86,6 +91,7 @@
|
|||||||
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
|
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
|
||||||
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
|
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
|
||||||
<el-table-column align="right" label="工时(h)" prop="工时小时" width="90" />
|
<el-table-column align="right" label="工时(h)" prop="工时小时" width="90" />
|
||||||
|
<el-table-column align="left" label="进度说明" prop="进度说明" width="180" show-overflow-tooltip />
|
||||||
<el-table-column align="left" label="校验人" prop="校验人" width="110" show-overflow-tooltip />
|
<el-table-column align="left" label="校验人" prop="校验人" width="110" show-overflow-tooltip />
|
||||||
<el-table-column align="center" label="校验时间" prop="校验时间" width="150" />
|
<el-table-column align="center" label="校验时间" prop="校验时间" width="150" />
|
||||||
<el-table-column align="left" label="备注" prop="备注" width="180" show-overflow-tooltip />
|
<el-table-column align="left" label="备注" prop="备注" width="180" show-overflow-tooltip />
|
||||||
@@ -285,7 +291,7 @@ export default {
|
|||||||
if (String(result.result) === '1') {
|
if (String(result.result) === '1') {
|
||||||
this.$message.success(result.message || '校验成功')
|
this.$message.success(result.message || '校验成功')
|
||||||
this.dialogVisible = false
|
this.dialogVisible = false
|
||||||
this.searchTable()
|
await this.searchTable()
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(result.message || '校验失败')
|
this.$message.error(result.message || '校验失败')
|
||||||
}
|
}
|
||||||
@@ -315,7 +321,7 @@ export default {
|
|||||||
const result = this.getResult(response)
|
const result = this.getResult(response)
|
||||||
if (String(result.result) === '1') {
|
if (String(result.result) === '1') {
|
||||||
this.$message.success(result.message || '批量校验成功')
|
this.$message.success(result.message || '批量校验成功')
|
||||||
this.searchTable()
|
await this.searchTable()
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(result.message || '批量校验失败')
|
this.$message.error(result.message || '批量校验失败')
|
||||||
}
|
}
|
||||||
@@ -339,6 +345,12 @@ export default {
|
|||||||
},
|
},
|
||||||
formatProjectLabel(item) {
|
formatProjectLabel(item) {
|
||||||
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
|
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
|
||||||
|
},
|
||||||
|
getStatusType(status) {
|
||||||
|
if (status === '已完成') return 'success'
|
||||||
|
if (status === '执行中') return 'warning'
|
||||||
|
if (status === '已结束') return 'primary'
|
||||||
|
return 'info'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,7 @@
|
|||||||
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
|
<el-table-column align="center" label="开始时间" prop="开始时间" width="150" />
|
||||||
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
|
<el-table-column align="center" label="结束时间" prop="结束时间" width="150" />
|
||||||
<el-table-column align="center" label="校验状态" prop="校验状态" width="90" />
|
<el-table-column align="center" label="校验状态" prop="校验状态" width="90" />
|
||||||
|
<el-table-column align="left" label="进度说明" prop="进度说明" min-width="160" show-overflow-tooltip />
|
||||||
<el-table-column align="left" label="备注" prop="备注" min-width="160" show-overflow-tooltip />
|
<el-table-column align="left" label="备注" prop="备注" min-width="160" show-overflow-tooltip />
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,43 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
|
:visible.sync="endDialogVisible"
|
||||||
|
title="结束报工"
|
||||||
|
width="620px"
|
||||||
|
center
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
>
|
||||||
|
<el-form :model="endForm" label-width="100px" size="small">
|
||||||
|
<el-form-item label="DID">
|
||||||
|
<el-input v-model="endForm.DID" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料编码">
|
||||||
|
<el-input v-model="endForm.物料编码" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料名称">
|
||||||
|
<el-input v-model="endForm.物料名称" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="任务描述">
|
||||||
|
<el-input v-model="endForm.任务描述" type="textarea" :rows="2" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="进度说明">
|
||||||
|
<el-input
|
||||||
|
v-model="endForm.进度说明"
|
||||||
|
type="textarea"
|
||||||
|
:rows="4"
|
||||||
|
maxlength="500"
|
||||||
|
show-word-limit
|
||||||
|
placeholder="请输入本次报工进度说明"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer">
|
||||||
|
<el-button @click="endDialogVisible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="actionLoading" @click="confirmEndTask">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -123,10 +160,18 @@ export default {
|
|||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
actionLoading: false,
|
actionLoading: false,
|
||||||
|
endDialogVisible: false,
|
||||||
tableData: [],
|
tableData: [],
|
||||||
projectOptions: [],
|
projectOptions: [],
|
||||||
materialOptions: [],
|
materialOptions: [],
|
||||||
parentMaterialOptions: [],
|
parentMaterialOptions: [],
|
||||||
|
endForm: {
|
||||||
|
DID: '',
|
||||||
|
物料编码: '',
|
||||||
|
物料名称: '',
|
||||||
|
任务描述: '',
|
||||||
|
进度说明: ''
|
||||||
|
},
|
||||||
searchForm: {
|
searchForm: {
|
||||||
did: '',
|
did: '',
|
||||||
projectNo: '',
|
projectNo: '',
|
||||||
@@ -241,12 +286,35 @@ export default {
|
|||||||
['操作人', this.currentUserName()]
|
['操作人', this.currentUserName()]
|
||||||
], '开始成功')
|
], '开始成功')
|
||||||
},
|
},
|
||||||
endTask(row) {
|
async endTask(row) {
|
||||||
this.runAction('设计报工_任务_结束', [
|
const latest = await this.getLatestTask(row.DID)
|
||||||
['DID', row.DID],
|
if (!latest) return
|
||||||
|
Object.assign(row, latest)
|
||||||
|
if (Number(latest.当前用户未结束报工数 || 0) <= 0) {
|
||||||
|
this.$message.warning('当前人员没有未结束的报工记录')
|
||||||
|
this.searchTable()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.endForm = {
|
||||||
|
DID: latest.DID,
|
||||||
|
物料编码: latest.物料编码 || '',
|
||||||
|
物料名称: latest.物料名称 || '',
|
||||||
|
任务描述: latest.任务描述 || '',
|
||||||
|
进度说明: ''
|
||||||
|
}
|
||||||
|
this.endDialogVisible = true
|
||||||
|
},
|
||||||
|
async confirmEndTask() {
|
||||||
|
if (!this.endForm.DID) return
|
||||||
|
const success = await this.runAction('设计报工_任务_结束', [
|
||||||
|
['DID', this.endForm.DID],
|
||||||
['操作人ID', this.currentUserId()],
|
['操作人ID', this.currentUserId()],
|
||||||
['操作人', this.currentUserName()]
|
['操作人', this.currentUserName()],
|
||||||
|
['进度说明', this.endForm.进度说明 || '']
|
||||||
], '结束成功')
|
], '结束成功')
|
||||||
|
if (success) {
|
||||||
|
this.endDialogVisible = false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async completeTask(row) {
|
async completeTask(row) {
|
||||||
const latest = await this.getLatestTask(row.DID)
|
const latest = await this.getLatestTask(row.DID)
|
||||||
@@ -317,12 +385,15 @@ export default {
|
|||||||
if (String(result.result) === '1') {
|
if (String(result.result) === '1') {
|
||||||
this.$message.success(result.message || defaultMessage)
|
this.$message.success(result.message || defaultMessage)
|
||||||
this.searchTable()
|
this.searchTable()
|
||||||
|
return true
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(result.message || '操作失败')
|
this.$message.error(result.message || '操作失败')
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`${procedure}失败:`, error)
|
console.error(`${procedure}失败:`, error)
|
||||||
this.$message.error('操作失败')
|
this.$message.error('操作失败')
|
||||||
|
return false
|
||||||
} finally {
|
} finally {
|
||||||
this.actionLoading = false
|
this.actionLoading = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -255,9 +255,9 @@
|
|||||||
<el-input v-model="formData.研发立项号" />
|
<el-input v-model="formData.研发立项号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="24">
|
||||||
<el-form-item label="研发目的">
|
<el-form-item label="研发目的">
|
||||||
<el-input v-model="formData.研发目的" />
|
<el-input v-model="formData.研发目的" type="textarea" :rows="2"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@@ -340,7 +340,6 @@ export default {
|
|||||||
},
|
},
|
||||||
formData: this.getEmptyForm(),
|
formData: this.getEmptyForm(),
|
||||||
rules: {
|
rules: {
|
||||||
物料编码: [{ required: true, message: '请选择物料编码', trigger: 'change' }],
|
|
||||||
任务描述: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]
|
任务描述: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -615,7 +614,7 @@ export default {
|
|||||||
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
|
return item.项目名称 ? `${item.项目号} | ${item.项目名称}` : item.项目号
|
||||||
},
|
},
|
||||||
formatPersonLabel(item) {
|
formatPersonLabel(item) {
|
||||||
return item.账号 ? `${item.人员姓名} | ${item.账号}` : item.人员姓名
|
return item.账号 ? `${item.人员姓名}` : item.人员姓名
|
||||||
},
|
},
|
||||||
getResult(response) {
|
getResult(response) {
|
||||||
const data = response && response.data
|
const data = response && response.data
|
||||||
|
|||||||
Reference in New Issue
Block a user