feat: 打通出库作业链路
This commit is contained in:
182
sql/bas_api_log.sql
Normal file
182
sql/bas_api_log.sql
Normal file
@@ -0,0 +1,182 @@
|
||||
-- 外部接口日志表和 30 天保留策略
|
||||
-- 目标库:FTC25009-WMS
|
||||
|
||||
IF OBJECT_ID(N'dbo.bas_api_log', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.bas_api_log (
|
||||
id bigint IDENTITY(1,1) NOT NULL,
|
||||
direction varchar(16) NOT NULL,
|
||||
sys_code varchar(50) NULL,
|
||||
interface_name nvarchar(100) NULL,
|
||||
request_url nvarchar(500) NULL,
|
||||
request_method varchar(20) NULL,
|
||||
request_body nvarchar(max) NULL,
|
||||
response_body nvarchar(max) NULL,
|
||||
msg_type varchar(20) NULL,
|
||||
http_status int NULL,
|
||||
cost_ms bigint NULL,
|
||||
status varchar(30) NULL,
|
||||
error_msg nvarchar(2000) NULL,
|
||||
source_ip varchar(80) NULL,
|
||||
trace_id varchar(80) NULL,
|
||||
create_time datetime2(7) NOT NULL CONSTRAINT DF_bas_api_log_create_time DEFAULT GETDATE(),
|
||||
CONSTRAINT PK_bas_api_log PRIMARY KEY CLUSTERED(id)
|
||||
);
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ADD direction varchar(16) NULL;
|
||||
EXEC(N'UPDATE dbo.bas_api_log SET direction = ''UNKNOWN'' WHERE direction IS NULL');
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.bas_api_log', N'request_method') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ADD request_method varchar(20) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.bas_api_log', N'source_ip') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ADD source_ip varchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.bas_api_log', N'trace_id') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ADD trace_id varchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COLUMNPROPERTY(OBJECT_ID(N'dbo.bas_api_log'), 'id', 'IsIdentity') = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys.default_constraints dc
|
||||
JOIN sys.columns c ON c.object_id = dc.parent_object_id AND c.column_id = dc.parent_column_id
|
||||
WHERE dc.parent_object_id = OBJECT_ID(N'dbo.bas_api_log') AND c.name = N'id'
|
||||
)
|
||||
BEGIN
|
||||
DECLARE @apiLogStartId bigint;
|
||||
SELECT @apiLogStartId = ISNULL(MAX(CAST(id AS bigint)), 0) + 1 FROM dbo.bas_api_log;
|
||||
|
||||
IF OBJECT_ID(N'dbo.seq_bas_api_log_id', N'SO') IS NULL
|
||||
BEGIN
|
||||
DECLARE @createSeqSql nvarchar(max) = N'CREATE SEQUENCE dbo.seq_bas_api_log_id AS bigint START WITH '
|
||||
+ CAST(@apiLogStartId AS nvarchar(30)) + N' INCREMENT BY 1';
|
||||
EXEC(@createSeqSql);
|
||||
END;
|
||||
|
||||
ALTER TABLE dbo.bas_api_log ADD CONSTRAINT DF_bas_api_log_id DEFAULT (NEXT VALUE FOR dbo.seq_bas_api_log_id) FOR id;
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
|
||||
AND name = N'request_url'
|
||||
AND max_length < 1000
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_url nvarchar(500) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
|
||||
AND name = N'request_body'
|
||||
AND system_type_id IN (167, 231)
|
||||
AND max_length <> -1
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_body nvarchar(max) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
|
||||
AND name = N'response_body'
|
||||
AND system_type_id IN (167, 231)
|
||||
AND max_length <> -1
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ALTER COLUMN response_body nvarchar(max) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM sys.columns
|
||||
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
|
||||
AND name = N'error_msg'
|
||||
AND system_type_id IN (167, 231)
|
||||
AND max_length < 4000
|
||||
)
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_api_log ALTER COLUMN error_msg nvarchar(2000) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_create_time')
|
||||
BEGIN
|
||||
EXEC(N'CREATE INDEX IX_bas_api_log_create_time ON dbo.bas_api_log(create_time)');
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_direction_sys')
|
||||
BEGIN
|
||||
EXEC(N'CREATE INDEX IX_bas_api_log_direction_sys ON dbo.bas_api_log(direction, sys_code, create_time DESC)');
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_clean_bas_api_log', N'P') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE dbo.proc_clean_bas_api_log;
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_clean_bas_api_log
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
DELETE FROM dbo.bas_api_log
|
||||
WHERE create_time < DATEADD(DAY, -30, GETDATE());
|
||||
END
|
||||
GO
|
||||
|
||||
DECLARE @apiLogJobId bigint = 9010;
|
||||
DECLARE @jobIdIsIdentity bit = COLUMNPROPERTY(OBJECT_ID(N'dbo.sys_job'), 'job_id', 'IsIdentity');
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.sys_job WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()')
|
||||
BEGIN
|
||||
IF @jobIdIsIdentity = 1
|
||||
SET IDENTITY_INSERT dbo.sys_job ON;
|
||||
|
||||
INSERT INTO dbo.sys_job (
|
||||
job_id, job_name, job_group, invoke_target, cron_expression,
|
||||
misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark
|
||||
)
|
||||
VALUES (
|
||||
@apiLogJobId, N'外部接口日志30天清理', N'DEFAULT', N'apiLogCleanupTask.cleanExpiredApiLogs()', N'0 30 2 * * ?',
|
||||
N'3', N'1', N'0', N'admin', GETDATE(), N'', NULL, N'清理 bas_api_log 中 30 天前的日志'
|
||||
);
|
||||
|
||||
IF @jobIdIsIdentity = 1
|
||||
SET IDENTITY_INSERT dbo.sys_job OFF;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.sys_job
|
||||
SET job_name = N'外部接口日志30天清理',
|
||||
cron_expression = N'0 30 2 * * ?',
|
||||
misfire_policy = N'3',
|
||||
concurrent = N'1',
|
||||
status = N'0',
|
||||
update_time = GETDATE(),
|
||||
remark = N'清理 bas_api_log 中 30 天前的日志'
|
||||
WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()';
|
||||
END
|
||||
GO
|
||||
81
sql/bas_config_menus.sql
Normal file
81
sql/bas_config_menus.sql
Normal file
@@ -0,0 +1,81 @@
|
||||
-- 基础信息菜单接入:托盘规则、点位配置
|
||||
-- 目标库:FTC25009-WMS
|
||||
|
||||
DECLARE @basMenuId bigint = 2004;
|
||||
DECLARE @trayRuleMenuId bigint = 2190;
|
||||
DECLARE @stationPointMenuId bigint = 2200;
|
||||
DECLARE @menuIdIsIdentity bit = COLUMNPROPERTY(OBJECT_ID(N'dbo.sys_menu'), 'menu_id', 'IsIdentity');
|
||||
|
||||
IF @menuIdIsIdentity = 1
|
||||
SET IDENTITY_INSERT dbo.sys_menu ON;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.sys_menu WHERE menu_id = @trayRuleMenuId)
|
||||
BEGIN
|
||||
INSERT INTO dbo.sys_menu (
|
||||
menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
|
||||
is_frame, is_cache, menu_type, visible, status, perms, icon,
|
||||
create_by, create_time, update_by, update_time, remark
|
||||
)
|
||||
VALUES (
|
||||
@trayRuleMenuId, N'托盘规则', @basMenuId, 6, N'trayRule', N'bas/trayRule/index', NULL, N'',
|
||||
1, 0, N'C', N'0', N'0', N'bas:trayRule:list', N'list',
|
||||
N'admin', GETDATE(), N'', NULL, N''
|
||||
);
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.sys_menu WHERE menu_id = @stationPointMenuId)
|
||||
BEGIN
|
||||
INSERT INTO dbo.sys_menu (
|
||||
menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
|
||||
is_frame, is_cache, menu_type, visible, status, perms, icon,
|
||||
create_by, create_time, update_by, update_time, remark
|
||||
)
|
||||
VALUES (
|
||||
@stationPointMenuId, N'点位配置', @basMenuId, 7, N'stationpoint', N'bas/stationpoint/index', NULL, N'',
|
||||
1, 0, N'C', N'0', N'0', N'bas:stationpoint:list', N'list',
|
||||
N'admin', GETDATE(), N'', NULL, N''
|
||||
);
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.sys_menu
|
||||
SET menu_name = N'点位配置',
|
||||
update_time = GETDATE()
|
||||
WHERE menu_id = @stationPointMenuId;
|
||||
END
|
||||
|
||||
DECLARE @button table(menu_id bigint, menu_name nvarchar(50), parent_id bigint, order_num int, perms nvarchar(100));
|
||||
|
||||
INSERT INTO @button(menu_id, menu_name, parent_id, order_num, perms)
|
||||
VALUES
|
||||
(2191, N'托盘规则查询', @trayRuleMenuId, 1, N'bas:trayRule:query'),
|
||||
(2192, N'托盘规则新增', @trayRuleMenuId, 2, N'bas:trayRule:add'),
|
||||
(2193, N'托盘规则修改', @trayRuleMenuId, 3, N'bas:trayRule:edit'),
|
||||
(2194, N'托盘规则删除', @trayRuleMenuId, 4, N'bas:trayRule:remove'),
|
||||
(2195, N'托盘规则导出', @trayRuleMenuId, 5, N'bas:trayRule:export'),
|
||||
(2201, N'点位配置查询', @stationPointMenuId, 1, N'bas:stationpoint:query'),
|
||||
(2202, N'点位配置新增', @stationPointMenuId, 2, N'bas:stationpoint:add'),
|
||||
(2203, N'点位配置修改', @stationPointMenuId, 3, N'bas:stationpoint:edit'),
|
||||
(2204, N'点位配置删除', @stationPointMenuId, 4, N'bas:stationpoint:remove'),
|
||||
(2205, N'点位配置导出', @stationPointMenuId, 5, N'bas:stationpoint:export');
|
||||
|
||||
INSERT INTO dbo.sys_menu (
|
||||
menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
|
||||
is_frame, is_cache, menu_type, visible, status, perms, icon,
|
||||
create_by, create_time, update_by, update_time, remark
|
||||
)
|
||||
SELECT b.menu_id, b.menu_name, b.parent_id, b.order_num, N'#', N'', NULL, N'',
|
||||
1, 0, N'F', N'0', N'0', b.perms, N'#',
|
||||
N'admin', GETDATE(), N'', NULL, N''
|
||||
FROM @button b
|
||||
WHERE NOT EXISTS (SELECT 1 FROM dbo.sys_menu m WHERE m.menu_id = b.menu_id);
|
||||
|
||||
UPDATE m
|
||||
SET m.menu_name = b.menu_name,
|
||||
m.update_time = GETDATE()
|
||||
FROM dbo.sys_menu m
|
||||
INNER JOIN @button b ON b.menu_id = m.menu_id;
|
||||
|
||||
IF @menuIdIsIdentity = 1
|
||||
SET IDENTITY_INSERT dbo.sys_menu OFF;
|
||||
GO
|
||||
77
sql/bas_station_point.sql
Normal file
77
sql/bas_station_point.sql
Normal file
@@ -0,0 +1,77 @@
|
||||
IF NOT EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[bas_station_point]') AND type IN ('U'))
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[bas_station_point] (
|
||||
[id] bigint IDENTITY(1,1) NOT NULL,
|
||||
[point_id] varchar(64) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[point_name] varchar(128) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[warehouse_id] varchar(64) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[roadway_id] varchar(64) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[point_type] varchar(8) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[point_size] varchar(8) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '1',
|
||||
[tray_type] varchar(128) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '',
|
||||
[status] varchar(8) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '0',
|
||||
[point_status] varchar(8) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '0',
|
||||
[remark] varchar(500) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[create_time] datetime2(7) NULL,
|
||||
[update_time] datetime2(7) NULL,
|
||||
CONSTRAINT [PK_bas_station_point] PRIMARY KEY CLUSTERED ([id]),
|
||||
CONSTRAINT [UK_bas_station_point_point_id] UNIQUE ([point_id])
|
||||
)
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'point_name') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD point_name varchar(128) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'warehouse_id') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD warehouse_id varchar(64) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'roadway_id') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD roadway_id varchar(64) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'point_type') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD point_type varchar(8) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'point_size') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD point_size varchar(8) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT DF_bas_station_point_point_size DEFAULT '1';
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'tray_type') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD tray_type varchar(128) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT DF_bas_station_point_tray_type DEFAULT '';
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'status') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD status varchar(8) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT DF_bas_station_point_status DEFAULT '0';
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_station_point', 'point_status') IS NULL
|
||||
ALTER TABLE dbo.bas_station_point ADD point_status varchar(8) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT DF_bas_station_point_point_status DEFAULT '0';
|
||||
GO
|
||||
|
||||
UPDATE dbo.bas_station_point SET point_size = '1' WHERE point_size IS NULL OR point_size = '';
|
||||
GO
|
||||
UPDATE dbo.bas_station_point SET tray_type = '' WHERE tray_type IS NULL;
|
||||
GO
|
||||
UPDATE dbo.bas_station_point SET point_status = '0' WHERE point_status IS NULL OR point_status = '';
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_station_point_warehouse_type_status' AND object_id = OBJECT_ID(N'[dbo].[bas_station_point]'))
|
||||
CREATE INDEX [IX_bas_station_point_warehouse_type_status] ON [dbo].[bas_station_point] ([warehouse_id], [point_type], [status]);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_station_point_bind_filter' AND object_id = OBJECT_ID(N'[dbo].[bas_station_point]'))
|
||||
CREATE INDEX [IX_bas_station_point_bind_filter] ON [dbo].[bas_station_point] ([warehouse_id], [status], [point_status], [point_type]) INCLUDE ([roadway_id], [tray_type]);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys.extended_properties
|
||||
WHERE major_id = OBJECT_ID(N'[dbo].[bas_station_point]')
|
||||
AND minor_id = 0
|
||||
AND name = N'MS_Description'
|
||||
)
|
||||
BEGIN
|
||||
EXEC sp_addextendedproperty 'MS_Description', N'点位配置', 'SCHEMA', N'dbo', 'TABLE', N'bas_station_point';
|
||||
END
|
||||
GO
|
||||
|
||||
-- 菜单建议:在系统菜单中新增“点位配置”,路由 path 为 stationpoint,组件路径为 bas/stationpoint/index。
|
||||
-- 权限标识建议:bas:stationpoint:list/add/edit/remove/export/query。
|
||||
-- 这里不直接写入 sys_menu,是为了避免不同环境菜单 ID、父级目录 ID 不一致导致冲突。
|
||||
255
sql/bas_stock_master_detail.sql
Normal file
255
sql/bas_stock_master_detail.sql
Normal file
@@ -0,0 +1,255 @@
|
||||
IF OBJECT_ID(N'dbo.bas_stock_detail', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.bas_stock_detail (
|
||||
detail_id nvarchar(32) NOT NULL,
|
||||
stock_id nvarchar(32) NOT NULL,
|
||||
product_status nvarchar(2) NULL,
|
||||
lot_no nvarchar(80) NULL,
|
||||
product_id nvarchar(80) NULL,
|
||||
product_name nvarchar(255) NULL,
|
||||
quantity decimal(18, 0) NULL,
|
||||
out_quantity decimal(18, 0) NULL,
|
||||
job_detail_id nvarchar(255) NULL,
|
||||
stockin_detail_id nvarchar(80) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
remark nvarchar(500) NULL,
|
||||
CONSTRAINT PK_bas_stock_detail PRIMARY KEY CLUSTERED(detail_id)
|
||||
);
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_stock_detail_stock_id' AND object_id = OBJECT_ID(N'dbo.bas_stock_detail'))
|
||||
BEGIN
|
||||
CREATE INDEX IX_bas_stock_detail_stock_id ON dbo.bas_stock_detail(stock_id);
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_stock_detail_product' AND object_id = OBJECT_ID(N'dbo.bas_stock_detail'))
|
||||
BEGIN
|
||||
CREATE INDEX IX_bas_stock_detail_product ON dbo.bas_stock_detail(product_id, lot_no);
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_bas_stock_detail_stock')
|
||||
BEGIN
|
||||
ALTER TABLE dbo.bas_stock_detail WITH CHECK ADD CONSTRAINT FK_bas_stock_detail_stock
|
||||
FOREIGN KEY(stock_id) REFERENCES dbo.bas_stock(stock_id);
|
||||
END
|
||||
GO
|
||||
|
||||
INSERT INTO dbo.bas_stock_detail (
|
||||
detail_id, stock_id, product_status, lot_no, product_id, product_name,
|
||||
quantity, out_quantity, job_detail_id, stockin_detail_id, create_time
|
||||
)
|
||||
SELECT
|
||||
LEFT(REPLACE(CONVERT(varchar(36), NEWID()), '-', ''), 32),
|
||||
bs.stock_id,
|
||||
bs.product_status,
|
||||
bs.lot_no,
|
||||
bs.product_id,
|
||||
bs.product_name,
|
||||
bs.quantity,
|
||||
bs.out_quantity,
|
||||
bs.job_detail_id,
|
||||
bs.stockin_detail_id,
|
||||
GETDATE()
|
||||
FROM dbo.bas_stock bs
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM dbo.bas_stock_detail bsd WHERE bsd.stock_id = bs.stock_id
|
||||
)
|
||||
AND (
|
||||
bs.product_id IS NOT NULL OR bs.product_name IS NOT NULL OR bs.quantity IS NOT NULL
|
||||
);
|
||||
GO
|
||||
|
||||
UPDATE bs
|
||||
SET bs.product_status = NULL,
|
||||
bs.lot_no = NULL,
|
||||
bs.product_id = NULL,
|
||||
bs.product_name = NULL,
|
||||
bs.quantity = ISNULL(bsa.quantity, 0),
|
||||
bs.job_detail_id = NULL,
|
||||
bs.out_quantity = ISNULL(bsa.out_quantity, 0),
|
||||
bs.stockin_detail_id = NULL
|
||||
FROM dbo.bas_stock bs
|
||||
LEFT JOIN (
|
||||
SELECT stock_id,
|
||||
SUM(ISNULL(quantity, 0)) AS quantity,
|
||||
SUM(ISNULL(out_quantity, 0)) AS out_quantity
|
||||
FROM dbo.bas_stock_detail
|
||||
GROUP BY stock_id
|
||||
) bsa ON bsa.stock_id = bs.stock_id;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'[dbo].[proc_complete_in_job]', N'P') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[proc_complete_in_job];
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[proc_complete_in_job]
|
||||
@job_id NVARCHAR(80),
|
||||
@user_id INT,
|
||||
@dept_id INT,
|
||||
@v_result INT OUTPUT,
|
||||
@v_resultmsg VARCHAR(80) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@now DATETIME = GETDATE(),
|
||||
@tray_code NVARCHAR(255),
|
||||
@warehouse_id NVARCHAR(80),
|
||||
@cargo_space_id NVARCHAR(80),
|
||||
@stock_id NVARCHAR(32),
|
||||
@detail_id NVARCHAR(32);
|
||||
|
||||
DECLARE
|
||||
@job_detail_id NVARCHAR(80),
|
||||
@product_id NVARCHAR(80),
|
||||
@product_name NVARCHAR(80),
|
||||
@lot_no NVARCHAR(80),
|
||||
@in_quantity DECIMAL(18, 0),
|
||||
@stockin_id NVARCHAR(80),
|
||||
@stockin_detail_id NVARCHAR(255);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM mydo_job WHERE job_id = @job_id)
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '错误:作业不存在';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM mydo_job_detail WHERE job_id = @job_id)
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '错误:作业无明细';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@cargo_space_id = cargo_space_id,
|
||||
@tray_code = tray_code,
|
||||
@warehouse_id = warehouse_id
|
||||
FROM mydo_job WHERE job_id = @job_id;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM bas_cargo_space WHERE cargo_space_id = @cargo_space_id)
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '错误:货位不存在';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE cur_finish_job_detail CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
|
||||
SELECT
|
||||
job_detail_id, product_id, product_name, lot_no, in_quantity,
|
||||
stockin_id, stockin_detail_id
|
||||
FROM mydo_job_detail WHERE job_id = @job_id;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
OPEN cur_finish_job_detail;
|
||||
FETCH NEXT FROM cur_finish_job_detail INTO
|
||||
@job_detail_id, @product_id, @product_name, @lot_no, @in_quantity,
|
||||
@stockin_id, @stockin_detail_id;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
UPDATE in_stockin_detail
|
||||
SET assign_num = ISNULL(assign_num, 0) + @in_quantity
|
||||
WHERE stockin_detail_id = @stockin_detail_id;
|
||||
|
||||
SET @detail_id = LEFT(REPLACE(CONVERT(varchar(36), NEWID()), '-', ''), 32);
|
||||
|
||||
IF @stock_id IS NULL
|
||||
BEGIN
|
||||
SET @stock_id = LEFT(REPLACE(CONVERT(varchar(36), NEWID()), '-', ''), 32);
|
||||
|
||||
INSERT INTO bas_stock (
|
||||
stock_id, cargo_space_id, stock_status, in_date, quantity,
|
||||
job_id, tray_code, out_quantity, stockin_id, warehouse_id
|
||||
)
|
||||
VALUES (
|
||||
@stock_id, @cargo_space_id, '1', @now, 0,
|
||||
@job_id, @tray_code, 0, @stockin_id, @warehouse_id
|
||||
);
|
||||
END;
|
||||
|
||||
INSERT INTO bas_stock_detail (
|
||||
detail_id, stock_id, product_status, lot_no, product_id, product_name,
|
||||
quantity, out_quantity, job_detail_id, stockin_detail_id, create_time
|
||||
)
|
||||
VALUES (
|
||||
@detail_id, @stock_id, '1', @lot_no, @product_id, @product_name,
|
||||
@in_quantity, 0, @job_detail_id, @stockin_detail_id, @now
|
||||
);
|
||||
|
||||
FETCH NEXT FROM cur_finish_job_detail INTO
|
||||
@job_detail_id, @product_id, @product_name, @lot_no, @in_quantity,
|
||||
@stockin_id, @stockin_detail_id;
|
||||
END;
|
||||
|
||||
CLOSE cur_finish_job_detail;
|
||||
DEALLOCATE cur_finish_job_detail;
|
||||
|
||||
UPDATE bas_cargo_space
|
||||
SET status = '2', tray_code = @tray_code, locked = 'N'
|
||||
WHERE cargo_space_id = @cargo_space_id;
|
||||
|
||||
UPDATE bs
|
||||
SET bs.product_status = NULL,
|
||||
bs.lot_no = NULL,
|
||||
bs.product_id = NULL,
|
||||
bs.product_name = NULL,
|
||||
bs.quantity = ISNULL(bsa.quantity, 0),
|
||||
bs.job_detail_id = NULL,
|
||||
bs.out_quantity = ISNULL(bsa.out_quantity, 0),
|
||||
bs.stockin_detail_id = NULL
|
||||
FROM bas_stock bs
|
||||
LEFT JOIN (
|
||||
SELECT stock_id,
|
||||
SUM(ISNULL(quantity, 0)) AS quantity,
|
||||
SUM(ISNULL(out_quantity, 0)) AS out_quantity
|
||||
FROM bas_stock_detail
|
||||
WHERE stock_id = @stock_id
|
||||
GROUP BY stock_id
|
||||
) bsa ON bsa.stock_id = bs.stock_id
|
||||
WHERE bs.stock_id = @stock_id;
|
||||
|
||||
UPDATE mydo_job
|
||||
SET status = '4', finish_time = GETDATE()
|
||||
WHERE job_id = @job_id;
|
||||
|
||||
INSERT INTO mydo_job_finish
|
||||
SELECT * FROM mydo_job WHERE job_id = @job_id;
|
||||
|
||||
INSERT INTO mydo_job_detail_finish
|
||||
SELECT * FROM mydo_job_detail WHERE job_id = @job_id;
|
||||
|
||||
DELETE FROM mydo_job_detail WHERE job_id = @job_id;
|
||||
DELETE FROM mydo_job WHERE job_id = @job_id;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 1;
|
||||
SET @v_resultmsg = '入库作业完成,库存主子表+货位已更新';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
IF CURSOR_STATUS('local','cur_finish_job_detail') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_finish_job_detail;
|
||||
DEALLOCATE cur_finish_job_detail;
|
||||
END;
|
||||
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = LEFT(ERROR_MESSAGE(), 80);
|
||||
END CATCH;
|
||||
END
|
||||
GO
|
||||
71
sql/bas_tray_rule.sql
Normal file
71
sql/bas_tray_rule.sql
Normal file
@@ -0,0 +1,71 @@
|
||||
IF OBJECT_ID(N'[dbo].[bas_tray_rule]', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[bas_tray_rule] (
|
||||
[id] bigint IDENTITY(1,1) NOT NULL,
|
||||
[rule_name] varchar(128) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[tray_type] varchar(16) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[tray_length] int NULL,
|
||||
[tray_width] int NULL,
|
||||
[allowed_warehouses] varchar(500) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[allowed_warehouse_names] varchar(1000) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[allowed_cargo_type] varchar(64) COLLATE Chinese_PRC_CI_AS NOT NULL,
|
||||
[allowed_cargo_type_name] varchar(128) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[remark] varchar(500) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[create_by] varchar(64) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[create_time] datetime2(7) NULL,
|
||||
[update_by] varchar(64) COLLATE Chinese_PRC_CI_AS NULL,
|
||||
[update_time] datetime2(7) NULL,
|
||||
CONSTRAINT [PK_bas_tray_rule] PRIMARY KEY CLUSTERED ([id])
|
||||
);
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'rule_name') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD rule_name varchar(128) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'tray_type') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD tray_type varchar(16) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'tray_length') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD tray_length int NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'tray_width') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD tray_width int NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'allowed_warehouses') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD allowed_warehouses varchar(500) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'allowed_warehouse_names') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD allowed_warehouse_names varchar(1000) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'allowed_cargo_type') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD allowed_cargo_type varchar(64) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'allowed_cargo_type_name') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD allowed_cargo_type_name varchar(128) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'remark') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD remark varchar(500) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'create_by') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD create_by varchar(64) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'create_time') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD create_time datetime2(7) NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'update_by') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD update_by varchar(64) COLLATE Chinese_PRC_CI_AS NULL;
|
||||
GO
|
||||
IF COL_LENGTH('dbo.bas_tray_rule', 'update_time') IS NULL
|
||||
ALTER TABLE dbo.bas_tray_rule ADD update_time datetime2(7) NULL;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_tray_rule_tray_type' AND object_id = OBJECT_ID(N'[dbo].[bas_tray_rule]'))
|
||||
CREATE INDEX [IX_bas_tray_rule_tray_type] ON [dbo].[bas_tray_rule] ([tray_type]);
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_bas_tray_rule_cargo_type' AND object_id = OBJECT_ID(N'[dbo].[bas_tray_rule]'))
|
||||
CREATE INDEX [IX_bas_tray_rule_cargo_type] ON [dbo].[bas_tray_rule] ([allowed_cargo_type]);
|
||||
GO
|
||||
|
||||
-- 注意:托盘规则需要按现场仓库/货位类型配置基础数据;无匹配规则时 PDA 绑盘会被拦截。
|
||||
904
sql/out_stockout_flow.sql
Normal file
904
sql/out_stockout_flow.sql
Normal file
@@ -0,0 +1,904 @@
|
||||
IF COL_LENGTH('dbo.out_stockout_detail', 'status') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail ADD status nvarchar(10) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.out_stockout_detail_finish', 'status') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail_finish ADD status nvarchar(10) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.out_stockout_detail', 'stock_id') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail ADD stock_id nvarchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.out_stockout_detail_finish', 'stock_id') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail_finish ADD stock_id nvarchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.out_stockout_detail', 'stock_detail_id') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail ADD stock_detail_id nvarchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF COL_LENGTH('dbo.out_stockout_detail_finish', 'stock_detail_id') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.out_stockout_detail_finish ADD stock_detail_id nvarchar(80) NULL;
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_out_stockout_detail_stock_detail' AND object_id = OBJECT_ID(N'dbo.out_stockout_detail'))
|
||||
BEGIN
|
||||
CREATE INDEX IX_out_stockout_detail_stock_detail ON dbo.out_stockout_detail(stock_detail_id);
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_mydo_job_detail_out_bill' AND object_id = OBJECT_ID(N'dbo.mydo_job_detail'))
|
||||
BEGIN
|
||||
CREATE INDEX IX_mydo_job_detail_out_bill ON dbo.mydo_job_detail(in_or_out_id, in_or_out_d_id);
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_update_outbill_status', N'P') IS NOT NULL
|
||||
DROP PROCEDURE dbo.proc_update_outbill_status;
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_update_outbill_status
|
||||
@v_stockout_id varchar(50),
|
||||
@v_status int,
|
||||
@v_result int OUTPUT,
|
||||
@v_resultString varchar(100) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @v_old_status int;
|
||||
DECLARE @now datetime2(7) = SYSDATETIME();
|
||||
|
||||
SELECT @v_old_status = TRY_CONVERT(int, status)
|
||||
FROM dbo.out_stockout
|
||||
WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
IF @v_old_status IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '出库单据不存在';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF @v_status = 2
|
||||
BEGIN
|
||||
IF @v_old_status <> 1
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '只有创建状态可以审核';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '2',
|
||||
review_dat = COALESCE(review_dat, @now)
|
||||
WHERE stockout_id = @v_stockout_id;
|
||||
END
|
||||
ELSE IF @v_status = 5
|
||||
BEGIN
|
||||
IF @v_old_status >= 3
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '单据已执行,不能直接作废';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '5',
|
||||
finish_date = @now
|
||||
WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_detail_finish
|
||||
SELECT * FROM dbo.out_stockout_detail WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_finish
|
||||
SELECT * FROM dbo.out_stockout WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
DELETE FROM dbo.out_stockout_detail WHERE stockout_id = @v_stockout_id;
|
||||
DELETE FROM dbo.out_stockout WHERE stockout_id = @v_stockout_id;
|
||||
END
|
||||
ELSE IF @v_status = 4
|
||||
BEGIN
|
||||
IF @v_old_status <> 3
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '只有执行状态可以完成';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.out_stockout_detail
|
||||
WHERE stockout_id = @v_stockout_id
|
||||
AND ISNULL(assign_num, 0) < ISNULL(quantity, 0)
|
||||
)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '出库明细未完成,不能完成单据';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '4',
|
||||
finish_date = @now
|
||||
WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_detail_finish
|
||||
SELECT * FROM dbo.out_stockout_detail WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_finish
|
||||
SELECT * FROM dbo.out_stockout WHERE stockout_id = @v_stockout_id;
|
||||
|
||||
DELETE FROM dbo.out_stockout_detail WHERE stockout_id = @v_stockout_id;
|
||||
DELETE FROM dbo.out_stockout WHERE stockout_id = @v_stockout_id;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '不支持的出库单据状态';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
SET @v_result = 10;
|
||||
SET @v_resultString = '操作成功';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = LEFT(ERROR_MESSAGE(), 100);
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_out_hand_allocation', N'P') IS NOT NULL
|
||||
DROP PROCEDURE dbo.proc_out_hand_allocation;
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_out_hand_allocation
|
||||
@v_stockout_detail_id varchar(80),
|
||||
@v_stock_id varchar(80),
|
||||
@v_result int OUTPUT,
|
||||
@v_resultString varchar(100) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@stockout_id nvarchar(80),
|
||||
@stockout_status int,
|
||||
@warehouse_id nvarchar(80),
|
||||
@customer_id nvarchar(255),
|
||||
@customer_name nvarchar(255),
|
||||
@product_id nvarchar(255),
|
||||
@product_name nvarchar(255),
|
||||
@lot_no nvarchar(80),
|
||||
@locatio nvarchar(255),
|
||||
@preferred_stock_id nvarchar(80),
|
||||
@preferred_detail_id nvarchar(80),
|
||||
@bill_qty decimal(18, 0),
|
||||
@allot_qty decimal(18, 0),
|
||||
@remaining decimal(18, 0);
|
||||
|
||||
DECLARE
|
||||
@detail_id nvarchar(80),
|
||||
@stock_id nvarchar(80),
|
||||
@available_qty decimal(18, 0),
|
||||
@alloc_qty decimal(18, 0),
|
||||
@job_id nvarchar(80),
|
||||
@task_no nvarchar(80),
|
||||
@job_detail_id nvarchar(80),
|
||||
@row_idx int,
|
||||
@tray_code nvarchar(255),
|
||||
@cargo_space_id nvarchar(80),
|
||||
@cargo_space_name nvarchar(255),
|
||||
@roadway_id nvarchar(80),
|
||||
@stock_warehouse_id nvarchar(80),
|
||||
@stock_warehouse_name nvarchar(255),
|
||||
@supplier_id nvarchar(255),
|
||||
@supplier_name nvarchar(255),
|
||||
@exit_id nvarchar(80),
|
||||
@now datetime = GETDATE();
|
||||
|
||||
SELECT TOP 1
|
||||
@stockout_id = d.stockout_id,
|
||||
@product_id = d.product_id,
|
||||
@product_name = d.product_name,
|
||||
@lot_no = d.lot_no,
|
||||
@bill_qty = ISNULL(d.quantity, 0),
|
||||
@allot_qty = ISNULL(d.allot_num, 0),
|
||||
@locatio = NULLIF(d.locatio, ''),
|
||||
@preferred_stock_id = NULLIF(d.stock_id, ''),
|
||||
@preferred_detail_id = NULLIF(d.stock_detail_id, ''),
|
||||
@warehouse_id = o.warehouse_id,
|
||||
@customer_id = o.customer_id,
|
||||
@customer_name = o.customer_name,
|
||||
@stockout_status = TRY_CONVERT(int, o.status)
|
||||
FROM dbo.out_stockout_detail d WITH (UPDLOCK, HOLDLOCK)
|
||||
INNER JOIN dbo.out_stockout o ON d.stockout_id = o.stockout_id
|
||||
WHERE d.stockout_detail_id = @v_stockout_detail_id;
|
||||
|
||||
IF @stockout_id IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '出库子单不存在';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @stockout_status NOT IN (2, 3)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '出库单据未审核';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SET @remaining = @bill_qty - @allot_qty;
|
||||
IF @remaining <= 0
|
||||
BEGIN
|
||||
SET @v_result = 10;
|
||||
SET @v_resultString = '出库子单已分配完成';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.bas_stock_detail WHERE detail_id = @v_stock_id)
|
||||
BEGIN
|
||||
SET @preferred_detail_id = @v_stock_id;
|
||||
SET @preferred_stock_id = NULL;
|
||||
END
|
||||
ELSE IF EXISTS (SELECT 1 FROM dbo.bas_stock WHERE stock_id = @v_stock_id)
|
||||
BEGIN
|
||||
SET @preferred_stock_id = @v_stock_id;
|
||||
SET @preferred_detail_id = NULL;
|
||||
END
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
SELECT TOP 1
|
||||
@detail_id = bsd.detail_id,
|
||||
@stock_id = bs.stock_id,
|
||||
@available_qty = ISNULL(bsd.quantity, 0) - ISNULL(bsd.out_quantity, 0),
|
||||
@tray_code = bs.tray_code,
|
||||
@cargo_space_id = bs.cargo_space_id,
|
||||
@cargo_space_name = bcs.cargo_space_name,
|
||||
@roadway_id = bcs.roadway_id,
|
||||
@stock_warehouse_id = bs.warehouse_id,
|
||||
@stock_warehouse_name = bs.warehouse_name,
|
||||
@supplier_id = bs.supplier_id,
|
||||
@supplier_name = bs.supplier_name
|
||||
FROM dbo.bas_stock_detail bsd WITH (UPDLOCK, HOLDLOCK)
|
||||
INNER JOIN dbo.bas_stock bs WITH (UPDLOCK, HOLDLOCK) ON bsd.stock_id = bs.stock_id
|
||||
LEFT JOIN dbo.bas_cargo_space bcs WITH (UPDLOCK, HOLDLOCK) ON bs.cargo_space_id = bcs.cargo_space_id
|
||||
WHERE bsd.product_id = @product_id
|
||||
AND (ISNULL(@lot_no, '') = '' OR ISNULL(bsd.lot_no, '') = ISNULL(@lot_no, ''))
|
||||
AND ISNULL(bsd.quantity, 0) - ISNULL(bsd.out_quantity, 0) > 0
|
||||
AND (bsd.job_detail_id IS NULL OR bsd.job_detail_id = '')
|
||||
AND (@warehouse_id IS NULL OR @warehouse_id = '' OR bs.warehouse_id = @warehouse_id)
|
||||
AND (@locatio IS NULL OR bs.cargo_space_id = @locatio OR bcs.cargo_space_name = @locatio)
|
||||
AND (@preferred_detail_id IS NULL OR bsd.detail_id = @preferred_detail_id)
|
||||
AND (@preferred_stock_id IS NULL OR bs.stock_id = @preferred_stock_id)
|
||||
ORDER BY
|
||||
CASE WHEN bsd.detail_id = @v_stock_id THEN 0 ELSE 1 END,
|
||||
bs.in_date ASC,
|
||||
bs.cargo_space_id ASC,
|
||||
bsd.detail_id ASC;
|
||||
|
||||
IF @detail_id IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '没有可分配库存明细';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SET @alloc_qty = CASE WHEN @available_qty >= @remaining THEN @remaining ELSE @available_qty END;
|
||||
IF @alloc_qty <= 0
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '库存可用数量不足';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SELECT TOP 1 @exit_id = point_id
|
||||
FROM dbo.bas_station_point
|
||||
WHERE warehouse_id = @stock_warehouse_id
|
||||
AND point_type IN ('2', '3')
|
||||
AND status = '0'
|
||||
ORDER BY point_type DESC, point_id;
|
||||
|
||||
EXEC dbo.util_serial_job 'CK', @job_id OUTPUT;
|
||||
EXEC dbo.util_serial_task '20', @task_no OUTPUT;
|
||||
|
||||
INSERT INTO dbo.mydo_job (
|
||||
job_id, status, task_no, in_or_out, execution_phase,
|
||||
tray_code, warehouse_id, warehouse_name, roadway_id,
|
||||
cargo_space_id, cargo_space_name, line_type, priority,
|
||||
height, weight, create_time, exit_id, customer_id, customer_name
|
||||
)
|
||||
VALUES (
|
||||
@job_id, '1', @task_no, 20, '4',
|
||||
@tray_code, @stock_warehouse_id, @stock_warehouse_name, @roadway_id,
|
||||
@cargo_space_id, @cargo_space_name, '1', 10,
|
||||
0.00, 0.00, @now, @exit_id, @customer_id, @customer_name
|
||||
);
|
||||
|
||||
SET @job_detail_id = @job_id + '-1';
|
||||
|
||||
INSERT INTO dbo.mydo_job_detail (
|
||||
job_detail_id, job_id, stock_id, lot_no, in_date,
|
||||
in_or_out_id, in_or_out_d_id, product_id, product_name,
|
||||
stock_quantity, out_quantity, stockin_detail_id,
|
||||
customer_id, customer_name, supplier_id, supplier_name
|
||||
)
|
||||
VALUES (
|
||||
@job_detail_id, @job_id, @stock_id, @lot_no, CONVERT(varchar(19), @now, 120),
|
||||
@stockout_id, @v_stockout_detail_id, @product_id, @product_name,
|
||||
@available_qty, @alloc_qty, @detail_id,
|
||||
@customer_id, @customer_name, @supplier_id, @supplier_name
|
||||
);
|
||||
|
||||
UPDATE dbo.bas_stock_detail
|
||||
SET out_quantity = ISNULL(out_quantity, 0) + @alloc_qty,
|
||||
job_detail_id = @job_detail_id,
|
||||
update_time = SYSDATETIME()
|
||||
WHERE detail_id = @detail_id;
|
||||
|
||||
UPDATE bs
|
||||
SET quantity = ISNULL(bsa.quantity, 0),
|
||||
out_quantity = ISNULL(bsa.out_quantity, 0)
|
||||
FROM dbo.bas_stock bs
|
||||
INNER JOIN (
|
||||
SELECT stock_id,
|
||||
SUM(ISNULL(quantity, 0)) AS quantity,
|
||||
SUM(ISNULL(out_quantity, 0)) AS out_quantity
|
||||
FROM dbo.bas_stock_detail
|
||||
WHERE stock_id = @stock_id
|
||||
GROUP BY stock_id
|
||||
) bsa ON bsa.stock_id = bs.stock_id
|
||||
WHERE bs.stock_id = @stock_id;
|
||||
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '4',
|
||||
locked = 'Y',
|
||||
tray_code = @tray_code
|
||||
WHERE cargo_space_id = @cargo_space_id;
|
||||
|
||||
UPDATE dbo.out_stockout_detail
|
||||
SET allot_num = ISNULL(allot_num, 0) + @alloc_qty,
|
||||
status = CASE WHEN ISNULL(allot_num, 0) + @alloc_qty >= ISNULL(quantity, 0) THEN '1' ELSE '0' END,
|
||||
stock_id = COALESCE(NULLIF(stock_id, ''), @stock_id),
|
||||
stock_detail_id = COALESCE(NULLIF(stock_detail_id, ''), @detail_id)
|
||||
WHERE stockout_detail_id = @v_stockout_detail_id;
|
||||
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '3',
|
||||
start_date = COALESCE(start_date, SYSDATETIME())
|
||||
WHERE stockout_id = @stockout_id;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 10;
|
||||
SET @v_resultString = '成功:生成出库作业' + @job_id;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = LEFT(ERROR_MESSAGE(), 100);
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_out_auto_allocation', N'P') IS NOT NULL
|
||||
DROP PROCEDURE dbo.proc_out_auto_allocation;
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_out_auto_allocation
|
||||
@v_stockout_detail_id varchar(80),
|
||||
@v_result int OUTPUT,
|
||||
@v_resultString varchar(100) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE
|
||||
@stockout_id nvarchar(80),
|
||||
@warehouse_id nvarchar(80),
|
||||
@product_id nvarchar(255),
|
||||
@lot_no nvarchar(80),
|
||||
@locatio nvarchar(255),
|
||||
@preferred_stock_id nvarchar(80),
|
||||
@preferred_detail_id nvarchar(80),
|
||||
@remaining decimal(18, 0),
|
||||
@detail_id nvarchar(80),
|
||||
@child_result int,
|
||||
@child_msg varchar(100);
|
||||
|
||||
SELECT TOP 1
|
||||
@stockout_id = d.stockout_id,
|
||||
@warehouse_id = o.warehouse_id,
|
||||
@product_id = d.product_id,
|
||||
@lot_no = d.lot_no,
|
||||
@locatio = NULLIF(d.locatio, ''),
|
||||
@preferred_stock_id = NULLIF(d.stock_id, ''),
|
||||
@preferred_detail_id = NULLIF(d.stock_detail_id, '')
|
||||
FROM dbo.out_stockout_detail d
|
||||
INNER JOIN dbo.out_stockout o ON d.stockout_id = o.stockout_id
|
||||
WHERE d.stockout_detail_id = @v_stockout_detail_id;
|
||||
|
||||
IF @stockout_id IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '出库子单不存在';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
DECLARE cur_auto_stock CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT bsd.detail_id
|
||||
FROM dbo.bas_stock_detail bsd
|
||||
INNER JOIN dbo.bas_stock bs ON bsd.stock_id = bs.stock_id
|
||||
LEFT JOIN dbo.bas_cargo_space bcs ON bs.cargo_space_id = bcs.cargo_space_id
|
||||
WHERE bsd.product_id = @product_id
|
||||
AND (ISNULL(@lot_no, '') = '' OR ISNULL(bsd.lot_no, '') = ISNULL(@lot_no, ''))
|
||||
AND ISNULL(bsd.quantity, 0) - ISNULL(bsd.out_quantity, 0) > 0
|
||||
AND (bsd.job_detail_id IS NULL OR bsd.job_detail_id = '')
|
||||
AND (@warehouse_id IS NULL OR @warehouse_id = '' OR bs.warehouse_id = @warehouse_id)
|
||||
AND (@locatio IS NULL OR bs.cargo_space_id = @locatio OR bcs.cargo_space_name = @locatio)
|
||||
AND (@preferred_stock_id IS NULL OR bs.stock_id = @preferred_stock_id)
|
||||
AND (@preferred_detail_id IS NULL OR bsd.detail_id = @preferred_detail_id)
|
||||
ORDER BY bs.in_date ASC, bs.cargo_space_id ASC, bsd.detail_id ASC;
|
||||
|
||||
OPEN cur_auto_stock;
|
||||
FETCH NEXT FROM cur_auto_stock INTO @detail_id;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SELECT @remaining = ISNULL(quantity, 0) - ISNULL(allot_num, 0)
|
||||
FROM dbo.out_stockout_detail
|
||||
WHERE stockout_detail_id = @v_stockout_detail_id;
|
||||
|
||||
IF @remaining <= 0
|
||||
BREAK;
|
||||
|
||||
EXEC dbo.proc_out_hand_allocation
|
||||
@v_stockout_detail_id = @v_stockout_detail_id,
|
||||
@v_stock_id = @detail_id,
|
||||
@v_result = @child_result OUTPUT,
|
||||
@v_resultString = @child_msg OUTPUT;
|
||||
|
||||
FETCH NEXT FROM cur_auto_stock INTO @detail_id;
|
||||
END
|
||||
|
||||
CLOSE cur_auto_stock;
|
||||
DEALLOCATE cur_auto_stock;
|
||||
|
||||
SELECT @remaining = ISNULL(quantity, 0) - ISNULL(allot_num, 0)
|
||||
FROM dbo.out_stockout_detail
|
||||
WHERE stockout_detail_id = @v_stockout_detail_id;
|
||||
|
||||
IF @remaining <= 0
|
||||
BEGIN
|
||||
SET @v_result = 10;
|
||||
SET @v_resultString = '自动分配完成';
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultString = '自动分配库存不足';
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_out_makesure', N'P') IS NOT NULL
|
||||
DROP PROCEDURE dbo.proc_out_makesure;
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_out_makesure
|
||||
@v_job_id varchar(80),
|
||||
@v_dept_id int,
|
||||
@v_user_id int,
|
||||
@v_result int OUTPUT,
|
||||
@v_resultmsg varchar(500) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@now datetime = GETDATE(),
|
||||
@stockout_id nvarchar(80),
|
||||
@job_detail_id nvarchar(80),
|
||||
@stock_id nvarchar(80),
|
||||
@stock_detail_id nvarchar(80),
|
||||
@stockout_detail_id nvarchar(80),
|
||||
@out_qty decimal(18, 0),
|
||||
@cargo_space_id nvarchar(80),
|
||||
@tray_code nvarchar(255);
|
||||
|
||||
DECLARE @affected_stock TABLE(stock_id nvarchar(80) PRIMARY KEY);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.mydo_job WHERE job_id = @v_job_id AND in_or_out >= 20)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = '未找到对应出库作业';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.mydo_job_detail WHERE job_id = @v_job_id)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = '出库作业无明细';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE cur_out_job_detail CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT job_detail_id, stock_id, stockin_detail_id, in_or_out_id, in_or_out_d_id, ISNULL(out_quantity, 0)
|
||||
FROM dbo.mydo_job_detail
|
||||
WHERE job_id = @v_job_id;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
OPEN cur_out_job_detail;
|
||||
FETCH NEXT FROM cur_out_job_detail INTO
|
||||
@job_detail_id, @stock_id, @stock_detail_id, @stockout_id, @stockout_detail_id, @out_qty;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
IF @out_qty <= 0
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = '出库作业数量异常';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF @stock_detail_id IS NULL OR @stock_detail_id = ''
|
||||
BEGIN
|
||||
SELECT TOP 1 @stock_detail_id = detail_id
|
||||
FROM dbo.bas_stock_detail
|
||||
WHERE job_detail_id = @job_detail_id;
|
||||
END
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.bas_stock_detail WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE detail_id = @stock_detail_id
|
||||
AND stock_id = @stock_id
|
||||
AND ISNULL(quantity, 0) >= @out_qty
|
||||
)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = '库存不足或库存明细不存在';
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
UPDATE dbo.out_stockout_detail
|
||||
SET assign_num = ISNULL(assign_num, 0) + @out_qty,
|
||||
actual_qt = ISNULL(assign_num, 0) + @out_qty,
|
||||
status = CASE WHEN ISNULL(assign_num, 0) + @out_qty >= ISNULL(quantity, 0) THEN '2' ELSE status END
|
||||
WHERE stockout_detail_id = @stockout_detail_id;
|
||||
|
||||
UPDATE dbo.bas_stock_detail
|
||||
SET quantity = ISNULL(quantity, 0) - @out_qty,
|
||||
out_quantity = CASE WHEN ISNULL(out_quantity, 0) - @out_qty < 0 THEN 0 ELSE ISNULL(out_quantity, 0) - @out_qty END,
|
||||
job_detail_id = CASE WHEN job_detail_id = @job_detail_id THEN NULL ELSE job_detail_id END,
|
||||
update_time = SYSDATETIME()
|
||||
WHERE detail_id = @stock_detail_id
|
||||
AND stock_id = @stock_id;
|
||||
|
||||
DELETE FROM dbo.bas_stock_detail
|
||||
WHERE detail_id = @stock_detail_id
|
||||
AND ISNULL(quantity, 0) <= 0;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM @affected_stock WHERE stock_id = @stock_id)
|
||||
INSERT INTO @affected_stock(stock_id) VALUES (@stock_id);
|
||||
|
||||
FETCH NEXT FROM cur_out_job_detail INTO
|
||||
@job_detail_id, @stock_id, @stock_detail_id, @stockout_id, @stockout_detail_id, @out_qty;
|
||||
END
|
||||
|
||||
CLOSE cur_out_job_detail;
|
||||
DEALLOCATE cur_out_job_detail;
|
||||
|
||||
DECLARE cur_stock CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT stock_id FROM @affected_stock;
|
||||
|
||||
OPEN cur_stock;
|
||||
FETCH NEXT FROM cur_stock INTO @stock_id;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SELECT @cargo_space_id = cargo_space_id,
|
||||
@tray_code = tray_code
|
||||
FROM dbo.bas_stock
|
||||
WHERE stock_id = @stock_id;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.bas_stock_detail WHERE stock_id = @stock_id)
|
||||
BEGIN
|
||||
UPDATE bs
|
||||
SET bs.quantity = ISNULL(bsa.quantity, 0),
|
||||
bs.out_quantity = ISNULL(bsa.out_quantity, 0),
|
||||
bs.product_status = NULL,
|
||||
bs.lot_no = NULL,
|
||||
bs.product_id = NULL,
|
||||
bs.product_name = NULL,
|
||||
bs.job_detail_id = NULL,
|
||||
bs.stockin_detail_id = NULL
|
||||
FROM dbo.bas_stock bs
|
||||
INNER JOIN (
|
||||
SELECT stock_id,
|
||||
SUM(ISNULL(quantity, 0)) AS quantity,
|
||||
SUM(ISNULL(out_quantity, 0)) AS out_quantity
|
||||
FROM dbo.bas_stock_detail
|
||||
WHERE stock_id = @stock_id
|
||||
GROUP BY stock_id
|
||||
) bsa ON bsa.stock_id = bs.stock_id
|
||||
WHERE bs.stock_id = @stock_id;
|
||||
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '2',
|
||||
locked = 'N',
|
||||
tray_code = @tray_code
|
||||
WHERE cargo_space_id = @cargo_space_id;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '1',
|
||||
locked = 'N',
|
||||
tray_code = NULL
|
||||
WHERE cargo_space_id = @cargo_space_id;
|
||||
|
||||
DELETE FROM dbo.bas_stock WHERE stock_id = @stock_id;
|
||||
END
|
||||
|
||||
FETCH NEXT FROM cur_stock INTO @stock_id;
|
||||
END
|
||||
|
||||
CLOSE cur_stock;
|
||||
DEALLOCATE cur_stock;
|
||||
|
||||
UPDATE dbo.mydo_job
|
||||
SET status = '4',
|
||||
finish_time = @now
|
||||
WHERE job_id = @v_job_id;
|
||||
|
||||
INSERT INTO dbo.mydo_job_finish
|
||||
SELECT * FROM dbo.mydo_job WHERE job_id = @v_job_id;
|
||||
|
||||
INSERT INTO dbo.mydo_job_detail_finish
|
||||
SELECT * FROM dbo.mydo_job_detail WHERE job_id = @v_job_id;
|
||||
|
||||
DELETE FROM dbo.mydo_job_detail WHERE job_id = @v_job_id;
|
||||
DELETE FROM dbo.mydo_job WHERE job_id = @v_job_id;
|
||||
|
||||
IF @stockout_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.out_stockout_detail
|
||||
WHERE stockout_id = @stockout_id
|
||||
AND ISNULL(assign_num, 0) < ISNULL(quantity, 0)
|
||||
)
|
||||
BEGIN
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '4',
|
||||
finish_date = SYSDATETIME()
|
||||
WHERE stockout_id = @stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_detail_finish
|
||||
SELECT * FROM dbo.out_stockout_detail WHERE stockout_id = @stockout_id;
|
||||
|
||||
INSERT INTO dbo.out_stockout_finish
|
||||
SELECT * FROM dbo.out_stockout WHERE stockout_id = @stockout_id;
|
||||
|
||||
DELETE FROM dbo.out_stockout_detail WHERE stockout_id = @stockout_id;
|
||||
DELETE FROM dbo.out_stockout WHERE stockout_id = @stockout_id;
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 10;
|
||||
SET @v_resultmsg = '出库作业完成';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
IF CURSOR_STATUS('local','cur_out_job_detail') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_out_job_detail;
|
||||
DEALLOCATE cur_out_job_detail;
|
||||
END
|
||||
|
||||
IF CURSOR_STATUS('local','cur_stock') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_stock;
|
||||
DEALLOCATE cur_stock;
|
||||
END
|
||||
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = ERROR_MESSAGE();
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_hand_delete_out_job', N'P') IS NOT NULL
|
||||
DROP PROCEDURE dbo.proc_hand_delete_out_job;
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE dbo.proc_hand_delete_out_job
|
||||
@v_job_id varchar(80),
|
||||
@v_result int OUTPUT,
|
||||
@v_resultmsg varchar(500) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@stockout_id nvarchar(80),
|
||||
@job_detail_id nvarchar(80),
|
||||
@stock_id nvarchar(80),
|
||||
@stock_detail_id nvarchar(80),
|
||||
@stockout_detail_id nvarchar(80),
|
||||
@out_qty decimal(18, 0),
|
||||
@cargo_space_id nvarchar(80),
|
||||
@tray_code nvarchar(255);
|
||||
|
||||
DECLARE @affected_stock TABLE(stock_id nvarchar(80) PRIMARY KEY);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.mydo_job WHERE job_id = @v_job_id AND in_or_out >= 20)
|
||||
BEGIN
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = '未找到对应出库作业';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE cur_cancel_out CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT job_detail_id, stock_id, stockin_detail_id, in_or_out_id, in_or_out_d_id, ISNULL(out_quantity, 0)
|
||||
FROM dbo.mydo_job_detail
|
||||
WHERE job_id = @v_job_id;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
OPEN cur_cancel_out;
|
||||
FETCH NEXT FROM cur_cancel_out INTO
|
||||
@job_detail_id, @stock_id, @stock_detail_id, @stockout_id, @stockout_detail_id, @out_qty;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
UPDATE dbo.bas_stock_detail
|
||||
SET out_quantity = CASE WHEN ISNULL(out_quantity, 0) - @out_qty < 0 THEN 0 ELSE ISNULL(out_quantity, 0) - @out_qty END,
|
||||
job_detail_id = CASE WHEN job_detail_id = @job_detail_id THEN NULL ELSE job_detail_id END,
|
||||
update_time = SYSDATETIME()
|
||||
WHERE detail_id = @stock_detail_id
|
||||
OR job_detail_id = @job_detail_id;
|
||||
|
||||
UPDATE dbo.out_stockout_detail
|
||||
SET allot_num = CASE WHEN ISNULL(allot_num, 0) - @out_qty < 0 THEN 0 ELSE ISNULL(allot_num, 0) - @out_qty END,
|
||||
status = CASE WHEN ISNULL(allot_num, 0) - @out_qty <= 0 THEN '0' ELSE status END
|
||||
WHERE stockout_detail_id = @stockout_detail_id;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM @affected_stock WHERE stock_id = @stock_id)
|
||||
INSERT INTO @affected_stock(stock_id) VALUES (@stock_id);
|
||||
|
||||
FETCH NEXT FROM cur_cancel_out INTO
|
||||
@job_detail_id, @stock_id, @stock_detail_id, @stockout_id, @stockout_detail_id, @out_qty;
|
||||
END
|
||||
|
||||
CLOSE cur_cancel_out;
|
||||
DEALLOCATE cur_cancel_out;
|
||||
|
||||
DECLARE cur_cancel_stock CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT stock_id FROM @affected_stock;
|
||||
|
||||
OPEN cur_cancel_stock;
|
||||
FETCH NEXT FROM cur_cancel_stock INTO @stock_id;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SELECT @cargo_space_id = cargo_space_id,
|
||||
@tray_code = tray_code
|
||||
FROM dbo.bas_stock
|
||||
WHERE stock_id = @stock_id;
|
||||
|
||||
UPDATE bs
|
||||
SET quantity = ISNULL(bsa.quantity, 0),
|
||||
out_quantity = ISNULL(bsa.out_quantity, 0)
|
||||
FROM dbo.bas_stock bs
|
||||
INNER JOIN (
|
||||
SELECT stock_id,
|
||||
SUM(ISNULL(quantity, 0)) AS quantity,
|
||||
SUM(ISNULL(out_quantity, 0)) AS out_quantity
|
||||
FROM dbo.bas_stock_detail
|
||||
WHERE stock_id = @stock_id
|
||||
GROUP BY stock_id
|
||||
) bsa ON bsa.stock_id = bs.stock_id
|
||||
WHERE bs.stock_id = @stock_id;
|
||||
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '2',
|
||||
locked = 'N',
|
||||
tray_code = @tray_code
|
||||
WHERE cargo_space_id = @cargo_space_id
|
||||
AND EXISTS (SELECT 1 FROM dbo.bas_stock WHERE stock_id = @stock_id);
|
||||
|
||||
FETCH NEXT FROM cur_cancel_stock INTO @stock_id;
|
||||
END
|
||||
|
||||
CLOSE cur_cancel_stock;
|
||||
DEALLOCATE cur_cancel_stock;
|
||||
|
||||
DELETE FROM dbo.mydo_job_detail WHERE job_id = @v_job_id;
|
||||
DELETE FROM dbo.mydo_job WHERE job_id = @v_job_id;
|
||||
|
||||
IF @stockout_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.mydo_job_detail
|
||||
WHERE in_or_out_id = @stockout_id
|
||||
)
|
||||
BEGIN
|
||||
UPDATE dbo.out_stockout
|
||||
SET status = '2',
|
||||
start_date = NULL
|
||||
WHERE stockout_id = @stockout_id
|
||||
AND status = '3';
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 10;
|
||||
SET @v_resultmsg = '出库作业已作废';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT > 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
IF CURSOR_STATUS('local','cur_cancel_out') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_cancel_out;
|
||||
DEALLOCATE cur_cancel_out;
|
||||
END
|
||||
|
||||
IF CURSOR_STATUS('local','cur_cancel_stock') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_cancel_stock;
|
||||
DEALLOCATE cur_cancel_stock;
|
||||
END
|
||||
|
||||
SET @v_result = 2;
|
||||
SET @v_resultmsg = ERROR_MESSAGE();
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
126
sql/proc_add_in_job_trace.sql
Normal file
126
sql/proc_add_in_job_trace.sql
Normal file
@@ -0,0 +1,126 @@
|
||||
IF OBJECT_ID(N'[dbo].[proc_add_in_job]', N'P') IS NOT NULL
|
||||
DROP PROCEDURE [dbo].[proc_add_in_job]
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[proc_add_in_job]
|
||||
@tray_code NVARCHAR(255),
|
||||
@warehouse_id NVARCHAR(255),
|
||||
@user_id INT,
|
||||
@dept_id INT,
|
||||
@v_result INT OUTPUT,
|
||||
@v_resultmsg VARCHAR(80) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE
|
||||
@task_no varchar(255),
|
||||
@job_id varchar(255),
|
||||
@now DATETIME = GETDATE();
|
||||
|
||||
DECLARE
|
||||
@row_idx INT = 1,
|
||||
@job_detail_id NVARCHAR(80),
|
||||
@product_id NVARCHAR(255),
|
||||
@product_name NVARCHAR(255),
|
||||
@lot_no NVARCHAR(80),
|
||||
@quantity DECIMAL(18),
|
||||
@stockin_id NVARCHAR(80),
|
||||
@stockin_detail_id NVARCHAR(255);
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.in_tray_msg WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id)
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '错误:托盘无绑定数据';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.mydo_job WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id)
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '错误:该托盘已生成作业';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRY
|
||||
DECLARE cur_tray CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT
|
||||
tm.product_id,
|
||||
ISNULL(d.product_name, ''),
|
||||
ISNULL(d.lot_no, ''),
|
||||
tm.quantity,
|
||||
ISNULL(d.stockin_id, ''),
|
||||
tm.stockin_detail_id
|
||||
FROM dbo.in_tray_msg tm
|
||||
LEFT JOIN dbo.in_stockin_detail d ON tm.stockin_detail_id = d.stockin_detail_id
|
||||
WHERE tm.tray_code = @tray_code
|
||||
AND tm.warehouse_id = @warehouse_id;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
EXEC dbo.util_serial_job 'RK', @job_id OUTPUT;
|
||||
EXEC dbo.util_serial_task '1', @task_no OUTPUT;
|
||||
|
||||
INSERT INTO dbo.mydo_job (
|
||||
job_id, status, task_no, in_or_out, execution_phase,
|
||||
tray_code, warehouse_id, create_time,
|
||||
user_id, dept_id, priority, height, weight
|
||||
)
|
||||
VALUES (
|
||||
@job_id, '1', @task_no, 1, '0',
|
||||
@tray_code, @warehouse_id, @now,
|
||||
@user_id, @dept_id, 10, 0.00, 0.00
|
||||
);
|
||||
|
||||
OPEN cur_tray;
|
||||
FETCH NEXT FROM cur_tray INTO
|
||||
@product_id, @product_name, @lot_no, @quantity, @stockin_id, @stockin_detail_id;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @job_detail_id = @job_id + '-' + CAST(@row_idx AS VARCHAR);
|
||||
|
||||
-- stockin_id/stockin_detail_id 为入库单追溯字段;in_or_out_id/in_or_out_d_id 为通用出入库追溯字段。
|
||||
INSERT INTO dbo.mydo_job_detail (
|
||||
job_detail_id, job_id, product_id, product_name,
|
||||
lot_no, in_quantity, in_or_out_id, in_or_out_d_id,
|
||||
stockin_id, stockin_detail_id
|
||||
)
|
||||
VALUES (
|
||||
@job_detail_id, @job_id, @product_id, @product_name,
|
||||
@lot_no, @quantity, @stockin_id, @stockin_detail_id,
|
||||
@stockin_id, @stockin_detail_id
|
||||
);
|
||||
|
||||
SET @row_idx += 1;
|
||||
FETCH NEXT FROM cur_tray INTO
|
||||
@product_id, @product_name, @lot_no, @quantity, @stockin_id, @stockin_detail_id;
|
||||
END
|
||||
|
||||
CLOSE cur_tray;
|
||||
DEALLOCATE cur_tray;
|
||||
|
||||
DELETE FROM dbo.in_tray_msg
|
||||
WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 1;
|
||||
SET @v_resultmsg = '成功:入库作业生成完成';
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
|
||||
IF CURSOR_STATUS('local','cur_tray') >= 0
|
||||
BEGIN
|
||||
CLOSE cur_tray;
|
||||
DEALLOCATE cur_tray;
|
||||
END
|
||||
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = LEFT(ERROR_MESSAGE(), 80);
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
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
|
||||
85
sql/proc_hand_delete_in_job.sql
Normal file
85
sql/proc_hand_delete_in_job.sql
Normal file
@@ -0,0 +1,85 @@
|
||||
IF OBJECT_ID(N'[dbo].[proc_hand_delete_in_job]', N'P') IS NOT NULL
|
||||
DROP PROCEDURE [dbo].[proc_hand_delete_in_job]
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[proc_hand_delete_in_job]
|
||||
@v_job_id varchar(80),
|
||||
@v_result int OUTPUT,
|
||||
@v_resultmsg varchar(500) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @v_tray_code varchar(255);
|
||||
DECLARE @v_cargo_space_id varchar(80);
|
||||
|
||||
BEGIN TRY
|
||||
IF @v_job_id IS NULL OR LTRIM(RTRIM(@v_job_id)) = ''
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '作业ID不能为空';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
SELECT TOP 1
|
||||
@v_tray_code = tray_code,
|
||||
@v_cargo_space_id = cargo_space_id
|
||||
FROM dbo.mydo_job
|
||||
WHERE job_id = @v_job_id
|
||||
AND in_or_out = 1;
|
||||
|
||||
IF @v_tray_code IS NULL AND @v_cargo_space_id IS NULL
|
||||
BEGIN
|
||||
SET @v_result = 0;
|
||||
SET @v_resultmsg = '未找到对应入库作业';
|
||||
RETURN;
|
||||
END
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
;WITH detail_qty AS (
|
||||
SELECT
|
||||
COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) AS stockin_detail_id,
|
||||
SUM(ISNULL(in_quantity, 0)) AS rollback_qty
|
||||
FROM dbo.mydo_job_detail
|
||||
WHERE job_id = @v_job_id
|
||||
AND COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) IS NOT NULL
|
||||
GROUP BY COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, ''))
|
||||
)
|
||||
UPDATE d
|
||||
SET d.scan_num = CASE
|
||||
WHEN ISNULL(d.scan_num, 0) - q.rollback_qty < 0 THEN 0
|
||||
ELSE ISNULL(d.scan_num, 0) - q.rollback_qty
|
||||
END
|
||||
FROM dbo.in_stockin_detail d
|
||||
INNER JOIN detail_qty q ON d.stockin_detail_id = q.stockin_detail_id;
|
||||
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '1',
|
||||
locked = 'N',
|
||||
tray_code = NULL
|
||||
WHERE cargo_space_id = @v_cargo_space_id
|
||||
OR (tray_code = @v_tray_code AND status = '3' AND locked = 'Y');
|
||||
|
||||
DELETE FROM dbo.mydo_job_detail
|
||||
WHERE job_id = @v_job_id;
|
||||
|
||||
DELETE FROM dbo.mydo_job
|
||||
WHERE job_id = @v_job_id
|
||||
AND in_or_out = 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SET @v_result = 10;
|
||||
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