feat: 打通出库作业链路
This commit is contained in:
164
sql/proc_bind_tray_msg_trace.sql
Normal file
164
sql/proc_bind_tray_msg_trace.sql
Normal file
@@ -0,0 +1,164 @@
|
||||
IF OBJECT_ID(N'[dbo].[in_tray_msg]', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[in_tray_msg] (
|
||||
[id] bigint IDENTITY(1,1) NOT NULL,
|
||||
[tray_code] varchar(80) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[stockin_detail_id] varchar(80) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[product_Id] varchar(80) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[quantity] decimal(18,4) NOT NULL,
|
||||
[warehouse_id] varchar(80) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[user_id] bigint NULL,
|
||||
[dept_id] bigint NULL,
|
||||
[create_time] datetime2(7) NULL,
|
||||
CONSTRAINT [PK_in_tray_msg] PRIMARY KEY CLUSTERED ([id])
|
||||
);
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.in_tray_msg', 'warehouse_id') IS NULL
|
||||
ALTER TABLE dbo.in_tray_msg ADD warehouse_id varchar(80) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.in_tray_msg', 'user_id') IS NULL
|
||||
ALTER TABLE dbo.in_tray_msg ADD user_id bigint NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.in_tray_msg', 'dept_id') IS NULL
|
||||
ALTER TABLE dbo.in_tray_msg ADD dept_id bigint NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.in_tray_msg', 'product_Id') IS NULL AND COL_LENGTH('dbo.in_tray_msg', 'product_id') IS NULL
|
||||
ALTER TABLE dbo.in_tray_msg ADD product_Id varchar(80) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_in_tray_msg_tray_warehouse' AND object_id = OBJECT_ID(N'[dbo].[in_tray_msg]'))
|
||||
CREATE INDEX [IX_in_tray_msg_tray_warehouse] ON [dbo].[in_tray_msg] ([tray_code], [warehouse_id]);
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[dbo].[proc_bind_tray_msg]', N'P') IS NOT NULL
|
||||
DROP PROCEDURE [dbo].[proc_bind_tray_msg]
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[proc_bind_tray_msg]
|
||||
@v_stockin_detail_id varchar(80),
|
||||
@v_tray_code varchar(80),
|
||||
@v_warehouse_id varchar(80),
|
||||
@v_quantity decimal(18,4),
|
||||
@v_user_id bigint,
|
||||
@v_dept_id bigint,
|
||||
@v_result int OUTPUT,
|
||||
@v_resultmsg varchar(500) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@v_product_id varchar(80),
|
||||
@v_bill_quantity decimal(18,4),
|
||||
@v_scan_num decimal(18,4);
|
||||
|
||||
BEGIN TRY
|
||||
IF @v_stockin_detail_id IS NULL OR LTRIM(RTRIM(@v_stockin_detail_id)) = ''
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '入库子单ID不能为空';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @v_tray_code IS NULL OR LTRIM(RTRIM(@v_tray_code)) = ''
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '托盘号不能为空';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @v_warehouse_id IS NULL OR LTRIM(RTRIM(@v_warehouse_id)) = ''
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '仓库编码不能为空';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF ISNULL(@v_quantity, 0) <= 0
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '绑定数量必须大于0';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SELECT TOP 1
|
||||
@v_product_id = product_id,
|
||||
@v_bill_quantity = ISNULL(quantity, 0),
|
||||
@v_scan_num = ISNULL(scan_num, 0)
|
||||
FROM dbo.in_stockin_detail WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE stockin_detail_id = @v_stockin_detail_id;
|
||||
|
||||
IF @v_product_id IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '入库子单不存在';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @v_scan_num + @v_quantity > @v_bill_quantity
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '绑定数量超过子单待绑数量';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE dbo.in_stockin_detail
|
||||
SET scan_num = ISNULL(scan_num, 0) + @v_quantity
|
||||
WHERE stockin_detail_id = @v_stockin_detail_id
|
||||
AND ISNULL(scan_num, 0) + @v_quantity <= ISNULL(quantity, 0);
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '绑定数量超过子单待绑数量';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.in_tray_msg
|
||||
WHERE tray_code = @v_tray_code
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND stockin_detail_id = @v_stockin_detail_id
|
||||
)
|
||||
BEGIN
|
||||
UPDATE dbo.in_tray_msg
|
||||
SET quantity = ISNULL(quantity, 0) + @v_quantity,
|
||||
product_Id = @v_product_id,
|
||||
user_id = @v_user_id,
|
||||
dept_id = @v_dept_id
|
||||
WHERE tray_code = @v_tray_code
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND stockin_detail_id = @v_stockin_detail_id;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
INSERT INTO dbo.in_tray_msg (
|
||||
tray_code, stockin_detail_id, product_Id, quantity,
|
||||
warehouse_id, user_id, dept_id, create_time
|
||||
)
|
||||
VALUES (
|
||||
@v_tray_code, @v_stockin_detail_id, @v_product_id, @v_quantity,
|
||||
@v_warehouse_id, @v_user_id, @v_dept_id, GETDATE()
|
||||
);
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 1;
|
||||
SET @v_resultmsg = '绑盘成功';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = ERROR_MESSAGE();
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user