1.0.338.sql 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. -- ============================================================================
  2. -- 1.0.338 订单评审三表占用追踪
  3. -- 1) 新建 b_stock_occupy(库存占用)
  4. -- 2) ALTER b_purchase_occupy(采购订单占用 — 已有表加字段)
  5. -- 3) ALTER b_mo_occupy(计划工单占用 — 已有表加字段)
  6. -- ============================================================================
  7. -- 1. 新建 b_stock_occupy
  8. CREATE TABLE IF NOT EXISTS `b_stock_occupy` (
  9. `Id` BIGINT NOT NULL,
  10. `bill_no` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '订单号',
  11. `entry_id` BIGINT NOT NULL DEFAULT 0 COMMENT '订单明细ID',
  12. `lot_serial` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '库存批次(InvMaster.LotSerial)',
  13. `item_number` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '物料号',
  14. `qty` DECIMAL(18,5) NOT NULL DEFAULT 0 COMMENT '占用数量',
  15. `examine_id` BIGINT NULL COMMENT '资源检查编号(b_examine_result.Id)',
  16. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  17. `status` INT NOT NULL DEFAULT 0 COMMENT '0=预占,1=已占用',
  18. `create_time` DATETIME NOT NULL,
  19. `update_time` DATETIME NOT NULL,
  20. PRIMARY KEY (`Id`),
  21. KEY `idx_bso_tenant_item_status` (`tenant_id`, `item_number`, `status`),
  22. KEY `idx_bso_entry` (`tenant_id`, `entry_id`)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单评审库存占用表';
  24. -- 2. ALTER b_purchase_occupy(已有表加字段)
  25. -- 幂等:先检查列是否存在
  26. SET @has_col := (SELECT COUNT(*) FROM information_schema.COLUMNS
  27. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'b_purchase_occupy' AND COLUMN_NAME = 'bill_no');
  28. SET @sql := IF(@has_col = 0,
  29. 'ALTER TABLE `b_purchase_occupy`
  30. ADD COLUMN `bill_no` VARCHAR(60) NOT NULL DEFAULT '''' COMMENT ''订单号'' AFTER `Id`,
  31. ADD COLUMN `entry_id` BIGINT NOT NULL DEFAULT 0 COMMENT ''订单明细ID'' AFTER `bill_no`,
  32. ADD COLUMN `item_number` VARCHAR(50) NOT NULL DEFAULT '''' COMMENT ''物料号'' AFTER `entry_id`,
  33. ADD COLUMN `examine_id` BIGINT NULL COMMENT ''资源检查编号'' AFTER `item_number`,
  34. ADD COLUMN `status` INT NOT NULL DEFAULT 0 COMMENT ''0=预占,1=已占用'' AFTER `examine_id`',
  35. 'DO 0');
  36. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
  37. SET @has_idx := (SELECT COUNT(DISTINCT INDEX_NAME) FROM information_schema.STATISTICS
  38. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'b_purchase_occupy'
  39. AND INDEX_NAME = 'idx_bpo_tenant_item_status');
  40. SET @sql := IF(@has_idx = 0,
  41. 'ALTER TABLE `b_purchase_occupy`
  42. ADD KEY `idx_bpo_tenant_item_status` (`tenant_id`, `item_number`, `status`),
  43. ADD KEY `idx_bpo_entry` (`tenant_id`, `entry_id`)',
  44. 'DO 0');
  45. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
  46. -- 3. ALTER b_mo_occupy(已有表加字段)
  47. SET @has_col := (SELECT COUNT(*) FROM information_schema.COLUMNS
  48. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'b_mo_occupy' AND COLUMN_NAME = 'bill_no');
  49. SET @sql := IF(@has_col = 0,
  50. 'ALTER TABLE `b_mo_occupy`
  51. ADD COLUMN `bill_no` VARCHAR(60) NOT NULL DEFAULT '''' COMMENT ''订单号'' AFTER `Id`,
  52. ADD COLUMN `entry_id` BIGINT NOT NULL DEFAULT 0 COMMENT ''订单明细ID'' AFTER `bill_no`,
  53. ADD COLUMN `item_number` VARCHAR(50) NOT NULL DEFAULT '''' COMMENT ''物料号'' AFTER `entry_id`,
  54. ADD COLUMN `examine_id` BIGINT NULL COMMENT ''资源检查编号'' AFTER `item_number`,
  55. ADD COLUMN `status` INT NOT NULL DEFAULT 0 COMMENT ''0=预占,1=已占用'' AFTER `examine_id`',
  56. 'DO 0');
  57. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
  58. SET @has_idx := (SELECT COUNT(DISTINCT INDEX_NAME) FROM information_schema.STATISTICS
  59. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'b_mo_occupy'
  60. AND INDEX_NAME = 'idx_bmo_tenant_item_status');
  61. SET @sql := IF(@has_idx = 0,
  62. 'ALTER TABLE `b_mo_occupy`
  63. ADD KEY `idx_bmo_tenant_item_status` (`tenant_id`, `item_number`, `status`),
  64. ADD KEY `idx_bmo_entry` (`tenant_id`, `entry_id`)',
  65. 'DO 0');
  66. PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;