-- LOCAL ONLY: explicit test fixtures, NOT evidence of real PDA receiving. -- Caller must set @fixture_customer_id, @fixture_warehouse_id, @fixture_location_id, -- @fixture_destination_id, @fixture_base and @fixture_batch in the same connection. -- Insert-only: duplicate IDs/numbers fail; never restore or overwrite consumed stock. SET NAMES utf8mb4; USE baiyue_lastleg; CREATE TEMPORARY TABLE fixture_guard (ok INT NOT NULL CHECK (ok=1)); INSERT INTO fixture_guard SELECT IF(@fixture_customer_id>0 AND @fixture_base>0 AND @fixture_batch REGEXP '^[A-Z0-9-]{1,16}$',1,0); SET @fixture_customer_name=(SELECT tenant_name FROM baiyue_iam.iam_tenant WHERE id=@fixture_customer_id AND deleted=0 AND status='ACTIVE'); SET @fixture_warehouse_code=(SELECT warehouse_code FROM baiyue_warehouse.wh_warehouse WHERE id=@fixture_warehouse_id AND warehouse_type='OVERSEAS' AND status='ACTIVE' AND deleted=0); SET @fixture_warehouse_name=(SELECT warehouse_name FROM baiyue_warehouse.wh_warehouse WHERE id=@fixture_warehouse_id); SET @fixture_location_code=(SELECT location_code FROM baiyue_lastlag_warehouse.wh_location WHERE id=@fixture_location_id AND warehouse_id=@fixture_warehouse_id AND location_type='VIRTUAL' AND status='ACTIVE'); SET @fixture_destination_code=(SELECT warehouse_code FROM baiyue_warehouse.wh_warehouse WHERE id=@fixture_destination_id AND warehouse_type='FBA' AND status='ACTIVE' AND deleted=0); INSERT INTO fixture_guard SELECT IF(@fixture_customer_name IS NOT NULL AND @fixture_warehouse_code IS NOT NULL AND @fixture_location_code IS NOT NULL AND @fixture_destination_code IS NOT NULL,1,0); CREATE TEMPORARY TABLE fixture_orders (seq INT PRIMARY KEY, boxes INT, order_id BIGINT, plan_id BIGINT, balance_id BIGINT, inbound_id BIGINT, order_no VARCHAR(32), plan_no VARCHAR(32), inbound_code VARCHAR(128), sku VARCHAR(128)); INSERT INTO fixture_orders SELECT n,6+n*6,@fixture_base+n,@fixture_base+100+n,@fixture_base+200+n,@fixture_base+300+n, CONCAT('TL-',@fixture_batch,'-',n),CONCAT('IP-',@fixture_batch,'-',n), CONCAT('IN-',@fixture_batch,'-',n),CONCAT('SKU-',@fixture_batch,'-',n) FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3) numbers; CREATE TEMPORARY TABLE fixture_pallets (seq INT, part INT, pallet_id BIGINT, position_id BIGINT, pallet_code VARCHAR(64), boxes INT, PRIMARY KEY(seq,part)); INSERT INTO fixture_pallets SELECT f.seq,p.n,@fixture_base+400+f.seq*10+p.n, @fixture_base+500+f.seq*10+p.n,CONCAT('PAL-',@fixture_batch,'-',f.seq,'-',p.n),f.boxes/2 FROM fixture_orders f CROSS JOIN (SELECT 1 n UNION ALL SELECT 2) p; CREATE TEMPORARY TABLE fixture_numbers (n INT PRIMARY KEY); INSERT INTO fixture_numbers SELECT a.n+b.n*10+1 FROM (SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a CROSS JOIN (SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2) b; START TRANSACTION; INSERT INTO baiyue_lastlag_warehouse.wh_pallet (id,customer_id,warehouse_id,location_id,pallet_code,pallet_type,capacity_cbm,status,remark,fba_warehouse_code,version) SELECT pallet_id,0,@fixture_warehouse_id,@fixture_location_id,pallet_code,'STANDARD',2,'OCCUPIED', 'LOCAL_TEST_FIXTURE: relabel source inventory; not real PDA acceptance',@fixture_destination_code,0 FROM fixture_pallets; INSERT INTO ll_inbound_order (id,customer_id,source_region,source_inbound_id,source_order_id,source_order_no,inbound_code, destination_warehouse_id,destination_warehouse_code,destination_type,package_count,product_quantity,pallet_count, source_event_id,source_loading_plan_id,source_loading_plan_version,handover_version,payload_hash,status) SELECT inbound_id,@fixture_customer_id,'FIRST_LEG',CONCAT('FIXTURE-',inbound_code),CAST(order_id AS CHAR),order_no,inbound_code, @fixture_destination_id,@fixture_destination_code,'FBA',boxes,boxes*10,2, CONCAT('FIXTURE-',order_no),CONCAT('FIXTURE-LOAD-',order_no),1,1,SHA2(order_no,256),'RECEIVED' FROM fixture_orders; INSERT INTO ll_order (id,order_no,customer_id,order_type,lx_code,destination_type,inbound_code,source_region,source_inbound_id, source_order_id,source_order_no,customer_name,overseas_warehouse_id,overseas_warehouse_code,overseas_warehouse_name, fba_warehouse_code,container_no,container_status,pallet_count,package_count,product_quantity, inbound_order_no,current_status,source_event_id,source_loading_plan_id,source_payload_hash) SELECT order_id,order_no,@fixture_customer_id,'FIRST_LEG',CONCAT('LX-',order_no),'FBA',inbound_code,'FIRST_LEG', CONCAT('FIXTURE-',inbound_code),CAST(order_id AS CHAR),order_no,@fixture_customer_name, @fixture_warehouse_id,@fixture_warehouse_code,@fixture_warehouse_name,@fixture_destination_code, CONCAT('FIXTURE-',@fixture_batch),'LOCAL_TEST_FIXTURE',2,boxes,boxes*10,plan_no,'INBOUND_COMPLETED', CONCAT('FIXTURE-',order_no),CONCAT('FIXTURE-LOAD-',order_no),SHA2(order_no,256) FROM fixture_orders; INSERT INTO ll_order_detail (id,customer_id,order_id,source_inbound_detail_id,sku_code,product_name_zh,package_count,product_quantity,pallet_count, destination_warehouse_id,destination_warehouse_code,shipping_mark) SELECT @fixture_base+10000+f.seq*100+n.n,@fixture_customer_id,f.order_id, CONCAT('FIXTURE-',f.inbound_code,'-',n.n),f.sku,CONCAT('贴标测试商品-',f.seq),1,10,0, @fixture_destination_id,@fixture_destination_code,CONCAT('CM-',@fixture_batch,'-',f.seq,'-',LPAD(n.n,3,'0')) FROM fixture_orders f JOIN fixture_numbers n ON n.n<=f.boxes; INSERT INTO ll_inbound_plan (id,plan_no,customer_id,source_order_id,container_no,overseas_warehouse_id,planned_arrival_date, pallet_type,assigned_flag,creation_mode,plan_remark,status,line_count,pallet_count,total_volume_cbm,version) SELECT plan_id,plan_no,@fixture_customer_id,order_id,CONCAT('FIXTURE-',@fixture_batch),@fixture_warehouse_id, CURRENT_DATE,'STANDARD',1,'MANUAL','LOCAL_TEST_FIXTURE: 已入库测试准备,非真实PDA签收验收','COMPLETED',1,2,2,0 FROM fixture_orders; INSERT INTO ll_inbound_plan_line (id,customer_id,plan_id,order_id,inbound_code,required_package_count, planned_pallet_count,destination_type,destination_warehouse_code,fba_warehouse_code) SELECT @fixture_base+700+seq,@fixture_customer_id,plan_id,order_id,inbound_code,boxes,2,'FBA', @fixture_destination_code,@fixture_destination_code FROM fixture_orders; INSERT INTO ll_inbound_plan_pallet (id,customer_id,plan_id,pallet_no,pallet_type,destination_warehouse_code,capacity_cbm,allocated_volume_cbm, sequence_no,warehouse_pallet_id,assignment_status,actual_volume_cbm,actual_package_count) SELECT p.pallet_id+1000,@fixture_customer_id,f.plan_id,p.pallet_code,'STANDARD',@fixture_destination_code, 2,1,p.part,p.pallet_id,'ASSIGNED',1,p.boxes FROM fixture_pallets p JOIN fixture_orders f ON f.seq=p.seq; INSERT INTO ll_inventory_balance (id,customer_id,customer_name,overseas_warehouse_id,overseas_warehouse_code,overseas_warehouse_name, destination_warehouse_code,inbound_order_id,inbound_order_no,inbound_code,sku_code,product_name_zh, available_packages,available_quantity,version) SELECT balance_id,@fixture_customer_id,@fixture_customer_name,@fixture_warehouse_id,@fixture_warehouse_code, @fixture_warehouse_name,@fixture_destination_code,order_id,plan_no,inbound_code,sku,CONCAT('贴标测试商品-',seq),boxes,boxes*10,0 FROM fixture_orders; INSERT INTO ll_inventory_position (id,customer_id,balance_id,overseas_warehouse_id,destination_warehouse_code,sku_code,pallet_id,pallet_no,batch_no, warehouse_location_id,warehouse_location_code,available_packages,product_quantity,status,version) SELECT p.position_id,@fixture_customer_id,f.balance_id,@fixture_warehouse_id,@fixture_destination_code,f.sku,p.pallet_id, p.pallet_code,CONCAT('FIXTURE-',@fixture_batch),@fixture_location_id,@fixture_location_code,p.boxes,p.boxes*10,'OCCUPIED',0 FROM fixture_pallets p JOIN fixture_orders f ON f.seq=p.seq; INSERT INTO ll_inbound_plan_pallet_allocation (id,customer_id,plan_id,line_id,pallet_id,allocated_volume_cbm,planned_package_count, counted_package_count,picked_package_count,actual_volume_cbm,status,version) SELECT p.pallet_id+3000,@fixture_customer_id,f.plan_id,@fixture_base+700+f.seq,p.pallet_id+1000, 1,p.boxes,p.boxes,p.boxes,1,'PICKED',0 FROM fixture_pallets p JOIN fixture_orders f ON f.seq=p.seq; INSERT INTO ll_inventory_ledger (id,customer_id,customer_name,balance_id,position_id,overseas_warehouse_id,destination_warehouse_code, inbound_order_id,sku_code,pallet_id,pallet_no,batch_no,warehouse_location_code,business_type,business_order_no, inbound_code,inbound_order_no,idempotency_key,status_from,status_to,before_packages,delta_packages,after_packages,remark,occurred_at) SELECT p.position_id+2000,@fixture_customer_id,@fixture_customer_name,f.balance_id,p.position_id,@fixture_warehouse_id, @fixture_destination_code,f.order_id,f.sku,p.pallet_id,p.pallet_code,CONCAT('FIXTURE-',@fixture_batch),@fixture_location_code, 'LOCAL_TEST_FIXTURE',f.order_no,f.inbound_code,f.plan_no,CONCAT('LOCAL_TEST_FIXTURE:',p.pallet_code),'NONE','AVAILABLE', 0,p.boxes,p.boxes,'Explicit local test fixture; not a real PDA stock-in event',NOW(3) FROM fixture_pallets p JOIN fixture_orders f ON f.seq=p.seq; INSERT INTO fixture_guard SELECT IF(COUNT(*)=6 AND SUM(p.available_packages)=54,1,0) FROM ll_inventory_position p JOIN fixture_pallets f ON f.position_id=p.id; COMMIT; SELECT f.order_no,f.plan_no,f.inbound_code,f.sku,p.pallet_code,p.boxes, CONCAT('CM-',@fixture_batch,'-',f.seq,'-001') first_carton_mark, CONCAT('CM-',@fixture_batch,'-',f.seq,'-',LPAD(f.boxes,3,'0')) last_carton_mark FROM fixture_orders f JOIN fixture_pallets p ON p.seq=f.seq ORDER BY f.seq,p.part;