erp-java/infrastructure/kubernetes/erp-db-init-job.yaml

315 lines
14 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

apiVersion: v1
kind: Namespace
metadata:
name: erp-prod
---
# ============================================================
# 数据库初始化Job - 用于启动时执行数据库迁移
# ============================================================
apiVersion: batch/v1
kind: Job
metadata:
name: erp-db-init
namespace: erp-prod
labels:
app: erp-db-init
tier: database
annotations:
description: "ERP数据库初始化Job在应用启动前执行"
spec:
ttlSecondsAfterFinished: 300
backoffLimit: 3
template:
metadata:
labels:
app: erp-db-init
tier: database
spec:
restartPolicy: OnFailure
initContainers:
# 等待MySQL就绪
- name: wait-for-mysql
image: busybox:1.36
command:
- sh
- -c
- |
echo "等待MySQL服务..."
until nc -z mysql 3306; do
echo "MySQL未就绪等待中..."
sleep 5
done
echo "MySQL已就绪"
containers:
- name: erp-db-init
image: mysql:8.0
command:
- sh
- -c
- |
echo "开始初始化数据库..."
mysql -h mysql -P 3306 -uroot -p"${MYSQL_ROOT_PASSWORD}" <<'EOSQL'
CREATE DATABASE IF NOT EXISTS erp_java CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS seata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'erp_user'@'%' IDENTIFIED BY 'erp123456';
CREATE USER IF NOT EXISTS 'erp_user'@'localhost' IDENTIFIED BY 'erp123456';
GRANT ALL PRIVILEGES ON erp_java.* TO 'erp_user'@'%';
GRANT ALL PRIVILEGES ON erp_java.* TO 'erp_user'@'localhost';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'erp_user'@'%';
GRANT ALL PRIVILEGES ON seata.* TO 'erp_user'@'%';
FLUSH PRIVILEGES;
USE erp_java;
-- 创建版本跟踪表
CREATE TABLE IF NOT EXISTS schema_version (
version_rank INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
installed_rank INT NOT NULL,
version VARCHAR(50) NOT NULL,
description VARCHAR(200) NOT NULL,
type VARCHAR(20) NOT NULL DEFAULT 'SQL',
script VARCHAR(1000) NOT NULL,
checksum INT,
installed_by VARCHAR(100) NOT NULL DEFAULT 'system',
installed_on DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
execution_time INT NOT NULL,
success TINYINT NOT NULL DEFAULT 1,
UNIQUE KEY unique_ver_idx (version),
KEY installed_rank_idx (installed_rank),
KEY success_idx (success),
KEY version_rank_idx (version_rank)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
real_name VARCHAR(50),
avatar VARCHAR(255),
status TINYINT NOT NULL DEFAULT 1,
is_super_admin TINYINT NOT NULL DEFAULT 0,
last_login_at DATETIME,
last_login_ip VARCHAR(45),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME,
INDEX idx_tenant_id (tenant_id),
INDEX idx_username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS tenants (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
company_name VARCHAR(200) NOT NULL,
contact_name VARCHAR(50) NOT NULL,
contact_phone VARCHAR(20) NOT NULL,
contact_email VARCHAR(100) NOT NULL,
domain VARCHAR(100) UNIQUE,
status TINYINT NOT NULL DEFAULT 1,
max_users INT DEFAULT 10,
features JSON,
settings JSON,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_company_name (company_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS products (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
product_code VARCHAR(50) NOT NULL,
product_name VARCHAR(200) NOT NULL,
category_id BIGINT,
unit VARCHAR(20),
price DECIMAL(12,2),
cost DECIMAL(12,2),
stock INT DEFAULT 0,
min_stock INT DEFAULT 0,
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME,
UNIQUE KEY uk_code_tenant (product_code, tenant_id),
INDEX idx_category (category_id),
INDEX idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS categories (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
parent_id BIGINT DEFAULT 0,
category_name VARCHAR(100) NOT NULL,
sort_order INT DEFAULT 0,
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_tenant_parent (tenant_id, parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS orders (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(50) NOT NULL UNIQUE,
tenant_id BIGINT NOT NULL DEFAULT 0,
customer_id BIGINT NOT NULL,
total_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
discount_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
payable_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
paid_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
order_date DATE NOT NULL,
delivery_date DATE,
remark TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME,
INDEX idx_tenant_id (tenant_id),
INDEX idx_customer_id (customer_id),
INDEX idx_order_no (order_no),
INDEX idx_order_date (order_date),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS order_items (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL DEFAULT 0,
product_id BIGINT NOT NULL,
product_code VARCHAR(50) NOT NULL,
product_name VARCHAR(200) NOT NULL,
unit VARCHAR(20),
quantity INT NOT NULL DEFAULT 1,
unit_price DECIMAL(12,2) NOT NULL,
discount_rate DECIMAL(5,2) DEFAULT 100.00,
amount DECIMAL(12,2) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id),
INDEX idx_tenant_id (tenant_id),
INDEX idx_product_id (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS inventory_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
product_id BIGINT NOT NULL,
warehouse_id BIGINT,
order_no VARCHAR(50),
in_out_type VARCHAR(10) NOT NULL COMMENT 'IN/OUT/ADJUST',
quantity INT NOT NULL,
before_stock INT NOT NULL DEFAULT 0,
after_stock INT NOT NULL DEFAULT 0,
operator_id BIGINT,
remark VARCHAR(500),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_tenant_product (tenant_id, product_id),
INDEX idx_created_at (created_at),
INDEX idx_order_no (order_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS warehouses (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
warehouse_code VARCHAR(50) NOT NULL,
warehouse_name VARCHAR(100) NOT NULL,
address VARCHAR(255),
contact_name VARCHAR(50),
contact_phone VARCHAR(20),
is_default TINYINT NOT NULL DEFAULT 0,
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME,
UNIQUE KEY uk_code_tenant (warehouse_code, tenant_id),
INDEX idx_tenant_id (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS audit_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
user_id BIGINT,
username VARCHAR(50),
module VARCHAR(50) NOT NULL,
operation VARCHAR(100) NOT NULL,
method VARCHAR(200),
request_url VARCHAR(500),
request_method VARCHAR(10),
request_params TEXT,
request_body TEXT,
response_body TEXT,
ip_address VARCHAR(45),
user_agent VARCHAR(500),
execution_time INT NOT NULL DEFAULT 0,
status TINYINT NOT NULL DEFAULT 1,
error_message TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_tenant_id (tenant_id),
INDEX idx_user_id (user_id),
INDEX idx_module (module),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS scheduled_tasks (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT NOT NULL DEFAULT 0,
task_name VARCHAR(100) NOT NULL,
task_code VARCHAR(100) NOT NULL UNIQUE,
task_type VARCHAR(20) NOT NULL COMMENT 'HTTP/METHOD/MQ',
cron_expression VARCHAR(50),
target_url VARCHAR(500),
target_method VARCHAR(100),
target_params TEXT,
mq_topic VARCHAR(100),
mq_tag VARCHAR(100),
retry_count INT DEFAULT 0,
timeout_seconds INT DEFAULT 30,
status VARCHAR(20) NOT NULL DEFAULT 'STOPPED',
last_execution_at DATETIME,
last_execution_status VARCHAR(20),
next_execution_at DATETIME,
remark TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME,
INDEX idx_tenant_id (tenant_id),
INDEX idx_status (status),
INDEX idx_next_execution (next_execution_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS task_execution_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL DEFAULT 0,
execution_no VARCHAR(50) NOT NULL,
started_at DATETIME NOT NULL,
finished_at DATETIME,
execution_time INT,
status VARCHAR(20) NOT NULL,
result_message TEXT,
retry_count INT DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_task_id (task_id),
INDEX idx_status (status),
INDEX idx_started_at (started_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
SELECT '数据库表创建完成' AS result;
EOSQL
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: erp-secrets
key: MYSQL_ROOT_PASSWORD
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
imagePullSecrets:
- name: regcred