feat: 完善WCS调度、库存追溯和出库分配
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user