165 lines
5.1 KiB
Transact-SQL
165 lines
5.1 KiB
Transact-SQL
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
|