feat: 完善设计报工、质检及齐套跟踪
This commit is contained in:
@@ -0,0 +1,528 @@
|
||||
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
|
||||
|
||||
IF COL_LENGTH(N'[dbo].[MES_设计报工_任务]', N'对齐可见ID') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE [dbo].[MES_设计报工_任务] ADD [对齐可见ID] nvarchar(1000) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'[dbo].[MES_设计报工_任务]', N'对齐可见') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE [dbo].[MES_设计报工_任务] ADD [对齐可见] nvarchar(1000) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[dbo].[MES_设计报工_任务说明]', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[MES_设计报工_任务说明]
|
||||
(
|
||||
[SID] int IDENTITY(1,1) NOT NULL CONSTRAINT [PK_MES_设计报工_任务说明] PRIMARY KEY,
|
||||
[DID] int NOT NULL,
|
||||
[说明类型] nvarchar(20) NOT NULL,
|
||||
[说明内容] nvarchar(2000) NOT NULL,
|
||||
[操作人ID] nvarchar(100) NULL,
|
||||
[操作人] nvarchar(100) NULL,
|
||||
[录入时间] datetime NOT NULL CONSTRAINT [DF_MES_设计报工_任务说明_录入时间] DEFAULT (GETDATE()),
|
||||
CONSTRAINT [FK_MES_设计报工_任务说明_任务] FOREIGN KEY ([DID])
|
||||
REFERENCES [dbo].[MES_设计报工_任务]([DID]) ON DELETE CASCADE,
|
||||
CONSTRAINT [CK_MES_设计报工_任务说明_类型] CHECK ([说明类型] IN (N'异常说明', N'奇思妙想'))
|
||||
);
|
||||
|
||||
CREATE INDEX [IX_MES_设计报工_任务说明_DID_类型_时间]
|
||||
ON [dbo].[MES_设计报工_任务说明]([DID], [说明类型], [录入时间], [SID]);
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务说明_新增]
|
||||
@DID int,
|
||||
@说明类型 nvarchar(20),
|
||||
@说明内容 nvarchar(2000),
|
||||
@操作人ID nvarchar(100) = N'',
|
||||
@操作人 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SET @说明类型 = LTRIM(RTRIM(ISNULL(@说明类型, N'')));
|
||||
SET @说明内容 = LTRIM(RTRIM(ISNULL(@说明内容, N'')));
|
||||
|
||||
IF @说明类型 NOT IN (N'异常说明', N'奇思妙想')
|
||||
BEGIN
|
||||
SELECT CAST(0 AS int) AS [result], N'说明类型不正确' AS [message];
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @说明内容 = N''
|
||||
BEGIN
|
||||
SELECT CAST(0 AS int) AS [result], N'说明内容不能为空' AS [message];
|
||||
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
|
||||
|
||||
INSERT INTO [dbo].[MES_设计报工_任务说明]
|
||||
([DID], [说明类型], [说明内容], [操作人ID], [操作人])
|
||||
VALUES
|
||||
(@DID, @说明类型, @说明内容, NULLIF(@操作人ID, N''), NULLIF(@操作人, N''));
|
||||
|
||||
SELECT CAST(1 AS int) AS [result], N'保存成功' AS [message], CONVERT(int, SCOPE_IDENTITY()) AS [SID];
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_查询]
|
||||
@DID int = NULL,
|
||||
@项目号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(100) = N'',
|
||||
@图号 nvarchar(100) = N'',
|
||||
@类别 nvarchar(100) = N'',
|
||||
@关联父件物料编码 nvarchar(100) = N'',
|
||||
@预计开始时间_Start nvarchar(30) = N'',
|
||||
@预计开始时间_End nvarchar(30) = N'',
|
||||
@预计结束时间_Start nvarchar(30) = N'',
|
||||
@预计结束时间_End nvarchar(30) = N'',
|
||||
@单据状态 nvarchar(50) = N'',
|
||||
@当前操作人ID nvarchar(100) = N'',
|
||||
@当前操作人 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @预计开始日期1 datetime = TRY_CONVERT(datetime, NULLIF(@预计开始时间_Start, N''));
|
||||
DECLARE @预计开始日期2 datetime = TRY_CONVERT(datetime, NULLIF(@预计开始时间_End, N''));
|
||||
DECLARE @预计结束日期1 datetime = TRY_CONVERT(datetime, NULLIF(@预计结束时间_Start, N''));
|
||||
DECLARE @预计结束日期2 datetime = TRY_CONVERT(datetime, NULLIF(@预计结束时间_End, N''));
|
||||
|
||||
SELECT TOP 1000
|
||||
t.[DID],
|
||||
t.[项目号],
|
||||
t.[物料编码],
|
||||
t.[物料名称],
|
||||
t.[图号],
|
||||
t.[类别],
|
||||
t.[任务描述],
|
||||
t.[关联父件物料编码],
|
||||
t.[关联父件物料名称],
|
||||
t.[设计要求],
|
||||
t.[研发立项号],
|
||||
t.[研发目的],
|
||||
t.[对齐可见ID],
|
||||
t.[对齐可见],
|
||||
t.[指派对象ID],
|
||||
t.[指派对象],
|
||||
CONVERT(varchar(19), t.[预计开始时间], 120) AS [预计开始时间],
|
||||
CONVERT(varchar(19), t.[预计结束时间], 120) AS [预计结束时间],
|
||||
t.[单据状态],
|
||||
CONVERT(varchar(19), t.[创建日期], 120) AS [创建日期],
|
||||
t.[创建人],
|
||||
t.[最后编辑人],
|
||||
CONVERT(varchar(19), t.[最后编辑时间], 120) AS [最后编辑时间],
|
||||
t.[备注],
|
||||
ISNULL(r.[报工次数], 0) AS [报工次数],
|
||||
ISNULL(r.[未结束报工数], 0) AS [未结束报工数],
|
||||
ISNULL(r.[当前用户未结束报工数], 0) AS [当前用户未结束报工数],
|
||||
ISNULL(p.[未结束报工人员], N'') AS [未结束报工人员],
|
||||
CONVERT(varchar(19), r.[最后开始时间], 120) AS [最后开始时间],
|
||||
CONVERT(varchar(19), r.[最后结束时间], 120) AS [最后结束时间],
|
||||
ISNULL(progress_notes.[进度说明], N'') AS [进度说明],
|
||||
ISNULL(task_notes.[异常说明], N'') AS [异常说明],
|
||||
ISNULL(task_notes.[奇思妙想], N'') AS [奇思妙想]
|
||||
FROM [dbo].[MES_设计报工_任务] AS t
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
COUNT(1) AS [报工次数],
|
||||
SUM(CASE WHEN rr.[结束时间] IS NULL THEN 1 ELSE 0 END) AS [未结束报工数],
|
||||
SUM(CASE
|
||||
WHEN rr.[结束时间] IS NULL
|
||||
AND (
|
||||
(NULLIF(@当前操作人ID, N'') IS NOT NULL AND ISNULL(rr.[操作人ID], N'') = @当前操作人ID)
|
||||
OR (NULLIF(@当前操作人ID, N'') IS NULL AND NULLIF(@当前操作人, N'') IS NOT NULL AND ISNULL(rr.[操作人], N'') = @当前操作人)
|
||||
)
|
||||
THEN 1 ELSE 0 END) AS [当前用户未结束报工数],
|
||||
MAX(rr.[开始时间]) AS [最后开始时间],
|
||||
MAX(rr.[结束时间]) AS [最后结束时间]
|
||||
FROM [dbo].[MES_设计报工_记录] AS rr
|
||||
WHERE rr.[DID] = t.[DID]
|
||||
) AS r
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT STRING_AGG(CONVERT(nvarchar(max), x.[操作人标识]), N'、') AS [未结束报工人员]
|
||||
FROM
|
||||
(
|
||||
SELECT DISTINCT COALESCE(NULLIF(rr2.[操作人], N''), NULLIF(rr2.[操作人ID], N''), N'未填写操作人') AS [操作人标识]
|
||||
FROM [dbo].[MES_设计报工_记录] AS rr2
|
||||
WHERE rr2.[DID] = t.[DID]
|
||||
AND rr2.[结束时间] IS NULL
|
||||
) AS x
|
||||
) AS p
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT STRING_AGG(
|
||||
CONVERT(nvarchar(max), CONVERT(nvarchar(19), rr3.[结束时间], 120) + NCHAR(13) + NCHAR(10) + rr3.[进度说明]),
|
||||
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
|
||||
) WITHIN GROUP (ORDER BY rr3.[结束时间], rr3.[RID]) AS [进度说明]
|
||||
FROM [dbo].[MES_设计报工_记录] AS rr3
|
||||
WHERE rr3.[DID] = t.[DID]
|
||||
AND NULLIF(LTRIM(RTRIM(rr3.[进度说明])), N'') IS NOT NULL
|
||||
) AS progress_notes
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
STRING_AGG(
|
||||
CASE WHEN n.[说明类型] = N'异常说明'
|
||||
THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + NCHAR(13) + NCHAR(10) + n.[说明内容]) END,
|
||||
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
|
||||
) WITHIN GROUP (ORDER BY n.[录入时间], n.[SID]) AS [异常说明],
|
||||
STRING_AGG(
|
||||
CASE WHEN n.[说明类型] = N'奇思妙想'
|
||||
THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + NCHAR(13) + NCHAR(10) + n.[说明内容]) END,
|
||||
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
|
||||
) WITHIN GROUP (ORDER BY n.[录入时间], n.[SID]) AS [奇思妙想]
|
||||
FROM [dbo].[MES_设计报工_任务说明] AS n
|
||||
WHERE n.[DID] = t.[DID]
|
||||
) AS task_notes
|
||||
WHERE
|
||||
(@DID IS NULL OR @DID = 0 OR t.[DID] = @DID)
|
||||
AND (ISNULL(@项目号, N'') = N'' OR t.[项目号] LIKE N'%' + @项目号 + N'%')
|
||||
AND (ISNULL(@物料编码, N'') = N'' OR t.[物料编码] LIKE N'%' + @物料编码 + N'%')
|
||||
AND (ISNULL(@图号, N'') = N'' OR t.[图号] LIKE N'%' + @图号 + N'%')
|
||||
AND (ISNULL(@类别, N'') = N'' OR t.[类别] LIKE N'%' + @类别 + N'%')
|
||||
AND (ISNULL(@关联父件物料编码, N'') = N'' OR t.[关联父件物料编码] LIKE N'%' + @关联父件物料编码 + N'%')
|
||||
AND (ISNULL(@单据状态, N'') = N'' OR @单据状态 = N'全部' OR t.[单据状态] = @单据状态)
|
||||
AND (@预计开始日期1 IS NULL OR t.[预计开始时间] >= @预计开始日期1)
|
||||
AND (@预计开始日期2 IS NULL OR t.[预计开始时间] < DATEADD(day, 1, @预计开始日期2))
|
||||
AND (@预计结束日期1 IS NULL OR t.[预计结束时间] >= @预计结束日期1)
|
||||
AND (@预计结束日期2 IS NULL OR t.[预计结束时间] < DATEADD(day, 1, @预计结束日期2))
|
||||
AND
|
||||
(
|
||||
(NULLIF(@当前操作人ID, N'') IS NULL AND NULLIF(@当前操作人, N'') IS NULL)
|
||||
OR (NULLIF(@当前操作人, N'') IS NOT NULL AND ISNULL(t.[创建人], N'') = @当前操作人)
|
||||
OR
|
||||
(
|
||||
NULLIF(@当前操作人ID, N'') IS NOT NULL
|
||||
AND CHARINDEX(N',' + @当前操作人ID + N',', N',' + ISNULL(t.[对齐可见ID], N'') + N',') > 0
|
||||
)
|
||||
OR
|
||||
(
|
||||
NULLIF(@当前操作人, N'') IS NOT NULL
|
||||
AND CHARINDEX(N',' + @当前操作人 + N',', N',' + ISNULL(t.[对齐可见], N'') + N',') > 0
|
||||
)
|
||||
OR
|
||||
(
|
||||
NULLIF(@当前操作人ID, N'') IS NOT NULL
|
||||
AND CHARINDEX(N',' + @当前操作人ID + N',', N',' + ISNULL(t.[指派对象ID], N'') + N',') > 0
|
||||
)
|
||||
OR
|
||||
(
|
||||
NULLIF(@当前操作人, N'') IS NOT NULL
|
||||
AND CHARINDEX(N',' + @当前操作人 + N',', N',' + ISNULL(t.[指派对象], N'') + N',') > 0
|
||||
)
|
||||
)
|
||||
ORDER BY t.[DID] DESC;
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_新增]
|
||||
@项目号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(100) = N'',
|
||||
@物料名称 nvarchar(200) = N'',
|
||||
@图号 nvarchar(100) = N'',
|
||||
@类别 nvarchar(100) = N'',
|
||||
@任务描述 nvarchar(500) = N'',
|
||||
@关联父件物料编码 nvarchar(100) = N'',
|
||||
@关联父件物料名称 nvarchar(200) = N'',
|
||||
@设计要求 nvarchar(max) = N'',
|
||||
@研发立项号 nvarchar(100) = N'',
|
||||
@研发目的 nvarchar(500) = N'',
|
||||
@指派对象ID nvarchar(1000) = N'',
|
||||
@指派对象 nvarchar(1000) = N'',
|
||||
@预计开始时间 nvarchar(30) = N'',
|
||||
@预计结束时间 nvarchar(30) = N'',
|
||||
@创建人 nvarchar(100) = N'',
|
||||
@备注 nvarchar(500) = N'',
|
||||
@对齐可见ID nvarchar(1000) = N'',
|
||||
@对齐可见 nvarchar(1000) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
INSERT INTO [dbo].[MES_设计报工_任务]
|
||||
(
|
||||
[项目号], [物料编码], [物料名称], [图号], [类别], [任务描述],
|
||||
[关联父件物料编码], [关联父件物料名称], [设计要求],
|
||||
[研发立项号], [研发目的], [对齐可见ID], [对齐可见], [指派对象ID], [指派对象],
|
||||
[预计开始时间], [预计结束时间], [单据状态],
|
||||
[创建人], [最后编辑人], [最后编辑时间], [备注]
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
NULLIF(@项目号, N''), NULLIF(@物料编码, N''), NULLIF(@物料名称, N''), NULLIF(@图号, N''), NULLIF(@类别, N''), NULLIF(@任务描述, N''),
|
||||
NULLIF(@关联父件物料编码, N''), NULLIF(@关联父件物料名称, N''), NULLIF(@设计要求, N''),
|
||||
NULLIF(@研发立项号, N''), NULLIF(@研发目的, N''), NULLIF(@对齐可见ID, N''), NULLIF(@对齐可见, N''), NULLIF(@指派对象ID, N''), NULLIF(@指派对象, N''),
|
||||
TRY_CONVERT(datetime, NULLIF(@预计开始时间, N'')), TRY_CONVERT(datetime, NULLIF(@预计结束时间, N'')), N'待开始',
|
||||
NULLIF(@创建人, N''), NULLIF(@创建人, N''), GETDATE(), NULLIF(@备注, N'')
|
||||
);
|
||||
|
||||
SELECT CAST(1 AS int) AS [result], N'新增成功' AS [message], SCOPE_IDENTITY() AS [DID];
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_编辑]
|
||||
@DID int,
|
||||
@项目号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(100) = N'',
|
||||
@物料名称 nvarchar(200) = N'',
|
||||
@图号 nvarchar(100) = N'',
|
||||
@类别 nvarchar(100) = N'',
|
||||
@任务描述 nvarchar(500) = N'',
|
||||
@关联父件物料编码 nvarchar(100) = N'',
|
||||
@关联父件物料名称 nvarchar(200) = N'',
|
||||
@设计要求 nvarchar(max) = N'',
|
||||
@研发立项号 nvarchar(100) = N'',
|
||||
@研发目的 nvarchar(500) = N'',
|
||||
@指派对象ID nvarchar(1000) = N'',
|
||||
@指派对象 nvarchar(1000) = N'',
|
||||
@预计开始时间 nvarchar(30) = N'',
|
||||
@预计结束时间 nvarchar(30) = N'',
|
||||
@最后编辑人 nvarchar(100) = N'',
|
||||
@备注 nvarchar(500) = N'',
|
||||
@对齐可见ID nvarchar(1000) = N'',
|
||||
@对齐可见 nvarchar(1000) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_设计报工_任务] WHERE [DID] = @DID)
|
||||
BEGIN
|
||||
SELECT CAST(0 AS int) AS [result], N'任务不存在' AS [message];
|
||||
RETURN;
|
||||
END
|
||||
|
||||
UPDATE [dbo].[MES_设计报工_任务]
|
||||
SET
|
||||
[项目号] = NULLIF(@项目号, N''),
|
||||
[物料编码] = NULLIF(@物料编码, N''),
|
||||
[物料名称] = NULLIF(@物料名称, N''),
|
||||
[图号] = NULLIF(@图号, N''),
|
||||
[类别] = NULLIF(@类别, N''),
|
||||
[任务描述] = NULLIF(@任务描述, N''),
|
||||
[关联父件物料编码] = NULLIF(@关联父件物料编码, N''),
|
||||
[关联父件物料名称] = NULLIF(@关联父件物料名称, N''),
|
||||
[设计要求] = NULLIF(@设计要求, N''),
|
||||
[研发立项号] = NULLIF(@研发立项号, N''),
|
||||
[研发目的] = NULLIF(@研发目的, N''),
|
||||
[对齐可见ID] = NULLIF(@对齐可见ID, N''),
|
||||
[对齐可见] = NULLIF(@对齐可见, N''),
|
||||
[指派对象ID] = NULLIF(@指派对象ID, N''),
|
||||
[指派对象] = NULLIF(@指派对象, N''),
|
||||
[预计开始时间] = TRY_CONVERT(datetime, NULLIF(@预计开始时间, N'')),
|
||||
[预计结束时间] = TRY_CONVERT(datetime, NULLIF(@预计结束时间, N'')),
|
||||
[最后编辑人] = NULLIF(@最后编辑人, N''),
|
||||
[最后编辑时间] = GETDATE(),
|
||||
[备注] = NULLIF(@备注, N'')
|
||||
WHERE [DID] = @DID;
|
||||
|
||||
SELECT CAST(1 AS int) AS [result], N'编辑成功' AS [message];
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_任务_开始]
|
||||
@DID int,
|
||||
@操作人ID nvarchar(100) = N'',
|
||||
@操作人 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT OFF;
|
||||
|
||||
DECLARE @当前操作人ID nvarchar(100) = NULLIF(@操作人ID, N'');
|
||||
DECLARE @当前操作人 nvarchar(100) = NULLIF(@操作人, N'');
|
||||
DECLARE @人员锁标识 nvarchar(255);
|
||||
DECLARE @锁定结果 int;
|
||||
DECLARE @未结束DID int;
|
||||
DECLARE @未结束任务 nvarchar(500);
|
||||
DECLARE @RID int;
|
||||
DECLARE @初始事务数 int = @@TRANCOUNT;
|
||||
DECLARE @保存点名称 sysname = N'DRT_Task_Start';
|
||||
|
||||
IF @当前操作人ID IS NULL AND @当前操作人 IS NULL
|
||||
BEGIN
|
||||
SELECT CAST(0 AS int) AS [result], N'未获取到当前操作人,不能开始' AS [message];
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SET @人员锁标识 = N'DesignReportTask:' + COALESCE(@当前操作人ID, N'NAME:' + @当前操作人);
|
||||
|
||||
BEGIN TRY
|
||||
IF @初始事务数 = 0 BEGIN TRANSACTION;
|
||||
ELSE SAVE TRANSACTION @保存点名称;
|
||||
|
||||
EXEC @锁定结果 = sys.sp_getapplock
|
||||
@Resource = @人员锁标识,
|
||||
@LockMode = N'Exclusive',
|
||||
@LockOwner = N'Transaction',
|
||||
@LockTimeout = 10000;
|
||||
|
||||
IF @锁定结果 < 0
|
||||
BEGIN
|
||||
IF @初始事务数 = 0 ROLLBACK TRANSACTION;
|
||||
ELSE ROLLBACK TRANSACTION @保存点名称;
|
||||
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
|
||||
@未结束DID = r.[DID],
|
||||
@未结束任务 = t.[任务描述]
|
||||
FROM [dbo].[MES_设计报工_记录] AS r WITH (UPDLOCK, HOLDLOCK)
|
||||
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON t.[DID] = r.[DID]
|
||||
WHERE r.[结束时间] IS NULL
|
||||
AND (
|
||||
(@当前操作人ID IS NOT NULL AND ISNULL(r.[操作人ID], N'') = @当前操作人ID)
|
||||
OR (@当前操作人ID IS NULL AND @当前操作人 IS NOT NULL AND ISNULL(r.[操作人], N'') = @当前操作人)
|
||||
)
|
||||
ORDER BY r.[开始时间] DESC, r.[RID] DESC;
|
||||
|
||||
IF @未结束DID IS NOT NULL
|
||||
BEGIN
|
||||
IF @初始事务数 = 0 ROLLBACK TRANSACTION;
|
||||
ELSE ROLLBACK TRANSACTION @保存点名称;
|
||||
SELECT
|
||||
CAST(0 AS int) AS [result],
|
||||
N'任务 DID ' + CONVERT(nvarchar(20), @未结束DID)
|
||||
+ CASE WHEN NULLIF(@未结束任务, N'') IS NULL THEN N'' ELSE N'(' + @未结束任务 + N')' END
|
||||
+ N' 尚未关闭,请先结束该任务' AS [message],
|
||||
@未结束DID AS [未结束DID];
|
||||
RETURN;
|
||||
END
|
||||
|
||||
INSERT INTO [dbo].[MES_设计报工_记录]([DID], [操作人ID], [操作人], [开始时间], [报工状态])
|
||||
VALUES(@DID, @当前操作人ID, @当前操作人, GETDATE(), N'执行中');
|
||||
|
||||
SET @RID = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
UPDATE [dbo].[MES_设计报工_任务]
|
||||
SET [单据状态] = N'执行中', [最后编辑人] = @当前操作人, [最后编辑时间] = 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,
|
||||
@操作人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(LTRIM(RTRIM(@进度说明)), 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;
|
||||
|
||||
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
|
||||
@@ -203,6 +203,7 @@ BEGIN
|
||||
p2.[订单行号],
|
||||
p2.[工序名称],
|
||||
p2.[指派对象],
|
||||
p2.[外协分组],
|
||||
p2.[计划开始时间],
|
||||
p2.[计划完成时间],
|
||||
ISNULL(p2.[进度], 0) AS [进度],
|
||||
|
||||
Reference in New Issue
Block a user