fix: 修复MySQL 8.0不支持 ALTER TABLE ADD COLUMN IF NOT EXISTS语法

This commit is contained in:
2026-05-22 09:46:24 +08:00
parent 2941cd23c4
commit 72cca6c98f
2 changed files with 106 additions and 190 deletions

View File

@@ -1,25 +1,21 @@
-- 智慧报价平台业务表
-- 租户表SaaS买方隔离
CREATE TABLE IF NOT EXISTS biz_tenant (
tenant_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_name VARCHAR(100) NOT NULL COMMENT '租户名称',
contact VARCHAR(50) COMMENT '联系人',
phone VARCHAR(20) COMMENT '联系电话',
email VARCHAR(100) COMMENT '邮箱',
status CHAR(1) DEFAULT '0' COMMENT '0正常 1停用',
create_by VARCHAR(64) DEFAULT '',
create_time DATETIME,
update_by VARCHAR(64) DEFAULT '',
update_time DATETIME,
remark VARCHAR(500) DEFAULT NULL,
PRIMARY KEY (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表';
INSERT IGNORE INTO biz_tenant(tenant_id,tenant_name,contact,phone,email,status,create_by,create_time)
VALUES(1,'默认租户','管理员','','admin@example.com','0','admin',NOW());
-- Drop biz_tenant since it was already created
-- Now run the rest of tables
-- 给 sys_user 增加 tenant_id 字段用于SaaS隔离
ALTER TABLE sys_user ADD COLUMN IF NOT EXISTS tenant_id BIGINT DEFAULT 1 COMMENT '所属租户';
DROP PROCEDURE IF EXISTS add_tenant_col;
DELIMITER //
CREATE PROCEDURE add_tenant_col()
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'sys_user' AND column_name = 'tenant_id'
) THEN
ALTER TABLE sys_user ADD COLUMN tenant_id BIGINT DEFAULT 1 COMMENT '所属租户';
END IF;
END //
DELIMITER ;
CALL add_tenant_col();
DROP PROCEDURE IF EXISTS add_tenant_col;
-- 物料分类
CREATE TABLE IF NOT EXISTS biz_material_category (
@@ -35,7 +31,6 @@ CREATE TABLE IF NOT EXISTS biz_material_category (
PRIMARY KEY (category_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物料分类';
-- 物料
CREATE TABLE IF NOT EXISTS biz_material (
material_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
@@ -52,11 +47,9 @@ CREATE TABLE IF NOT EXISTS biz_material (
update_by VARCHAR(64) DEFAULT '',
update_time DATETIME,
remark VARCHAR(500) DEFAULT NULL,
PRIMARY KEY (material_id),
UNIQUE KEY uk_code_tenant (tenant_id, material_code)
PRIMARY KEY (material_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物料';
-- 供应商
CREATE TABLE IF NOT EXISTS biz_supplier (
supplier_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
@@ -65,7 +58,7 @@ CREATE TABLE IF NOT EXISTS biz_supplier (
phone VARCHAR(20) DEFAULT '',
email VARCHAR(100) DEFAULT '',
address VARCHAR(500) DEFAULT '',
user_id BIGINT DEFAULT NULL COMMENT '关联系统用户',
user_id BIGINT DEFAULT NULL,
status CHAR(1) DEFAULT '0',
create_by VARCHAR(64) DEFAULT '',
create_time DATETIME,
@@ -75,15 +68,14 @@ CREATE TABLE IF NOT EXISTS biz_supplier (
PRIMARY KEY (supplier_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商';
-- 报价请求RFQ
CREATE TABLE IF NOT EXISTS biz_rfq (
rfq_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
rfq_no VARCHAR(50) NOT NULL COMMENT 'RFQ编号',
rfq_title VARCHAR(200) NOT NULL COMMENT 'RFQ标题',
deadline DATETIME DEFAULT NULL COMMENT '截止日期',
delivery_addr VARCHAR(500) DEFAULT '' COMMENT '交货地址',
status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/published/closed/completed',
rfq_no VARCHAR(50) NOT NULL,
rfq_title VARCHAR(200) NOT NULL,
deadline DATETIME DEFAULT NULL,
delivery_addr VARCHAR(500) DEFAULT '',
status VARCHAR(20) DEFAULT 'draft',
remark TEXT,
create_by VARCHAR(64) DEFAULT '',
create_time DATETIME,
@@ -92,7 +84,6 @@ CREATE TABLE IF NOT EXISTS biz_rfq (
PRIMARY KEY (rfq_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报价请求';
-- RFQ物料明细
CREATE TABLE IF NOT EXISTS biz_rfq_item (
item_id BIGINT NOT NULL AUTO_INCREMENT,
rfq_id BIGINT NOT NULL,
@@ -101,35 +92,33 @@ CREATE TABLE IF NOT EXISTS biz_rfq_item (
spec VARCHAR(500) DEFAULT '',
unit VARCHAR(50) DEFAULT '',
quantity DECIMAL(15,4) NOT NULL,
expected_price DECIMAL(15,4) DEFAULT NULL COMMENT '预期单价',
expected_price DECIMAL(15,4) DEFAULT NULL,
remark VARCHAR(500) DEFAULT '',
PRIMARY KEY (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='RFQ物料明细';
-- RFQ邀请供应商
CREATE TABLE IF NOT EXISTS biz_rfq_supplier (
id BIGINT NOT NULL AUTO_INCREMENT,
rfq_id BIGINT NOT NULL,
supplier_id BIGINT NOT NULL,
invited_time DATETIME DEFAULT NULL,
quoted_time DATETIME DEFAULT NULL,
status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/quoted/declined',
status VARCHAR(20) DEFAULT 'pending',
PRIMARY KEY (id),
UNIQUE KEY uk_rfq_supplier (rfq_id, supplier_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='RFQ邀请供应商';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 供应商报价单
CREATE TABLE IF NOT EXISTS biz_quotation (
quotation_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
rfq_id BIGINT NOT NULL,
supplier_id BIGINT NOT NULL,
quote_no VARCHAR(50) DEFAULT '' COMMENT '报价单编号',
valid_days INT DEFAULT 30 COMMENT '报价有效天数',
delivery_days INT DEFAULT 0 COMMENT '交货天数',
total_amount DECIMAL(15,4) DEFAULT 0 COMMENT '总金额',
quote_no VARCHAR(50) DEFAULT '',
valid_days INT DEFAULT 30,
delivery_days INT DEFAULT 0,
total_amount DECIMAL(15,4) DEFAULT 0,
currency VARCHAR(10) DEFAULT 'CNY',
status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/submitted/accepted/rejected',
status VARCHAR(20) DEFAULT 'draft',
note TEXT,
submit_time DATETIME DEFAULT NULL,
create_by VARCHAR(64) DEFAULT '',
@@ -138,7 +127,6 @@ CREATE TABLE IF NOT EXISTS biz_quotation (
PRIMARY KEY (quotation_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商报价单';
-- 报价明细
CREATE TABLE IF NOT EXISTS biz_quotation_item (
item_id BIGINT NOT NULL AUTO_INCREMENT,
quotation_id BIGINT NOT NULL,
@@ -154,18 +142,17 @@ CREATE TABLE IF NOT EXISTS biz_quotation_item (
PRIMARY KEY (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报价明细';
-- 采购单
CREATE TABLE IF NOT EXISTS biz_purchase_order (
po_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
po_no VARCHAR(50) NOT NULL COMMENT '采购单编号',
po_no VARCHAR(50) NOT NULL,
rfq_id BIGINT DEFAULT NULL,
supplier_id BIGINT NOT NULL,
total_amount DECIMAL(15,4) DEFAULT 0,
currency VARCHAR(10) DEFAULT 'CNY',
delivery_addr VARCHAR(500) DEFAULT '',
delivery_date DATE DEFAULT NULL,
status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/confirmed/delivered/closed/disputed',
status VARCHAR(20) DEFAULT 'draft',
remark TEXT,
create_by VARCHAR(64) DEFAULT '',
create_time DATETIME,
@@ -174,7 +161,6 @@ CREATE TABLE IF NOT EXISTS biz_purchase_order (
PRIMARY KEY (po_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购单';
-- 采购单明细
CREATE TABLE IF NOT EXISTS biz_purchase_order_item (
item_id BIGINT NOT NULL AUTO_INCREMENT,
po_id BIGINT NOT NULL,
@@ -189,16 +175,15 @@ CREATE TABLE IF NOT EXISTS biz_purchase_order_item (
PRIMARY KEY (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购单明细';
-- 供应商评价
CREATE TABLE IF NOT EXISTS biz_supplier_evaluation (
eval_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
po_id BIGINT NOT NULL,
supplier_id BIGINT NOT NULL,
quality_score INT DEFAULT 5 COMMENT '质量评分1-5',
delivery_score INT DEFAULT 5 COMMENT '交期评分1-5',
service_score INT DEFAULT 5 COMMENT '服务评分1-5',
price_score INT DEFAULT 5 COMMENT '价格评分1-5',
quality_score INT DEFAULT 5,
delivery_score INT DEFAULT 5,
service_score INT DEFAULT 5,
price_score INT DEFAULT 5,
total_score DECIMAL(3,1) DEFAULT 5.0,
comment TEXT,
evaluator VARCHAR(64) DEFAULT '',
@@ -206,29 +191,27 @@ CREATE TABLE IF NOT EXISTS biz_supplier_evaluation (
PRIMARY KEY (eval_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商评价';
-- 订单异议
CREATE TABLE IF NOT EXISTS biz_order_objection (
objection_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
po_id BIGINT NOT NULL,
supplier_id BIGINT NOT NULL,
reason TEXT NOT NULL COMMENT '异议原因',
attachment VARCHAR(500) DEFAULT '' COMMENT '附件',
status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/processing/resolved/rejected',
resolution TEXT COMMENT '处理结果',
reason TEXT NOT NULL,
attachment VARCHAR(500) DEFAULT '',
status VARCHAR(20) DEFAULT 'pending',
resolution TEXT,
create_by VARCHAR(64) DEFAULT '',
create_time DATETIME,
resolve_time DATETIME DEFAULT NULL,
PRIMARY KEY (objection_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单异议';
-- 交易记录
CREATE TABLE IF NOT EXISTS biz_transaction (
tx_id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 1,
po_id BIGINT DEFAULT NULL,
supplier_id BIGINT DEFAULT NULL,
tx_type VARCHAR(50) DEFAULT '' COMMENT '类型:RFQ/QUOTE/PO/EVAL',
tx_type VARCHAR(50) DEFAULT '',
tx_no VARCHAR(50) DEFAULT '',
amount DECIMAL(15,4) DEFAULT NULL,
currency VARCHAR(10) DEFAULT 'CNY',
@@ -239,41 +222,16 @@ CREATE TABLE IF NOT EXISTS biz_transaction (
PRIMARY KEY (tx_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录';
-- 系统菜单(智慧报价平台业务菜单)
INSERT IGNORE INTO sys_menu(menu_id,menu_name,parent_id,order_num,path,component,query,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark)
VALUES
(2000,'智慧报价',0,5,'bid',NULL,NULL,'1','0','M','0','0','','#','admin',NOW(),'','',''),
(2001,'物料管理',2000,1,'material','bid/material/index',NULL,'1','0','C','0','0','bid:material:list','component','admin',NOW(),'','',''),
(2002,'供应商管理',2000,2,'supplier','bid/supplier/index',NULL,'1','0','C','0','0','bid:supplier:list','user','admin',NOW(),'','',''),
(2003,'报价请求',2000,3,'rfq','bid/rfq/index',NULL,'1','0','C','0','0','bid:rfq:list','form','admin',NOW(),'','',''),
(2004,'供应商报价',2000,4,'quotation','bid/quotation/index',NULL,'1','0','C','0','0','bid:quotation:list','money','admin',NOW(),'','',''),
(2005,'智慧比价',2000,5,'comparison','bid/comparison/index',NULL,'1','0','C','0','0','bid:comparison:list','chart','admin',NOW(),'','',''),
(2006,'采购单',2000,6,'purchaseorder','bid/purchaseorder/index',NULL,'1','0','C','0','0','bid:purchaseorder:list','shopping','admin',NOW(),'','',''),
(2007,'供应商评价',2000,7,'evaluation','bid/evaluation/index',NULL,'1','0','C','0','0','bid:evaluation:list','star','admin',NOW(),'','',''),
(2008,'订单异议',2000,8,'objection','bid/objection/index',NULL,'1','0','C','0','0','bid:objection:list','warning','admin',NOW(),'','',''),
(2009,'交易记录',2000,9,'transaction','bid/transaction/index',NULL,'1','0','C','0','0','bid:transaction:list','list','admin',NOW(),'','',''),
(2010,'租户管理',2000,10,'tenant','bid/tenant/index',NULL,'1','0','C','0','0','bid:tenant:list','peoples','admin',NOW(),'','','');
-- 菜单按钮权限
INSERT IGNORE INTO sys_menu(menu_id,menu_name,parent_id,order_num,path,component,query,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time)
VALUES
(2101,'物料查询',2001,1,'','','','1','0','F','0','0','bid:material:query','#','admin',NOW()),
(2102,'物料新增',2001,2,'','','','1','0','F','0','0','bid:material:add','#','admin',NOW()),
(2103,'物料修改',2001,3,'','','','1','0','F','0','0','bid:material:edit','#','admin',NOW()),
(2104,'物料删除',2001,4,'','','','1','0','F','0','0','bid:material:remove','#','admin',NOW()),
(2201,'供应商查询',2002,1,'','','','1','0','F','0','0','bid:supplier:query','#','admin',NOW()),
(2202,'供应商新增',2002,2,'','','','1','0','F','0','0','bid:supplier:add','#','admin',NOW()),
(2203,'供应商修改',2002,3,'','','','1','0','F','0','0','bid:supplier:edit','#','admin',NOW()),
(2204,'供应商删除',2002,4,'','','','1','0','F','0','0','bid:supplier:remove','#','admin',NOW()),
(2301,'RFQ查询',2003,1,'','','','1','0','F','0','0','bid:rfq:query','#','admin',NOW()),
(2302,'RFQ新增',2003,2,'','','','1','0','F','0','0','bid:rfq:add','#','admin',NOW()),
(2303,'RFQ修改',2003,3,'','','','1','0','F','0','0','bid:rfq:edit','#','admin',NOW()),
(2304,'RFQ删除',2003,4,'','','','1','0','F','0','0','bid:rfq:remove','#','admin',NOW()),
(2305,'发布RFQ',2003,5,'','','','1','0','F','0','0','bid:rfq:publish','#','admin',NOW()),
(2401,'报价查询',2004,1,'','','','1','0','F','0','0','bid:quotation:query','#','admin',NOW()),
(2402,'报价新增',2004,2,'','','','1','0','F','0','0','bid:quotation:add','#','admin',NOW()),
(2403,'报价修改',2004,3,'','','','1','0','F','0','0','bid:quotation:edit','#','admin',NOW()),
(2601,'采购单查询',2006,1,'','','','1','0','F','0','0','bid:purchaseorder:query','#','admin',NOW()),
(2602,'采购单新增',2006,2,'','','','1','0','F','0','0','bid:purchaseorder:add','#','admin',NOW()),
(2603,'采购单修改',2006,3,'','','','1','0','F','0','0','bid:purchaseorder:edit','#','admin',NOW()),
(2604,'采购单删除',2006,4,'','','','1','0','F','0','0','bid:purchaseorder:remove','#','admin',NOW());
(2000,'智慧报价',0,5,'bid',NULL,NULL,1,0,'M','0','0','','#','admin',NOW(),'','',''),
(2001,'物料管理',2000,1,'material','bid/material/index',NULL,1,0,'C','0','0','bid:material:list','component','admin',NOW(),'','',''),
(2002,'供应商管理',2000,2,'supplier','bid/supplier/index',NULL,1,0,'C','0','0','bid:supplier:list','user','admin',NOW(),'','',''),
(2003,'报价请求',2000,3,'rfq','bid/rfq/index',NULL,1,0,'C','0','0','bid:rfq:list','form','admin',NOW(),'','',''),
(2004,'供应商报价',2000,4,'quotation','bid/quotation/index',NULL,1,0,'C','0','0','bid:quotation:list','money','admin',NOW(),'','',''),
(2005,'智慧比价',2000,5,'comparison','bid/comparison/index',NULL,1,0,'C','0','0','bid:comparison:list','chart','admin',NOW(),'','',''),
(2006,'采购单',2000,6,'purchaseorder','bid/purchaseorder/index',NULL,1,0,'C','0','0','bid:purchaseorder:list','shopping','admin',NOW(),'','',''),
(2007,'供应商评价',2000,7,'evaluation','bid/evaluation/index',NULL,1,0,'C','0','0','bid:evaluation:list','star','admin',NOW(),'','',''),
(2008,'订单异议',2000,8,'objection','bid/objection/index',NULL,1,0,'C','0','0','bid:objection:list','warning','admin',NOW(),'','',''),
(2009,'交易记录',2000,9,'transaction','bid/transaction/index',NULL,1,0,'C','0','0','bid:transaction:list','list','admin',NOW(),'','',''),
(2010,'租户管理',2000,10,'tenant','bid/tenant/index',NULL,1,0,'C','0','0','bid:tenant:list','peoples','admin',NOW(),'','','');