feat: 完善WCS调度、库存追溯和出库分配

This commit is contained in:
zgw
2026-07-15 16:24:07 +08:00
parent 9d3aa7a3bd
commit 66ac268524
101 changed files with 12596 additions and 669 deletions

View File

@@ -65,6 +65,7 @@ BEGIN
out_quantity decimal(18, 0) NULL,
stockin_detail_id nvarchar(80) NULL,
stockin_id nvarchar(80) NULL,
project_no nvarchar(80) NULL,
in_type nvarchar(5) NULL,
warehouse_id nvarchar(80) NULL,
warehouse_name nvarchar(255) NULL,
@@ -85,6 +86,12 @@ BEGIN
END
GO
IF COL_LENGTH('dbo.bas_stock_finish', 'project_no') IS NULL
BEGIN
ALTER TABLE dbo.bas_stock_finish ADD project_no nvarchar(80) NULL;
END
GO
IF OBJECT_ID(N'dbo.bas_stock_detail_finish', N'U') IS NULL
BEGIN
CREATE TABLE dbo.bas_stock_detail_finish (
@@ -98,6 +105,7 @@ BEGIN
out_quantity decimal(18, 0) NULL,
job_detail_id nvarchar(255) NULL,
stockin_detail_id nvarchar(80) NULL,
project_no nvarchar(80) NULL,
create_time datetime2(7) NULL,
update_time datetime2(7) NULL,
remark nvarchar(500) NULL,
@@ -112,6 +120,12 @@ BEGIN
END
GO
IF COL_LENGTH('dbo.bas_stock_detail_finish', 'project_no') IS NULL
BEGIN
ALTER TABLE dbo.bas_stock_detail_finish ADD project_no nvarchar(80) NULL;
END
GO
IF COL_LENGTH('dbo.bas_stock_detail_finish', 'detail_id') < 160
BEGIN
ALTER TABLE dbo.bas_stock_detail_finish ALTER COLUMN detail_id nvarchar(80) NOT NULL;
@@ -297,6 +311,7 @@ BEGIN
@stock_warehouse_name nvarchar(255),
@supplier_id nvarchar(255),
@supplier_name nvarchar(255),
@project_no nvarchar(80),
@exit_id nvarchar(80),
@existing_job_id nvarchar(80),
@now datetime = GETDATE();
@@ -374,11 +389,16 @@ BEGIN
@stock_warehouse_name = ISNULL(NULLIF(bs.warehouse_name, ''), bw.warehouse_name),
@tray_type = bbf.tray_type,
@supplier_id = bs.supplier_id,
@supplier_name = bs.supplier_name
@supplier_name = bs.supplier_name,
@project_no = bsd.project_no
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
LEFT JOIN dbo.bas_warehouse bw ON bs.warehouse_id = bw.warehouse_id
LEFT JOIN dbo.bas_cargo_area_config cac
ON cac.warehouse_id = bs.warehouse_id
AND cac.cargo_area_code = bcs.this_cargo_area
AND cac.is_active = N'1'
OUTER APPLY (
SELECT TOP 1 prefix AS tray_type
FROM dbo.bas_barcode_format bbf
@@ -388,8 +408,17 @@ BEGIN
AND LEFT(bs.tray_code, LEN(bbf.prefix)) = bbf.prefix
ORDER BY LEN(bbf.prefix) DESC
) bbf
OUTER APPLY (
SELECT MIN(area_space.the_column) AS area_min_column,
MAX(area_space.the_column) AS area_max_column
FROM dbo.bas_cargo_space area_space
WHERE area_space.warehouse_id = bcs.warehouse_id
AND area_space.this_cargo_area = bcs.this_cargo_area
) area_bounds
WHERE bsd.product_id = @product_id
AND (ISNULL(@lot_no, '') = '' OR ISNULL(bsd.lot_no, '') = ISNULL(@lot_no, ''))
AND bs.stock_status = '1'
AND bsd.product_status = '1'
AND ISNULL(bsd.quantity, 0) - ISNULL(bsd.out_quantity, 0) > 0
AND (
bsd.job_detail_id IS NULL OR bsd.job_detail_id = ''
@@ -423,6 +452,17 @@ BEGIN
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,
CASE COALESCE(cac.direction_type, N'1') WHEN N'1' THEN bcs.the_column END ASC,
CASE WHEN cac.direction_type = N'2' THEN bcs.the_column END DESC,
CASE WHEN cac.direction_type = N'3' THEN
CASE
WHEN bcs.the_column - area_bounds.area_min_column
<= area_bounds.area_max_column - bcs.the_column
THEN bcs.the_column - area_bounds.area_min_column
ELSE area_bounds.area_max_column - bcs.the_column
END
END ASC,
CASE WHEN cac.direction_type = N'3' THEN bcs.the_column END ASC,
bs.in_date ASC,
bs.cargo_space_id ASC,
bsd.detail_id ASC;
@@ -534,13 +574,13 @@ BEGIN
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
customer_id, customer_name, supplier_id, supplier_name, project_no
)
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
@customer_id, @customer_name, @supplier_id, @supplier_name, @project_no
);
UPDATE dbo.bas_stock_detail
@@ -646,8 +686,21 @@ BEGIN
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
LEFT JOIN dbo.bas_cargo_area_config cac
ON cac.warehouse_id = bs.warehouse_id
AND cac.cargo_area_code = bcs.this_cargo_area
AND cac.is_active = N'1'
OUTER APPLY (
SELECT MIN(area_space.the_column) AS area_min_column,
MAX(area_space.the_column) AS area_max_column
FROM dbo.bas_cargo_space area_space
WHERE area_space.warehouse_id = bcs.warehouse_id
AND area_space.this_cargo_area = bcs.this_cargo_area
) area_bounds
WHERE bsd.product_id = @product_id
AND (ISNULL(@lot_no, '') = '' OR ISNULL(bsd.lot_no, '') = ISNULL(@lot_no, ''))
AND bs.stock_status = '1'
AND bsd.product_status = '1'
AND ISNULL(bsd.quantity, 0) - ISNULL(bsd.out_quantity, 0) > 0
AND (
bsd.job_detail_id IS NULL OR bsd.job_detail_id = ''
@@ -679,7 +732,19 @@ BEGIN
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;
ORDER BY
CASE COALESCE(cac.direction_type, N'1') WHEN N'1' THEN bcs.the_column END ASC,
CASE WHEN cac.direction_type = N'2' THEN bcs.the_column END DESC,
CASE WHEN cac.direction_type = N'3' THEN
CASE
WHEN bcs.the_column - area_bounds.area_min_column
<= area_bounds.area_max_column - bcs.the_column
THEN bcs.the_column - area_bounds.area_min_column
ELSE area_bounds.area_max_column - bcs.the_column
END
END ASC,
CASE WHEN cac.direction_type = N'3' THEN bcs.the_column END ASC,
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;
@@ -827,11 +892,11 @@ BEGIN
INSERT INTO dbo.bas_stock_detail_finish (
detail_id, stock_id, product_status, lot_no, product_id, product_name,
quantity, out_quantity, job_detail_id, stockin_detail_id, create_time,
quantity, out_quantity, job_detail_id, stockin_detail_id, project_no, create_time,
update_time, remark, delete_time
)
SELECT detail_id, stock_id, product_status, lot_no, product_id, product_name,
quantity, out_quantity, job_detail_id, stockin_detail_id, create_time,
quantity, out_quantity, job_detail_id, stockin_detail_id, project_no, create_time,
update_time, remark, SYSDATETIME() AS delete_time
FROM dbo.bas_stock_detail
WHERE detail_id = @stock_detail_id
@@ -894,13 +959,13 @@ BEGIN
stock_id, cargo_space_id, stock_status, product_status, lot_no,
in_date, back_date, product_id, product_name, quantity, job_id,
job_detail_id, tray_code, out_quantity, stockin_detail_id, stockin_id,
in_type, warehouse_id, warehouse_name, user_id, user_name, dept_id,
project_no, in_type, warehouse_id, warehouse_name, user_id, user_name, dept_id,
dept_name, supplier_id, supplier_name, delete_time
)
SELECT stock_id, cargo_space_id, stock_status, product_status, lot_no,
in_date, back_date, product_id, product_name, quantity, job_id,
job_detail_id, tray_code, out_quantity, stockin_detail_id, stockin_id,
in_type, warehouse_id, warehouse_name, user_id, user_name, dept_id,
project_no, in_type, warehouse_id, warehouse_name, user_id, user_name, dept_id,
dept_name, supplier_id, supplier_name, SYSDATETIME() AS delete_time
FROM dbo.bas_stock
WHERE stock_id = @stock_id;